工作流引擎JFlow与activiti 对比分析(一)5种基本控制流模式的对比
为了更好的说明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:

工作流引擎JFlow与activiti 对比分析(一)5种基本控制流模式的对比的更多相关文章
- 驰骋工作流引擎JFlow与activiti的对比 -总结
共同点: 1. 嵌入式的工作流引擎,降低集群复杂性. 2. 严格而灵活的流程版本控制 3. 支持多种数据库 4. 支持多种流程设计模式 5. 成熟度高的开源工作流,具有可靠的稳定性和性能. 区别: 1 ...
- 驰骋工作流引擎JFlow与activiti的对比之2种取消模式
1. 取消模式(Cancel Activity) 就是将某个活动取消. JFLOW中,类似与删除流程操作相同. 不能删除:不允许删除. 逻辑删除:仅仅将此流程标记为删除状态,数据仍然存在节点表单与流程 ...
- 驰骋工作流引擎JFlow与activiti的对比之4种包含多实例的模式
1. 无同步的多实例(MIwithout) 在流程中,一个活动可以激活多个实例,每个实例相互独立,并不需要在后面进行同步. 例子:比如用户购买了N本书,于是后续的支付账单.更新客户可以以本书为单位各自 ...
- 驰骋工作流引擎JFlow与activiti的对比之4种高级分支同步模式
多重选择(Multiple Choice) 在流程中,当一个活动完成后,有多个分支进行选择,可以选择执行其中的一个或者N个分支. 例子:比如去世博园玩,在门口检票后,可以选择A-E个片区中的N个进行观 ...
- 驰骋工作流引擎JFlow与activiti的对比之2种结构化模式
1. 任意循环(Arbitrary Cycles) ACTIVITI : 某一个或多个活动可以反复执行. 例子:用户买了瓶汽水,拿到汽水后,中了一瓶,又去兑换了一瓶汽水,如果又中了,再去兑换一瓶汽水- ...
- .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
Pop分组模式和表格模式对比 关键词: 驰骋工作流引擎 表单引擎 ccflow .net开源工作流 jflow Java工作流引擎 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 a ...
- java工作流引擎Jflow父子流程demo
关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 定义 一个流程A的一个节点,因工作的需要调起另外的流程B,A就叫父流程,B就叫子流程.如果流 ...
- java工作流引擎Jflow流程事件和流程节点事件设置
流程实例的引入和设置 关键词: 开源工作流引擎 Java工作流开发 .net开源工作流引擎 流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...
- Java工作流引擎jflow对流程的结束大总结
关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工 ...
随机推荐
- Java高并发缓存架构,缓存雪崩、缓存穿透之谜
面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是 ...
- TensorFlow.org教程笔记(一)Tensorflow初上手
本文同时也发布在自建博客地址. 本文翻译自www.tensorflow.org的英文教程. 本文档介绍了TensorFlow编程环境,并向您展示了如何使用Tensorflow解决鸢尾花分类问题. 先决 ...
- [SQL]LeetCode577.员工奖金 | Employee Bonus
Select all employee's name and bonus whose bonus is < 1000. Table:Employee +-------+--------+---- ...
- [Swift]LeetCode838. 推多米诺 | Push Dominoes
There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...
- 值得收藏的Mybatis通用Mapper使用大全。
引言 由于小编的记性不太好,每次在写代码的时候总是把通用mapper的方法记错,所以今天把通用mapper的常用方法做一下总结,方便以后直接查看.好了,不废话啦. 引包 <!-- 通用Mappe ...
- 美国5G:初步上线玩砸,信号难寻和4G无差别
事件背景: 自从美国最高联邦法院给美国国会立法机关送去了传票之后,至今为止还暂时没有动静.传票限期两个月,不开庭就视为自动败诉,目前离最后的期限应该还有一个月的时间,静心等待结果就好. 不过这段时间, ...
- ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询
聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...
- CentOS6.5中部署java web环境
原来在linux中部署java web环境,没有做好总结,这次在部署的过程中,将部署的过程做了记录,希望对大家有帮助.主要内容包括CentOS安装以后的网络设置,系统自带jdk的卸载,新版本jdk的安 ...
- python获取当前运行程序的名字
import os filename = os.path.abspath(__file__) print filename 打印结果: E:\bluedon\test.py
- 记Javascript一道题的理解
代码如下: function Foo(){ getName = function(){ console.log("1"); } return this; } Foo.getName ...