jBPM4 PVM的流程定义模型与过程调度
转载:
?
完整的jBPM4 PVM介绍发表在《程序员》第8期,这里截取部分的意思是PVM的过程调度是非常灵活的,PVM提供了一套和token类似的execution过程调度机制,通过对execution的完全操控,节点运行期行为有了无限的可能。
首先要说明的是,上图里的类全是接口。位于最上层的是ObservableElement,其提供给流程元素以附加Event(事件)的能力。在ObservableElementImpl里,它持有一个events的集合属性。对于流程元素来说,典型的事件有:流程启动/结束,节点启动/结束和转移线执行(take)。
ProcessDefinition和Activity分别继承自CompositeElement,Activity和Transition建立起双向关联,这三者也是工作流模型里的标准建模。
PVM的过程调度
jBPM4采用execution来记录当前流程执行的位置,并通过移动execution来推动流程的流转。
在两种情况下,execution会产生子execution。一种情况是流程定义里存在并发路径,此时execution会根据并发的路径个数产生相应的子execution,子execution执行完毕并汇聚后则会触发它们的父execution继续流转。另外一种情况是节点定义存在自己的变量定义和时间服务定义,则执行该节点时会为该节点产生一个独立的子execution,产生该execution的目的在于使得该节点拥有独立的作用域,这个子execution也被称为scope execution。节点执行完毕后,与之关联的scope execution将会被移除,同时,父execution被重新激活流转。
1、 execution的移动
execution的移动操作被封装在atomicOperation里。execution通过执行atomicOperation来推动其的转移。目前移动execution的atomicOperation有7种,如下图所示:
ExecutionActivity执行节点定义的运行期行为。节点的运行期行为委派给ActivityBehaviour实现,当需要对节点行为进行扩展时,需要实现ActivityBehaviour接口。jBPM4存在两个对节点行为进行扩展的接口,分别是ActivityBehaviour和ExternalActivityBehaviour,ActivityBehaviour的execute方法在节点被执行时调用;ExternalActivityBehaviour继承自ActivityBehaviour,多出一个signal方法,在节点处于等待状态被触发流转时调用。