跳到导航
dev2dev.bea.com.cn
首页 资源中心 dev2dev学堂 在线技术论坛 专家Blog User Group CodeShare
dev2dev 首页 > 资源中心 > 技术文章
使用BEA Workshop Studio的Flex消息传递

时间:2008-04-24
作者:Jon Rose
浏览次数:
本文关键字:adobe flex livecycle data services bea workshop BEA Workshop Product Family 生命周期
数据服务
数据推送,消息传递
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章

  摘要

  本教程演示了如何使用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特性。本教程将介绍实现一个非常基本的消息传递应用程序的设置和配置。

  软件需求

  本教程使用下列软件产品构建和运行消息传递应用程序:

  应用程序概述

  在本教程中,您将学习如何创建简单的Flex生产者和使用者客户端。Flex用户接口运行于Flash Player客户端,而DS是服务器端网关,向Flex客户端应用程序发送消息并接收来自Flex客户端应用程序的消息。

  多个Flex客户端可以发送和接收来自同一消息队列的消息。生产者用户接口将允许您向收信方发送消息,而使用者的用户接口将接收创建的消息;因此,当不含任何用户轮询代码的消息显示在屏幕上时,这就演示了DS的“数据推送”特性。

  图1给出了源文件一览。具体来说,我将重点关注:

  • services-config.xml:定义messaging-config.xml文件用法和通道定义
  • messaging-config.xml:定义收信方和适配器
  • flex_client.mxml:创建和接收消息的客户端代码

  Figure1

  图1. 已完成的应用程序中的消息传递文件一览(单击放大图片)

  现在,我将介绍如何创建应用程序。

  构建应用程序的步骤

  以下内容将介绍Flex项目的创建和应用程序的配置,以及应用程序的部署和运行。

  设置IDE

  首先,下载和安装软件需求一节中提到的软件,并启动BEA Workshop Studio。接着,导入flex.war文件,并创建新的Flex Server项目。(此文件随DS安装;DS的下载链接请参见软件需求一节。)

  现在,选择File→Import,然后选择WAR文件选项。指定随DS提供的flex.war文件的位置(在windows中默认位置是:C:\lcds\flex.war)。将Web项目名称指定为flex_server。

  最后,选择Finish。

  Figure2

  图2. 从DS导入flex.war文件

  配置Flex Server和应用程序

  接下来,我们将配置flex_server消息传递应用程序。设置消息传递服务器端应用程序包括消息通道、端点、收信方和适配器的配置。

  • 编辑services-config.xml文件。编辑<services>部分中的server-includes代码,只在配置中包括messaging-config.xml。
<services> 
<service-include file-path="messaging-config.xml" />
</services>
  • 将以下内容添加到<channel>部分。此处的配置目标是用于消息收发的消息端点。此处创建的my-polling-amf通道将提供给messaging-config.xml文件中配置的收信方使用。
<channel-definition  id="my-polling-amf"  class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling"
class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>true</polling-enabled>
<polling-interval-seconds>1</polling-interval-seconds>
</properties>
</channel-definition>

  下面是完整的services-config.xml文件,供您参考:

  <?xml version="1.0"  encoding="UTF-8"?> 
<services-config>
<services>
<service-include file-path="messaging-config.xml" />       
</services>

<channels>
<channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling"
class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>true</polling-enabled>
<polling-interval-seconds>1</polling-interval-seconds>
</properties>
</channel-definition>
</channels>

<logging>
<target class="flex.messaging.log.ConsoleTarget" 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>

</services-config>
  • 编辑messaging-config.xml文件以配置simple-topic收信方,Flex Client应用程序将会引用它进行收发消息。
  • 更新opening service标记,在messageTypes中包括AsyncMessage类。
  <service  id="message-service" 
class="flex.messaging.services.MessageService"
messageTypes="flex.messaging.messages.AsyncMessage">
</service>                                
  • 创建该simple-topic收信方作为一个非持久性主题,它将使用上述services-config.xml文件定义的my-polling-amf通道。这是将用来收发消息的消息队列。
  <destination  id="simple-topic">
<properties>
<network>
<session-timeout>0</session-timeout>
<throttle-inbound policy="ERROR" max-frequency="50"/>
<throttle-outbound policy="REPLACE" max-frequency="500"/>
</network>
<server>
<durable>false</durable>
</server>
</properties>
<channels>
<channel ref="my-polling-amf"/>
</channels>
</destination>

  下面是完整的messaging-config.xml文件,供您参考:

  <?xml version="1.0"  encoding="UTF-8"?>
<service id="message-service"
class="flex.messaging.services.MessageService"
messageTypes="flex.messaging.messages.AsyncMessage">

<adapters>
<adapter-definition id="actionscript"
class="flex.messaging.services.messaging.adapters.ActionScriptAdapter"
default="true" />
</adapters>

<destination id="simple-topic">
<properties>
<network>
<session-timeout>0</session-timeout>
<throttle-inbound policy="ERROR" max-frequency="50"/>
<throttle-outbound policy="REPLACE" max-frequency="500"/>
</network>
<server>
<durable>false</durable>
</server>
</properties>
<channels>
<channel ref="my-polling-amf"/>
</channels>
</destination>
</service>

  创建服务器

  现在我们可以创建运行应用程序的服务器:

  • 选择File→New→Other。
  • 选择Server→Server。
  • 选择Next。
  • 选择Apache→Tomcat v5.5。
  • 选择Next。

  Figure3

  图3. 选择运行应用程序的服务器

  • 指定Tomcat的安装位置,并选择要使用的JRE。选择Next。

  Figure4

  图4. 指定Tomcat服务器位置

  • 选择Available项目列表中的flex_server。
  • 选择Add将项目添加到Configured项目列表。
  • 选择Finish。

  Figure5

  图5. 添加项目到 Configured项目列表

  客户端应用程序

  现在,我们将创建消息传递客户端应用程序。

  • 创建新的Flex Client Project:选择File→New→Project并指定Flex Project,然后选择Next。

  Figure6

  图6. 在BEA Workshop中创建Flex Project

  • 指定Flex Data Services,选中“Compile application on the server when the page is viewed”选项,然后选择Next。

  Figure7

  图7. 配置 Flex Client应用程序数据访问方式

  • 更新服务器属性(Root folder、Root URL和Context root),然后选择Next。

  Figure8

  图8. 配置Flex Server信息

  • 指定flex_client作为Project名称,然后选择Finish。

  Figure9

  图9. 编辑project名称并结束。

  现在,我们需要创建客户端。更新项目创建的flex_client.mxml页面,如下所示:

<?xml version="1.0" encoding="iso-8859-1"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" 
    pageTitle="Flex Messaging - Example Application" 
    creationComplete="mySubscriber.subscribe()">
 
    <!-- Messaging Declarations -->
    <mx:Producer id="myPublisher" destination="simple-topic" />
    <mx:Consumer id="mySubscriber" destination="simple-topic"
message="receiveMessage(event)" />
 
    <!-- UI Declarations -->
    <mx:Panel title="Incoming Messages Panel">
        <mx:TextArea id="output" backgroundColor="#eeeeee" 
width="385" height="220" />
    </mx:Panel>
 
    <mx:Panel title="Input Panel (type your text and click enter)">
        <mx:TextInput id="input" width="385" enter="sendMessage()" />
    </mx:Panel>
 
    <!-- Event-Handling Script -->
 
    <mx:Script>
        <![CDATA[
 
        import mx.messaging.events.MessageEvent;
        import mx.messaging.messages.AsyncMessage;
 
        private function sendMessage():void
        {
            var msg:AsyncMessage = new AsyncMessage();
            msg.body = input.text;
            myPublisher.send(msg);
            input.text = "";
        }
 
        private function receiveMessage(msgEvent:MessageEvent):void
        {
            var msg:AsyncMessage = AsyncMessage(msgEvent.message);
            output.text += msg.body + "\n";
        }
 
        ]]>
    </mx:Script>
 
</mx:Application>

  flex_client.mxml中代码的作用:

  • mx:Producer标记创建的类用于接收来自simple-topic队列的消息。
  • mx:Consumer标记创建的类用于创建simple-topic队列中的消息。
  • 从收信方收到新的消息时,应用程序将调用receiveMesssage(事件)方法。该功能将显示在Incoming Messages Panel的输出中。
  • 提交输入消息时,应用程序将调用sendMessage()方法。每一次被调用时,它都会为队列创建一个新的消息,方法是通过使用我们创建的mx:Producer发送该消息至服务器上的simple-topic队列。
  • Panel标记创建一个带有输入框和显示区的简单用户接口。

  运行应用程序

  现在来运行这个应用程序!启动服务器:

  • 在J2EE Perspective中,右键单击底部面板中的Tomcat服务器,然后选择Start。

  Figure10

  图10. 启动Tomcat服务器

  • 在Flex项目中,右键单击flex_client.mxml文件,然后选择Run As→Flex Application。

  Figure11

  图11. 运行flex_client.mxml页

  使用应用程序

  要使用应用程序,请在Input Panel中输入您的消息文本,然后按下回车键。这样,消息将被发送到flex_server应用程序中的simple-topic收信方。

  Consumer对象mySubscriber将从simple-topic收信方接收消息,然后调用receiveMessage函数在Incoming Messages Panel中显示消息。

  Figure12

  图12. Flex Messaging应用程序

  源代码

  下载本文中的源代码:

  结束语

  您已经构建了一个基本的Flex消息传递应用程序,它可以使用BEA Workshop Studio收发消息。DS可以提供消息传递功能,并且非常灵活。它允许您用极少的代码或配置实现异步应用程序通信。除了能够使用DS特定的消息传递之外,DS还支持Flex应用程序参与JMS消息传递,使异构系统的集成更加方便。

  自此,您可以参考 文档 学习更高级的Flex消息传递配置和使用方法。

  参考资料

  原文出处:http://dev2dev.bea.com/pub/a/2008/01/flex-messaging-workshop.html

 作者简介
Jon Rose 是一位软件工程师,致力于使用Flex和Java构建企业应用程序。
dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分

   
相关产品