Java程序员学习Flex和BlazeDS的十三个理由(二)

2014-11-24 09:46:27 · 作者: · 浏览: 1
odel的时候,把它映射到Flex的SodaModel。本例中的Flex客户端显示的就是如何调用这个Java服务。调用返回一个已经填写好预定信息的SodaModel:
public function callSodaService():void {
var sodaType:String = type.text;
var sodaCount:int = parseInt(cnt.text);
var flag:Boolean = preOpen.selected;
remoteObject.getSoda(sodaType, sodaCount, flag);
}

private function resultHandler(event:ResultEvent):void {
var sodaModel:SodaModel = event.result as SodaModel;
}
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发回服务器(审校注:原文这里写的是客户端,根据上下文判断这里应该是服务器端)。
理由九:可以通过Java来扩展和修改BlazeDS
假如你想添加特殊的日志来记录苏打调配服务被调用的情况,那么你可以扩展标准的Java适配器来添加日志功能。
首先,添加一个继承了JavaAdapter的Java类:
import flex.messaging.services.remoting.adapters.JavaAdapter.
public class TimingJavaAdapter extends JavaAdapter {
其次,重载invoke()方法:
public Object invoke(Message message) {
RemotingMessage remotingMessage = (RemotingMessage) message;
String operation = remotingMessage.getOperation();
String destination = remotingMessage.getDestination();

Logger.info("calling " + operation + " on destination " + destination);
Object data = super.invoke(message);
return data;

}
这个方法中,你可以看到调用之后的操作和调用的目的地(destination)。这种方法也能用来处理其它一些问题,比如记录向服务器发送调用需要多长时间。
理由十:HTML和JSP也能调用BlazeDS
从HTML和JSP也能调用BlazeDS,这种调用有几种不同的实现方式,比如通过Browser Manager或fflashVarsf来实现。Flex应用能够读取由HTML页面设置的fflashVarsf。
比方说你想要通过HTML页面来发送你的用户名和准备预定的苏打类型,你可以在HTML页面这样设置flashVars:





然后,在Flex应用中,你可以通过读取应用参数来获取这些变量:
var username:String;
if (Application.application.parameters.hasOwnProperty("username")) {
username = Application.application.parameters.username;
}
理由十一:Flex和BlazeDS的数据传输性能远胜于其它Ajax解决方案
目前使用的远程过程调用(RPC)都默认选择AMF二进制协议。AMF是个开放的标准,而且相当快。James Ward曾举例比较过多种远程调用解决方案。尽管其它Ajax技术——比如Dojo——已经能够快速处理几百行的数据,但是用Flex和BlazeDS的话可以轻松搞定成千上万行。(请参考James Ward's census,可以了解下各种不同的RIA数据加载技术的测评。)
理由十二:Java客户端能够直接调用BlazeDS
最新发布的BlazeDS当中含有一个Java的AMF类,通过这个类,你可以在Java客户端直接调用BlazeDS服务器。对于单元测试和加载测试来说,BlazeDS的这种调用方式非常实用。
理由十三:Spring下也能用
Adobe和Spring互相联手,尝试将双方项目集成起来。他们发布的第一个Spring–BlazeDS集成版本就向大家展示了他们的良苦用心。Spring Bean能够以远程服务的方式被调用,因此可以清除很多重复的配置文件。更多这方面的相关信息,可以参考该项目的主页。
结论
开源的BlazeDS创建在Java基础上,无论是对新的还是已有的Java服务器项目来说都是个很好的选择。Flex、BlazeDS技术能够提供高性能的远程通信,支持Flex和Java间的对象映射,因此是RIA开发的理想选择。Flex和BlazeDS的开发新手,如果曾经是Java开发员的话,会发现整个开发过程效率非常高,而且很容易掌握。
Flex加BlazeDS还是开发大型Java企业应用的理想选择。我们组开发的上个项目中,应用涉及到50多个不同的界面,而且服务器和客户端之间需要规律性地互传几千行的代码。这类应用几乎没法通过传统的Ajax技术来实现。但是在引入了Flex和BlazeDS之后,我们在年内就发布了第一个版本。看,这就是这对动态组合为你的应用开发项目带来的过人之处。