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组件会尝试连接第一条道路,不过这并不能保证一定能连接,有可能使用的还是道路中后面的那几条。它会搜寻通道中的道路知道连接上或者已经没有连接。
? ? 下面的例子在services-config.xml文件中创建了一个AMFChannel通道,与服务器上的AMFEndpoint通信: ? <channels> ? channel-definition?id="samples-amf"?class="mx.messaging.channels.AMFChannel"> endpoint?url="http:// servername:8400/myapp/messagebroker/amf"?"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组件和Blazeds服务。例如消息生产者发送消息给消息消费者组件。? ????????其他情况下,你不可以直接写代码构造和发送消息。例如,你只是使用远程组件(RemoteObject)调用远程方法远。远程组件创建一个远程消息封装给远程对象调用。返回的消息封装在一个ResultEvent中。? 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> ?
?
??????? 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? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |