LiveCycle Data Services ES architecture
LiveCycle Data Services ES client architecture
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
,HTTPChannel
和RTMPChannel
。很多因素决定了channel的选择,例如你的应用程序的类型。如果你的系统只能允许HTTP协议的话,可以使用AMFChannel或者HTTPChannel,但不能使用RTMPChannel因为它使用RTMP协议。如果需求说明只能使用非二进制数据传播,那就只能用HTTPChannel了。
Messages
所有Flex客户端组件和LCDS服务器端的通信都以消息的形式被执行。Flex组件使用许多类型的消息同LCDS进行通信。但是所有的消息都具有ActionScript的实现形式和Java的实现形式因为这些消息不管在客户端还是服务器端都被序列化
(serialized)和反序列化
(deserialized)。
对象序列化
(Serializable)是指将对象转换为字节序列
的过程,而反序列化则是根据字节序列恢复对象的过程,以便于在网络中传递对象
。http://zhupan.iteye.com/blog/26447
像AcknowledgeMessage
和CommandMessage
这种类型的消息主要用于在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 object
,a service object
,a destination object
,最后是an adapter object
。adapter
会在本地完成这个请求服务
,或者通过后台系统,或者通过远程服务器完成,例如JMS(Java Message Service)。
Endpoints
LCDS有两种类型的endpoints:servlet-based endpoints
和NIO-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
- 大小: 51.8 KB
- 大小: 71.6 KB
分享到:
相关推荐
1. **LCDS简介**:介绍LCDS的基本概念,其在企业应用中的角色,以及为什么选择LCDS作为富客户端开发的解决方案。 2. **Flex集成**:详细讲解如何将Flex应用与LCDS结合,包括配置Flex Builder或IDE以支持LCDS,以及...
通过本文的介绍,我们不仅了解了Flex、LCDS和Java的基本概念,还掌握了创建Flex LCDS工程的具体步骤。学习这些技术不仅可以提升开发能力,还能帮助构建高性能、可扩展的应用程序。希望本文能为您的学习之路提供有...
本教程旨在帮助初学者理解这些技术的基本概念,并通过实战操作学会如何搭建一个基本的工作环境以及如何创建一个 Flex + LCDS + Java 的集成项目。 #### 二、基础知识介绍 1. **Flex** Flex 是一款用于构建和部署...
通过本教程的学习,读者应该能够理解 Flex 和 LCDS 的基本概念,并掌握如何搭建开发环境、创建 Flex+LCDS+Java 的项目以及配置基本的服务交互。随着实践的深入,开发者还可以进一步探索更多高级特性和优化技巧,从而...
通过学习这个教程,初学者将能够掌握Flex和LCDS的基本概念,了解如何创建一个简单的Flex应用,并与Java后端进行有效的交互,为深入开发富互联网应用程序打下坚实基础。不过,要注意的是,这只是入门级别的资料,对于...
通过本文的详细介绍,我们不仅了解了Flex、LCDS以及Java的基本概念和发展背景,还深入学习了如何在Eclipse环境下搭建开发环境,并具体介绍了创建Flex LCDS项目的步骤。对于初学者而言,这些知识点将有助于快速上手并...
**学习资源**:提供的"Flex+++LCDS(Blazeds)+++Java+入门教程.doc"文档很可能是详细的教程,包括基本概念、安装配置、示例代码和实践指导。而"flex.war"和"blazeds.war"这两个文件则是预编译好的Flex和LCDS服务器端...
总之,通过本文对Flex + LCDS + Java入门教程的深入解析,我们不仅理解了各组成部分的基本概念,还掌握了如何搭建开发环境、创建项目以及配置部署的关键步骤。这为初学者提供了从理论到实践的全面指导,有助于快速...
通过了解这些技术和工具的基本概念以及如何搭建开发环境,你将能够在实际项目中运用这些知识。随着对Flex和LCDS更深入的理解,你可以进一步扩展应用的功能和性能,从而创建出更加高效且用户友好的应用程序。
总结来说,这个压缩包为你提供了一个深入学习Flex开发的起点,涵盖了从基本的Flex组件和MXML语法,到高级的Web集成和数据交互策略。通过实践FlexDemo,你可以提升自己在Flex开发领域的技能,并理解如何构建高效、...
本文将详细介绍Flex3与LCDS的基本概念、安装过程以及如何搭建一个基本的开发环境,帮助读者快速入门。 #### 二、基础知识 ##### 1. Flex简介 Flex 是一款强大的开源框架,用于构建跨平台的桌面和移动设备上的富...
#### 二、基本概念 1. **Flex** - Flex是一种用于构建跨平台富互联网应用程序的技术栈,由Adobe公司推出。 - 它基于ActionScript 3.0编程语言,能够构建具有高度交互性的用户界面。 2. **LCDS (LiveCycle Data ...
综上所述,Flex Blazeds入门教程为初学者提供了从理论到实践的完整指南,无论是对于理解Flex、LCDS还是Blazeds的基本概念,还是具体项目的搭建与部署,都具有极高的指导价值。通过本文的梳理,开发者不仅能够掌握...
这篇博文链接指向了作者“snowelf”在iteye博客上分享的一篇文章,尽管描述中没有提供具体信息,但我们可以推测这可能是一份关于使用Flex和LCDS(LiveCycle Data Services)与Java集成的入门教程。 标签 "源码 工具...