使用BEA Workshop Studio的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 5.5
  应用程序概述

  在本教程中,您将学习如何创建简单的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消息传递配置和使用方法。

  参考资料

观看视频:它演示了如何创建应用程序
Flex.org:Flex主页
Adobe Flex开发人员中心
使用BEA Workshop Studio和Java创建基于Flex的RIA:关于Adobe Developer Connection的文章
Flex消息传递文档
BEA的Workshop Studio:Flex微指令:2008年1月31日之前有很大的折扣

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值