Remote Object Service
Remote Object Service
對(duì)于主流的Flex數(shù)據(jù)服務(wù)器,目前都支持AMF3/RemoteObject,今天我們就來(lái)談一談BlazeDS的遠(yuǎn)程服務(wù)。
1. 編寫(xiě)遠(yuǎn)程服務(wù)類(lèi)
編寫(xiě)B(tài)lazeDS的Java遠(yuǎn)程服務(wù)類(lèi)有三個(gè)要求:
1) 所有被調(diào)用的方法必須是public;
2) 所有的編譯類(lèi)必須能夠通過(guò)BlazeDS的classpath訪(fǎng)問(wèn)得到;
3) 類(lèi)必須是stateful/stateless的。
大家可以參考工程文件中的SimpleService.java。
2. 配置remoting-config.xml
Java服務(wù)類(lèi)寫(xiě)好后,還需要配置,BlazeDS的Remote Service也是在服務(wù)器端對(duì)應(yīng)了一個(gè)配置文件:remoting-config.xml,配置好Remote Service 后,F(xiàn)lex在運(yùn)行時(shí)才能找到相應(yīng)的服務(wù)類(lèi)并調(diào)用其方法。下面就是本工程的Remote Service配置文件。
第2~3行指定服務(wù)的ID和對(duì)應(yīng)的類(lèi),第5~7行設(shè)置適配器(adapters)的ID和對(duì)應(yīng)的類(lèi)。第9~11行指定默認(rèn)的通道(channels)及其參照,該通道是在 services-config.xml中定義的。適配器和通道可以設(shè)置多個(gè),采用第一個(gè)優(yōu)先的原則。前面這幾項(xiàng)設(shè)置適用于proxy-config.xml、remoting-config.xml和我們后面要講的 messaging-config.xml。
第13~18行設(shè)置的服務(wù)終端(destination),該屬性必須和RemoteObject組件的服務(wù)終端屬性一致。按照服務(wù)的種類(lèi),服務(wù)終端又可以分為代理服務(wù)終端、遠(yuǎn)程服務(wù)終端和消息服務(wù)終端。上一次講述的代理服務(wù)終端,需要指定該終端的url,而這次我們講述的遠(yuǎn)程服務(wù)終端,需要指定該目標(biāo)的source和scope。source對(duì)應(yīng) RemoteObject要調(diào)用的遠(yuǎn)程服務(wù)的全限定類(lèi)名,不像FluorineFX,它不能在RemoteObject組件中指定。scope表示當(dāng)前遠(yuǎn)程服務(wù)的作用范圍,即遠(yuǎn)程服務(wù)類(lèi)是stateful還是stateless,有application、session和request三個(gè)選項(xiàng)。
注意:我們提倡在配置文件中設(shè)置,這樣更安全也方便后期維護(hù)。
3. 使用RemoteObjec組件
對(duì)于RemoteObjec組件,請(qǐng)參看
下面的Flex RemoteObject類(lèi)參考相關(guān)內(nèi)容。一句話(huà),F(xiàn)lex的RemoteObject與后臺(tái)語(yǔ)言是無(wú)關(guān)的。在工程文件中的BasicRemoteObject.mxml,調(diào)用了SimpleService類(lèi)的三個(gè)方法,當(dāng)通過(guò)BlazeDS從J2EE服務(wù)器返回RemoteObjec時(shí),Java數(shù)據(jù)被序列化成ActionScript數(shù)據(jù)。其中Java字符串對(duì)應(yīng)ActionScript字符串,Java的數(shù)組列表對(duì)應(yīng)ActionScript ArrayCollection。
Flex RemoteObject類(lèi)參考
<mx:RemoteObject>標(biāo)記允許使用AMF3訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)類(lèi)的方法,要知道在Flex中怎樣使用Flash Remoting訪(fǎng)問(wèn)數(shù)據(jù),應(yīng)該先了解一下RemoteObject類(lèi)。
要知道在Flex中怎樣使用Flash Remoting訪(fǎng)問(wèn)數(shù)據(jù),應(yīng)該先了解一下RemoteObject類(lèi)。
包 mx.rpc.remoting 類(lèi) public dynamic class RemoteObject 繼承 RemoteObject → AbstractService → Proxy → Object 子類(lèi) RemoteObject
一、<mx:RemoteObject>標(biāo)記
它允許使用AMF3訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)類(lèi)的方法。
1. <mx:RemoteObject>允許的標(biāo)記屬性有:
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>標(biāo)記可以包含多個(gè) <mx:method> 標(biāo)記,<mx:method>允許的標(biāo)記屬性有:
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>標(biāo)記可以也只能包含一個(gè)<mx:arguments> 子標(biāo)記,該子標(biāo)記是一個(gè)序列數(shù)組對(duì)象。
二、公有屬性
1. concurrency : String
表示對(duì)同一服務(wù)怎樣進(jìn)行多次調(diào)用。類(lèi)似于XMLConnector/WebServiceConnector/RemotingConnector的multipleSimultaneousAllowed屬性。它的默認(rèn)值為multiple,允許下列值:
- Multiple:同一時(shí)間可以執(zhí)行多個(gè)請(qǐng)求。已有的請(qǐng)求不會(huì)被取消;
- Single:同一時(shí)間調(diào)用只能執(zhí)行一個(gè)請(qǐng)求,多個(gè)請(qǐng)求會(huì)報(bào)錯(cuò);
- Last:最后一次請(qǐng)求會(huì)覆蓋已有的請(qǐng)求。
2. endpoint: String
允許開(kāi)發(fā)人員快速為RemoteObject destination(目標(biāo))指定endpoint(端點(diǎn))。而該destination既沒(méi)有在編譯時(shí),也沒(méi)有在用代碼新建ChannelSet(通道集)時(shí)參照services-config.xml。如果設(shè)定了該屬性,它會(huì)覆蓋已有的ChannelSet。
如果endpoint 的url 以“https”開(kāi)關(guān),將使用 SecureAMFChannel, 否則使用普通的AMFChannel。{server.name}和{server.port}標(biāo)記,可以用在endpoint的url中,表明Channel應(yīng)該使用用來(lái)加載SWF文件的服務(wù)名稱(chēng)和端口。
3. showBusyCursor:Boolean
表示服務(wù)正在執(zhí)行時(shí)是否顯示一個(gè)表示忙碌的鼠標(biāo)指針。
三、公有方法
1. RemoteObject () 構(gòu)造方法
創(chuàng)建一個(gè)新的RemoteObject對(duì)象。
參數(shù)
destination:String (默認(rèn)為 null) —RemoteObject 的destination屬性必須匹配 services-config.xml 中的destination的ID屬性值。
2. initialized ()
public function initialized(document:Object, id:String):void
只要設(shè)定RemoteObject標(biāo)記就會(huì)通過(guò)MXML編譯器自動(dòng)調(diào)用該方法。如果使用ActionScrip新建RemoteObject實(shí)例,則可以自行調(diào)用該方法,這對(duì)驗(yàn)證其參數(shù)很有用。
參數(shù)
- document:Object —RemoteObject 所在的MXML文檔
- id:String —RemoteObjec在上述文檔中的ID
posted on 2013-01-20 22:46 何云隆 閱讀(1573) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): Flex