Activiti 是一个针对企业用户、开发人员 、系统管理员的轻量级工作流业务管理平台,其核心是使用 java 开发的快速 、 稳定的 BPMN2.0 流程引擎 。它可以与 spring 完美集成。
创始人 Tom Baeyens 曾经是 JBoss jBPM 的项目架构师,所以之前接触过 jBPM4 的同学,会觉得 Activiti5 很亲切O(∩_∩)O哈哈~
1 工作流生命周期
一个完整的工作流生命周期会经过以下 5 个阶段,并迭代循环:
阶段 | 说明 |
---|---|
定义 | 业务需求人员收集业务需求,然后交由开发人员加工转化为计算机可以识别的流程定义。 |
发布 | 开发人员打包各种资源,然后在系统管理平台中发布流程定义(包括流程定义文件 、自定义表单 、 任务监听类等资源 )。 |
执行 | 流程引擎按照事先定义好的流程,以任务驱动的方式予以执行 。 |
监控 | 监控依赖执行阶段 。 业务人员在办理任务的同时,引擎会收集每个任务的办理结果,然后根据结果做出处理。 |
优化 | 对整个流程的运行结果进行分析,在此基础上进一步改进,并再次开始一个新的周期。 |
2 BPMN
BPMN 是 Business Process Modeling Notation 的简称,即业务流程建模与标注。
BPMN 定义了一个业务流程图,这个流程图被设计用于创建业务流程操作的图形化模型 。 而一个业务流程模型( Business Process Model ),指一个由图形对象( graphical objects )组成的网状图,图形对象包括活动( activities) 和用于定义这些活动执行顺序的流程控制器( flow controls ) 。
3 Activiti 特性
3.1 MyBatis
Activiti 的设计思想是简洁 、 快速 。 所以它选择了MyBatis 作为数据持久层框架,从而可以通过最优的 SQL 语句执行 Command ,仅凭如此就能让引擎在速度上保持最高的性能 。
3.2 服务接口
Activiti 提供了 7 个服务接口,都通过 ProcessEngine 来获取,并且支持链式编程风格:
服务接口 | 说明 |
---|---|
RepositoryService | 仓库服务,用于管理仓库,比如部署或删除流程定义、读取流程资源等。 |
IdentifyService | 身份服务,管理用户、组以及它们之间的关系。 |
RuntimeService | 运行时服务,管理所有正在运行的流程实例、任务等对象。 |
TaskService | 任务服务,管理任务。 |
FormService | 表单服务,管理和流程、任务相关的表单。 |
HistroyService | 历史服务,管理历史数据。 |
ManagementService | 引擎管理服务,比如管理引擎的配置、数据库和作业等核心对象。 |
3.3 流程设计器
与 jBPM 类似,Activiti 也提供了基于 Eclipse 的流程设计器 —— Eclipse Designer。 此外还有 Signavio 公司为 Activiti 定制的基于 Web 的 流程设计器 —— Activiti Modeler。
3.4 原生支持 Spring
Activiti 可以很容易与 Spring 集成,这对于管理事务和解析表达式来说,非常方便。
3.5 分离运行时数据与历史数据
这一特性与 jBPM4 的设计理念一脉相承。这样的设计架构使得引擎可以快速地读取运行时数据,只有在需要时才会从历史表中查询历史数据。 这样可以极大地提高数据的存取效率。
4 Activiti 架构
组件 | 说明 |
---|---|
流程引擎(Activiti Engine) | 提供针对 BPMN 2.0 规范的解析;执行 、创建和管理流程实例与任务;以及查询历史记录并根据结果生成报表等功能。 |
业务模型设计器(Activiti Modeler) | 由 Signavio 公司设计实现,适用于业务人员把需求转换为流程定义。 |
开发模型设计器(Activiti Designer) | 开发人员可以导入业务需求人员用业务模型设计器设计的流程定义文件( XML 格式),这样就可以进一步加工成为可以运行的流程定义信息 。 |
流程管理器(Activiti Explorer) | 用于管理仓库、用户、组、流程实例和任务等流程对象。 |
流程 REST 服务(Activiti REST) | 提供 Restful 风格的服务,允许客户端以 JSON 的数据格式与引擎的 REST API 进行交互。 |
一、为什么选择Activiti
二、核心7大接口、28张表
(一)7大接口
RepositoryService:提供一系列管理流程部署和流程定义的API。
RuntimeService:在流程运行时对流程实例进行管理与控制。
TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
ManagementService:提供对流程引擎进行管理和维护的服务。
HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
FormService:表单服务。
(二)28张表
1、act_ge_ 通用数据表,ge是general的缩写
2、act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口
3、act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口
4、act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据
5、act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据
三、创建BPMN业务流程模型
1.将Activiti提供的流程设计器应用activiti-app.war部署到Tomcat的webapps目录。
2.创建新的MySql数据库。修改activiti-appWEB-INFclassesMETA-INFactiviti-app目录下的activiti-app.properties配置文件,默认使用H2内存数据库,创建的模型重启后会丢失,改成使用MySql数据库。
3.浏览器访问http://localhost:8080/activiti-app,登录账户:admin:test
4.创建一个请假审批流程图
请假审批流程图
给每个用户任务指派候选组(有权限执行当前任务的角色)
指派候选组
指派候选组
排他网关设置条件分支表达式
设置条件分支
设置条件分支
导出流程图为.bpmn20.xml文件