目前流行的工作流引擎有Activiti和jBPM5,而在jBPM5发布以前大多数项目、平台都是基于jBPM3、jBPM4开发的。
jbpm
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,使用它要遵循 ASL(Apache License Version 2.0)和EULA(JBoss End User License Agreement)协议。
Activiti5与jBPM5技术组成对比:
Activiti jBPM5
1数据库持久层ORM
MyBatis3 Hibernate3
2持久化标准
无
JPA规范
3事务管理
MyBatis机制/Spring事务控制
Bitronix,基于JTA事务管理
4数据库连接方式
Jdbc/DataSource
Jdbc/DataSource
5支持数据库
Oracle、SQL Server、MySQL等多数数据库
Oracle、SQL Server、MySQL等多数数据库
6设计模式
Command模式、观察者模式等
7内部服务通讯
Service间通过API调用
基于Apache Mina异步通讯
8集成接口
SOAP、Mule、RESTful
消息通讯
9支持的流程格式
BPMN2、xPDL、jPDL等
目前仅只支持BPMN2 xml
10引擎核心
PVM(流程虚拟机)
Drools
11技术前身
jBPM3、jBPM4
Drools Flow
12所属公司
Alfresco
jBoss.org
Activiti概念
1、什么是Activiti
activiti是一个工作流引擎,即进行工作流开发的核心组件,也可以理解为是一个工作流框架。Activiti是基于jBPM4设计的衍生版本。
进行工作流的开发,使用activiti框架开发就变的便捷,高效。
activiti可以对基于流程式控制的业务进行抽取,在不区分业务功能的前提下,对业务进行组合。无论是何种业务,都可以使用activiti进行开发。
2、工作流基本概念及实现原理
(1)基本概念
流程定义
描述流程,可以看成是类
流程实例
实际流程执行,可以看成是对象
(2)通过数据库表理解流程定义和流程实例
3、Activiti的23张表
Activiti的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_GE_*: GE表示general。通用数据, 用于不同场景下。
ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_ID_*: ‘ID’表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_RE_*: ‘RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等)。
ACT_RU_*: ‘RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
创建这些表有两种方式:
(1)手工:执行资源包中的脚本即可(不推荐)
路径:资源包\activiti-5.14\database\create查找对应的数据库脚本执行即可
(2)自动:运行activiti环境自动监测是否存在activiti数据库环境,并完成对应数据库表的初始化(推荐)
Activiti基本开发步骤
1、部署activiti
(1)创建java工程,添加activiti和spring 的jar包
(2)创建源码文件夹resource 添加配置文件( 项目必备 )
false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常
true: 构建流程引擎时,执行检查,如果需要就执行更新. 如果表不存在,就创建
create-drop: 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表
drop-create:先删除表再创建表
create: 构建流程引擎时创建数据库表, 关闭流程引擎时不删除这些表
(3)创建数据库(自动创建)
2、创建activiti流程图
(1)流程图的标准BPMN
BPMI(Building Products Manufacturing International)组织
BPMN(Business Process Modeling Notation)业务流程模型与符号,由BPMI制定的一套标准化业务流程建模符号
现行标准:BPMN2.0
BPMN是一组开发流程的符号与连接线,通过符号连接的形式快速描述出流程,快速描述流程定义
描述的流程符号仅仅是一张图,通过插件完成将图快速转换为流程定义的表数据
Eclipse提供有对应的插件,辅助编程人员快速构建模型
(2)插件安装
安装activiti-designer插件
由于创建流程数据的步骤过于繁琐,activiti官方提供的activiti-designer插件画流程图,用于定义业务流程
注意:该插件具有兼容性问题
安装插件后记得在首选项–activiti —save 的勾选中,用来自动产生流程图的图片
(3)画流程图
在任意源码包中定义流程图
3、流程定义部署
图我们画好了,下面需要流程定义的部署,也就是把我们画的图转化为数据存储在数据库中。
4、启动业务流程
业务流程定义部署完毕后,相当于在Activiti引擎中搭建了一套全新的业务流程,但是该业务流程并没有被执行,必须启动后方可使用
业务流程可以被启动多次,每次启动对应将对应一个独立的业务流程执行开启
5、查询流程任务
启动后流程实例后,我们可以查询目前都有哪些任务,我们可以按照以下代码查询任务列表
6、完成流程任务
对应阶段的任务完成后,任务将转向下一个流程节点