`

BlazeDS的架构和工作原理简介

 
阅读更多

 

参考:http://hi.baidu.com/whlxjq520/blog/item/f040771082d9abd2a7ef3f8d.html

 

 

最近在学习java+flex+blazeDS的架构,所以转帖一篇以备后面的学习。

 

一、先来简单的看blazeDS.

1、blazeds是一个web应用框架。无非就是servlet,jsp和filter,无他。

2、一个web应用框架的基础还是servlet和过滤器。所以它里面有个MessageBrokerServlet。这个servlet的用处和其他框架,如struts,spring,或者xwork里的新增配置文件(struts.xml,application.xml)所起到的作用类似,匹配url,决定将请求发往给哪个服务。

3、blazeds的名词解释。

我要装修房子,知道张三是做装修的,有三种方式(电子邮件,电话,快递)都可以联系,他可以提供多种服务,如墙漆,家具,地板,灯具。

1)channels通道,就是三种联系方式。

2)endpoints端点,就是三种联系方式的具体内容,每种联系方式可以有多个。如电话,他装有三个12365444,451325648,45668,当然也可以仅有一个。我第一个打不通就打地二个,第二个打不通就打第三个。

3)serive,是张三的家务事,他可以安排电话专门负责接墙漆的单子,email接家具的单子。

4)destination目的。我们需要什么墙漆,绿色的,红色的等等具体的服务内容。

6)adapter适配器。这是张三的家事了,他知道谁谁嘴巴子甜,就让他接电话,哪个喜欢在网上漫游就让他收发邮件。

 

4、张三的所有的服务在他内部是通过services-config.xml等几个文件安排的,对外他可以发布自己的destination,endpoints和channels到报纸,杂志,网络,或者其它公共信息载体,也可以仅仅发给自己的私密好友。

 

二、Blazeds体系结构 

        
一个Blazeds应用包含了一个运行在浏览器或者Adobe AIR的客户端应用并且和J2EE应用服务端通信。客户端可以是Flex也可以是结合Flex、HTML/JavaScript的应用程序。

 

整个体系主要包括通道、端点、消息、服务、目的地、适配器等,把这些搞懂也就差不多了。通道使得组件能够和Blazeds服务端的端点通信,将请求送到目的地端点和通道是相互映射的

1.
Blazeds客户端体系结构 

       Blazeds
使用一个基于消息的框架与服务端结合。这个框架使用通道封装了Flex程序和Blazeds服务端之间的连接。下面是Blazeds客户端的结构 
 

       以下Flex组件和Blazeds服务端结合: 
       . RemoteObject 
       • HTTPService 
       • WebService 
       • Producer 
       • Consumer 
       所有的这些组件都包含在Flex SDK和rpc.swc组件库中。 

       尽管RemoteObject、Producer、Consumer包含在Flex SDK中,他们仍然需要一个服务端来反编译出他们发送的消息。Blazeds和LiveCycle Data Services ES服务就是两个这样的服务端。当然Flex应用程序可以不使用Blazeds这种中间层而是直接使用HTTP Service或者Web Service来调用远程服务 

2.0 
通道和通道设置 

        Flex
组件使用通道和Blazeds服务端交互。一条通道包含多条道路,他们的基础功能就是提供Flex客户端和Blazeds服务端的交流。通道中的道路都是按性能排序的。Flex组件会尝试连接第一条道路,不过这并不能保证一定能连接,有可能使用的还是道路中后面的那几条。它会搜寻通道中的道路知道连接上或者已经没有连接。


        
通道封装了Flex组件和Blazeds服务端之间的连接方式。概念上来说,通道是Flex组件下面的组件,他们处理组件和Blazeds服务端之间的交互。他们和Blazeds服务端上相应的端点通信。

 
        Flex
客户端使用不同的通道类型。例如AMFChannel和HTTPChannel。通道选择有很多的因素,包括你的程序构建的类型。如果你想要使用无二进制压缩的方式传输,可以使用HTTPChannel,它使用AMFX(AMF in XML),一种无二进制压缩的方式。

 

下面的例子在services-config.xml文件中创建了一个AMFChannel通道,与服务器上的AMFEndpoint通信:

 

<channels>

 

<channel-definition id="samples-amf" class="mx.messaging.channels.AMFChannel">

<endpoint url="http:// servername:8400/myapp/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>

        </channel-definition>

</channels>

 

    2.1为flex组件指定通道

 

如果你通过-services选项指定services-config.xml文件来编译MXML文件,那么组件(RemoteObject、HTTPService等等)会自动指定一个或者多个通道配置实例。

   

不过如果你没有加这个编译参数,或者想自己覆写编译项的行为,那么你可以在MXML或者AS文件中为组件指定通道。当你想要为你的组件使用动态目的地的时候,整个应用级别的默认通道非常重要。

 

通过加上-services编译参数,可以包含所有的客户端连接服务器需要的信息,但是一下情况你可能会选择手动设置通道:

 

1)      你不想硬编码端点路径在你编译的客户端swf文件。

2)      你想要动态的创建目的地(目的地不在services-config.xml文件内)。

3)      你想要在客户端代码控制组件使用通道的顺序。

 

下面的代码展示了如何在MXML文件中定义通道:

 

<RemoteObject id="ro" destination="Dest">

<mx:channelSet>

<mx:ChannelSet>

 

<mx:channels>

<mx:AMFChannel id="myAmf"

 

道MLcationonfig.xmluri="http://myserver:2000/myapp/messagebroker/amf"/>

</mx:channels>

 

</mx:ChannelSet>

</mx:channelSet>

</RemoteObject>

 

下面的代码则是AS文件:

 

private function run():void {

ro = new RemoteObject();

var cs:ChannelSet = new ChannelSet();

cs.addChannel(new AMFChannel("myAmf",

"http://servname:2000/eqa/messagebroker/amf"));

ro.destination = "Dest";

ro.channelSet = cs;

}

 

注意:当你在客户端代码创建通道时,还是必须在services-config.xml文件里配置一个指定端点的通道。否则,messagebroker就不能传递客户端请求到端点。

 

   2.2  为目的地指定通道和端点

 

   如果大多数的目的地使用使用相同的通道,你可以指定应用级别的默认通道,比如:

 

    <services-config ...>

...

<default-channels>

<channel ref="my-http"/>

<channel ref="my-amf"/>s

</default-channels>

...

 

    也可以单独指定通道,比如:

 

   <destination id="sampleVerbose">

 

<channels>

<channel ref="my-secure-amf"/>

</channels>

...

</destination>

 

 

    2.3 选择端点

 

      

       可以参考文档或者看blazeds通道、端点配置

 

 

 

消息 

 

 

 

 


       

Flex客户端组件和Blazeds服务端都是基于消息进行交流的,Flex组件使用几种消息和他们对应的服务交流。所有的消息有基于客户端的(ActionScript)和基于服务端(Java)的,因为这些消息分别在客户端和服务端序列化和反序列化。 
        一些消息,比如应答消息和命令消息,使用不同的Flex组件和Blazeds服务。其他的消息类型使用特殊的Flex组件和Blazeds服务。例如消息生产者发送消息给消息消费者组件。
 
        其他情况下,你不可以直接写代码构造和发送消息。例如,你只是使用远程组件(RemoteObject)调用远程方法远。远程组件创建一个远程消息封装给远程对象调用。返回的消息封装在一个ResultEvent中。
 

Blazeds
服务端体系 


         Blazeds

服务就是一个包含J2EE Web应用程序的应用。Flex客户端通过通道发送请求到Blazeds服务的端点上。从端点开始,请求经过一些列的Java对象包括消息传播对象、服务对象、目标对象以及最终的适配器对象。适配器将请求实现为本地的、或者contacting a backend system或者远程服务例如JMS服务。下面展示了Blazeds服务体系  



端点 

 


        基于服务的端点是通过MessageBrokerServlet启动的,需要在web.xml中配置的。除此之外,HTTP session监听器也要加入到web程序的web.xml中。

 

 

<servlet>

    <servlet-name>MessageBrokerServlet</servlet-name>

      <display-name>MessageBrokerServlet</display-name>

      <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>

<init-param>

        <param-name>services.configuration.file</param-name>

        <param-value>/WEB-INF/flex/services-config.xml</param-value>

  </init-param>

      <load-on-startup>1</load-on-startup>

</servlet>

 


        
客户端程序使用通道和Blazeds端点通信。端点和通道是相互映射的,保持端点和通道使用相同的消息格式是很重要的。如果通道使用AMF消息格式,比如AMFChannel,端点也必须AMF消息格式与之匹配,比如AMFEndpoint。


        
你可以在WEB-INF/flex目录下的services-config.xml配置端点。 


MessageBroker 

         MessageBroker是为了将消息路由给服务端,是Blazeds在服务端的核心。在端点经过初步的处理请求并且将提炼出来的消息传递给MessageBroker。MessageBroker查看消息的目的地,然后将他传递过去。如果目的地有安全现在,他就在传递之前运行检查证明。 


服务和目的地 

        服务和目的地是消息在Blazeds服务中传递处理的下一站。系统包括4个服务以及他们对应的目的地: 

        RemotingService(远程服务) 和 RemotingDestination(远程目的地)

 

 


        HTPProxyService(HTTP

代理服务) and HTTPProxyDestination(HTTP代理目的地) 
        MessageService(消息服务) and MessageDestination(消息目的地) 


        服务是消息传递过来的目标,可以将目的地想象成服务的实例。例如,远程组件和远程服务通信中,你必须指定一个远程目标,例如你要调用的类的方法。这种客户端和服务端的映射是按照下面来实现的: 

        HTTPService 和 WebService HTTPProxyService/HTTPProxyDestination通信 

        RemoteObject和 RemotingService/RemotingDestination通信 

        Producer、Consumer和 MessageService/MessageDestination通信 

        你可以在sevices-confi.xml中配置服务和目的地,但是最好是将他们放进不同的文件: 
                RemotingService配置在remoting-confi.xml 
                HTTPProxyService配置在proxy-config.xml 
                MessageService配置在messaging-config.xml 


        
适配器和随机的编译是消息处理链中的最后一环。当一个消息抵达正确的目的地以后,它就会被传递给适配器被实现成本地的或者后台系统或者一个远程服务(JMS)Blazeds使用如下的方式在适配器和目的地间映射 

        RemotingDestination uses JavaAdapter 
        HTTPProxyDestination uses HTTPProxyAdapter or SOAPAdapter 
        MessageDestination uses ActionScriptAdapter or JMSAdapter 

分享到:
评论

相关推荐

    BlazeDS架构分析

    - **Security**: 安全性是BlazeDS架构的重要组成部分,可以通过配置实现身份验证和授权。 **2. 配置文件解析** - **services-config.xml**: 此文件定义了BlazeDS的服务配置,包括Remoting服务和Messaging服务的...

    FLEX——blazeDS原理.pdf

    #### 二、BlazeDS工作原理详解 1. **通道(Channel)选择** - **HTTPChannel**:适用于传输非二进制数据,例如AMF/XML等格式的数据。这种通道通常用于HTTP请求/响应模型中。 - **AMFChannel**:专门用于传输AMF...

    Professional BlazeDS

    1. **BlazeDS架构**:介绍BlazeDS的基本组成,包括Remoting服务、MessageBrokering服务以及LiveCycle Data Services扩展。 2. **配置与部署**:讲解如何在Java EE环境中配置和部署BlazeDS,包括Spring集成、Tomcat...

    Flex+blazeds+java发布/订阅聊天程序(带java工程)

    下面将详细阐述这个系统的各个组成部分和工作原理。 **Flex:** Flex是Adobe开发的一种用于构建富互联网应用(RIA)的开源框架,主要使用ActionScript编程语言和MXML标记语言。在本聊天程序中,Flex负责创建交互性...

    BlazeDS开发者指南.rar

    了解AMF的工作原理以及如何在BlazeDS中配置AMF通道至关重要。 6. **BlazeDS与Spring的整合** BlazeDS可以与Spring框架无缝集成,利用Spring的依赖注入和事务管理功能,提高应用的可维护性和灵活性。 7. **错误...

    BlazeDS实现flex与java通信

    在本文中,我们将深入探讨如何使用BlazeDS实现Flex与Java之间的通信,以及其核心功能和工作原理。 1. **Remoting服务** BlazeDS的Remoting服务允许Flex客户端直接调用Java后端的远程方法,仿佛这些方法是本地的。...

    BlazeDS开发者指南

    #### 三、BlazeDS架构 - **客户端架构**:详细介绍客户端如何与BlazeDS交互,包括FlexClient、MessageClient等组件的作用。 - **服务器端架构**:深入探讨服务器端组件的设计和实现,如如何处理客户端请求及响应。 ...

    BlazeDS 数据通信技术

    为了更好地理解BlazeDS的工作原理,我们需要深入探讨其体系结构的关键组成部分。 ##### 1. Blazeds客户端体系结构 BlazeDS采用基于消息的框架与服务器端进行交互。这一框架使用通道来封装Flex应用程序与BlazeDS...

    Maven构建全栈式Flex、BlazeDS和Spring集成解决方案–第一部分_创建Maven_Flex模块

    ### Maven构建全栈式Flex、BlazeDS和Spring集成解决方案 #### 一、概述 随着富互联网应用(RIA)技术的日益成熟,如何将类似Adobe Flex这样的RIA应用与稳健的服务器端技术进行集成成为了关键问题。Java开发者常用...

    flex+BlazeDS整合j2ee开发环境的配置过程

    ### flex+BlazeDS整合j2ee开发环境的配置过程详解 #### 技术背景与原理 Flex 和 BlazeDS 的整合是实现富...对于开发者而言,这种整合方式提供了灵活的架构和高效的开发手段,是开发高质量RIA应用的重要工具之一。

    Spring攻略(第二版 中文高清版).part2

    1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 ...

    Spring攻略(第二版 中文高清版).part1

    1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 ...

    Flex体系架构剖析

    本篇文章将深入剖析Flex体系架构的各个核心组成部分,帮助读者理解其工作原理。 一、Flex SDK Flex SDK是Flex开发的基础,它包含了编译Flex应用所需的工具和库。其中最重要的组件是MXML编译器,它可以将MXML和...

    Blazds三个war包

    通过运行和分析这些示例,开发者可以深入理解BlazDS的工作原理,从而更好地利用其特性来构建实际项目。 在实际应用中,BlazDS常用于企业级的Flex项目,因为它提供了高效的数据同步机制,使得Flex客户端可以实时获取...

    Flex教程(整合Flex+BlazeDS+Spring+iBatis+Cairngorm+pureMVC).doc

    2. **维护成本高**:服务器和客户端均需维护,增加了技术支持的工作量。 ##### B/S架构的缺点: 1. **界面限制**:受限于HTML技术,难以提供丰富多样的客户端界面。 2. **浏览器兼容性**:不同浏览器之间的兼容性...

    Flex企业应用开发实战.rar

    再接着详细讲解了BlazeDS框架的使用方法和工作原理,并通过迭代的方式完整地演示一个真实的Flex企业级应用的开发全过程,实战性极强;最后重点探讨Flex应用性能优化等方面的高级知识。值得一提的是,本书公开了作者...

    FLEX企业开放实战

    再接着详细讲解了BlazeDS框架的使用方法和工作原理,并通过迭代的方式完整地演示一个真实的Flex企业级应用的开发全过程,实战性极强;最后重点探讨Flex应用性能优化等方面的高级知识。值得一提的是,本书公开了作者...

Global site tag (gtag.js) - Google Analytics