LCDS:基本概念(一)

LiveCycle Data Services ES architecture


LiveCycle Data Services ES client architecture


LCDS:基本概念(一)_第1张图片

Flex components

  • RemoteObject
  • HTTPService
  • WebService
  • Producer
  • Consumer
  • DataService

Channels and channel sets

Flex组件通过channel跟LCDS进行通信。一个channel set 包含是一个channel集合 。在该集合中越靠前的channel具有越高的连接优先级 。Flex组件会通过优先级依次连接服务器端直到通信成功。channels会同LCDS服务器上的相应的endpoints进行通信。

 

Flex客户端可以使用一些不同类型的channel,例如AMFChannel ,HTTPChannelRTMPChannel 。很多因素决定了channel的选择,例如你的应用程序的类型。如果你的系统只能允许HTTP协议的话,可以使用AMFChannel或者HTTPChannel,但不能使用RTMPChannel因为它使用RTMP协议。如果需求说明只能使用非二进制数据传播,那就只能用HTTPChannel了。

 

Messages

所有Flex客户端组件和LCDS服务器端的通信都以消息的形式被执行。Flex组件使用许多类型的消息同LCDS进行通信。但是所有的消息都具有ActionScript的实现形式和Java的实现形式因为这些消息不管在客户端还是服务器端都被序列化 (serialized)和反序列化 (deserialized)。

 

对象序列化 (Serializable)是指将对象转换为字节序列 的过程,而反序列化则是根据字节序列恢复对象的过程,以便于在网络中传递对象http://zhupan.iteye.com/blog/26447

 

AcknowledgeMessageCommandMessage 这种类型的消息主要用于在Flex组件和LCDS服务器端两边进行互相传递的。还有一些消息是专门用于Flex端或Server端的。例如,Producer组件发送一个消息给订阅者Consumer组件,你可以创建一个AsyncMessage 类型的消息,然后传递给Producer组件的send()方法。

 

也有别的情况,你都不需要构造和传递消息。例如,你只需要在Flex端使用RemoteObject组件来调用一个远程方法。RemoteObject组件创建了一个封装了RemoteObject调用的RemotingMessage 。然后从服务器端接收一个AcknowledgeMessage。AcknowledgeMessage被封装在Flex程序的ResultEvent对象中。

 

有时候你必须创建一个消息发送到服务器端。例如,你可以创建一个AsyncMessage并且传递给一个Producer,通过Producer发送消息。

 

LCDS有两种发送/接收信息的模式:“请求/应答(request/reply) ”模式和“发布/订阅(publish/subscribe) ”模式。RemoteObject,HTTPService和WebService使用的是前者;Producer和Consumer使用的后者。

 

LiveCycle Data Services ES server architecture

LCDS是一套J2EEweb应用程序 的组合,是一个可扩展性很高的网络socket服务器(network socket server) 。Flex客户端向channel发出的请求会被路由到LCDS中的一个端点(endpoint) 。该请求会经历一个Java对象链 ,分别是MessageBroker objecta service objecta destination object ,最后是an adapter objectadapter 会在本地完成这个请求服务 ,或者通过后台系统,或者通过远程服务器完成,例如JMS(Java Message Service)。


LCDS:基本概念(一)_第2张图片

Endpoints

LCDS有两种类型的endpoints:servlet-based endpointsNIO-based endpoints后者 代表Java New Input/Output前者 内置于J2EE servlet container ,所以servlet会为endpoints处理I/O和HTTP会话(sessions)。MessageBrokerServlet 引导Servlet-based endpoints,在web.xml 里有相关配置

<!-- MessageBroker Servlet -->
<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>

 另外,LCDS里还有HTTP session 属性并且绑定了侦听,也在web.xml 文件里

<!-- Http Flex Session attribute and binding listener support -->
<listener>
    <listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>

 

NIO-based endpoints可以提供更为显著的可扩展性 因为它们没有被限制为一个连接一个线程one thread per connection )并且每个 线程可以处理多个I/Os

 

Flex客户端通过channels 同LCDS的endpoints 进行通信。在客户端的channels和服务器端的endpoints之间有一个映射 。而且这两者必须使用相匹配的消息格式 (message format)。下面代码说明了该映射和同类型(AMF )的消息格式。

<channel-definition id="my-amf-poll" class="mx.messaging.channels.AMFChannel">
	<endpoint
		url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpoll"
		class="flex.messaging.endpoints.AMFEndpoint"/>
	<properties>
		<polling-enabled>true</polling-enabled>
		<polling-interval-seconds>1</polling-interval-seconds>
	</properties>
</channel-definition>
 

MessageBroker

MessageBroker负责路由消息到服务器端,它是LCDS的核心 (at the core of)。在endpoint开始处理请求的时候,endpoint 会从请求中提取出消息传给MessageBroker ,MessageBroker查询 消息的目的地 (message's destination)然后传递给对应的service 。如果目的地因为安全原因而被限制的话,MessageBroker会在传递消息过程中运行认证和授权程序(authentication and authorization checks)。


Services and destinations

消息处理链 (the message processing chain )下面就是Services和destinations。

共有四种services和对应的destinations:

  • RemotingService 和 RemotingDestination
  • HTPProxyService 和 HTTPProxyDestination
  • MessageService 和 MessageDestination
  • DataService 和 DataDestination

services 是Flex组件消息的目标 。而destinations 可以看成是一个service的实例 。例如一个RemoteObject同RemotingService通信:在RemoteObject中,你必须指定一个destination的id属性,就是你要引用的方法的地址。Flex客户端组件和LCDS的services之间的映射如下:

  • HTTPService and WebService communicate with HTTPProxyService/HTTPProxyDestination
  • RemoteObject communicates with RemotingService/RemotingDestination
  • Producer and Consumer communicate with MessageService/MessageDestination
  • DataService communicates with DataService/DataDestination

可以分别在如下文件中配置:

  • RemotingService configured in the remoting-config.xml file
  • HTTPProxyService configured in the proxy-config.xml file
  • MessageService configured in the messaging-config.xml file
  • DataService configured in the data-management-config.xml file

Adapters and assemblers

适配器(Adapters )或者装配器(assemblers )是消息处理链中(message processing chain)的最后一环 。当消息到达正确的destination后,会传递给一个adapter,让它来完成最后的请求 。一些adapters使用assemblers 来进一步打散处理进程(break down the processing)。例如,一个DataDestination可以使用JavaAdapter, 而JavaAdapter使用HibernateAssembler来同Hibernate进行通信。

 

destinations和adapters/assemblers之间的映射如下:

  • RemotingDestination uses JavaAdapter
  • HTTPProxyDestination uses HTTPProxyAdapter or SOAPAdapter
  • MessageDestination uses ActionScriptAdapter or JMSAdapter
  • DataDestination uses ASObjectAdapter or JavaAdapter
  • JavaAdapter uses HibernateAssembler , SQLAssembler , or a custom assembler

About configuration files

我们可以在services-config.xml中配置LCDS,其中services-config.xml的路径在web.xml文件中配置:

<!-- MessageBroker Servlet -->
<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>

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

 

在services-config.xml文件里有对Remoting Service, Proxy Service, Message Service, and Data Management Service四个文件的引用:

<services>
    <service-include file-path="remoting-config.xml" />
    <service-include file-path="proxy-config.xml" />
    <service-include file-path="messaging-config.xml" />
    <service-include file-path="data-management-config.xml" />
</services>

 

  • services-config.xml文件里面还包括一些安全限制定义、channel定义和日志设置。
  • remoting-config.xml文件:为remote objects定义Remoting Service destinations
  • proxy-config.xml文件:为web services和HTTP services (REST services)定义Proxy Service destinations
  • messaging-config.xml文件:为publish subscribe messaging定义Messaging Service destinations
  • data-management-config.xml文件:定义Data Management Service destinations

Configuration elements

services:

default-channels:给所有的services设置application-level 的缺省channels

service-include:指定定义service的XML文件的路径

属性:file-path:service路径

service:可以在service-include中指定的文件中定义

properties:service的属性,例如proxy-config.xml中的定义

<properties>
    <connection-manager>
        <max-total-connections>100</max-total-connections>
        <default-max-connections-per-host>2</default-max-connections-per-host>
    </connection-manager>
    <allow-lax-ssl>true</allow-lax-ssl>
</properties>

 

adapters:定义各个service所使用的adapters

adapter-definition:

属性:id

属性:class:Java类全名

属性:default:是否为缺省的adapter

default-channels:给该service定义缺省的channels

channel:

属性:ref:所引用的channel的名字,参考remoting-config.xml配置

<default-channels>
    <channel ref="my-amf"/>
</default-channels>

 

destination:

adapter:包含一个service adapter的引用

properties:remoting-config.xml示例

<destination id="roleService"> 
    <properties>
    	<source>com.adobe.ptp.service.RoleService</source> 
    </properties> 
</destination>
 

channels:messaging-config.xml示例

<destination id="RandomDataPush">
    <channels>
        <channel ref="my-streaming-amf"/>
    </channels>
    <adapter ref="RandomDataPushAdapter"/>
</destination>
 

security:

security-constraint:

属性:ref

属性:id

login-command:

属性:ref

security:

security-constraint:

login-command:

属性:class

属性:server

属性:per-client-authentication

channels:示例如下:

<channel-definition id="my-nio-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://{server.name}:2881/nioamf" class="flex.messaging.endpoints.NIOAMFEndpoint"/>
    <server ref="my-nio-server"/>
    <properties>
        <polling-enabled>false</polling-enabled>
    </properties>
</channel-definition>
 

channel-definition:

属性:id

属性:class

endpoint:

属性:url

属性:class

properties:

logging:

target:

属性:class

属性:level

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