BlazeDS体系结构(一)

Blazeds体系结构

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



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

1.Blazeds客户端体系结构

       Blazeds使用一个基于消息的框架与服务端结合。这个框架使用通道封装了Flex程序和Blazeds服务端之间的连接。下面是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"



uri="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通道、端点配置





你可能感兴趣的:(应用服务器,xml,webservice,Flex,AIR)