为了更好的说明activiti 与jflow的两款工作流引擎的特点与区别,我们按照如下几个方面做一次全面的、客观的对比。
首先activiti是国外的一款开源的工作流程引擎,在国际上影响比较深远与广泛,解决了BPM领域的很多问题,值得我们赞赏。他的boss是jbpm的前身。
JFlow是济南驰骋公司开放的一款工作流程引擎,JFlow的前身是CCFlow,ccflow是国内开源的一款老牌的工作流程引擎,承担过很多大型项目,适应于复杂的国内应用环境。
Activity 相对简单,仅有流程引擎,没有表单引擎。在BPM的研究领域, 很多的学者,专家都是把流程引擎与表单引擎分开的,对于这个观点我们并不很赞同。实现功能需要大量的代码开发。
JFlow是JFlow流程引擎+CCForm的表单引擎的有机结合,内容相对复杂,配置程度较高,实施周期短,上手快。
工作流程引擎 - 对比
以国外流行的工作流activiti的模式与当今中国开源的JFlow(ccflow和jflow的总称)流程引擎对照。以便让各位能够了解到中国国情的工作流引擎与国际流行的设计规则的差别、不同、与优缺点。
国外工作流比较通用的就是满足21种流程模式的支持。
5种基本控制流模式的对比
- 顺序流(Sequence)
ACTIVITI :
就是按照流程设计的步骤,一步步的向下运行,这样的模式下每个节点有先后顺序,就是每个节点只有一个节点是活动的。
例子:比如申请后进行审批,一步一步的进行任务。
JFLOW:
顺序流,也叫做没有分支的线性流程,流程一般在最后一个节点自动结束,并标识流程完成。也可以通过设置节点条件,自动结束流程。
JFlow的特点是:允许用户自己定义流程完成条件,在任何一个节点运行过程中,JFlow都要去检查条件设置,如果满足这个条件流程就自动结束。
- 并行分叉(ParallelSplit)
ACTIVITI :
流程在某个活动(节点、步骤)之后产生多个分支,并且并行流转。
例子:比如在淘宝买了个商品需要开发票,那么卖家就需要一边准备商品发货,一边准备发票邮寄。
JFLOW:
异表单分合流的分流动作,一个动作结束后(分流节点),并行启动多个分支,每个分支都要向下运动。
在cc中,可以根据方向条件设置来决定是否启用某一个分支。
- 同步(Synchronization)
ACTIVITI :
在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。流程必须等待所有的分支都执行完成后,才能激活后续活动。
例子:比如商家在收到“发票”和“商品”后,才能确认收货。
JFLOW:
异表单分合流中的合流动作,可以指定一定的完成率,才能到达合流节点。对于未完成的子线程,可以进行删除操作。
- 独占式选择(Exclusive Choice)
ACTIVITI :
一个活动完成后,只能在后面的多个分支中激活一个。
例子:比如用户下单后,可以有N种付款方式,但是只能选择其中一种。
JFLOW:
具有分支的线性流程。可以由方向条件控制,也可以由用户手动控制。
- 简单聚合(Simple Merge)
ACTIVITI :
在流程中有2个以上的分支中某一个点处被合并成一个分支,只要分支中的一条完成,即可继续进行,而其他分支自动结束。
例子:比如发货在建设银行和中国银行等支付方式中的一个完成后才被激活。
JFLOW:
即可以为带有分支的线性流程,又可以是异表单的合流动作。在线性流程中,在某一处选择需要执行的节点并完成执行后,后面的节点一步一步的执行,没有被选择的节点不执行。
在异表单中,可以通过条件设置需要执行的节点,其他节点不执行,在合流点完成汇总并激活。或者,通过设置完成率来激活合流点的操作。
区分到底是否是分合流,通过查看节点类型。
- 基本控制流程模式,在ACTIVITI 中与JFLOW中的综合实现。
ACTIVITI :
JFLOW: