理由八:可以在已有Java应用中运用
比方说这个简单的苏打调配系统,假设你想要扩展这个已开发好的服务,让其它Flex应用可以远程调用。在现成的应用中配置BlazeDS的基本步骤有:
修改WEB-INF/flex文件夹下的BlazeDS配置文件
在该应用对应的web.xml文件里定义MessageBrokerServlet和session监听器
配置好BlazeDS之后,再把苏打调配服务添加到BlazeDS远程配置文件里,Flex客户就能远程调用了。这个过程通过在配置文件里定义一个目的地(destination)、一个或多个信道(channel)来传输数据。基本的AMF信道定义在services.xml文件里。下面这段配置在 remoting-config.xml里定义了目的地(destination):
2 <properties>
3 <source>com.gorillalogic.sodaSample.SodaService</source>
4 </properties>
5 </destination>
通过在远程调用配置文件里定义端点(endpoint),Flex客户端就可以调用任何一个基本的Java服务。
要是想把Java数据模型也传送到Flex客户端的话,只要在ActionScript类中定义好两者间的映射:
2 [RemoteClass(alias="com.gorillalogic.sodaSample.SodaModel")]
这段代码告诉Flex,在远程调用的服务返回SodaModel的时候,把它映射到Flex的SodaModel。本例中的Flex客户端显示的就是如何调用这个Java服务。调用返回一个已经填写好预定信息的SodaModel:
2 var sodaType:String = type.text;
3 var sodaCount:int = parseInt(cnt.text);
4 var flag:Boolean = preOpen.selected;
5 remoteObject.getSoda(sodaType, sodaCount, flag);
6 }
7
8 private function resultHandler(event:ResultEvent):void {
9 var sodaModel:SodaModel = event.result as SodaModel;
10 }
Flex返回的结果是通用的result变量,可以直接映射到你的SodaModel。这里我就不深入讨论怎么实现映射了,但其中值得提到的是要在编译配置里声明services-config.xml路径,像这样:
-locale en_US -services=/nsource/sodaSample/web/WEB-INF/flex/services-config.xml -context-root /
如果不添加这个路径的话,你的Flex客户端就没发找到Java服务。同样的方式,你还能把一个对象从客户端传递回服务器端。比如,你可以把一个空的soda model发回服务器(审校注:原文这里写的是客户端,根据上下文判断这里应该是服务器端)。