使用 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
图 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
图 2. 从 DS 导入 flex.war 文件

配置 Flex 服务器和应用程序

接下来,您将配置 flex_server 应用程序进行消息传递。设置消息传递服务器端应用程序包括配置消息通道、端点、目标和适配器。

  1. 编辑 services-config.xml 文件。编辑 <services> 部分中的 server-includes 代码,只在配置中包括 messaging-config.xml
    <services> 
    
      <service-include file-path="messaging-config.xml" <//>        
    
    </services>
    
    
  2. 将以下内容添加到 <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>
    
    
  3. 编辑 messaging-config.xml 文件以配置 simple-topic 目标,Flex 客户端应用程序将引用它来收发消息。
    1. 更新打开的 service 标记,在 messageTypes 中包括 AsyncMessage 类。
    2. <service id="message-service" 
      
                  class="flex.messaging.services.MessageService"
      
                  messageTypes="flex.messaging.messages.AsyncMessage">
      
      </service>                        
      
      
    3. 创建该 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>
    
    

页面: 1, 2, 3

下一页 »