使用 BEA Workshop Studio 的 Flex 消息传递
作者:Jon Rose
01/29/2008
摘要
本教程演示如何使用 Flex 的 LiveCycle Data Services Express (DS) 消息传递功能在使用 BEA Workshop Studio (Flex bundle) 的 Flex 应用程序中实现“数据推送”。我的目标是开发一个小型 Flex 消息传递应用程序来发送和接收消息。
Flex 消息传递简介
本教程演示如何在 Flex 应用程序中使用消息传递。“消息传递”可算是相当普通的一个词。但请看 Flex文档是怎样定义这个术语的:
消息传递系统允许各应用程序进行对等异步通信,方法是通过消息服务往返传递被称作消息的数据包。消息通常由消息头和消息主体组成。消息头包含标识符和路由信息。消息主体包含应用程序数据。
因此,我们将构建这样一个应用程序,它允许通过 DS 消息服务向我们的 Flex 客户端应用程序异步发送数据。以下是一些主要的 DS 消息传递术语:
- 生产者:生产者是创建消息并将它发送到目标的应用程序。
- 使用者:使用者是从目标接收消息的应用程序。
- 消息目标:目标是用于消息发布-订阅和点对点消息传递的资源。
- 消息通道:通到是连接生产者、使用者与目标的方法(使用端点)。
- 消息端点:端点是负责消息数据编码和解码的接口。
- 消息适配器:适配器定义消息传递实现。其选项包括使用 DS 或外部 Java 消息服务 (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:创建和接收消息的客户端代码
图 1. 已完成的应用程序中的消息传递文件一览(单击查看大图)
现在,我将介绍如何创建应用程序。
构建应用程序的分步指导
以下部分将介绍如何创建 Flex 项目、配置应用程序,以及部署和运行应用程序。
设置 IDE
首先,下载和安装“软件要求”部分中提到的软件,并启动 BEA Workshop Studio。接下来,通过导入 flex.war 文件来创建新的 Flex 服务器项目。(该文件随 DS 安装;DS 的下载链接请参见“软件要求”部分。)
现在,选择 File→Import,然后选择 WAR file 选项。指定随 DS 提供的 flex.war 文件的位置(在 Windows 中默认位置是: C:\lcds\flex.war)。将 Web 项目名称指定为 flex_server。
最后,选择 Finish。
图 2. 从 DS 导入 flex.war 文件
配置 Flex 服务器和应用程序
接下来,您将配置 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 客户端应用程序将引用它来收发消息。
- 更新打开的 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>