这个自动运行控制器的算法的最初结构是comsci在05年的时候,经过很多次的修正后才定型的,后来在v0.96版本中的SAN算法也是在这个算法的基础上面进行修改而成的,所以要完全理解v0.96版本的流程自动运行控制算法,首先要理解这个基础的算法结构
for(int i =0 i < 当前节点的邻接点个数) {
if (该点是个前驱路由点) {
if (该点没有被访问过) {
设置访问次数加(从递归方法中获得的循环控制变量)
返回
}
else if( 如果已经访问过,但是访问次数<它的前驱节点总数) {
设置访问次数加(从递归方法中获得的循环控制变量+1)
返回
}
else if(总计访问次数=它的前驱节点总数) {
递归进入下一个节点的访问 (把大循环体的,循环变量带进去递归方法中)
}
}
else if(如果是普通节点) {
设置访问标志
递归进入下一个节点的访问 (把大循环体的,循环变量带进去递归方法中)
}
}
}
这个算法的总体设计思想是利用流程节点的类型(普通,路由,并行,分支,汇聚)和处理状态(未处理,正在处理,已经处理,暂停处理)来做运行控制(这些节点类型和节点的状态都是通过数据库中节点类型和状态字段来表示的,需要了解JWFD的流程数据库结构),在if控制段的内部嵌入运行动力源,而这个动力源就是在图论的遍历算法中常用的递归算法,就是算法结构中用红字表示的部分,为什么要用动力源来形容这个递归算法呢?
如果一个流程要运行起来,比如说前进到下一个节点那里去,就需要一个推动力,这个推动力是什么呢? 就是一个递归过程,递归一次,流程就前进一下,而控制推动力的却是前面提到的节点状态和类型,用蓝色表示的语句就是控制这个流程运行的控制部分。。引擎在运行的时候,当一个节点被传入到引擎控制算法的程序结构中,这个算法的if判断语句(蓝色部分)就通过对这个节点的类型和状态进行判断,来实施递归过程,让流程按照我们的要求,有次序的进入到下一个流程节点中,直到流程结束。。。。。
而让整个引擎控制器运转起来的又是什么? 这个主动力源是什么呢? 大家注意到没有? 是算法的第一句,一个for循环语句,这个for循环是整个流程主驱动动力,而前面说的递归过程及其控制部分,都是依靠这个主动力源驱动的,就好像一个火箭,由一个主火箭发动机,两个副的小火箭发动机一起来驱动火箭飞行一样,就是这样意思。。。很简单的过程,不是吗?
一句话,用for循环驱动下的节点类型和状态来控制流程的运行,直到流程运行完成。这就是最简单的流程自动运行控制算法,更为复杂的控制算法,在v0.96版本中出现,请参考这篇文章
http://blog.csdn.net/comsci/article/details/6070565
上面的工作流引擎运行控制算法的JAVA实现在 jwfdv0.94开源工作流二次开发包中的org.jwfd.workflowEngines.GXLFlowControlModule.java类中,欢迎大家下载,希望大家早日实现自己的工作流引擎
jwfdv0.94开源工作流二次开发包下载地址 http://www.cnblogs.com/comsci/favorite/260690.html
成都,今天终于凉快下来了,今年夏天真够热的.......重庆的兄弟还要坚持几天,冷空气才来