Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
介绍
- 工作流引擎
ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
- BPMN
业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)
- 数据库
activiti所有的表都以ACT_开头,第二部分是表示表用途的两个字母标识
核心API
Deployment:流程部署对象,部署一个流程时创建
- ProcessDefinitions:流程定义,部署成功后自动创建
- ProcessInstances:流程实例,启动流程时创建
- Task:任务,在activiti中的task指有角色参与的任务,即定义中的userTask
- Execution:执行计划,流程实例和流程执行中的所有节点都是Exetution,如UserTask、ServiceTask等
服务接口
- ProcessEngine:流程引擎的抽象,通过它可以获得我们需要的一切服务
- RepositoryService:管理流程定义,提供了对repository的存取服务
- RuntimeService:执行管理,包括启动、推进、删除流程实例等操
- TaskService:任务管理
- IdentityService :用户和组的管理
- ManagementService:用于系统的日常维护
- HistoryService:获取正在运行或已经完成的流程实例的信息
- ProcessEngine:流程引擎的抽象,通过它我们可以获得我们需要的一切服务。
2. RepositoryService:Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0 XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中。RepositoryService提供了对 repository的存取服务。
3. RuntimeService:在Activiti中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
4. TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
5. IdentityService: Activiti中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的Task。IdentityService提供了对Activiti 系统中的用户和组的管理功能。
6. ManagementService: ManagementService提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。
7. HistoryService: HistoryService用于获取正在运行或已经完成的流程实例的信息,与RuntimeService中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
现在至少要知道有这些对象和接口。并结合Activiti Api这一章节来看,你就会对部署流程、启动流程、执行任务等操作有一个基本的概念。之后编写一个简单的单元测试,主要为了测试activiti.cfg.xml配置的是否正确,流程是否可以被部署即可。
至于与Spring的集成,一定要熟悉基于Spring配置Activiti,以及事务的处理。流程任务
数据库设计
命名规则
Activiti 使用到的表都是 ACT 开头的。表名的第二部分用两个字母表明表的用途。
ACT_GE (GE) 表示 general 全局通用数据及设置,各种情况都使用的数据。
ACTHI (HI) 表示 history 历史数据表,包含着程执行的历史相关数据,如结束的流程实例,变量,任务,等等
ACTRE (RE) 表示 repository 存储,包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
ACTRU (RU) 表示 runtime 运行时,运行时的流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
数据表详情
全局通用数据 (ACTGE*)
表名 | 解释 |
---|---|
ACT_GE_BYTEARRAY | 二进制数据表,存储通用的流程定义和流程资源。 |
ACT_GE_PROPERTY | 系统相关属性,属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。 |
历史数据表(ACTHI*)
表名 | 解释 |
---|---|
ACT_HI_ACTINST | 历史节点表 |
ACT_HI_ATTACHMENT | 历史附件表 |
ACT_HI_COMMENT | 历史意见表 |
ACT_HI_DETAIL | 历史详情表,提供历史变量的查询 |
ACT_HI_IDENTITYLINK | 历史流程人员表 |
ACT_HI_PROCINST | 历史流程实例表 |
ACT_HI_TASKINST | 历史任务实例表 |
ACT_HI_VARINST | 历史变量表 |
静态信息表 (ACTRE*)
表名 | 解释 |
---|---|
ACT_RE_DEPLOYMENT | 部署信息表 |
ACT_RE_MODEL | 流程设计模型部署表 |
ACT_RE_PROCDEF | 流程定义数据表 |
运行数据 (ACTRU*)
表名 | 解释 |
---|---|
ACT_RU_DEADLETTER_JOB | 无法执行工作表: 如果一个任务执行了很多次,都无法执行,那么这个任务会写到 |
ACT_RU_EVENT_SUBSCR | 运行时事件 throwEvent、catchEvent 时间监听信息表 |
ACT_RU_EXECUTION | 运行时流程执行实例 |
ACT_RU_IDENTITYLINK | 运行时流程人员表,主要存储任务节点与参与者的相关信息 |
ACT_RU_INTEGRATION | 运行时积分表 |
ACT_RU_JOB | 运行时定时任务数据表 |
ACT_RU_SUSPENDED_JOB | 暂停的工作,流程中有一个定时任务,如果把这个任务停止工作了,这个任务会在act_ru_suspended_job中写入数据 |
ACT_RU_TASK | 运行时任务节点表 |
ACT_RU_TIMER_JOB | 运行时定时器作业表 |
ACT_RU_VARIABLE | 运行时流程变量数据表 |
其它表
表名 | 解释 |
---|---|
ACT_EVT_LOG | 事件日志 |
ACT_PROCDEF_INFO | 流程定义的动态变更信息 |
部署流程定义的方法有很多种,包括:
1 classpath方式:addClasspathResource() 2 InputStream方式:addInputStream() 3 字符串方式:addString() 4 zip/bar方式:addZipInputStream()
注意两个区别
- @PathVariable是获取url上数据的。
- @RequestParam获取请求参数的(包括post表单提交)
通用数据表流程存储数据表身份数据表运行时数据表历史数据表DMNP规则引擎数据表
1. 通用数据表(ACT_GE)
用于存放一些通用的数据通用数据表有两个资源表(ACT_GE_BYTEARRAY)用于保存与流程引擎相关的资源,只要调用了activiti存储服务的API,涉及的资源均会转换为byte数组保存到这个表中字符串、流程文件的内容、流程图片内容等属性表(ACT_GE_PROPERTY)activiti将全部属性抽象为key-value对,该表用于保存这些属性
2. 流程存储数据表(ACT_RE)
部署数据表(ACT_RE_DEPLOYMENT)用于保存部署信息流程定义表(ACT_RE_PROCDEF)保存流程定义数据(流程文件的解析内容)流程设计模型表(ACT_RE_MODEL)创建流程的设计模型时,保存在该数据表中
3. 身份数据表(ACT_ID)
身份数据模块可以独立于流程引擎而存在用户表(ACT_ID_USER)用于保存流程引擎用户的信息用户账号(信息)表(ACT_ID_INFO)
用户组表(ACT_ID_GROUP)用于保存用户组的数据
关系表(ACT_ID_MEMBERSHIP)一个用户组下有多个用户,一个用户可以属于不同的用户组,这种多对多的关系,就使用关系表来进行描述
4. 运行时数据表
流程实例(执行流)表
流程任务表
流程参数表
流程与身份关系表
工作数据表
事件描述表