ActiveBPEL 引擎结构
2005-07-25 09:33
225 查看
ActiveBPELEngineArchitecture
ActiveBPEL™引擎执行业务流程执行语言,它接受BPEL流程的定义,创建流程实例,并执行它们.ActiveBPEL™引擎在结构上有三个主要的方面:引擎,流程和活动.引擎执行相匹配的一个或多个BPEL流程,流程由活动组成,并按照活动的顺序或包含LINK执行.ActiveBPEL™引擎根据BPEL流程的定义(XML文件)创建流程实例,并执行这个流程.TableofContents
ActiveBPEL引擎结果1.引擎
2.流程
3.活动
4.文件
TheEngine
EngineStartup利用一个引擎工厂管理一个ActiveBPEL引擎的创建.应用处理服务的对象例如队列管理,警报和计时服务,流程配置使得引擎的各项职责互相分离.下面的代码描述了引擎工厂的创建和支撑服务.
引擎配置的处理是通过一个对象提供的缺省值并读取
一个流程配置提供者处理读取流程配置描述(.pdd)文件, 并且一个流程配置处理器处理流程的创建.一个工作管理器在时间上是异步操作.
ProcessCreation
一个新的BPEL流程当它的起始活动被触发时创建,当接收到一个消息或是一个PICK活动的警报时活动被触发.当传入的消息包含相关的数据,引擎发现已经存在的流程替换匹配的数据.当引擎读取一个BPEL流程定义,它就创建对象并调用流程模型的活动定义.
活动定义包含了一个BPEL活动执行对象的例示所需要的所有信息.当执行的对象类似于类的实例化对象,活动定义就与类相似.引擎和它的事件监听都访问这些定义.这些事件包含一个Xpath值它表示了流程中的哪个活动正在触发事件.这些Xpath的值来自活动的定义.
引擎采用访问者的模式访问活动定义对象模型来创建它的执行对象,并且从这个模型来创建执行对象.ActiveBPEL引擎密封了任何关于流程构造的逻辑实现.举例来说,一个固有作用域的调用活动将产生一个带有外部作用域的单独的调用子活动.设计者或其他监听都不知道关于这些实现,因为他们只关注定义和它们的XPATH信息.
InputandOutput
Activebpel引擎本身并不处理输入和输出.然而,协议规范处理器像AeBpelRPCHandler
和AeBpelDocumentHandler
把数据从一种特殊的协议转换为一种消息,反之亦然.
DataHandling
所有变量的实现通过IAeVariable
接口.这个接口能够得到变量的定义和它的有效负载,如果变量被声明成一种相对的元素或消息,将会有所不同.消息的负载需要一个和部件对象交互的接口.
ExpressionEvaluation
所有活动和链接允许使用对象各种属性的表达式.这些表达式需要一个相容的方法来执行并描述执行的相互关系.IaeBpelObject对象本身可以包含这些实现并能够提供继承于对象的抽象基本类.BPEL对象是它自己的作用域并且可以被用来正确的找回表达式内容的变量.赋值允许所有的XPATH扩展(
forexample,bpws:getVariableData
).
DebuggingandLogging
在流程执行期间,ActiveBPEL引擎激活流程的事件.当日志启动,一个AEEngineLogger
实例监听引擎的事件并写出每个流程的日志文件.一旦流程完成,文件关闭.
日志文件放在{user.home}/AeBpelEngine/process-logs,{user.home}是java系统属性”user.home”的值.日志被命名为process-id
.log,process-id
是一个由引擎给出流程的ID号码,为了启动日志,应用BpelAdmin配置页,(
Processes
一个流程的组成:
Partnerlinks描述两个webservices之间接口关系.
Partners
参与webservice交易的实体.
Variables
值的容器.
Correlationsets
确定业务流程唯一的一套数据.在流程的不同时期,流程可以定义不同的相关集.
Faulthandlers 描述发生问题时的处理方法.
Compensationhandlers
描述如何退回已经完成的业务流程
Eventhandlers
处理引入的消息和警报.
Atop-levelactivity
一个单独的BPEL活动,通常是一个其他活动的容器.
DispatchingRequests
每个BPEL流程必须至少有一个起始活动.一个新的BPEL流程当它的起始活动被触发时创建,也就是一个引入消息或一个PICK活动的警报的到来.引擎分派引入的消息给正确的流程实例.如果有相关的数据,引擎就会发现正确的实例并匹配相关的数据.如果没有相关的数据,请求匹配一个新的活动,一个新的流程实例被创建.
Figure3.RequestDispatchFlowchartQueuedReceives
接收队列包含了所有流程实例的当前在执行的RECEIVE活动.RECEIVE活动包括了消息活动,它是PICK或一个事件处理的一部分.接收队列也包含了来自外部的绑定的消息,如果和队列中等待接收的活动不匹配,它们本身是不能创建新的流程实例.一个不匹配的接收数据像给出的异步的WEB服务.引擎将接收这些所提供不匹配的消息,它们包含了相关的数据.这些消息留在队列里,直到超时为止.这个时间由引擎的配置参数UnmatchedReceiveTimeout
指定
.
如果一个流程队列的一个活动比如说一个RECEIVE活动,它会一直保存在队列里直到数据到达或流程终止.PICK略有不同:第一个匹配的消息或警报的到来,PICK活动立即设置其它的消息或警报的状态为DEAD_PATH.这将把它们从队列中移走.一旦定义他们的作用域完成,事件处理器会自动把它们从队列中移走.
Activities
BPEL流程由活动的块组成.基本的活动从概念上是一个简单的行为如接收一个消息,调用一个WEB服务,赋值给变量.结构化的活动与带有条件或循环构造的程序语言相似.特殊的活动介绍了变量,作用域和处理正常的活动像流程终止和补偿活动.活动加入了LINKS,有外部的或固有的.活动的路径和LINKS由多种因素决定,包括变量的值和表达式的值.每个活动都存在一个作用域,包括相关的变量,错误处理和补偿处理.作用域在概念上与程序语言的介绍变量的域和处理exception相似.一些活动像Scope和Invoke产生了新的作用域,外部的或是内部的.
BPELActivities
Basicactivities
Activity | Notes |
<receive> | Blockandwaitforamessagefromapartner |
<reply> | Replybacktothepartnerthatsentthemessagewereceived |
<invoke> | CallsomeotherWebservice,eitherone-wayorrequest-response |
<assign> | Assignorcopyvaluestovariables |
<throw> | Generateafault |
<wait> | Waitforagiventimeperiod(time-out)oruntilaparticulartimehaspassed(alarm) |
<empty> | Ano-op |
Structuredactivities
Activity | Notes |
<sequence> | Executechildreninorder |
<switch> | Justlikea"switch"or"case"statement |
<while> | Repeatanactivitywhileaconditionistrue |
<pick> | Blockandwaitforamessage,time-out,oralarm |
<flow> | Childrenareexecutedconcurrently;linkscanprovideadditionalcontrolstructure |
Specialactivities
Activity | Notes |
<scope> | Defineanewscopeforvariables,faulthandlers,andcompensationhandlers |
<compensate> | Invokecompensationonaninnerscopethathasalreadycompletednormally |
<terminate> | Immediatelyterminateabusinessprocessinstance |
States
每个活动都有一个相关的状态,这些活动进入或是退出这些状态都基于BPEL标准.活动也会触发事件,使得监听能够发现其状态的改变.有一些机制来监听这些事件.
表示状态的常量定义在
AeBpelState中,一个活动必须是下列的状态之一:
State | Notes |
INACTIVE | 当流程开始的时候,所有BPEL的活动都是没有非活动的状态 AllBPELactivitiesareintheinactivestatewhentheProcessstarts |
READY_TO_EXECUTE | 准备执行.这些活动在它们的父队列里,它们的连接条件的值为true. Readytoexecute.Theseactivitieshavebeenqueuedbytheirparentandtheirjoinconditionhasevaluatedtotrue |
EXECUTING | 正在执行. Currentlyexecuting |
FINISHED | 执行完成,没有出错. Finishedexecutingwithoutafault |
FAULTED | 执行完成,出错. Finishedexecutingwithafault |
DEAD_PATH | 由于绝对路径的消除从执行路径中移出,当一个父活动的状态变为:DEAD_PATH,这个状态会传给它所以的子活动. Removedfromtheexecutionpathduetodeadpathelimination.Whenaparentactivity'sstatebecomes DEAD_PATH,thatstateispropagatedtoallofitschildren |
QUEUED_BY_PARENT | 父活动的执行队列. Queuedforexecutionbytheirparents |
TERMINATED | 终止. Terminated |
Unknown | 活动的状态为空.如果一个父活动的状态变为unkown,它的子状态变为INACTIVE. Theactivity'sstateis null.Ifaparentactivity'sstatebecomesunknown,thenthechildrens'stateschangeto INACTIVE. |
Activities
所有的活动都有一套共同的方法使得它们在以上各种状态和提及的事件触发间的运转变的更容易.下列这些方法描述了每个活动的实现细节.相关文章推荐
- ActiveBPEL 引擎结构
- ActiveBPEL引擎(4.0)启动步骤分析(ActiveBPEL Engine Startup Steps)
- 安装部署ActiveBPEL引擎到JBoss应用服务器(Install ActiveBPEL Engine on JBoss)
- ActiveBPEL引擎流程部署描述符(pdd)文件概述
- 使用Eclipse编译ActiveBPEL引擎4.0源程序
- ActiveBPEL引擎文件格式
- 安装和配置ActiveBPEL引擎3.1
- 安装ActiveBPEL引擎(tomcat5.5+mysql5.1+ActiveBPEL5.0.2)
- ActiveBPEL引擎文件格式描述
- ActiveBPEL引擎架构
- 安装ActiveBPEL引擎(tomcat5.5+mysql5.1+ActiveBPEL5.0.2)
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
- BPEL研究(2): 目前主流和开源的BPEL引擎
- cocos2d游戏引擎学习笔记(初识框架结构和内存规划)
- ActiveBpel Designer入门
- MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎
- [深入理解Java虚拟机]第八章 字节码执行引擎-运行时栈帧结构
- 开始研究active BPEL了!
- cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例
- Cocos2d-x旧引擎文件夹结构