当前位置:文档之家› JFlow与activiti的对比

JFlow与activiti的对比

驰骋工作流引擎JFlow与activiti对比分析报告目录前言 (4)工作流程引擎 - 对比 (4)5种基本控制流模式的对比 (5)4种高级分支同步模式 (10)2种结构化模式 (14)4种包含多实例的模式 (16)3种基于状态的模式 (19)2种取消模式 (22)总结 (23)表单集成 (24)表单引擎与流程引擎的关系 (25)最简单的请假流程-根据表单的请假天数来判断流程的分支 (25)流程引擎操纵表单引擎的一个案例 (27)对多种表单的支持 (29)简洁明快的CCForm (29)Word文档支持 (31)Excel表单的支持 (31)表单树的支持 (32)符合中国特色个性化JFlow功能 (32)流程属性 (33)多种接受人规则 (33)接受人员投递路径自动记忆 (34)发起前置导航 (35)节点属性 (35)方向条件可视化配置 (36)JFlow对工业自动化的流程支持 (37)前言为了更好的说明activiti 与jflow的两款工作流引擎的特点与区别,我们按照如下几个方面做一次全面的、客观的对比。

首先activiti是国外的一款开源的工作流程引擎,在国际上影响比较深远与广泛,解决了BPM领域的很多问题,值得我们赞赏。

他的boss是jbpm的前身。

JFlow是济南驰骋公司开放的一款工作流程引擎,JFlow的前身是CCFlow,ccflow是国内开源的一款老牌的工作流程引擎,承担过很多大型项目,适应于复杂的国内应用环境。

Activity 相对简单,仅有流程引擎,没有表单引擎。

在BPM的研究领域, 很多的学者,专家都是把流程引擎与表单引擎分开的,对于这个观点我们并不很赞同。

实现功能需要大量的代码开发。

JFlow是JFlow流程引擎+CCForm的表单引擎的有机结合,内容相对复杂,配置程度较高,实施周期短,上手快。

工作流程引擎 - 对比以国外流行的工作流activiti的模式与当今中国开源的JFlow(ccflow和jflow的总称)流程引擎对照。

以便让各位能够了解到中国国情的工作流引擎与国际流行的设计规则的差别、不同、与优缺点。

国外工作流比较通用的就是满足21种流程模式的支持。

5种基本控制流模式的对比1.顺序流(Sequence)ACTIVITI :就是按照流程设计的步骤,一步步的向下运行,这样的模式下每个节点有先后顺序,就是每个节点只有一个节点是活动的。

例子:比如申请后进行审批,一步一步的进行任务。

JFLOW:顺序流,也叫做没有分支的线性流程,流程一般在最后一个节点自动结束,并标识流程完成。

也可以通过设置节点条件,自动结束流程。

JFlow的特点是:允许用户自己定义流程完成条件,在任何一个节点运行过程中,JFlow都要去检查条件设置,如果满足这个条件流程就自动结束。

2.并行分叉(ParallelSplit)ACTIVITI :流程在某个活动(节点、步骤)之后产生多个分支,并且并行流转。

例子:比如在淘宝买了个商品需要开发票,那么卖家就需要一边准备商品发货,一边准备发票邮寄。

JFLOW:异表单分合流的分流动作,一个动作结束后(分流节点),并行启动多个分支,每个分支都要向下运动。

在cc中,可以根据方向条件设置来决定是否启用某一个分支。

3.同步(Synchronization)ACTIVITI :在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。

流程必须等待所有的分支都执行完成后,才能激活后续活动。

例子:比如商家在收到“发票”和“商品”后,才能确认收货。

JFLOW:异表单分合流中的合流动作,可以指定一定的完成率,才能到达合流节点。

对于未完成的子线程,可以进行删除操作。

4.独占式选择(Exclusive Choice)ACTIVITI :一个活动完成后,只能在后面的多个分支中激活一个。

例子:比如用户下单后,可以有N种付款方式,但是只能选择其中一种。

JFLOW:具有分支的线性流程。

可以由方向条件控制,也可以由用户手动控制。

5.简单聚合(Simple Merge)ACTIVITI :在流程中有2个以上的分支中某一个点处被合并成一个分支,只要分支中的一条完成,即可继续进行,而其他分支自动结束。

例子:比如发货在建设银行和中国银行等支付方式中的一个完成后才被激活。

JFLOW:即可以为带有分支的线性流程,又可以是异表单的合流动作。

在线性流程中,在某一处选择需要执行的节点并完成执行后,后面的节点一步一步的执行,没有被选择的节点不执行。

在异表单中,可以通过条件设置需要执行的节点,其他节点不执行,在合流点完成汇总并激活。

或者,通过设置完成率来激活合流点的操作。

区分到底是否是分合流,通过查看节点类型。

6.基本控制流程模式,在ACTIVITI 中与JFLOW中的综合实现。

ACTIVITI :JFLOW:4种高级分支同步模式1.多重选择(Multiple Choice)在流程中,当一个活动完成后,有多个分支进行选择,可以选择执行其中的一个或者N个分支。

例子:比如去世博园玩,在门口检票后,可以选择A-E个片区中的N个进行观光。

ACTIVITI 中的支持情况:1.JPDL方式不支持先定义好这里的几种,然后根据条件去筛选其中的几种进行,但是ACTIVITI.4之后支持一种叫foreach的节点,允许我们在运行时指定几种特定的任务,比如上面例子中的片区,我们可以在选定后再去循环。

2.BPMN方式支持根据条件执行多个子分支。

JFLOW中的支持情况:1.通过定义流程为异表单分合流来实现。

a通过条件控制发起子线程数量。

设置方向条件的时候,可以根据需要,选择不通的条件设置,比如:岗位条件、部门条件、表单条件等。

b通过节点树形中设置手工选择方向控制,可以控制发起子线程的发起数量。

2.通过父子流程也可以实现。

2.同步聚合(Synchronizing Merge)在流程中的某个聚合点,流程会等待所有的分支到来,才能激活后续的活动。

如果分支只有一个,那么就变成简单聚合模式;如果存在2个以上分支,那就是同步模式。

这种模式的关键在于能够动态的根据分支的多少进行聚合。

ACTIVITI 中的支持情况:可以通过设置ACTIVITI 的join节点属性multiplicity的值为某个变量,并在程序中动态的修改变量的值来制定分支的数量。

JFLOW中的支持情况:分合流中合流操作。

无论分支有多少,都可以进行汇总,并且可以对汇总的子线程进行删除操作、完成率控制等。

JFLOW的多重选择与同步聚合实例图:结束为聚合点,中间的为分支。

3.多重聚合(Multiple Merge)在流程中的多个分支,都可以激活后续的活动,也就是会产生多个实例。

例子:游客观光完N个片区之后,每个片区各自的系统可以对游客在自己片区的信息进行存储。

ACTIVITI 与JFLOW的支持请参考同步聚合。

4.鉴别器(Discriminator)在流程的某个聚合点,N个分支的第一个分支到达后,就立刻激活后续活动;与此同时,流程仍然要等待其余的分支完成并忽略完成。

注意:在其余分支未全部完成前,第一个到达的分支所激活的后续节点是无法执行的。

例子:个人申请提交后,并行提交给第一导师审批、第二导师审批、第三导师审批,他们中只要有一个完成了,那么就可以提交给学院审批。

N-out-of-M鉴别器模式:跟鉴别器模式一样的,只是这种模式是N个到达后,激活后续节点,而剩下的M-N个节点未完成前,新激活的后续节点一样无法被执行。

ACTIVITI 中的支持情况:没有直接支持这种模式,但是通过自定义节点,应该是可以处理这种模式的。

JFLOW中的支持情况:有两个属性的控制,可以实现功能,就是上面所说的子线程完成路和子线程删除规则。

第1个:子线程完成率。

该规则可以决定是否可见第2个:子线程删除规则。

该规则决定那些子线程可以被删除以及他们的删除方式。

2种结构化模式1.任意循环(Arbitrary Cycles)ACTIVITI :某一个或多个活动可以反复执行。

例子:用户买了瓶汽水,拿到汽水后,中了一瓶,又去兑换了一瓶汽水,如果又中了,再去兑换一瓶汽水….JFLOW:完全是条件判断,在表单中增加一个审核组件,就可以把每次校验的信息,写入里面,完整的显示出来整个轨迹。

2.隐式终止(Implicit Termination)ACTIVITI :指这一个流程中,如果没有活动可以执行,那么流程会自动终止。

例子:比如用户买了汽水,中了50元,但是没有地方可以兑换。

JFLOW:这种类型属于JFlow的线性流程的一种,该流程配上流程完成条件,就可以实现该功能。

流程完成条件,就是流程在前进中检查的条件,如果满足该条件,流程就停止运行,该流程实例结束。

4种包含多实例的模式1.无同步的多实例(MIwithout)在流程中,一个活动可以激活多个实例,每个实例相互独立,并不需要在后面进行同步。

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

ACTIVITI 中的支持情况:支持这种模式,但是不允许在后面进行结束动作。

JFLOW中的支持情况:分合流与父子流程支持这种模式,分合流上面已经讲过,下面说下父子流程。

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

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

父流程:2.设计时确定的多实例(MIwith a Priori Design Time Knoledge)在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候就已经知晓率。

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

JFLOW中的支持情况:合流节点处理各个子线程的任务比率。

完成率 = 子线程上已经完成的数据/所有子线程数量*100%该节点对于合流节点与分合流节点有效,当子线程的完成率达到该值的时候,该节点的待办才能显示出来,否则该节点的人员不能处理待办。

如果合流节点的处理人能够看到待办,他就可以对该流程进行操作,比如:发送、删除、退回、删除子线程等等。

3.运行时确定的多实例(MI with a Priori RunTime Knoledge)在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候并不知道,只有在运行时根据条件来决定需要激活多少个实例。

ACTIVITI 中的支持情况:对于运行时可以知晓实例数量的,可以通过设置JOIN节点的multipliclty来实现。

JFLOW中的支持情况:同表单分合流配合节点访问规则可以实现这个功能。

4.运行时无法确定的多个实例(MI without a Priori RunTime Knoledge)在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候并不知道,该模式与上一个模式的区别就是,在产生的实例执行时或者已经执行完时,仍然有新的实例产生。

相关主题