過去的半年,因為對于Flex的認識較淺,全部采用的HttpService的方式構建的我們程序的通信,這里面java對象與as對象的映射與解析是一份工作量不小的工作,不是沒考慮用DataSerive的RPC,因為考慮到收費就放棄了,前不久從InfoQ上一篇新聞得知,有開源的DataService:GraniteDS,而Adobe自己也在去年12月14日開源了一個:BlazeDS。
這下清除了我們成本和許可的障礙。前天下載了BlazeDS,稍微研究了一下,部署了一個應用。
結果非常的成功,一切都變得那么簡單了,我們可以輕松的調用后臺的Java方法。就好像調用flex本地的方法一樣。而且不用寫Java類和as類的映射(還是要寫兩行代碼的,在映射的類上寫這些:[Bindable] [RemoteClass(alias="Java全類名,自己替換")]),我昨天試了,非常好用。傳參和返回值都是跟直接調flex的函數一樣(除了是異步的。這里我們看得出Flex對Java是非常友好的),還沒試異常。而且配置也是非常簡單的,在WEB-INF/flex/remoting-config.xml 下配置一個類似這樣的標簽就可以了:
<destination id="product">
<properties>
<source>flex.samples.product.ProductService</source>
</properties>
</destination>
調用也非常簡單(以mxml中的調用為例): <mx:RemoteObject id="srv" destination="product"/> destination屬性的值就是配置文件里<destination>標簽的id屬性的值,之后我們就能像使用as對象一樣使用他了。
前后臺的對象保持一致的辦法也只是有一個什么樣的Java對象就寫一個什么樣的as對象。
部署也非常簡單,將BlazeDS下載到之后,解壓完畢我們可以看到三個war包,三個文件夾,和一個license,其他的不看,三個文件夾分別是:
顧名思義,第一個是文檔(現在還不全,想看全的還得去網站上看在線的);第二個是一些可能會用到的資源,比如Jar包什么的;第三個是保存有例子的tomcat,webapps里面有三個web應用,分別對應那三個war包,但其中最有用的就是blazeds-samples這個了從里面我們可以看到所有豐富的例子,而且單擊右鍵選擇View Source還能看到代碼,而blazeds就是我們部署一個基于BlazeDS的web應用的空文件夾,所有該web應用需要的Jar包和配置文件都全了,而且都在他們該在的文件夾里。不過你要真的跑起來,在你的tomcat里還要部署些server級的東西,那個就在我們的resources/security/tomcat里,參照該文件夾下的readme.txt部署。
另外,即便是對HttpService和WebService的應用方面他都有一個很好的框架,他還有一個message框架,目前我還不清楚是干什么用的,猜測也許像JMS。
在對J2EE的支持方面,GraniteDS號稱已經支持EJB3.0,Spring,Guice,Seam,BlazeDS我還不知道,不過GraniteDS的作者對BlazeDS是持一個開放的態度的,且兩者的開源協議是同一個,可以互相拷貝代碼,所以我相信將來兩者都會更強大。
簡單的配置,清晰的結構,強大的功能。在試用之后,我堅信Flex中J2EE開發的王道一定是各種Data Service。
=========================
BlazeDS的網址:
http://labs.adobe.com/technologies/blazeds/
題外話,推薦一個Flex for Java的網址,希望對Java程序員有幫助:
http://flex.org/java/