`

学习Flex和BlazeDS的十三个理由

阅读更多

      本文列述了13个Java程序员应当学习Flex和BlazeDS的理由,讨论了为什么Flex结合BlazeDS是开发RIA的最佳组合之一。无论是高度交互的网站还是以Java为后端的企业应用,这项组合都是最佳选择之一。更重要的是,这项组合能同时为开发员和企业带来高回报(ROI)。

在阐述Java程序员应当学习BlazeDS的13条理由时,我以一个假想的苏打分派系统来展示如何让已有的Java程序转变为RIA应用。通过这个例子,我同时还会讲解到BlazeDS在已有Java应用或新建Java应用中的多种不同用法。

理由一:开源

Flex软件开发工具箱(SDK)的核心是个开源框架,专门用来开发、维护那些在不同浏览器、不同操作系统下界面都相同的RIA应用。Flex发布采用的是Mozilla公共许可证(Mozilla Public License)。编译后的Flex应用在Adobe Flash平台下运行。

BlazeDS是连接Flex和Java的索桥,是项针对远程调用和消息传递的开源技术。在Java应用服务器上,它以servlet的形式存在,因此可以在任何标准Java网络应用中运用它。BlazeDS以LGPL(Lesser GNU Public License)公共许可证书发布。在发布BlazeDS的同时,Adobe还公布了AMF(ActionScript Message Format)规格说明,BlazeDS、Java和Flex客户端间以这种简洁的二进制格式实现通信。

理由二:完善的社区支持

Flex社区非常活跃,社区贡献了大量项目。Flex.org,这个配以社区新闻的Adobe站点几乎每天都有新的社区贡献;Yahoo!上的Flex用户组的成员也已经超过了11000。

再比如Google Code上的Flexlib项目,已经提交了大量的开源UI组件。Swiz和Mate项目贡献了优化事件处理的框架;还有Gorilla Logic贡献了自动化UI测试的Flex Monkeym项目。

理由三:带来广阔的就业前景

据Adobe的Flex“传道士”——James Ward看来,Flex高级开发员的市场需求非常大,学习Flex能让你拥有极具市场竞争力的开发技能。

理由四:更高的业务效益回报

总体上,开发企业web应用不是个轻松的活,这基本上是众所周知的事实。Flex和BlazeDS提供的不仅仅是功能强大的开发工具,而且开发技术本身相对也非常简单。开发效率可以得到大幅度的提升,产品因此可以很快推向市场。Flex和Flash带来的用户体验也相对更有魅力,对增加流量、提高用户转化率(conversion rate)很有帮助。

很经典的一个例子是Borders连锁书店。他们最近发布了带有“魔法书架”的新网站,这个网站采用Flash接口来模拟书籍借阅的过程。Borders 发现这一模拟借阅非常明显地提到了用户转换率:“借助这个Flash驱动的接口,用户可以浏览书籍、DVD和CD的封面,用户转换率比其他没有此项功能的网站高出62%”。

理由五:Flex是第一个专门为创建UI而设计的语言

大部分语言都不是在第一时间设计其对UI的支持。Java中Swing包的实现刚好是个很好的证明。也就是这个原因,很多像捆绑数据这样的简单动作在Swing当中的实现就非常痛苦。用 Swing最大的问题在于,要想提高开发效率就必须要对其API了如指掌。

Flex刚好相反,它是专门为创建web UI而设计的。正如Bruce Eckel所说,Flex是第一个针对UI开发的领域特定语言(DSL)。用Flex构建UI比其它诸如JSP、JSF、Swing等技术简便得多。语言本身糅合了数据绑定、事件处理、控件布局以及其它一些UI常用开发技巧,就算对语言没有深刻的理解也不会影响开发效率。

理由六:编程风格近似于Java

你可以继续使用现有的Java开发工具来开发Flex应用。当然也可以采用SDK中携带的免费命令行工具,Adobe Flex Builder(一个Eclipse插件),或最近的IntelliJ IDEA 8。

Flex提供的是一个有状态环境,在这个环境中,数据从客户端加载。这种编程模式更像是开发桌面客户端而非HTML编程,这种风格对于用过Java Swing编程的开发员来说应该是相当熟悉。

Flex是MXML(类似XML的UI标记语言)和Adobe ActionScript(面向对象的解析语言)的结合体。鉴于这种结合方式,Flex编程与Java非常相似,因为两者用的都是熟知的面向对象的概念。

最理想的开发环境是把Flex应用创建在web部署文件夹下。这样一来,每次更新应用之后都不需要重新部署,只要在浏览器下刷新一下就可以了。用Flex和BlazeDS开发后,开发效率绝对比之前有很大的提升。

理由七:BlazeDS可以在任何Java应用服务器上运行

BlazeDS目前已发布了多个版本,其中的turnkey版本还包含了为BlazeDS配置的Apache Tomcat。本文中,我用的是二进制发布版本,其中含有一个WAR用来展示如何把应用部署到各种应用服务器上去。不用这个WAR的话,你也可以从中提取 JAR文件放到自己的项目中去。关于安装BlazeDS的各种选项内容,可以参见BlazeDS的wiki

这里举一个简单的例子,比方说要在已有的一个简单的苏打调配系统中应用BlazeDS。你只要把JAR文件放到项目文件夹下,然后就可以在应用里直接用BlazeDS,可以部署到能够部署应用的任何地方。

在项目中添加BlazeDS,只需要完成下面两个步骤:

  1. 解压缩BlazeDS WAR文件的内容:jar xvf blazeds.war。
  2. 把JAR文件都拷贝到项目的lib文件夹下:cp -R WEB-INF/lib /sodaSample。

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

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

  1. 修改WEB-INF/flex文件夹下的BlazeDS配置文件
  2. 在该应用对应的web.xml文件里定义MessageBrokerServlet和session监听器

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

<destination id="sodaService" channels="my-amf">
	<properties>
		<source>com.gorillalogic.sodaSample.SodaService</source>
	</properties>
</destination>

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

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

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

这段代码告诉Flex,在远程调用的服务返回SodaModel的时候,把它映射到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

<object id='SodaSample' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab' height='100%' width='100%'>
        <param name='src' value='SodaSample.swf'/>
        <param name='flashVars' value='username=ryan&type=coke'/>
        <embed name='mySwf' src='SodaSample.swf' pluginspage='http://www.adobe.com/go/getflashplayer' height='100%' width='100%' 	flashVars='username=ryan&type=coke'/>
</object>

然后,在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之后,我们在年内就发布了第一个版本。看,这就是这对动态组合为你的应用开发项目带来的过人之处。

分享到:
评论
1 楼 ouchxp 2010-10-21  
这颜色,你看着眼睛不疼么?

相关推荐

    flex+blazeds+spring

    BlazeDS是Adobe提供的一个免费服务器端技术,它为Flex客户端提供了与Java应用程序交互的能力,包括实时消息传递、Remoting和数据推送等功能。Spring是一个广泛使用的Java企业级应用开发框架,它简化了Java应用程序的...

    flex + blazeDs

    如果要深入了解Flex + BlazeDS的开发,可以研究这个文件,查看MXML和ActionScript代码,了解它们如何与BlazeDS服务交互。 总之,“Flex + BlazeDS”是开发富互联网应用的一种强大组合,它利用Flex的可视化界面和...

    flex+blazeDS配置指南

    而BlazeDS是Adobe提供的一个免费服务器端组件,用于实现Flex与Java后端的数据通信。本文将深入探讨如何配置Flex与BlazeDS,让它们协同工作,实现高效、稳定的数据交换。 首先,我们需要准备必要的工具和环境。...

    Flex Spring JAVA BLAZEDS整合

    BlazeDS是Adobe提供的一个开源工具,它支持Java远程调用(RPC)和Web消息传递,允许Flex客户端与Java服务器之间进行通信。 在Flex和Spring的整合中,关键在于Spring容器管理的Bean如何被Flex客户端访问。Spring社区...

    PureMVC+Flex+BlazeDS+Spring+Hibernate.doc

    标题中的“PureMVC+Flex+BlazeDS+Spring+Hibernate.doc”指的是一项整合了多种技术的Web应用开发方案,这些技术包括PureMVC、Flex、BlazeDS、Spring和Hibernate。这篇文档可能是指导读者如何将这些技术结合在一起...

    Flex Blazeds入门教程

    1. **Flex**:Adobe Flex是一个用于构建和部署富互联网应用程序(RIA)的软件框架,能够创建跨平台的桌面和移动设备应用程序。Flex使用MXML和ActionScript编程语言,能够与多种后端技术无缝集成。 2. **LCDS ...

    Flex + BlazeDS+ Java 入门教程

    在"firstFlex"这个文件中,可能包含了教程的示例代码和项目结构,通过逐步学习并运行这些示例,你可以更深入地理解和掌握Flex和BlazeDS的结合使用。 总的来说,"Flex + BlazeDS+ Java 入门教程"是一个全面的学习...

    flex 工具 blazeds

    AMF是一种二进制数据格式,用于在Flex客户端和BlazeDS服务器之间高效地传输数据。相比于XML或JSON,AMF的解析速度更快,数据量更小,因此在处理大量数据时效率更高。BlazeDS将Java对象转换为AMF格式,使Flex客户端...

    Flex + blazeds + Java推送

    Flex + blazeds + Java推送Demo 本例实现由Flex一端客户端发送消息, 然后由Java端在发布到所有订阅的其它Flex端. 里面有说明与源码, 还有一个直接放到Tomcat里面的直接发布的项目 小编使用工具 eclipse3.5 flex sdk...

    flex blazeds的入门例子

    Flex BlazDS是一个强大的数据集成框架,用于在Adobe Flex客户端和Java服务器之间建立实时的双向通信...通过这个简单的例子,你可以掌握Flex与BlazDS的基础,为进一步深入学习Flex应用开发和Java后端集成打下坚实基础。

    flex之BlazeDS案例

    Flex之BlazeDS案例是一个关于使用Adobe Flex前端与Java后台通过BlazeDS进行数据通信的实践项目。在本文中,我们将深入探讨Flex、BlazeDS以及它们如何协同工作以实现富互联网应用程序(RIA)的数据交互。 Flex是一种...

    Flex+blazeDS+Spring官方Demo,环境搭建

    Flex+blazeDS+Spring官方Demo,环境搭建,内含十几个例子,从易到难,包括spring消息,spring安全,注解方式和非注解配置文件方式,十分好用。内含有tomcat,可直接启动并运行用户手册。

    flex+blazeds搭建环境步骤

    通过以上步骤,我们可以成功地在MyEclipse中搭建起一个基于Flex和BlazeDS的开发环境,实现Flex前端与后端Java服务之间的远程调用。这种集成方式不仅提高了Web应用的交互性和响应速度,还使得开发者能够更高效地构建...

    Myeclipse8.5+flex4.5+Blazeds+SSH环境搭建

    13. **包和类的创建**:在 Flex 项目中,编写如 `UserBiz` 类的 Java 类,用于实现业务逻辑,通过 BlazeDS 与 Flex 客户端交互。 14. **remoting-config.xml 配置**:在 `remoting-config.xml` 文件中定义数据目的...

    MyEclipse 8.5+Flex+BlazeDs通信

    MyEclipse 是一个强大的集成开发环境(IDE),特别适合于 Java 开发,而 Flex 是一种用于创建交互式用户界面的开源框架,BlazeDs 则是 Adobe 推出的服务器端数据服务组件,用于实现在 Flex 客户端和 Java 应用服务器...

    Flex之BlazeDS文档

    Flex和AIR程序使用Flex组件与BlazeDS服务器进行通信,包括RemoteObject、HTTPService、WebService、Producer和Consumer等组件。这些组件都是Flex SDK的一部分。除了Flex或AIR之外,也可以结合使用HTML和JavaScript...

    flex通过blazeds与java通信的小例子

    这个小例子旨在帮助初学者理解Flex和BlazeDS如何协同工作,实现客户端和服务器端的数据交换。通过这个实例,你可以学习到Flex的事件处理、数据绑定,以及BlazeDS的AMF通信机制等关键知识点。同时,这也是深入学习...

    Flex+BlazeDS+java通信详细笔记和源代码

    2. **Messaging**:BlazeDS的`LiveCycle Data Services`提供了一个消息代理系统,允许Flex客户端订阅和发布消息。通过`HTTPChannel`或`RTMPChannel`,客户端可以接收服务器推送的消息。 **PushTest6**:这个文件...

    Flex+blazeds+java企业门户网站完整源码

    总之,这个“Flex+blazeds+java企业门户网站完整源码”是一个很好的学习资源,可以帮助开发者掌握如何利用Flex构建富用户体验的Web应用,并通过BlazeDS实现与Java后端的有效交互,进而构建高效、功能强大的企业级...

Global site tag (gtag.js) - Google Analytics