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"><endpointurl="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

LCDS:基本概念(一)相关推荐

  1. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  2. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  3. 数据结构(01)— 算法复杂度概念及常见的复杂度计算

    1. 大 O 表示法 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度.大 O 表示法指出了最糟情况下的运行时间.大 O 表示法在讨论运行时间时, ...

  4. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能

    1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...

  5. 用男女朋友关系解释计算机常用概念

    运维方面 很多同学对热备,冷备,云备了解不深,我科普一下 IT 行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以 ...

  6. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  7. 【SpringMVC】基本概念

    SpringMVC的基本概念 三层架构 我们的开发一般都是基于c/s或者b/s架构.在JavaEE开发中,几乎全都是基于B/S架构开发.在B/S架构中,系统标准的三层架构包括:表现层,业务层,持久层. ...

  8. AIFramework基本概念整理

    AIFramework基本概念整理 本文介绍: • 对天元 MegEngine 框架中的 Tensor, Operator, GradManager 等基本概念有一定的了解: • 对深度学习中的前向传 ...

  9. 机器学习PAL基本概念

    机器学习PAL基本概念 本文介绍PAI-Studio.PAI-DSW及PAI-EAS的基本概念. PAI-Studio PAI-DSW PAI-EAS

最新文章

  1. rabbitmq 限制速度_=(:) RabbitMQ详解
  2. 使用let替换var实现块级作用域的小发现
  3. EXTJS+ASP.NET上传文件带实时进度条代码
  4. 浅析高端网站建设策划方案都包括哪些内容?
  5. C#全局键盘监听(Hook)
  6. BUAA 436 孟竹的复习计划(二维树状数组)
  7. 阿里开源的15个顶级Java项目!!!
  8. 1014.QxORM移植
  9. python编写图像识别_python实现识别相似图片小结
  10. 软件工程实践_Task2_sudoku
  11. python读取bmp文件,go 读取BMP文件头二进制读取方式
  12. wps qt linux,小试牛刀 WPS for Linux beta1文字试用
  13. 小马哥杂牌机高仿机刷机教程---史上最简单的卡刷方法。adb推送模式自动卡刷教程
  14. 倾斜摄影房屋轮廓线提取思路
  15. SpringBoot 整合ElasticSearch全文检索
  16. java中遍历HashMap的方法
  17. Win10微信 PC 端打字卡顿解决方法
  18. 计算机网络与技术课本,高等学校计算机科学与技术教材:计算机网络基础教程...
  19. 放弃数学专业跳槽高薪行业,如今他却后悔了
  20. Flowerpot(单调队列)

热门文章

  1. greenplum 实验,动态增加节点
  2. IDEA DATEBASE使用
  3. HTML5游戏开发技术基础整理
  4. 采购IT外包服务的企业有哪些痛点?
  5. 百度首页2017html,The Definitive Guide to HTML5 2017
  6. Anaconda环境下tensorflow1.12.0保姆式安装及相关奶妈级配置
  7. [UVA12108]Extraordinarily Tired Students(模拟+水题)
  8. UBIFS文件系统分析6 - LPT分析1 .
  9. 如何显示计算机语言栏,win7电脑显示语言栏的具体操作方法
  10. 扦插技术图解_玫瑰花扦插方法图解(4个步骤)-玫瑰花怎么扦插 - 大盆景网