LCDS:基本概念(一)
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:基本概念(一)相关推荐
- RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例
1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- 数据结构(01)— 算法复杂度概念及常见的复杂度计算
1. 大 O 表示法 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度.大 O 表示法指出了最糟情况下的运行时间.大 O 表示法在讨论运行时间时, ...
- OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能
1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...
- 用男女朋友关系解释计算机常用概念
运维方面 很多同学对热备,冷备,云备了解不深,我科普一下 IT 行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以 ...
- python中的新式类与旧式类的一些基于descriptor的概念(上)
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- 【SpringMVC】基本概念
SpringMVC的基本概念 三层架构 我们的开发一般都是基于c/s或者b/s架构.在JavaEE开发中,几乎全都是基于B/S架构开发.在B/S架构中,系统标准的三层架构包括:表现层,业务层,持久层. ...
- AIFramework基本概念整理
AIFramework基本概念整理 本文介绍: • 对天元 MegEngine 框架中的 Tensor, Operator, GradManager 等基本概念有一定的了解: • 对深度学习中的前向传 ...
- 机器学习PAL基本概念
机器学习PAL基本概念 本文介绍PAI-Studio.PAI-DSW及PAI-EAS的基本概念. PAI-Studio PAI-DSW PAI-EAS
最新文章
- rabbitmq 限制速度_=(:) RabbitMQ详解
- 使用let替换var实现块级作用域的小发现
- EXTJS+ASP.NET上传文件带实时进度条代码
- 浅析高端网站建设策划方案都包括哪些内容?
- C#全局键盘监听(Hook)
- BUAA 436 孟竹的复习计划(二维树状数组)
- 阿里开源的15个顶级Java项目!!!
- 1014.QxORM移植
- python编写图像识别_python实现识别相似图片小结
- 软件工程实践_Task2_sudoku
- python读取bmp文件,go 读取BMP文件头二进制读取方式
- wps qt linux,小试牛刀 WPS for Linux beta1文字试用
- 小马哥杂牌机高仿机刷机教程---史上最简单的卡刷方法。adb推送模式自动卡刷教程
- 倾斜摄影房屋轮廓线提取思路
- SpringBoot 整合ElasticSearch全文检索
- java中遍历HashMap的方法
- Win10微信 PC 端打字卡顿解决方法
- 计算机网络与技术课本,高等学校计算机科学与技术教材:计算机网络基础教程...
- 放弃数学专业跳槽高薪行业,如今他却后悔了
- Flowerpot(单调队列)
热门文章
- greenplum 实验,动态增加节点
- IDEA DATEBASE使用
- HTML5游戏开发技术基础整理
- 采购IT外包服务的企业有哪些痛点?
- 百度首页2017html,The Definitive Guide to HTML5 2017
- Anaconda环境下tensorflow1.12.0保姆式安装及相关奶妈级配置
- [UVA12108]Extraordinarily Tired Students(模拟+水题)
- UBIFS文件系统分析6 - LPT分析1 .
- 如何显示计算机语言栏,win7电脑显示语言栏的具体操作方法
- 扦插技术图解_玫瑰花扦插方法图解(4个步骤)-玫瑰花怎么扦插 - 大盆景网