| ActiveBPEL Engine Architecture | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ActiveBPEL 引擎执行业务流程执行语言 , 它接受 BPEL 流程的定义 , 创建流程实例 , 并执行它们 . ActiveBPEL 引擎在结构上有三个主要的方面 : 引擎 , 流程和活动 . 引擎执行相匹配的一个或多个 BPEL 流程 , 流程由活动组成 , 并按照活动的顺序或包含 LINK 执行 . ActiveBPEL 引擎根据 BPEL 流程的定义 (XML 文件 ) 创建流程实例 , 并执行这个流程。 Table of ContentsActiveBPEL 引擎结果 1. 引擎 2. 流程 3. 活动 4. 文件 The Engine
上图右边的数据库元素代表一般的持久性存储 . ActiveBPEL 引擎采用了插入式的结构 , 不同的管理器可以执行不同的存储机制 . ActiveBPEL 引擎伴有一个持续的管理者在内存中记录每件事。 Engine Startup利用一个引擎工厂管理一个 ActiveBPEL 引擎的创建 . 应用处理服务的对象例如队列管理 , 警报和计时服务 , 流程配置使得引擎的各项职责互相分离 . 下面的代码描述了引擎工厂的创建和支撑服务。 engine = new Engine(getEngineConfigurationInfo(), createQueueManager(), createProcessStateManager()); engine.setPlanManager(createProcessDeploymentProvider()); createProcessDeploymentManager(); createWorkManager(); createAlarmAndTimerService();引擎配置的处理是通过一个对象提供的缺省值并读取 aeEngineConfig.xml 文件 . 引擎连接一个队列管理器和一个流程状态管理器 , 对象负责执行履行那些服务给引擎 . 引擎是高度可配置的 , aeEngineConfig.xml 文件不仅描述了像缓存的大小和日志状态 , 也决定了各种管理器和处理器应用的类。 一个流程配置提供者处理读取流程配置描述 (.pdd)文件, 并且一个流程配置处理器处理流程的创建.一个工作管理器在时间上是异步操作。 Process Creation一个新的 BPEL 流程当它的起始活动被触发时创建 , 当接收到一个消息或是一个 PICK 活动的警报时活动被触发。当传入的消息包含相关的数据 , 引擎发现已经存在的流程替换匹配的数据。当引擎读取一个 BPEL 流程定义 , 它就创建对象并调用流程模型的活动定义。
Figure 2. Runtime Engine Object Creation 活动定义包含了一个 BPEL 活动执行对象的例示所需要的所有信息 . 当执行的对象类似于类的实例化对象 , 活动定义就与类相似。 引擎和它的事件监听都访问这些定义。这些事件包含一个 Xpath 值它表示了流程中的哪个活动正在触发事件 。 这些 Xpath 的值来自活动的定义。 引擎采用访问者的模式访问活动定义对象模型来创建它的执行对象 , 并且从这个模型来创建执行对象。ActiveBPEL 引擎密封了任何关于流程构造的逻辑实现。举例来说 , 一个固有作用域的调用活动将产生一个带有外部作用域的单独的调用子活动。设计者或其他监听都不知道关于这些实现 , 因为他们只关注定义和它们的 XPATH 信息。 Input and OutputActivebpel 引擎本身并不处理输入和输出。 然而 , 协议规范处理器像 AeBpelRPCHandler 和 AeBpelDocumentHandler 把数据从一种特殊的协议转换为一种消息 ,反之亦然。Data Handling所有变量的实现通过 IAeVariable 接口。这个接口能够得到变量的定义和它的有效负载 , 如果变量被声明成一种相对的元素或消息 , 将会有所不同 。消息的负载需要一个和部件对象交互的接口 。Expression Evaluation所有活动和链接允许使用对象各种属性的表达式。 这些表达式需要一个相容的方法来执行 并描述执行的相互关系。 IaeBpelObject对象本身可以包含这些实现并能够提供继承于对象的抽象基本类.BPEL对象是它自己的作用域并且可以被用来正确的找回表达式内容的变量.赋值允许所有的XPATH扩展( for example, bpws:getVariableData )。Debugging and Logging在流程执行期间 ,ActiveBPEL 引擎激活流程的事件 。当日志启动 , 一个 AEEngineLogger 实例监听引擎的事件并写出每个流程的日志文件。一旦流程完成 , 文件关闭。日志文件放在 {user.home} /AeBpelEngine/process-logs , {user.home}是java系统属性”user.home”的值.日志被命名为process-id .log , process-id 是一个由引擎给出流程的 ID号码,为了启动日志,应用 BpelAdmin配置页,( http://localhost:8080/BpelAdmin/config.jsp )。 Processes一个流程的组成 :Partner links 描述两个 web services 之间接口关系。 Partners 参与 web service 交易的实体。 Variables 值的容器. Correlation sets 确定业务流程唯一的一套数据 . 在流程的不同时期 , 流程可以定义不同的相关集 . Fault handlers描述发生问题时的处理方法 . Compensation handlers 描述如何退回已经完成的业务流程 Event handlers 处理引入的消息和警报 . A top-level activity 一个单独的 BPEL 活动 , 通常是一个其他活动的容器 . Dispatching Requests每个 BPEL 流程必须至少有一个起始活动 . 一个新的 BPEL 流程当它的起始活动被触发时创建 , 也就是一个引入消息或一个 PICK 活动的警报的到来 . 引擎分派引入的消息给正确的流程实例 . 如果有相关的数据 , 引擎就会发现正确的实例并匹配相关的数据 . 如果没有相关的数据 , 请求匹配一个新的活动 , 一个新的流程实例被创建 . |
Activity |
Notes |
<receive> |
Block and wait for a message from a partner |
<reply> |
Reply back to the partner that sent the message we received |
<invoke> |
Call some other Web service, either one-way or request-response |
<assign> |
Assign or copy values to variables |
<throw> |
Generate a fault |
<wait> |
Wait for a given time period (time-out) or until a particular time has passed (alarm) |
<empty> |
A no-op |
Activity |
Notes |
<sequence> |
Execute children in order |
<switch> |
Just like a "switch" or "case" statement |
<while> |
Repeat an activity while a condition is true |
<pick> |
Block and wait for a message, time-out, or alarm |
<flow> |
Children are executed concurrently; links can provide additional control structure |
Activity |
Notes |
<scope> |
Define a new scope for variables, fault handlers, and compensation handlers |
<compensate> |
Invoke compensation on an inner scope that has already completed normally |
<terminate> |
Immediately terminate a business process instance |
每个活动都有一个相关的状态 , 这些活动进入或是退出这些状态都基于 BPEL 标准 . 活动也会触发事件 , 使得监听能够发现其状态的改变 . 有一些机制来监听这些事件 .
表示状态的常量定义在 AeBpelState中,一个活动必须是下列的状态之一:
State |
Notes |
INACTIVE |
当流程开始的时候 , 所有 BPEL 的活动都是没有非活动的状态 All BPEL activities are in the inactive state when the Process starts |
READY_TO_EXECUTE |
准备执行 . 这些活动在它们的父队列里 , 它们的连接条件的值为 true. Ready to execute. These activities have been queued by their parent and their join condition has evaluated to true |
EXECUTING |
正在执行 . Currently executing |
FINISHED |
执行完成 , 没有出错 . Finished executing without a fault |
FAULTED |
执行完成 , 出错 . Finished executing with a fault |
DEAD_PATH |
由于绝对路径的消除从执行路径中移出 , 当一个父活动的状态变为 :DEAD_PATH, 这个状态会传给它所以的子活动 . Removed from the execution path due to dead path elimination. When a parent activity's state becomes DEAD_PATH , that state is propagated to all of its children |
QUEUED_BY_PARENT |
父活动的执行队列 . Queued for execution by their parents |
TERMINATED |
终止 . Terminated |
Unknown |
活动的状态为空 . 如果一个父活动的状态变为 unkown, 它的子状态变为 INACTIVE. The activity's state is null . If a parent activity's state becomes unknown, then the childrens' states change to INACTIVE . |
| 关闭窗口 |