原标题:activiti和jbpm工作流引擎哪个比较好?

在常用的ERP系统、OA系统的开发中,工作流引擎是一个必不可少的工具。之前在选择工作流引擎时曾经在activiti和jbpm之间有过比较,当时做出的决定是使用jbpm,但实际开发过程中发现这个选择是不合适的。目前我们改为选择Activiti作为工作流模块的引擎,理由如下:

1、Activiti拥有更简洁健壮的接口

JBPM自从版本五后,便重启炉灶,完全抛弃了JBMP4的代码基础,重新基于drools进行了实现。JBPM5,JBPM6似乎缺少一个合格的系统架构师,其接口设计匪夷所思,基本上是按照drools的接口再提供了一套JBPM接口,同名的接口,实现类不断重复出现,代码体系十分混乱。

一个典型的例子,同样是查询待办事项,在JBPM中接口如下:

List getTasksAssignedAsBusinessAdministrator(String userId, String language);

List getTasksAssignedAsExcludedOwner(String userId, String language);

List getTasksAssignedAsPotentialOwner(String userId, String language);

@Deprecated

List getTasksAssignedAsPotentialOwner(String userId, List groupIds, String language);

@Deprecated

List getTasksAssignedAsPotentialOwner(String userId, List groupIds, String language, int firstResult, int maxResult);

List getTasksAssignedAsRecipient(String userId, String language);

List getTasksAssignedAsTaskInitiator(String userId, String language);

List getTasksAssignedAsTaskStakeholder(String userId, String language);

List getTasksOwned(String userId, String language);

List getTasksOwned(String userId, List status, String language);

上述接口设计者显然没有考虑接口的修改扩展需要,将各种复杂的查询通过一个又一个的方法提供出来,这将导致今后增加一种查询过滤就必须增加一个getXXX方法,丑陋之至,再看看Activiti的接口:

TaskQuery taskId(String taskId);

TaskQuery taskName(String name);

TaskQuery taskNameLike(String nameLike);

TaskQuery taskDescription(String description);

TaskQuery taskDescriptionLike(String descriptionLike);

TaskQuery taskPriority(Integer priority);

TaskQuery taskMinPriority(Integer minPriority);

TaskQuery taskMaxPriority(Integer maxPriority);

TaskQuery taskAssignee(String assignee);

TaskQuery taskAssigneeLike(String assigneeLike);

TaskQuery taskOwner(String owner);

TaskQuery taskOwnerLike(String ownerLike);

TaskQuery taskUnassigned();

TaskQuery taskUnnassigned();

TaskQuery taskDelegationState(DelegationState delegationState);

TaskQuery taskCandidateUser(String candidateUser);

TaskQuery taskInvolvedUser(String involvedUser);

TaskQuery taskCandidateGroup(String candidateGroup);

TaskQuery taskCandidateGroupIn(List candidateGroups);

TaskQuery processInstanceId(String processInstanceId);

TaskQuery processInstanceBusinessKey(String processInstanceBusinessKey);

TaskQuery processInstanceBusinessKeyLike(String processInstanceBusinessKeyLike);

TaskQuery executionId(String executionId);

TaskQuery taskCreatedOn(Date createTime);

TaskQuery taskCreatedBefore(Date before);

TaskQuery taskCreatedAfter(Date after);

TaskQuery excludeSubtasks();

TaskQuery taskVariableValueGreaterThan(String name, Object value);

TaskQuery processDefinitionName(String processDefinitionName);

TaskQuery withoutDueDate();

TaskQuery suspended();

TaskQuery orderByTaskAssignee();

TaskQuery orderByProcessInstanceId();

TaskQuery orderByDueDate();

long count();

U singleResult();

List list();

List listPage(int firstResult, int maxResults);

}

同样是查询待办事项,Activiti中提供TaskQuery接口,可以设置各种查询过滤,排序方式,最终通过list方法执行查询,相比jbpm,它还提供了分页查询功能,双方高下立判。

2、Activiti支持启动引擎后随时热部署

JBPM存在一个软肋,一个RuntimeService只能在启动的时候指定bpmn资源,一旦启动后便不再能够去更新或者增加bpmn了,这会导致我们系统集成的困难,因为我们自然希望整个系统只有一个工作流引擎实例运行。Activiti则提供了Deploy机制,将bpmn资源的热部署,热更新都做了很好的支持

3、Activiti拥有更友好易用的Eclipse编辑插件和在线插件

从下图就可以看到Activiti在流程编辑上的用心,以及JBPM在流程编辑器上的漫不用心:

4、Activiti依赖更少的jar包

Activiti依赖的第三方jar包较少,主要就是mybatics,而JBPM则依赖了一大堆的jar,从drools到繁杂的hibernate,再到自身拆分的零零散散的jar包,让人不由觉得它是一个庞大的怪物。

5、Activiti拥有更友好的用户体验

虽然JBPM和activiti都是使用bpmn格式作为流程定义语言,但二者都相应地利用了bpmn格式的规范扩展了一些自定义的功能,根据这些扩展它们都提供了自己的绑定表单的方式。JBPM核心引擎完全没有关于表单的任何抽象,它的工作机制是通过全局常量,流程变量,任务变量,这些概念十分技术化。

相比之下Activiti则更贴近实际的应用场景,它将为开始节点,以及人工任务提供了表单设置,用户可以设置字段名称,字段类型。通过Activiti的平台可以根据这些设置去生成表单,但如果不使用其平台只使用引擎的话,也支持通过它来表达与第三方表单的关系。这些表单设置的元数据信息也可以通过接口去获取。

总结:

JBPM5,JBPM6使用drools规则引擎来实现工作流引擎听起来是一个很酷的概念,但JBPM开发团队显然没有很好地去掌控好整个架构的变化。因此选择activiti作为工作流引擎至少在可见的几年间都是正道,今后需要实现规则库时,再单独引入drools工具包,相信drools会是一个比JBPM靠谱的工具。

如果JAVA底子差一点的话可以用XJR快速开发框架,采用主流的Activiti工作流引擎,遵循bpmn规范,可实现XML、Json一键导入导出,以及添加了人员动态选择、便捷式会签设置、便捷式任务委托设置、添加自定义表单、自定义节点按钮、动态变量选择(包括会签变量、按钮变量、表单变量)以及各节点属性优化,遵循以使用者为中心的优化原则,将整个流程的操作变得简单、快捷,实现0基础短时间可自由编辑流程模板。返回搜狐,查看更多

责任编辑:

java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?相关推荐

  1. JBPM工作流引擎内核设计思想及构架

    1 前言 流程引擎内核仅是"满足Process基本运行"的最微小结构,而整个引擎则要复杂很多,包括"状态存储"."事件处理"."组 ...

  2. 说说 jBPM 工作流引擎的设计原理

    1服务 API 设计 jBPM4 工作流引擎的核心 PVM 主要依靠 4 组服务 API : 流程定义服务 - Process Service. 流程执行服务- Execution Service. ...

  3. 学习JBPM 工作流引擎 API方法(二)

    分享一套j简单的JBPM入门视频 https://pan.baidu.com/s/1sNv5n0Xk3lXn-YSLxum2EQ 提取码:idfq 我是在eclipse当中安装的JBPM 安装好JBP ...

  4. jBPM 工作流引擎可视化编辑器

    What is jBPM? JBPM,全称是Java Business Process Management(业务流程管理). https://www.jbpm.org/ jBPM is a tool ...

  5. 自己设计java流程审核_关于工作流引擎取回审批的设计方案与实现过程

    关于工作流引擎取回审批的设计方案与实现过程 需求背景 ------------------ 0, 本文中尽量避免审批概念,因为在我们认为没有审批节点或者审核节点,任何节点都是数据采集. 1, 取回处理 ...

  6. Activiti6.0 java项目框架 spring5 SSM 工作流引擎 审批流程

    工作流模块----------------------------------------------------------------------------------------------- ...

  7. Java Activiti6.0 spring5 SSM 工作流引擎 审批流程 java项目框架

    1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...

  8. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  9. 史上最全的工作流引擎 Activiti 学习教程(值得收藏)

    点击关注公众号,实用技术文章及时了解 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则 ...

最新文章

  1. android中文字中间有超链接的实现方法
  2. oracle 12c java 驱动,oracle12c驱动jar包
  3. 数据结构 排序(希尔排序)
  4. 速查!你的身份证绑定了几个微信?
  5. 外网如何访问 Service?- 每天5分钟玩转 Docker 容器技术(139)
  6. Android 全局悬浮按钮,悬浮按钮点击事件
  7. PHP开发套件采用wamp时配置PHPStorm
  8. IOT(23)---LoRa网络架构与终端装置运作图
  9. linux控制协程参数,Linux高性能网络:协程系列05-协程实现之原语操作
  10. ssm+redis 如何更简洁的利用自定义注解+AOP实现redis缓存
  11. RFBNet模型推理
  12. 【转】主板上的电压符号:vdd,vddq,5vsb,3.3sb,vcc3.3,Vdimm
  13. charles抓包https证书下载
  14. 数据分析|SQL面试题集锦
  15. 腾讯移动互联网事业群(MIG)综合分析
  16. 解决Java.lang.NoClassDefFoundError:com/lowagie/text/Elemen的问题
  17. Python中用于判断两个集合的交集是否为空集isdisjoint()方法
  18. Pr调色预设怎么安装?.cube格式luts预设如何导入pr?Premiere导入LUTs预设详细教程
  19. FLUENT多孔介质数值模拟设置【转载】
  20. 突破HDMI-HDTV 分辨率1080限制的解决方法

热门文章

  1. 给asterisk写app供CLI调用
  2. java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法
  3. 计算机系统时间无法更改,电脑时间不能修改|系统时间改不了 四个处理办法
  4. python数据整理 高一_关于Python爬虫的最全知识梳理,项目经理花了三天总结出来的经验...
  5. 计算机网址登录教程,melogincn电脑登录教程
  6. 刺激战场c语言,刺激战场:假车库、C字楼都是啥?学会吃鸡术语新手变大神!...
  7. git指令快捷 idea_IDEA+Git+Gitlab使用详细教程
  8. 不自定义异步方法的线程池默认使用SimpleAsyncTaskExecutor
  9. mac系统快捷键大全详细介绍
  10. 校验功能算eo还是ilf_如何区分ILF和EIF?