首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Blazeds集成Flex跟Java

2012-07-05 
Blazeds集成Flex和Java????? BlazeDS中包含了AMF 的 Java 实现,可以用来与服务器端的Java对象远程交互,也

Blazeds集成Flex和Java

????? BlazeDS中包含了AMF 的 Java 实现,可以用来与服务器端的Java对象远程交互,也可以用来在客户端之间传递消息。开发人员可以借助 BlazeDS 的远程技术简单地调用 POJO、Spring 服务或EJB方法。开发人员可以通过其消息系统从客户端向服务器端发送消息,当然也可从服务器端向客户端发送消息。

  BlazeDS 也可以与其他一些消息系统结合使用,比如JMS、ActiveMQ。由于其远程技术与消息系统采用的方式是在 HTTP 协议上传输 AMF 数据,BlazeDS 因此在性能上拥有很大优势,同时也避免了额外的数据抽象层的处理工作。BlazeDS 在很多基于 Java 的应用服务器环境下都能正常工作,这些服务器包括 Tomcat、WebSphere、WebLogic、JBoss 以及 ColdFusion。此外,无论是 web(在 Flash Player 中运行)还是桌面(在Adobe AIR下运行)的 Flex 应用程序中,BlazeDS 的使用都很简单。

????? 一个BlazeDS 应用包括两个部分:一个客户端应用程序和一个服务端的J2EE 程序。

?

?????

????? 【客户端程序】

  BlazeDS 客户端程序通常是一个Flex 或AIR 应用程序。Flex 和AIR 程序使用Flex 组件和BlazeDS 服务器通讯,包括RemoteObject,HTTPService,WebService,Producer 和Consumer组件,HTTPService, WebService,,Producer 和Consumer 组件都是Flex SDK 的一部分。

  尽管通常使用Flex 或AIR 开发客户端程序,但也可联合使用Flex,HTML,JavaScript技术。或者用HTML 和JavaScript 通过Ajax client library 与BlazeDS 通讯。

  【BlazeDS 服务端】

  BlazeDS 服务端运行在J2EE 应用服务器上的WEB 应用中。BlazeDS 包含三个预定义的web 应用,可以作为开发自定义应用的基础。

  为现存的J2EE web 应用配置BlazeDS 支持,执行以下步骤:

  • 把BlazeDS 及其依赖的jar 包拷贝到WEB-INF/lib 下。
  • 修改WEB-INF/flex 目录下有关BlazeDS的配置文件。
  • 在WEB-INF/web.xml 文件中定义MessageBrokerServlet 和一个session listener。

    ?

    ????? BlazeDS 核心功能包括RPC Services 和Messaging Service。

    ?

    ?

    ?

    ?

    ?

    下面开始一个简单的例子:

    ?

    ????? 1.在Eclipse中新建一个Web工程"FlexAndJava_Server"。新建包并命名为"com.hebut.java",然后新建一个HelloWorld类。

    HelloWorld.Java的内容如下所示:

    package com.hebut.java; public class HelloWorld {     public String getInfo(String info)    {        return "服务器:"+info;    }}

    ?

    ?

    ????? HelloWorld类的内容很简单,通过定义一个getInfo方法接收外部参数,返回字符串"服务器:"与外部参数连接的字符串。Flex客户端调用这个方法获得返回结果。

      2.解压缩"blazeds.war"文件,将解压后的WEN-INF目录复制到Web工程的WebRoot目录下(覆盖原来的WEB-INF目录)。以记事本格式打开"WebRoot\WEB-INF\flex"目录下的"remoting-config.xml"文件,在文件中定义一个远程服务,这样Flex应用程序才能调用这个远程服务。

    ????? 在<services>节点下加入<destination>元素,定义一个服务目标,程序如下所示:

    <?xml version="1.0" encoding="UTF-8"?><service id="remoting-service"name="code"><fx:Declarations>    <!-- 将非可视元素(例如服务、值对象)放在此处 -->    <s:RemoteObject id="组件ID" destination="服务目标" 属性="属性值" >    </s:RemoteObject></fx:Declarations>

    ?

    ????? destination属性指定服务的目标,该属性的值一定要和Java工程的"remoting-config.xml"中的destination的id一样(安装BlazeDS后添加的那一段)。

    ??? (1)endpoint:可使开发人员在编译或以编程方式创建ChannelSet时快速指定RemoteObject目标的端点,而无须引用服务配置文件。在实现Java平台下的AMF-RPC应用时,该属性的值指定的格式为"/Java工程名/messagebroker/amf"。

    ??? (2)concurrency:指示如何处理对同一服务的多个调用的值,默认值为multiple,表示不取消现有请求,由开发人员负责通过管理事件流确保返回数据的一致性。其他有效值有single(每次只允许在此方法中发出一个请求);last(发出请求可导致客户端忽略任何当前未处理请求的结果或错误)。

    ??? (3)requestTimeout:提供对已发送消息的请求超时(以秒为单位)的访问。

    ??? (4) showBusyCursor:如果值为true,则在执行服务时显示忙状态光标,默认值为false。

    ?

    ????? 3.新建一个Flex项目,名称为"FlexAndJava_Client"。单击"下一步"按钮设置应用程序类型为Java,程序的输出目录为Web应用程序目录,"根文件夹"设为Tomcat服务器下的文件夹。

    Flex程序代码如下:

    <?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"             xmlns:s="library://ns.adobe.com/flex/spark"             xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"             minHeight="600">       <fx:Script>        <![CDATA[            import mx.controls.Alert;            import mx.rpc.events.FaultEvent;            import mx.rpc.events.ResultEvent;                       protected function btnSend_clickHandler(event:MouseEvent):void            {                agent.getInfo(txtSend.text);            }                       protected function agent_resultHandler(event:ResultEvent):void            {                txtReceive.text=event.result as String;            }                       protected function agent_faultHandler(event:FaultEvent):void            {                Alert.show("失败信息"+event.message.toString());            }                       protected function btnClear_clickHandler(event:MouseEvent):void            {                txtSend.text="";                txtReceive.text="";            }                   ]]>    </fx:Script>       <fx:Declarations>        <!-- 将非可视元素(例如服务、值对象)放在此处 -->        <mx:RemoteObject id="agent" destination="HelloWorld"                         result="agent_resultHandler(event)"                         fault="agent_faultHandler(event)">        </mx:RemoteObject>    </fx:Declarations>    <s:Panel x="56" y="129" width="250" height="200" title="客户发送端">        <s:Button id="btnSend" x="146" y="129" label="发送"                click="btnSend_clickHandler(event)"/>        <s:TextArea id="txtSend" x="8" y="11" width="232" height="106"/>        <s:Button id="btnClear" x="37" y="130" label="清空"                click="btnClear_clickHandler(event)"/>    </s:Panel>    <s:Panel x="390" y="129" width="250" height="200" title="客户接收端">        <s:TextArea id="txtReceive" x="10" y="10" width="228"/>    </s:Panel></s:Application>

    ?

    ?

热点排行