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