技术开发 频道

Java程序员学习Flex和BlazeDS十三理由

  理由八:可以在已有Java应用中运用

  比方说这个简单的苏打调配系统,假设你想要扩展这个已开发好的服务,让其它Flex应用可以远程调用。在现成的应用中配置BlazeDS的基本步骤有:

  修改WEB-INF/flex文件夹下的BlazeDS配置文件

  在该应用对应的web.xml文件里定义MessageBrokerServlet和session监听器

  配置好BlazeDS之后,再把苏打调配服务添加到BlazeDS远程配置文件里,Flex客户就能远程调用了。这个过程通过在配置文件里定义一个目的地(destination)、一个或多个信道(channel)来传输数据。基本的AMF信道定义在services.xml文件里。下面这段配置在 remoting-config.xml里定义了目的地(destination):  

1 <destination id="sodaService" channels="my-amf">
2     <properties>
3         <source>com.gorillalogic.sodaSample.SodaService</source>
4     </properties>
5 </destination>

  通过在远程调用配置文件里定义端点(endpoint),Flex客户端就可以调用任何一个基本的Java服务。

  要是想把Java数据模型也传送到Flex客户端的话,只要在ActionScript类中定义好两者间的映射:  

1 [Bindable]
2 [RemoteClass(alias="com.gorillalogic.sodaSample.SodaModel")]

  这段代码告诉Flex,在远程调用的服务返回SodaModel的时候,把它映射到Flex的SodaModel。本例中的Flex客户端显示的就是如何调用这个Java服务。调用返回一个已经填写好预定信息的SodaModel:  

1 public function callSodaService():void {
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发回服务器(审校注:原文这里写的是客户端,根据上下文判断这里应该是服务器端)。

0
相关文章