1. 程式人生 > >Flex兩種與後臺JAVA互動的方式

Flex兩種與後臺JAVA互動的方式

我那邊現在有兩個團隊做系統,一隊用RemoteObject,一隊用HttpService。
我之前的構想也是使用RemoteObject的,但是後來發現RemoteObject有一些不爽的地方。
1.RemoteObject要使用到AS的實體類(使用Bindable繫結Java類)。我的系統涉及到200多張表,如果改動表結構的話,AS實體類也要跟著改。十分麻煩,而且寫好又要改getter,setter,又要部署到tomcat。除非你自己寫工具自動生成。

2.使用RemoteObject,那你的J2EE後臺要新增remoting-config.xml,services-config.xml等等的配置檔案和Flex的lib,多了很多檔案,而我做專案的Flex僅僅是客戶端顯示,然後呼叫後臺。因此我的服務端完全就可以我們熟悉的J2EE需要用到的檔案。減少了配置和以後的維護。


3.如果你要使用到Spring的話,需要配置SpringFactory和destination。例如:
services-config.xml裡面新增:
<factories>

     <factory id="spring" class="flex.samples.factories.SpringFactory"/>

</factories>
remoting-config.xml裡面新增:

<destination id="userService">

<properties>

<!--    工廠對應你自己取的工廠名字     -->

        <factory>spring</factory>


<!--    這個source對應spring的bean的id     -->

        <source>userService</source>

    </properties>

</destination>
這裡需要為每一個Service配置,多的話。。。。

4.我這邊做Flex的UI的開發者都是應屆畢業生,使用RemoteObject有必要了解ORM(我後臺持久層框架是JPA),不然他們調RemoteObject的方法時很容易出錯,或者不會呼叫。而使用HttpService只需要我們後臺人員和前臺做UI的Flex開發者約定一套通訊的xml格式即可。後臺的負責返回xml,前臺的負責傳送xml,很爽!例如:

<root>
<model>
<attribute1>attr1</attribute1>
<attribute2>attr2</attribute2>
</model>
</root>

5.Flex的元件對xml的支援十分友好。你可以直接將HttpService返回的xml放到元件的dataProvider就可以了,特別是dataGrid或者tree用起來特別好。

5.使用HttpService減少了部署量。我只要將後臺的Java程式部署到Tomcat,前臺的Flex就可以直接將FlexBuilder編譯好的程式在客戶機連線後臺,而不用部署到Tomcat,直接測試就可以了。大大提高了開發效率。

6.使用HttpService也有缺點。首先就是通訊的效率沒有RemoteObject來的高(因為是xml,也可以使用JSON或者其它通訊方式)。其次就是,你需要寫Object與xml之間的轉換。我沒有使用xstream,而是自己用反射寫工具類。你還需要提供Servlet給Flex呼叫。我用的是SpringMVC提供的MulitiController對Flex提供Http服務。

7.使用HttpService,我碰到了一些意想不到的事情。最嘔血的是我提供get方法返回xml資料的時候,Flex總是顯示舊的資料。解決方法是在你請求的Servlet地址新增一個引數(引數名隨便起,我用random),而且請求的引數必須每一次都不一樣(可以通過當前時間或者UUID實現),例如:http://192.168.2.111:8080/UserController.do?servlet=getAll&random=sdfsdfs
這個我查錯了很久,鬱悶。。。。