快速业务通道

jBPM4 PVM的流程定义模型与过程调度 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

jBPM4 PVM的流程定义模型与过程调度

时间:2011-01-04 javaeye ronghao

完整的jBPM4 PVM介绍发表在《程序员》第8期,这里截取部分的意思是PVM的过程调度是非常灵活的,PVM提供了一套和token类似的execution过程调度机制,通过对execution的完全操控,节点运行期行为有了无限的可能。

PVM的流程定义模型

首先要说明的是,上图里的类全是接口。位于最上层的是ObservableElement,其提供给流程元素以附加Event(事件)的能力。在 ObservableElementImpl里,它持有一个events的集合属性。对于流程元素来说,典型的事件有:流程启动/结束,节点启动/结束和转移线执行(take)。

Java代码

protected Map<String, EventImpl> events;

Event又做了些什么呢?EventImpl透过EventListenerReference实例的集合持有EventListener实例。这样在引擎执行过程调度时,就非常容易地通过流程元素本身获取事件监听器并在相应的时候执行它们。

Java代码

protected List<EventListenerReference> listenerReferences;

和传统的观察者模式一致,EventListener接口有且只有一个方法:

Java代码

void notify(EventListenerExecution execution) throws Exception;

紧接着ObservableElement的是CompositeElement,其扩展了ObservableElement接口。先看看它的方法:

Java代码

List<? extends Activity> getActivities();   boolean hasActivity(String activityName);   Activity getActivity(String activityName);

很明显,它持有了Activity的集合,对于ProcessDefinition来说,这是一件很自然地事情:流程定义包含多个节点定义。重要的是Activity自身华丽的变身:节点定义实现了嵌套,出现了结构块。看图说话:

这一设计在jBPM3里是没有的,但是在jBPM4里则必须出现,因为结构块是BPEL和BPMN里的重要概念。既然号称PVM,则必须向BPEL和 BPMN致敬。稍后我们可以看到,结构块的引入给引擎过程调度增加了很大的复杂度。在jPDL里,与之对应的实现是group。这是jBPM4流程定义模型的最重要改变。

ProcessDefinition和Activity分别继承自CompositeElement,Activity和Transition建立起双向关联,这三者也是工作流模型里的标准建模。

jBPM4 PVM的流程定义模型与过程调度(2)

时间:2011-01-04 javaeye ronghao

PVM的过程调度

jBPM4采用execution来记录当前流程执行的位置,并通过移动execution来推动流程的流转。

Java代码

/** transient cached current activity pointer. persistence is managed in {@link #activityName} */   private ActivityImpl activity;   /** transition is not to be made persistable by default */   protected TransitionImpl transition;

execution通过activity和transition属性来记录位置。

execution 是可以嵌套的,即会存在一种父子关系构成树状结构,在任何时间,只有叶子execution处于活动状态。最上层的execution称为根 execution,jBPM4里,根execution即为流程实例(在jBPM3里,记录流程执行位置的token和流程实例 processInstance是独立分开的)。

在两种情况下,execution会产生子execution。一种情况是流程定义里存在并发路径,此时execution会根据并发的路径个数产生相应的子execution,子execution执行完毕并汇聚后则会触发它们的父execution继续流转。另外一种情况是节点定义存在自己的变量定义和时间服务定义,则执行该节点时会为该节点产生一个独立的子execution,产生该execution的目的在于使得该节点拥有独立的作用域,这个子execution也被称为scope execution。节点执行完毕后,与之关联的scope executio

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号