过去的半年,因为对于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/