驰骋工作流引擎JFlow与activiti的对比之4种包含多实例的模式

1. 无同步的多实例(MIwithout)

在流程中,一个活动可以激活多个实例,每个实例相互独立,并不需要在后面进行同步。

例子:比如用户购买了N本书,于是后续的支付账单、更新客户可以以本书为单位各自执行。

clip_image002

ACTIVITI 中的支持情况:

支持这种模式,但是不允许在后面进行结束动作。

clip_image004

JFLOW中的支持情况:

分合流与父子流程支持这种模式,分合流上面已经讲过,下面说下父子流程。

第一种情况:发起子流程后,等所有的子流程执行完成后,父流程继续下一步骤或者结束。

第二种情况:发起子流程后,无论子流程是否执行完成,都执行到下一步或者结束。

clip_image006

父流程:

clip_image008

2. 设计时确定的多实例(MIwith a Priori Design Time Knoledge)

在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候就已经知晓率。

clip_image010

ACTIVITI 中的支持情况:

对于设计时已经知道实例数量的,最简单的就是使用多个Task节点来实现多个实例。

JFLOW中的支持情况:

合流节点处理各个子线程的任务比率。

完成率 = 子线程上已经完成的数据/所有子线程数量*100%

该节点对于合流节点与分合流节点有效,当子线程的完成率达到该值的时候,该节点的待办才能显示出来,否则该节点的人员不能处理待办。如果合流节点的处理人能够看到待办,他就可以对该流程进行操作,比如:发送、删除、退回、删除子线程等等。

3. 运行时确定的多实例(MI with a Priori RunTime Knoledge)

在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候并不知道,只有在运行时根据条件来决定需要激活多少个实例。

clip_image012

ACTIVITI 中的支持情况:

对于运行时可以知晓实例数量的,可以通过设置JOIN节点的multipliclty来实现。

clip_image014

JFLOW中的支持情况:

同表单分合流配合节点访问规则可以实现这个功能。

clip_image016

4. 运行时无法确定的多个实例(MI without a Priori RunTime Knoledge)

在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候并不知道,该模式与上一个模式的区别就是,在产生的实例执行时或者已经执行完时,仍然有新的实例产生。

例子:比如要采购100台电脑,涉及到多个供应商,但是每个供应商供应多少台电脑是不知道的,因此供应商的数量也是不确定的,但是每次供应商送货来后,就会将所拥有的电脑数量和所需的100台进行比较,来决定是否要下一个供应商进行供应。

ACTIVITI 中的支持:与运行时确定的多个实例的实现方式一样。

clip_image018

JFLOW中的支持:

这种方式属于JFlow的父子流程来实现,开始节点启动一个任务,需要采购100台电脑,需要发起n此的选择供应商采购的子流程,每个子流程完成后,就访问父流程节点信息,进行相关的业务处理(就是是否启动下一个子流程,如果满足100,就不启动子流程了,直接完成父流程的任务,结束主流程.)。

原文地址:https://www.cnblogs.com/mengjuan/p/10148809.html