FLEX+Java开发.doc_第1页
FLEX+Java开发.doc_第2页
FLEX+Java开发.doc_第3页
FLEX+Java开发.doc_第4页
FLEX+Java开发.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Flex + BlazeDS + Spring整合心得 博客分类:FlexFlexSpringEclipseAIR应用服务器一引言在用过了一年多的AJAX之后,忽然有一天接触到了Flex,几乎就是一瞬间,我就被它完全吸引。出色的设计理念、方便的调试及调优、完整而详细的API、友好而个性的界面、平台无关性,并且,会促使企业在服务端采用SOA等等,相比于现在流行的RIA如AJAX,我相信它比后者更能得到开发人员、项目经理、以及最终客户的青睐。相比于AJAX,我认为它至少有以下几点吸引我:1)调试 在最近一年带新人学习的过程中我发现,大家学习服务器端的java及各种框架相对容易,反而是学习客户端的AJAX会比较困难,因为他们被迫要学习Html、jsp/servlet原理、struts标签、OGNL表达式、EL表达式、Java script 、prototype、dojo、dwr等等,最痛苦的是,即便firefox的firedebug可以提供调试功能,但是,由于很少有项目是独立界面,所以,这个调试功能至今我们也没有用起来。如果发生了一个简单的JS错误,新手们往往会浪费一个上午的时间去解决。Flex是基于MXML与Action script 3,后者是强类型语言,在Flex Builder 3下开发,借助编译器可以在开发时发现编译异常,在运行时可以通过设置断点来分步调试,而MXML的底层实际上也是Action script 3,这无论从开发、设计还是调试方面都比传统的HTML+Java script 要强大的多。2)调优有多少AJAX开发人员会在编写他们的代码时关注内存占用情况?当客户端变得很慢、内存泄露、甚至溢出时,我们往往只是对客户一笑,告诉他重启浏览器。由于不好的开发习惯,很多项目代码中充斥着垃圾回收机制无法回收的内存占用,这些内存浪费就是所谓的内存泄露,更可怕的是,当你的程序运行时间越长,会累积越来越多的内存泄露,最终导致内存溢出,系统崩溃。Flex的profile可以轻松帮助我们发现内存溢出的根源,帮助我们写出功能性能俱佳的代码。3)CS与BS部署方便传统的J2EE是基于BS架构,J2SE是CS架构,很难想象将一个J2EE应用很轻松的转变成一个J2SE应用。Flex的代码对于部署到web application以及AIR上的代码差别不大,当然IE对于访问本地资源会有安全限制,这是无法避免的。在AIR上Adobe甚至还提供了一个内置数据库。其实SUN的Applet技术和Flex的这种设计理念很像,但现在我宁可用Delphi去做一个CS系统,也不愿意用JAVA Swing,我想很多人都会同意这点。4)摒弃传统的J2EE架构传统的J2EE架构基于JSP/Servlet,而这种技术是基于HTML标准的,HTML标准最大的问题就是请求/响应机制,这种机制带来的最大问题就是无法满足用户实时性的要求,我们能做的,也只是定时刷新,就像开心网上有了新消息后的提示,就是通过定时(好像是1S)刷新的方式来实现,但对于更大数据量,则无法采用服务器“推”技术。Flex技术的传输协议支持HTML、SOAP、AMF(BlazeDS就是采用这种方式)通信,其中SOAP我印象中在SOAP1.2中就可以支持四种客户端/服务器的响应方式,非常灵活。采用Flex,可以使你的客户端与服务器不用局限于传统的HTML约束。5)客户端与服务器完全独立传统的J2EE技术通常要求客户端与服务器同时采用JAVA技术,除非采用像Web Service这种技术,才可以实现客户端与服务器采用不同技术实现。Flex就是实现客户端应用,它并不关心你的服务器应用是什么技术来实现,这就与传统的SOA理念很合拍,而我一直认为,SOA理念是企业平台最理想的实现准则。6)丰富的框架与传统的Java script 库不同,目前的Flex框架会提供一套方法学来统一处理开发协作问题,使你的项目风险降到最低,代码的兼容性也会更好。比如Adobe官方的Cairngrom,就是基于客户端MVC架构的一套Flex框架,大小只有500多K,当然还有技术无关性的PureMVC、Fondry、ARP、Guasax Flex Framework等等。最重要的是,与一本500多页的Struts2 权威指南不同,Cairngrom的官方文档只有30来页。当然,Flex带给我的冲击还不仅仅上述这些,它最大的优势我觉得是它的设计理念,相信在你接触到它以后,会和我一样被它吸引。这篇文章试图通过一个Hello World的例子来展示如何将Flex,BlazeDS以及Spring进行整合,本文不会讨论上述技术的具体细节。之所以决定写这篇文章,是因为虽然网上关于这方面的文章比较多,但在过程中还是有不少小陷阱,这篇文章会带领读者从容进行搭建。二环境搭建Flex :Flex Builder 3BlazeDS : /wiki/display/blazeds/Release+Builds,我下载的是978Turnkey版本Spring : spring2.55服务器端开发IDE我选用的是Eclipse3.3三服务器搭建1 在Eclipse中新建一个动态web项目2 下一步这里运行时J2EE容器采用Tomcat6.020(这里需要先配Eclipse的动态server,如下图),BlazeDS的Turnkey版本会自带一个Tomcat6.010,我没有采用这个,但如果你用的是教6.010的版本更低的版本,我不确定会不会有问题。3 如果你没有别的需求,可以finish4 接下来,我们需要导入如下jar包:其中,以flex为前缀的五个jar包可以从blazeds-turnkey-978resourceslib中找到,除此之外,junit的两个包是可选的,log4j也是可选的,spring-mock以及spring-modules也是可选的,剩下的,spring2-5-5是spring的jar包,其它的jar包,都在blazeds-turnkey-978blazeds.war中5 写个service6 将blazeds.warWEB-INFflex中的四个配置文件放到工程WEB-INFflex中7 在remoting-config中配上刚刚写的service像这样配置,类似于RMI的方式,直接将具体的service暴露给客户端,没有经过spring托管,显然不是我们的预期。按照我们的预期,我们的service应该由spring bean factory进行管理,然后在客户端调用时动态进行实例化。所以,这里,我们不按照上述做法配置,改成下面的方式:8 在services-config中配置factory9 编写factory,FlexFactoryImpl 实现了 FlexFactory 接口,该接口完成两件事情:1 创建 FactoryInstance 对象;2 通过 FactoryInstance 对象查找我们需要的 FlexService。因此,需要一个 FactoryInstance 的实现类,我们编写一个 SpringFactoryInstance,以便从 Spring 的容器中查找 FlexService:FlexFactoryImpl 负责实例化 SpringFactoryInstance 并通过 SpringFactoryInstance 的 lookup() 方法查找 FlexService 接口对象:10 web.xml:由于我们在factory中需要WebApplicationContext,所以,需要配spring的监听ContextLoaderListener,后面的配置是处理flex客户端发送过来的请求,进入BlazeDS的MessageBrokerServlet.server端的项目目录如下:WebContent/BlazeDSDemo-debug这是后面Flex客户端自动生成的用来放置flex部署文件的地方,暂时不去管它。四客户端搭建:1 在Flex Builder 3中创建Flex Project2 这里我们采用Web application,理论上通过AIR方式也不应该有问题服务器选择J2EE,通过选中LiveCycle Data Services,那么LiveCycle Data Services是什么呢,其实,BlazeDS是Adobe LiveCycle Data Services的开源版本,如下图:3 下一步Root folder:tomcat的webapp,必须保证这个路径下有WEB-INF/flex,我这里配置的是eclipse动态server时运行的tomcat webapp,这样,比较方便开发调试。当然,在部署时,这里的地址应填实际tomcat的webappRoot url : 这是你项目的根路径Content root : 这是上面去掉http:/localhost:端口号的部分记住,在eclipse中启动动态tomcat,然后点击Validate configuration,如果配置成功,就会出现“the web root folder and root URL are valid”,这里必须保证配置成功,才能点击下一步。Output folder: 我在这里也是填入动态tomcat的位置,这个地址应该是root folderflex项目名-debug,flex builder会把编译后的文件放到这个目录下,最后通过eclipse统一部署。4 如果没有其它详细配置,点击finish.5 程序入口BlazeDSDemo.mxml:6 如果这时程序报server SDK不正确的错误,需要到工程的properties中配置SDK的编译器五验证单击按钮,eclipse console中出现hello world,大功告成,先简单说一下Blazeds,简单的讲Blazeds就是flex与java平台进行交互的工具,当然不仅限于java语言,也包括运行在java平台上的其他语言,关于这方面可以google下。其实BlazeDS可以看成是LCDS的一个子集,而且是一个开源产品,在一般的项目中完全可以替代LCDS,现在有三个版本,其中Turnkey版内置了Tomcat和 Flex 3 SDK,还包含blazeds.war、ds-console.war和samples.war;Binary Distribution版只包括blazeds.war,此为最简配置;而Source则包含blazeds的Java源代码,如果想做二次开发就下载这个。下图是Adobe官方的Blazeds与LCDS的对比,现在知道什么地方该用哪个了吧好了不多说了,看看如何配置:目前来说有三种方式:第一种:flex工程与java工程相互独立;第二种:Flex工程整合Java项目;第三种:java项目中加入flex;其中第一种和第三种在配置上很相似。简单说一下:第一种:1、当然是先建一个java工程,把需要的包导入,配置文件写好,web.xml参考Blazeds的例子,导入Tomcat就ok;2、然后建一个flex工程,在Server Technology处选择J2EE,然后选择使用LCDS,next;3、Web root选择你发布到tomcat中的java工程目录,Root URL写入你要再浏览器中访问该项目的url,Context root写你的java工程名;4、请确保已经开启tomcat服务,然后点击Valdate Configuration按钮,没有任何错误提示点击Finish即完成项目创建,此flex项目中最后的编译swf文件都会保存在tomcat下的工程目录的一个(flex项目名称)-debug文件夹中,当然你也可以更改这个路径就在output folder那,如下图:5、注意:项目建好后右击工程选择属性-flex complier,flex sdk version 一定要更改,一般选default SDK就可以了,不要使用默认的serverSDK,这一步很重要,因为你建的是LCDS支持的项目,LCDS是支持服务器端编译的,Blazeds并不支持,这也是为什么有些人配置Blazeds不能够正常编译的原因。第二种:Flex工程整合Java项目,这里使用MyEclipse+flexBuilder插件版1、创建Flex工程,勾选Use remote object access service,next。2、 配置J2EE服务器,我们这里使用Tomcat,Target runtime:选择一个Tomcat的runtime,没有就新建一个,只需要指定Tomcat的安装目录即可;设定上下文路径和blazeds.wa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论