摘要 本教程演示了如何使用Flex LiveCycle Data Services Express (DS)消息传递功能在使用BEA Workshop Studio (Flex bundle)的Flex应用程序中实现数据推送我的目标是开发一个小型Flex消息传递应用程序发送和接收消息 Flex消息传递简介 本教程演示了如何在Flex应用程序中使用消息传递消息传递可算是相当普通的一个词但请看 Flex文档 是怎样定义这个词的 消息传递系统允许各应用程序进行对等异步通信方法是通过Message Service收发数据(或消息)包消息通常由消息头和消息体组成消息头包含标识符和路由信息消息体包含应用程序数据 因此我们将构建这样一个应用程序它允许通过DS消息服务向我们的Flex客户端应用程序异步发送数据以下是一些主要的DS消息传递术语 生产者创建消息并将它发送到收信方的应用程序 使用者通过收信方接收消息的应用程序 消息收信方用于消息发布订阅和点对点消息传递的资源 消息通道连接生产者使用者与收信方的方法(使用端点) 消息端点负责消息数据编码和解码的接口 消息适配器用于定义消息传递实现其选项包括使用DS或外部Java Message Service (JMS)提供者所提供的ActionScriptAdapter或者 DS提供了许多有用的特性包括持久的消息队列安全性和外部消息系统集成DS将部署为WAR文件它可以运行在任何Java EE Servlet容器(像Apache Tomcat或BEA WebLogic)中ActionScriptAdapter消息提供者不要求任何额外的Java EE特性本教程将介绍实现一个非常基本的消息传递应用程序的设置和配置 软件需求 本教程使用下列软件产品构建和运行消息传递应用程序 BEA Workshop Studio / Flex Bundle trial Adobe LiveCycle Data Services ES Apache Tomcat 应用程序概述 在本教程中您将学习如何创建简单的Flex生产者和使用者客户端Flex用户接口运行于Flash Player客户端而DS是服务器端网关向Flex客户端应用程序发送消息并接收来自Flex客户端应用程序的消息 多个Flex客户端可以发送和接收来自同一消息队列的消息生产者用户接口将允许您向收信方发送消息而使用者的用户接口将接收创建的消息因此当不含任何用户轮询代码的消息显示在屏幕上时这就演示了DS的数据推送特性 图1给出了源文件一览具体来说我将重点关注 servicesconfigxml定义messagingconfigxml文件用法和通道定义 messagingconfigxml定义收信方和适配器 flex_clientmxml创建和接收消息的客户端代码 图1 已完成的应用程序中的消息传递文件一览(单击放大图片) 现在我将介绍如何创建应用程序 构建应用程序的步骤 以下内容将介绍Flex项目的创建和应用程序的配置以及应用程序的部署和运行 设置IDE 首先下载和安装软件需求一节中提到的软件并启动BEA Workshop Studio接着导入flexwar文件并创建新的Flex Server项目(此文件随DS安装DS的下载链接请参见软件需求一节) 现在选择File→Import然后选择WAR文件选项指定随DS提供的flexwar文件的位置(在windows中默认位置是C:\lcds\flexwar)将Web项目名称指定为flex_server 最后选择Finish 图2 从DS导入flexwar文件 配置Flex Server和应用程序 接下来我们将配置flex_server消息传递应用程序设置消息传递服务器端应用程序包括消息通道端点收信方和适配器的配置 编辑servicesconfigxml文件编辑<services>部分中的serverincludes代码只在配置中包括messagingconfigxml <services> <serviceinclude filepath=messagingconfigxml /> </services> 将以下内容添加到<channel>部分此处的配置目标是用于消息收发的消息端点此处创建的mypollingamf通道将提供给messagingconfigxml文件中配置的收信方使用 <channeldefinition id=mypollingamf class=ssagingchannelsAMFChannel> <endpoint uri=//{servername}:{serverport}/{contextroot}/messagebroker/amfpolling class=ssagingendpointsAMFEndpoint/> <properties> <pollingenabled>true</pollingenabled> <pollingintervalseconds></pollingintervalseconds> </properties> </channeldefinition> 下面是完整的servicesconfigxml文件供您参考 <?xml version= encoding=UTF?> <servicesconfig> <services> <serviceinclude filepath=messagingconfigxml /> </services> <channels> <channeldefinition id=mypollingamf class=ssagingchannelsAMFChannel> <endpoint uri=//{servername}:{serverport}/{contextroot}/messagebroker/amfpolling class=ssagingendpointsAMFEndpoint/> <properties> <pollingenabled>true</pollingenabled> <pollingintervalseconds></pollingintervalseconds> </properties> </channeldefinition> </channels> <logging> <target class=ssaginglogConsoleTarget level=Debug> <properties> <prefix>[Flex] </prefix> <includeDate>true</includeDate> <includeTime>true</includeTime> <includeLevel>true</includeLevel> <includeCategory>false</includeCategory> </properties> <filters> <pattern>Endpoint*</pattern> <pattern>Service*</pattern> <pattern>Configuration</pattern> </filters> </target> </logging> <system> <redeploy> <enabled>false</enabled> </redeploy> </system> </servicesconfig> 编辑messagingconfigxml文件以配置simpletopic收信方Flex Client应用程序将会引用它进行收发消息 更新opening service标记在messageTypes中包括AsyncMessage类 <service id=messageservice class=ssagingservicesMessageService messageTypes=ssagesAsyncMessage> </service> 创建该simpletopic收信方作为一个非持久性主题它将使用上述servicesconfigxml文件定义的mypollingamf通道这是将用来收发消息的消息队列 <destination id=simpletopic> <properties> <network> <sessiontimeout></sessiontimeout> <throttleinbound policy=ERROR maxfrequency=/> <throttleoutbound policy=REPLACE maxfrequency=/> </network> <server> <durable>false</durable> </server> </properties> <channels> <channel ref=mypollingamf/> </channels> </destination> 下面是完整的messagingconfigxml文件供您参考 <?xml version= encoding=UTF?> <service id=messageservice class=ssagingservicesMessageService messageTypes=ssagesAsyncMessage> <adapters> <adapterdefinition id=actionscript class=ssagingadaptersActionScriptAdapter default=true /> </adapters> <destination id=simpletopic> <properties> <network> <sessiontimeout></sessiontimeout> <throttleinbound policy=ERROR maxfrequency=/> <throttleoutbound policy=REPLACE maxfrequency=/> </network> <server> <durable>false</durable> </server> </properties> <channels> <channel ref=mypollingamf/> </channels> </destination> </service> 创建服务器 现在我们可以创建运行应用程序的服务器 选择File→New→Other 选择Server→Server 选择Next 选择Apache→Tomcat v 选择Next 图 选择运行应用程序的服务器 指定Tomcat的安装位置并选择要使用的JRE选择Next 图 指定Tomcat服务器位置 选择Available项目列表中的flex_server 选择Add将项目添加到Configured项目列表 选择Finish 图 添加项目到 Configured项目列表 客户端应用程序 现在我们将创建消息传递客户端应用程序 创建新的Flex Client Project选择File→New→Project并指定Flex Project然后选择Next 图 在BEA Workshop中创建Flex Project 指定Flex Data Services选中Compile application on the server when the page is viewed选项然后选择Next 图 配置 Flex Client应用程序数据访问方式 更新服务器属性(Root folderRoot URL和Context root)然后选择Next 图 配置Flex Server信息 指定flex_client作为Project名称然后选择Finish 图 编辑project名称并结束 现在我们需要创建客户端更新项目创建的flex_clientmxml页面如下所示 <?xml version= encoding=iso?> <mx:Application xmlns:mx= xmlns=* pageTitle=Flex Messaging Example Application creationComplete=mySubscribersubscribe()> <! Messaging Declarations > <mx:Producer id=myPublisher destination=simpletopic /> <mx:Consumer id=mySubscriber destination=simpletopic message=receiveMessage(event) /> <! UI Declarations > <mx:Panel title=Incoming Messages Panel> <mx:TextArea id=output backgroundColor=#eeeeee width= height= /> </mx:Panel> <mx:Panel title=Input Panel (type your text and click enter)> <mx:TextInput id=input width= enter=sendMessage() /> </mx:Panel> <! EventHandling Script > <mx:Script> <![CDATA[ import ssagingeventsMessageEvent; import ssagesAsyncMessage; private function sendMessage():void { var msg:AsyncMessage = new AsyncMessage(); msgbody = inputtext; myPublishersend(msg); inputtext = ; } private function receiveMessage(msgEvent:MessageEvent):void { var msg:AsyncMessage = AsyncMessage(ssage); outputtext += msgbody + \n; } ]]> </mx:Script> </mx:Application> flex_clientmxml中代码的作用 mx:Producer标记创建的类用于接收来自simpletopic队列的消息 mx:Consumer标记创建的类用于创建simpletopic队列中的消息 从收信方收到新的消息时应用程序将调用receiveMesssage(事件)方法该功能将显示在Incoming Messages Panel的输出中 提交输入消息时应用程序将调用sendMessage()方法每一次被调用时它都会为队列创建一个新的消息方法是通过使用我们创建的mx:Producer发送该消息至服务器上的simpletopic队列 Panel标记创建一个带有输入框和显示区的简单用户接口 运行应用程序 现在来运行这个应用程序!启动服务器 在JEE Perspective中右键单击底部面板中的Tomcat服务器然后选择Start 图 启动Tomcat服务器 在Flex项目中右键单击flex_clientmxml文件然后选择Run As→Flex Application 图 运行flex_clientmxml页 使用应用程序 要使用应用程序请在Input Panel中输入您的消息文本然后按下回车键这样消息将被发送到flex_server应用程序中的simpletopic收信方 Consumer对象mySubscriber将从simpletopic收信方接收消息然后调用receiveMessage函数在Incoming Messages Panel中显示消息 图 Flex Messaging应用程序 结束语 您已经构建了一个基本的Flex消息传递应用程序它可以使用BEA Workshop Studio收发消息DS可以提供消息传递功能并且非常灵活它允许您用极少的代码或配置实现异步应用程序通信除了能够使用DS特定的消息传递之外DS还支持Flex应用程序参与JMS消息传递使异构系统的集成更加方便 自此您可以参考 文档 学习更高级的Flex消息传递配置和使用方法 参考资料 观看视频它演示了如何创建应用程序 Flex主页 Adobe Flex开发人员中心 使用BEA Workshop Studio和Java创建基于Flex的RIA关于Adobe Developer Connection的文章 Flex消息传递文档 BEA的Workshop StudioFlex微指令年月日之前有很大的折扣 原文出处mel |