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 何云隆 閱讀(1573) 評論(0) 編輯 收藏 所屬分類: Flex