写作背景
在办公纸质时代甚至现在,许多流程审核采用手工递纸张表单的方式,一级一级审批签字,工作效率非常低下,而且对于数据统计以及生成报表的功能,需要经过大量的手工操作才能实现。随着计算机的普及以及互联网时代的到来,这些工作的参与者只需要在计算机的系统中填入工作内容,系统就会按照定义好的流程自动执行,各级审批者可以得到工作的信息并做出相应的审批和管理操作。数据统计以及报表的生成也由系统代为完成,这样大大提高了工作效率,在这种背景下,各种的工作流应用以及中间件应运而生。
两年前,初入公司在营销平台就开始为营销活动申请专门定制了工作流审核平台–甜橙金融营销自助平台。今年在接管新平台后有些老业务需要迁移,在迁移过程中发现很多业务都有这种一级审核、二级审核甚至多级审核机制。随着自助平台定制化需求越来越多,流程与业务耦合性增强;以及老业务平台审核方案产生多套临时业务申请表,维护临时表越来越困难。为了实现这种业务与流程的分离,启发了脑海中的思考,是不是可以将流程从业务中单独剥离出来做统一的流程管理。
目录
一、工作流介绍
在了解 Activiti 之前我们先了解一下什么是工作流,什么是工作流建模,以及工作流要解决的问题:
工作流,是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。
工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。
BPMN2.0
计算机在近时代的发展,工作流被广泛应用于电信、软件、制造、金融和办公自动化领域,随着工作流技术的兴起,为了给全部业务的参与者提供易于理解的标准标记法,由业务流程管理倡议组织(BPMI),开发出了“业务流程建模标记法” (Business Process Modeling Notation, BPMN), BPMN规范的发布是为了让业务流程的全部参与人员对流程可以进行可视化管理,提供一套让所有参与人员都易于理解的语言和标记,为业务流程的设计人员(非技术人员)和流程的实现人员(技术人员)建立起一座桥梁.。BPMI组织于2005年并入OMG组织,当前BPMN规范由OMG组织进行维护:
2004年发布 BPMN 1.0规范。
2008年1月发布 BPMN 1.1规范。
2011年1月发布 BPMN 2.0规范,并且全称改为 Business Process Model And Notation(业务流程模型和符号)。
元素
使用BPMN 2.0的目的是建立简单并且易懂的业务流程模型,但是同时又需要处理高度复的业务流程,因此要解决这两个矛盾的要求,需要在规范中定义标准的图形和符号。BPMN定义了5个基础的元素类别:
- 流对象(Flow Objects),在一个业务流程中,流对象是用于定义行为的图形元素,主要有事件(Events)、活动(Activities)和网关(Gateways)三种流对象。
- 数据(Data):主要有数据对象(Data Objects)、数据输入(Data Inputs) 、数据输出(Data Inputs)和数据存储(Data Stores) 4种元素。
- 连接对象(Connecting Objects):用于连接流对象,主要有4种连接流对象的方式,包括顺序流(Sequence Flows)、消息流(Message Flows)、关联(Associations)和数据关联(Data Associations) 。
- 泳道(Swimlanes):泳道提供了两种途径用于组织基础的模型元素,分别是池(Pools)和道(Lanes) 。
- 制品(Artifacts):制品主要用于为流程提供附加信息,当前制品包括组(Group)和注释(Text Annotation) 。
以上的元素分类以及下面表格中所列的元素,均是BPMN规范中元素的组成部分,每个对象均有自己对应的图形。下面的表格给出了各个元素的图形及其描述。
元素 | 图形 | 描述 |
---|---|---|
事件(Events) | ![]() |
发生在流程执行过程中的事情 |
活动(Activities) | ![]() |
在流程执行过程中执行的工作 |
网关(Gateways) | ![]() |
控制流程的分支和聚合 |
顺序流(Sequence Flows) | ![]() |
表示流对象的前后执行顺序 |
消息流(Message Flows) | ![]() |
表示公开流程或协作模型里参与者之间的消息、交互 |
关联(Association) | ![]() |
为流程中的元素关联信息或数据 |
池(Pool) | ![]() |
我们使用池来表示流程的参与者 |
道(Lane) | ![]() |
我们使用道对池内的活动进行分组 |
数据对象(Data Object) | ![]() |
数据对象是一个显示活动是如何需要或产生数据的 |
消息(Message) | ![]() |
消息主要用于描述流程参与者之间的沟通内容 |
组(Group) | ![]() |
对元素进行分类 |
注释(Text Annotation) | ![]() |
给元素附加信息,便于阅读 |
以上是 BPMN 规范中定义的基本元素,在这些元素的基础上,会产生很多子元素,例如网关(Gateways),还可以细分为排他网关、并行网关等,详细分类见下图。
BPMN 2.0 xml 结构
一份遵循BPMN 2.0 规范的流程描述文件,除了可以用流程元素的图形定义,还可以用 XML 语法规范定义,这样流程描述文件就可在不同的流程引擎中使用,只要该流程引擎遵守 BPMN 2.0规范,例如可以用 标签来表示用户任务。
除了 BPMN2.0规范的元素及其属性外,工作流引擎的供应商还可以在不改变已有属性的前提下,在这些规范的基础上添加额外的属性,但是添加的属性不能与已有的属性产生冲突,而且还需要简单易懂。 Activiti 扩展了额外的属性,为了不产生冲突,属性名称统一用 “activiti:” 开头,后面再拼接属性名。例如,属性 activiti:class=”com.bestpay.DemoService”。
二、Activiti 介绍
Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,采用了宽松的Apache Licence 2.0开源协议,因此Activiti一经推出,就得到了开源社区的大力支持,在开源社区的支持下, Activiti吸引了很多的工作流专家参与到该项目中,并且也促使了Activiti在工作流领域的创新。
Activiti的创始人Tom Baeyens是jBPM的创始人,由于在jBPM的未来架构上产生意见分歧, Tom Baeyens在2010年离开了JBoss并加入Alfresco公司,Tom Baevens的离开使得jBPM5完全放弃了jBPM4的架构,基于Drools Flow重新开发。而在2010年的5月,Tom Baeyens发布了第一个Activiti版本(5.0alphal),由此看来,Activiti更像是jBPM4的延续,也许为了让其看起来更像jBPM4的延续,Activiti团队直接将Activiti的第一个版本定义为5.0。
服务组件
在 Activiti 中,流程引擎的实例对象是 ProcessEngine, 当创建了了流程引擎实例后,在ProcessEngine中会初始化一系列服务组件,这些组件提供了大部分操作流程引擎数据的业务方法,它们就好像J2EE中的Service层,可以使用ProcessEngine中的getXXXService方法得到这些组件的实例。一个ProcessEngine主要有以下实例,如下图。
- RepositoryService: 提供一系列管理流程定义和流程部署的API。
- RuntimeService: 在流程运行时对流程实例进行管理与控制。
- TaskService: 对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
- IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
- MangementService:提供对流程引擎进行管理和维护的服务。
- HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
- DynamicBpmnService:使用该服务,可以不需要重新