快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
n将会被移除,同时,父execution被重新激活流转。

1、 execution的移动

execution的移动操作被封装在atomicOperation里。execution通过执行atomicOperation来推动其的转移。目前移动execution的atomicOperation有7种,如下图所示:

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

时间:2011-01-04 javaeye ronghao

ExecutionActivity 执行节点定义的运行期行为。节点的运行期行为委派给ActivityBehaviour实现,当需要对节点行为进行扩展时,需要实现 ActivityBehaviour接口。jBPM4存在两个对节点行为进行扩展的接口,分别是ActivityBehaviour和 ExternalActivityBehaviour,ActivityBehaviour的execute方法在节点被执行时调用;ExternalActivityBehaviour继承自ActivityBehaviour,多出一个signal方法,在节点处于等待状态被触发流转时调用。

Java代码

ActivityBehaviour activityBehaviour = activity.getBehaviour(); activityBehaviour.execute(execution);

Signal执行节点定义的运行期signal方法。

Java代码

ExternalActivityBehaviour externalActivityBehaviour =   (ExternalActivityBehaviour) activity.getBehaviour(); externalActivityBehaviour.signal(execution,signalName, parameters);

一个典型的signal方法会调用execution的take方法,从而将execution移动至给定的转移线上。jPDL里StateActivity类的signal方法:

Java代码

execution.take(transition);

看看execution的take方法,设置execution位置并执行TransitionEndActivity:

Java代码

//设置当前execution的位置 setTransition((TransitionImpl) transition);    //触发事件,执行TRANSITION_END_ACTIVITY原子操作 fire(Event.END,getActivity(),AtomicOperation. TRANSITION_END_ACTIVITY);

TransitionEndActivity销毁移出节点的scope execution,接着执行TransitionTake:

Java代码

//如果activity存在scope execution的话,则销毁,返回父execution if (activity.isLocalScope()) {     propagatingExecution = execution.destroyScope(activity);     } //父execution执行TRANSITION_TAKE原子操作 propagatingExecution.performAtomicOperation(AtomicOperation.    TRANSITION_TAKE);

TransitionTake触发转移线的take事件,并执行TransitionStartActivity:

Java代码

execution.fire(Event.TAKE,transition,AtomicOperation.     TRANSITION_START_ACTIVITY);

TransitionStartActivity设置execution位置为目标节点,创建scope execution并执行ExecutionActivity:

Java代码

//设置当前execution的位置 execution.setActivity(activity); ExecutionImpl propagatingExecution = execution; //如果activity存在scope的话,则创建scope execution    if (activity.isLocalScope()) {      propagatingExecution = execution.createScope(activity); } propagatingExecution.setTransition(null); //scope execution执行EXECUTE_ACTIVITY原子操作 propagatingExecution.performAtomicOperation(AtomicOperation.    EXECUTE_ACTIVITY);

上述5种原子操作构成了一个完整的execution节点间移动过程,分别是:执行节点、触发流转、结束源节点、执行转移线和开始目标节点。如果节点是自动节点(没有等待状态),则触发流转(signal)这一步操作不会执行。

存在结构块的情况下,TransitionEndActivity会依次触发父节点的结束事件,前提是下一个目标节点未被父节点所包含,如果包含,则属于结构块内的节点移动;TransitionStartActivity会依次触发父节点的开始事件,前提同样是上一个源节点未被该父

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号