工作流程引擎技术选型:Activiti、jBPM5+

当前主流的两大工作流程引擎是 Activiti 和 jBPM5+ (包括 jBPM5、jBPM6、jBPM7),本文主要介绍它们的特性及优劣。

一、概念

JBPM,全称是 Java Business Process Management (业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架,它可以运行在独立的服务器上或者嵌入任何 Java 应用中。

Activiti 的技术前身是 jBPM3、jBPM4,是基于 jBPM4 设计的衍生版本,采用了 PVM (流程虚拟机,一种可嵌入的、原生的支持多流程语言的独立技术)。
而恰恰相反,JBPM 从版本5以后,放弃了 jBPM4 的基础代码,重启炉灶,基于 Drools Flow 来实现。由于放弃了 jBPM4 的 PVM,引擎的可扩展性受到损害。

二、技术组成对比

技术组成 Activiti jBPM5+
数据持久/ORM框架 MyBatis3 Hibernate3
持久化标准 JPA规范
事务管理 MyBatis机制/Spring事务控制 Bitronix,基于JTA事务管理
数据库连接方式 Jdbc/DataSource Jdbc/DataSource
支持数据库 Oracle、SQL Server、MySQL等多种数据库 Oracle、SQL Server、MySQL等多种数据库
设计模式 Command模式、观察者模式等
内部服务通讯 Service间通过API调用 基于Apache Mina异步通讯
集成接口 SOAP、Mule、RESTful 消息通讯
支持的流程格式 BPMN2、xPDL、jPDL等 目前仅支持BPMN2 xml
引擎核心 PVM(流程虚拟机) Drools规则引擎
技术前身 jBPM3、jBPM4 Drools Flow
所属公司 Alfresco jBoss.org

Activiti 使用 Spring 进行引擎配置以及各个 Bean 的管理,综合使用 IOC 和 AOP 技术,使用 CXF 作为 Web Service 实现的基础,使用 MyBatis 进行底层数据库 ORM 的管理,预先提供 Bundle 化包能较容易与 OSGi 进行集成,通过与 Mule ESB 的集成和对外部服务(Web Service、RESTful 等)的接口可以构建全面的 SOA 应用。
jBPM5+ 使用 jBoss.org 社区的大多数组件,以 Drools Flow 作为流程引擎的核心组件,以 Hiberneta 作为数据持久化 ORM 实现,采用基于 JPA/JTA 的可插拔的持久化和事务控制规范,使用 Guvnor 作为流程管理仓库,能够与 Seam、Spring、OSGi 等集成。

需要指出的是 Activiti 是在 jBPM3、jBPM4 的基础上发展而来的,是原 jBPM 的延续,而 jBPM5+ 则与之前的 jBPM3、jBPM4 没有太大关联,且舍弃了备受推崇的 PVM (流程虚拟机)思想,转而选择 jBoss 自身产品 Drools Fow 作为流程引擎的核心实现,工作流最为重要的“人机交互”任务(类似于审批活动)则由单独的一块“Human Task Service”附加到 Drools Flow 上实现,任务的查询、处理等行为通过 Apache Mina 异步通讯机制完成。

三、优劣对比

  • 1.从技术组成上看,Activiti 最大的优势是采用了 PVM (流程虚拟机),支持了除 BPMN2 规范之外的流程格式,与外部服务有良好的集成能力,延续了 jBPM3、jBPM4 良好的社区支持,服务接口清晰,链式 API 更为优雅;劣势是持久化没有遵循 JPA 规范。
  • 2.jBPM5+ 最大的优势采用了 Apache Mina 异步通讯技术,采用 JPA/JTA 持久化方面的标准,以功能齐全的 Guvnor 作为流程仓库,有 RedHat (jBoss.org 被红帽收购)的专业化支持;但其劣势也很明显,对自身技术依赖过紧且仅支持 BPMN2。

四、技术选型

比较不一定要有胜负,要针对具体的项目区别对待,只有适合自己的才是最好的。对于我个人而言,会偏向于 Activiti,除了上手容易外,还有以下几方面的考量:

  • 1.Activiti 拥有更简洁健壮的接口
    Activiti 中提供 TaskQuery 接口,可以设置各种查询过滤、排序方式,最终通过 list 方式执行查询,相比 jBPM5+,它还提供了分页查询功能。
  • 2.Activiti 拥有更友好的用户体验
    虽然 JBPM 和 Activiti 都是使用 bpmn 格式作为流程定义语言,但二者都相应的利用了 bpmn 格式的规范扩展了一些自定义的功能,根据这些扩展它们都提供了自己的绑定表单的方式。jBPM5+ 核心引擎完全没有关于表单的任何抽象,它的工作机制是通过全局常量、流程变量、任务变量,这些概念十分技术化。相比之下,Activiti 则更贴近实际的应用场景,它将为开始节点,以及人工任务提供了表单设置,用户可以设置字段名称、字段类型。通过 Activiti 的平台可以根据这些设置去生成表单,但如果不适用其平台只使用引擎的话,也支持通过它来表达与第三方表单的关系。这些表单设置的元数据信息也可以通过接口去获取。
  • 3.Activiti 支持启动引擎后随时热部署
    jBPM5+ 存在一个软肋,一个 RuntimeService 只能在启动的时候指定 bpmn 资源,一旦启动后便不能再去更新或新增 bpmn 了,这会导致我们系统集成的困难,因为我们自然希望整个系统只有一个工作流程引擎实例运行。Activiti 则提供了 Deploy 机制,将 bpmn 资源的热部署、热更新等都做了很好的支持。
  • 4.Activiti 拥有更友好易用的 Eclipse 编辑插件和在线插件
  • 5.Activiti 依赖更少的依赖包
    Activiti 依赖的第三方 jar 包较少,主要是 mybatis 依赖,而 jBPM5+ 则依赖了一大堆的 jar 包,从 drools 包繁杂的 hibernate,再到自身拆分的零零散散的 jar 包,让人不由觉得它是一个庞然大物。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342