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服务端的端点通信,将请求送到目的地。端点和通道是相互映射的。
? ? 下面的例子在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)的,因为这些消息分别在客户端和服务端序列化和反序列化。
服务就是一个包含J2EE Web应用程序的应用。Flex客户端通过通道发送请求到Blazeds服务的端点上。从端点开始,请求经过一些列的Java对象包括消息传播对象、服务对象、目标对象以及最终的适配器对象。适配器将请求实现为本地的、或者contacting a backend system或者远程服务例如JMS服务。下面展示了Blazeds服务体系?? ? ?
? ? <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> ?
?
代理服务) and HTTPProxyDestination(HTTP代理目的地) ??????? 适配器和”随机”的编译是消息处理链中的最后一环。当一个消息抵达正确的目的地以后,它就会被传递给适配器被实现成本地的或者后台系统或者一个远程服务(JMS)。Blazeds使用如下的方式在适配器和目的地间映射 ??????? RemotingDestination uses JavaAdapter ??????? HTTPProxyDestination uses HTTPProxyAdapter or SOAPAdapter ??????? MessageDestination uses ActionScriptAdapter or JMSAdapter (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |