Activiti的介绍
一、背景介绍
公司最近接了一个监狱AB门系统的项目,在对项目进行调研时,发现客户的关注点主要是在AB门流程这块,项目大部分功能都是审批流程和单据流动状态等。而之前公司的项目关于流程主要都是在表中设置状态后使用代码进行流程控制,正好基于此项目,将工作流框架整合到项目中,记录整合过程中框架知识和在整合过程中的问题。
二、Activiti与JBPM对比
在进行工作流框架选择上,根据市场占用率主要有Activiti和jBPM。既然这样,我们就在这两个框架中选择一个,由于首次引入项目,主要考虑的还是当遇到问题时社区比较活跃和后期的一个扩展。
技术组成 | Activiti | jBPM |
---|---|---|
ORM框架 | Mybatis3 | Hibernate3 |
持久化标准 | 无 | EJB JPA规范 |
事务管理 | Mybatis自带 / Spring集成事务 | Bitronix / 基于JTA事务管理 |
数据库连接方式 | Jdbc / DataSource | Jdbc / DataSource |
Spring支持 | 天然支持Spirng | 默认未提供对Spring支持 |
支持的数据库 | Oracle / SQLServer / MySQL / H2 / 内存数据库 | Oracle / SQLServer / MySQL / 内存数据库 |
设计模式 | 命令模式 / 观察者模式 等 | 无 |
内部服务通信 | Service间通过API调用 | 基于Apache Mina异步通信 |
集成接口 | SOAP / Mule / RESTful | 消息通信 |
支持的流程格式 | BPMN2 / xPDL / jPDL 等 | 只支持BPMN2 xml |
引擎核心 | PVM流程虚拟机 | Drools |
技术前身 | jBPM3 / jBPM4 | Drools Flow |
插件工具 | IDEA的actiBPM / Eclipse的Eclipse Designer / 提供基于REST风格的Activit Explorer | 提供Eclipse插件和Web应用管理 |
更新周期 | 大约每两个月发布一次 | 不定时 |
基于以上及项目需求,我们选择Activiti作为项目的工作流框架,其中Activiti中5,6,7各个版本又有些不同,根据稳定性和社区情况,我们最终选择Activiti6.X。
三、工作流基础
3.1 什么时BPM
BPM即Business Process Management的缩写,为业务流程管理。是一套达成企业各种业务环节整合的全面管理模式。BPM是一系列逻辑相关的活动的集合,BPM最早是由工作流和企业应用集成融合发展而来,当时是为了满足无纸化办公需求。
3.2 工作流的生命周期
一个完整的工作流生命周期主要有5步:
- 1、定义:即流程的定义,所有的流程总是从定义开始。主要任务是收集需求并将其转化为流程定义。
- 2、发布:开发人员将资源打包后在系统平台中发布流程定义,主要任务流程定义文件/自定义表单/任务监听类等。
- 3、执行:具体的流程引擎按照上面定义的流程处理路线来执行业务。
- 4、监控:收集每个任务的结果,将根据不同结果来做处理。
- 5、优化:此时业务流程已经完成,需要的就是优化流程或重新设计等。
3.3 什么时BPMN
即Business Process Modeling Notation的简称,全称为业务流程建模标注 ,由BPMN标准组织发布,2011年发布到2.0之后,市场常用的都是此版本规范。
BPMN定义类业务流程图,其基于流程图技术,同时对创建业务流程操作的图形化模型进行了裁剪。业务流程的模型即图形化对象的网图,包含有活动和定义操作顺序的流程控制。
四、Activiti介绍
4.1 什么是Activiti
Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台,其核心是使用Java开发的快速、稳定的BPMN2.0流程引擎。Activiti是在ApacheV2许可下发布的,可以运行在任何类型的Java程序中,如:服务器、集群、云服务等。Activiti可以完美的与Spring集成,是基于简约的设计思想而创建。
4.2 Activiti的特点
- 1、数据持久化:Activiti设计思想是简洁与快速。一般情况下系统的瓶颈主要就体现在应用和数据库的交互上,针对这种情况Activiti选择了使用Mybatis,而通过最优SQL语句执行Command。
- 2、引擎Service接口:Activiti引擎提供了七大Service接口,都是通过ProcessEngine获取,同时支持链式API编程风格。
Service接口 | 作用 |
---|---|
RepositoryService | 流程仓库Service,用于管理流程仓库,如:部署、删除、读取流程资源 |
IdentifyService | 身份Service,可管理和查询用户、组之间的关系 |
RuntimeService | 运行时Service,处理所有正在运行的任务和流程实例等 |
TaskService | 任务Service,用于管理查询任务,如签收、办理、指派等 |
FormService | 表单Service,用于读取和任务、流程相关的表单数据 |
HistoryService | 历史Service,可查询所有历史数据 |
ManagementService | 引擎管理Service,和具体业务无关,可用查询引擎配置、数据库、作业等 |
- 3、流程设计器:Activiti团队设计了基于BPMN2.0规范的设计器-Eclipse
Designer,除此还有Signavio公司为Activiti定制的基于Web的Activiti Modeler流程设计器。 - 4、原生支持Spring:当前企业开发,基本上都会基于Spring去开发自己的系统,由于Activiti原生支持Spring,所以很轻松地进行Spring集成。
- 5、分离运行时与历史数据:运行与历史数据的分离,可以加快运行时数据的性能,当需要历史数据时,我们在去查询。
4.3 Activiti的应用
- 1、在系统集成方面:与ESB整合 / 与规则引擎整合 / 嵌入已有系统平台(也是本项目的需求)
- 2、在其他产品中应用:Alfresco公司的ECM产品在企业中应用,主要涉及文档管理 / 协作 / 记录管理 / 知识库管理 / Web内容管理等。
4.4 Activiti框架与组件
Activiti最重要的就是引擎,除此之外就是外部的工具和组件。
Modeling | Runtion | Management |
---|---|---|
Activiti Modeler | Activiti Engine | Activiti Exproler |
Activiti Designer | Activiti Engine | Activiti REST |
Activiti Kickstart | Activiti Engine | Activiti REST |
下面对以上组件进行简单的说明:
- 1、Activiti Engine:最核心的模块,提供针对BPMN2.0规范的解析 / 执行 / 创建 / 管理(任务-流程实例) /
查询历史记录并生成相应报表等。
- 2、Activiti Modeler:模型设计器,非Activiti公司开发。用于将需求转换为规范流程定义。
- 3、Activiti Designer:设计器,与Activiti Modeler功能类似。
- 4、Activiti Exproler:用来管理仓库 / 用户 / 组,启动流程 / 任务办理等。
- 5、Activiti REST:提供REST风格的服务,允许客户端以JSON的方式与引擎的REST API交互,协议具有跨平台 /
跨语言。
五、搭建Activiti开发环境并测试
5.1 下载Activiti
从Activiti下载6.0版本并将其解压,我们可对目录结构进行说明。
- 1、database:该文件夹包含Activiti引擎表的创建 / 删除 / 版本升级三种类型的SQL脚本,命名规则为
“activiti.[数据库类型].[脚本类型create|drop|upgradestep].[其他].sql”,升级脚本