hyljava

Remote Object Service

Remote Object Service
对于主流的Flex数据服务器,目前都支持AMF3/RemoteObject,今天我们就来谈一谈BlazeDS的远程服务。

1. 编写远程服务类

编写BlazeDS的Java远程服务类有三个要求:

1) 所有被调用的方法必须是public;

2) 所有的编译类必须能够通过BlazeDS的classpath访问得到;

3) 类必须是stateful/stateless的。

大家可以参考工程文件中的SimpleService.java。

2. 配置remoting-config.xml

Java服务类写好后,还需要配置,BlazeDS的Remote Service也是在服务器端对应了一个配置文件:remoting-config.xml,配置好Remote Service 后,Flex在运行时才能找到相应的服务类并调用其方法。下面就是本工程的Remote Service配置文件。

配置文件

第2~3行指定服务的ID和对应的类,第5~7行设置适配器(adapters)的ID和对应的类。第9~11行指定默认的通道(channels)及其参照,该通道是在 services-config.xml中定义的。适配器和通道可以设置多个,采用第一个优先的原则。前面这几项设置适用于proxy-config.xml、remoting-config.xml和我们后面要讲的 messaging-config.xml。

第13~18行设置的服务终端(destination),该属性必须和RemoteObject组件的服务终端属性一致。按照服务的种类,服务终端又可以分为代理服务终端、远程服务终端和消息服务终端。上一次讲述的代理服务终端,需要指定该终端的url,而这次我们讲述的远程服务终端,需要指定该目标的source和scope。source对应 RemoteObject要调用的远程服务的全限定类名,不像FluorineFX,它不能在RemoteObject组件中指定。scope表示当前远程服务的作用范围,即远程服务类是stateful还是stateless,有application、session和request三个选项。

注意:我们提倡在配置文件中设置,这样更安全也方便后期维护。

3. 使用RemoteObjec组件

对于RemoteObjec组件,请参看
下面的Flex RemoteObject类参考相关内容。一句话,Flex的RemoteObject与后台语言是无关的。在工程文件中的BasicRemoteObject.mxml,调用了SimpleService类的三个方法,当通过BlazeDS从J2EE服务器返回RemoteObjec时,Java数据被序列化成ActionScript数据。其中Java字符串对应ActionScript字符串,Java的数组列表对应ActionScript ArrayCollection。


Flex RemoteObject类参考


<mx:RemoteObject>标记允许使用AMF3访问远程服务类的方法,要知道在Flex中怎样使用Flash Remoting访问数据,应该先了解一下RemoteObject类。

要知道在Flex中怎样使用Flash Remoting访问数据,应该先了解一下RemoteObject类。

包 mx.rpc.remoting 类 public dynamic class RemoteObject 
继承 RemoteObject → AbstractService → Proxy → Object 
子类 RemoteObject

一、<mx:RemoteObject>标记

它允许使用AMF3访问远程服务类的方法。

1. <mx:RemoteObject>允许的标记属性有:

1
2
3
4
5
6
7
8
9
10
11
12
13
<mx:RemoteObject
  Properties
  concurrency="multiple|single|last"
  destination="No default."
  id="No default."
  endpoint="No default."
  showBusyCursor="false|true"
  source="No default." (currently, Macromedia ColdFusion only)
  makeObjectsBindable="false|true"
  事件
  fault="No default."
  result="No default."  
 />

2. <mx:RemoteObject>标记可以包含多个 <mx:method> 标记,<mx:method>允许的标记属性有:

1
2
3
4
5
6
7
8
9
<mx:method
  Properties
  concurrency="multiple|single|last"
  name="No default, required."
  makeObjectsBindable="false|true"       
 事件
  fault="No default."
  result="No default."
 />

3. <mx:RemoteObject>标记可以也只能包含一个<mx:arguments> 子标记,该子标记是一个序列数组对象。

二、公有属性

1. concurrency : String

表示对同一服务怎样进行多次调用。类似于XMLConnector/WebServiceConnector/RemotingConnector的multipleSimultaneousAllowed属性。它的默认值为multiple,允许下列值:

  • Multiple:同一时间可以执行多个请求。已有的请求不会被取消;
  • Single:同一时间调用只能执行一个请求,多个请求会报错;
  • Last:最后一次请求会覆盖已有的请求。

2. endpoint: String

允许开发人员快速为RemoteObject destination(目标)指定endpoint(端点)。而该destination既没有在编译时,也没有在用代码新建ChannelSet(通道集)时参照services-config.xml。如果设定了该属性,它会覆盖已有的ChannelSet。

如果endpoint 的url 以“https”开关,将使用 SecureAMFChannel, 否则使用普通的AMFChannel。{server.name}和{server.port}标记,可以用在endpoint的url中,表明Channel应该使用用来加载SWF文件的服务名称和端口。

3. showBusyCursor:Boolean

表示服务正在执行时是否显示一个表示忙碌的鼠标指针。

三、公有方法

1. RemoteObject () 构造方法

创建一个新的RemoteObject对象。

参数

destination:String (默认为 null) —RemoteObject 的destination属性必须匹配 services-config.xml 中的destination的ID属性值。

2. initialized ()

public function initialized(document:Object, id:String):void

只要设定RemoteObject标记就会通过MXML编译器自动调用该方法。如果使用ActionScrip新建RemoteObject实例,则可以自行调用该方法,这对验证其参数很有用。

参数

  • document:Object —RemoteObject 所在的MXML文档
  • id:String —RemoteObjec在上述文档中的ID

posted on 2013-01-20 22:46 何云隆 阅读(1560) 评论(0)  编辑  收藏 所属分类: Flex


只有注册用户登录后才能发表评论。


网站导航: