摘要
Activiti是一个用Java编写的开源工作流引擎,可以执行BPMN 2.0中描述的业务流程。Activiti是Alfresco的Alfresco Process Services (APS)的基础,而Alfresco是Activiti项目的主要赞助商。
本文旨在帮助读者理解Activiti的工作机制,使其可以迅速上手该框架。本文将从这几个方面简单介绍了Activiti工作流引擎:
1、为什么要使用工作流引擎
2、BPMN2.0规范简介
3、开源BPMN项目对比
1. 为什么要使用工作流引擎
假定我们有一个支付订单状态需要维护,它的状态图如下:
它的状态跃迁自左向右,清晰名了,而且没有处理角色的概念,此时我们使用代码控制好状态流转即可,无需使用框架。再来看另外一个场景,假定我们有一个企业内部采购订单,它的状态图如下:
这个采购订单的状态复杂多变,状态的转换不稳定性很强,随时有可能增加新的状态;而且不同状态的处理人也是不同的,存在权限管理功能,若此时我们仍然使用一个状态字段来维持状态变更,无疑会困难重重。
工作流引擎就是为了解决这类问题而生的,我们可以观察当前实体(如支付订单、采购订单)是否具有如下特性,由此来确定是否需要引入工作流引擎。
状态的个数及其稳定性,个数多且不稳定,适合使用工作流引擎。
每个状态的处理人,处理人角色多且不稳定,适合使用工作流引擎。
工作流引擎实际上是放大了状态管理的功能,它根据既有流程图(基于BPMN2规范)的指示,指定每一次状态跃迁的处理角色,在状态变更时持久化评论、表单、附件等数据,保存了完整处理轨迹。
工作流引擎 vs 规则引擎
1)工作流更像是管理状态跃迁的,规则引擎不关心状态跃迁,它关注的是处理过程中复杂条件的组合。
2)工作流引擎中包含“人”的任务,天生包含处理人角色控制;规则引擎不关心“人”的任务,不做特殊区分。
3)工作流引擎是宏观控制、规则引擎是微观控制。
常有人拿这两块内容做对比,笔者理解他们的侧重完全不同,没有太大的可比性。
2. BPMN2.0规范简介
业务流程模型和标记法(BPMN, Business Process Model and Notation)是一套图形化表示法,用于以图形的方式详细说明各种业务流程。
它最初由业务流程管理倡议组织(BPMI, Business Process Management Initiative)开发,名称为”Business Process Modeling Notation”,即“业务流程建模标记法”。BPMI于2005年与对象管理组织(OMG, Object Management Group)合并。2011年1月OMG发布2.0版本(时至今日,没人会用1.0版本了),同时改为现在的名称。
BPMN2.0规范的实现,实质上是一个按照特定规范编写的XML文件,使用特定的BPMN设计器,即可以图形化的形式查看和编辑该文件。Activiti以代码的形式实现了这套图形化表示法,使任务的流转依赖图形,而非具体的实现代码。
UML vs BPMN
UML和BPMN之间唯一的正式关系是OMG维护两个开放标准。
UML(统一建模语言)作为一种可视化的建模语言,其中的活动图也适用于流程建模,但其支持深度不够。
BPMN诞生时间晚于UML,据称从某种意义上讲,UML Activity Diagrams是BPMN的一个子集,也是BPMN的历史前身。
如上图所示,BPMN2.0规范包含了三个部分Gateway(网关)、Event(事件)、Activities(活动)。下面我们通过一个简单的流程定义文件来理解BPMN2.0规范。读者也可以访问这个在线设计站点来加速理解。
上图是通过BPMN设计器设计出来的简单流程,使用文本编辑器打开这个后缀为bpmn的文件,得到如下内容(点击链接查看完整文件)。可以发现BPMN2.0规范包含了三个部分在文件中都有体现:
- Gateway(网关):exclusiveGateway-排他网关,在做判断时使用,除了排他网关还有几个其它类型的网关。
- Event(事件):startEvent-开始事件、endEvent-结束事件,规范要求一个完整流程图必须包含这两个部分。
- Activities(活动):task-任务、sequenceFlow-连接线,活动是流程的主体部分,内部包含的类型相对较多。
3. 开源BPMN项目对比
BPMN2.0规范目前已成为流程处理事实上的标准,实现该规范的常见开源项目有这三个:jBPM,Activiti,Camunda。
他们实现的功能比较相似,源头上它们存在递进关系:jBPM –> Activiti –> Camunda。jBPM是最早诞生的,Activiti的发起人是从jBPM项目中脱离出来的,Camunda BPM的发起人是从Activiti项目中脱离出来的。之所以存在三个同源项目,是由于开发者们对工作流引擎的期望存在分歧。
从技术组成来看,Activiti最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,延续了jBPM3、jBPM4良好的社区支持,服务接口清晰,链式API更为优雅;劣势是持久化层没有遵循JPA规范。
jBPM最大的优势是采用了Apache Mina异步通信技术,采用JPA/JTA持久化方面的标准,以功能齐全的Guvnor作为流程仓库,有RedHat的专业化支持;但其劣势也很明显,对自身技术依赖过紧且目前仅支持BPMN2。