Activiti理解
目录
声明
码字不易,如果转载或复制,还请附上我的CSDN
1.概念
- 工作流:是对工作流程及其各操作步骤之间业务规则的抽象概括描述
- 工作流建模:即将工作流程中的工作如何,前后组织在一起的逻辑和规则。在计算机中以恰当的模型表达并对其实施计算。
- 工作流目地:是要解决的问题,是为了实现某个业务目标。利用计算机在多个参与者之间按某种预定规则自动传递文档信息或者任务
2.快速部署环境体验
2.1 搭建环境
- 官网下载tomcat和activiti6
- 将activiti-6.0.0/wars下的activiti-admin.war/acitivi-app.war/activi-rest.war三个文件拷贝到tomcat的webapp目录下,启动tomcat
- 登陆网址
http://localhost:8080/activiti-app
(admin/test)
目标:制作一个二级审批流程,用户userliu提出请假审批 -> userhr审批 -> userboss审批 ->结束
2.2 登陆系统,创建流程
2.2.1 创建用户
2.2.2 创建流程
2.2.3 创建审批流程app,并发布使其生效
2.2.4 最终效果
至此,一个完整的二级审批流程就创建出来了,可以登陆userliu用户发起审批流程,然后分别登陆userhr,userboss去审批
2.3 发起审批流程
2.3.1 先登陆userliu用户发起审批流程
2.3.2 分别登陆userhr,userboss用户去审批
2.3.3 查看详细审批流程信息
登陆activiti-admin系统
http://localhost:8080/activiti-admin
(admin/amin)
1,先修改端口
在deployment目录下就有已经结束的审批流程详细信息了
3.Activiti源码初探
3.1 核心模版
- 核心模块
- module/activiti-engine 核心引擎
- module/activiti-spring Spring集成模块
- module/activiti-spring-boot SpringBoot集成模块
- module/activiti-rest 对外提供rest api模块
- module/activiti-form-engine 表单引擎模块
- module/activiti-ldap 集成ldap用户的模块
3.2 基于源码运行Activiti
- 启动activiti-app
- $ cd modules/activiti-ui/activiti-app
- $ mvn clean tomcat7:run
- $ open http://localhost:9999/activiti-app
3.4 搭建基础版Demo
基于maven工程
pom.xml
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.176</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.11</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
单元测试举例:
private static final Logger logger = LoggerFactory.getLogger(App.class);
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
String name = processEngine.getName();
logger.info("name={}",name);
4.Activiti源码深入
4.1 日志组件
4.1.1 配置流程历史记录级别
- 配置HistoryLevel
- none:不记录历史流程,性能高,流程结束后不可读取
- activiti:归档流程实例和活动实例,流程变量不同步
- audit:默认值,在activiti基础上同步变量值,保存表单属性
- full:性能较差,记录所有实例和变量细节变化
4.2 Activiti流程引擎配置
4.2.1 流程引擎配置类的作用
- ProcessEngineConfiguration
- 查找并解析xml配置文件activiti.cfg.xml
- 提供多个静态方法创建配置对象
- 实现几个基于不同场景的子类,配置方式非常灵活
4.2.2 创建流程引擎配置对象
静态方式创建配置对象
4.2.3 流程引擎配置及对象
4.3 流程运行控制服务
- 流程实例与执行流
- 流程实例(ProcessInstance)表示一次工作流业务的数据实体
- 执行流(Execution)表示流程实例中具体的执行路径
- 流程实例接口继承执行流
- 流程触发
- 使用trigger触发ReceiveTask节点
- 触发信号普获事件signalEventReceived
- 触发消息普获事件messageEventReceived
4.3.1 任务管理服务
- TaskService
- 对用户任务UserTask管理和流程的控制
- 设置用户任务(UserTask)的权限信息(拥有者,候选人,办理人)
- 针对用户任务添加任务附件,任务评论和事件记录
- TaskService对Task管理与流程控制
- Task对象的创建,删除
- 查询Task,并驱动Task节点完成执行
- Task相关参数变量(variable)设置
- TaskService设置Task权限信息
- 候选用户(candidateUser)和候选组(candidateGroup)
- 指定拥有人(Owner)和办理人(Assignee)
- 通过claim设置办理人
- TaskService设置Task附加信息
- 任务附件(Attachment)创建与查询
- 任务评论(Comment)创建与查询
- 事件记录(Event)创建与查询
4.3.2 身份管理服务
- IdentityService
- 管理用户(User)
- 管理用户组(Group)
- 用户与用户组的关系(Membership)
4.3.3 表单管理服务
- FormService
- 解析流程定义中表单项的配置
- 提交表单的方式驱动用户节点流转
- 获取自定义外部表单key
4.3.4 历史管理服务
- HistoryService
- 管理流程实例结束后的历史数据
- 构建历史数据的查询对象
- 根据流程实例ID删除流程历史数据
- HistoryService历史数据实体
历史数据实体 | 描述 |
---|---|
HistoryProcessInstance | 历史流程实例实体类 |
HistoryVariableInstance | 流程或任务变量值的实体 |
HistoryActivityInstance | 单个活动节点执行的信息 |
HistoryTaskInstance | 用户任务实例的信息 |
HistoryDetail | 历史流程活动任务详细信息 |
- HistoryService构建历史查询对象
- create【历史数据实体】Query
- createNative【历史数据实体】Query
- createProcessInstanceHistoryLogQuery
- HistoryService删除历史操作
- deleteHistoryProcessInstance
- deleteHistoryTaskInstance
4.3.5 管理服务
- 管理服务 ManagementService
- 数据库相关通用操作
- 查询表结构元数据(TableMetaData)
- 通用表查询(TablePageQuery)
- 执行自定义的Sql查询(executeCustomSql)
- 执行流程引擎命令(Command)
- job任务管理
- 数据库相关通用操作
工作查询对象 | 描述 |
---|---|
JobQuery | 查询一般工作 |
TimerJobQuery | 查询定时工作 |
SuspendedJobQuery | 查询中断工作 |
DeadLetterJobQuery | 查询无法执行的工作 |
4.3.6 动态流程定义服务DynamicBpmnService
5.异常策略
- ActivitiException
异常名称 | 描述 |
---|---|
ActivitiWrongDbException | 引擎与数据库版本不匹配 |
ActivitiOptimisticLockingException | 并发导致乐观锁异常 |
ActivitiClassLoadingException | 加载类异常 |
ActivitiObjectNotFountException | 操作对象不存在 |
ActivitiLegalArgumentException | 非法的参数 |
ActivitiTaskAlreadyClaimedException | 任务被重新声明代理人 |
BpmnError | 定义业务异常,控制流程 |
6.数据模型设计
6.1 数据表分类
- ACT_GE_* 通用数据表(GE表示General)
- ACT_GE_PROPERTY 属性表(保存 流程引擎的kv健值属性)
- ACT_GE_BYTEARRAY 资源表(存储流程定义相关的资源)
- ACT_RE_* 流程定义存储表(RE表示Repository)
- ACT_RE_DEPLOYMENT 流程部署记录表
- ID_ 主键
- NAME_ 名称
- CATEGORY 分类
- TENANT_ID 多租户标志
- DEPLOY_TIME_ 部署时间
- KEY_ 标志key
- ENGINE_VERSION_ 兼容版本
- ACT_RE_PROCDEF 流程定义信息表
- DEPLOYMENT_ID_ 关联部署ID
- RESOURCE_NAME_ 流程定义资源名称
- DGRM_RESOURCE_NAME_ 流程图片资源名称
- HAS_START_FORM_KEY_ 是否存在开始表单标志
- HAS_GRAPHICAL_NOTATION_ 是否有图形信息
- SUSPENSION_STATE_ 挂起状态 1正常,2挂起
- ACT_RE_MODEL 模型信息表(用于web设计器)
- ACT_PROCDEF_INFO 流程定义动态改变信息表
- ACT_RE_DEPLOYMENT 流程部署记录表
- ACT_ID_* 身份信息表(ID表示Identity)
- ACT_ID_USER 用户的基本信息
- ACT_ID_INFO 用户的扩展信息
- USER_ID_ 关联用户ID
- TYPE_ 类型
- KEY_ 属性名
- VALUE_ 属性值
- PASSWORD_ 密码(并没使用)
- PARENT_ID_ 上级关联
- ACT_ID_GROUP 群组
- ACT_ID_MEMBERSHIP 用户与群组关系
- ACT_RU_* 运行时数据库表(RU表示RunTime)
- ACT_RU_EXECUTION 流程实例与分支执行信息
- ACT_RU_TASK 用户任务信息
- ACT_RU_VARIABLE 变量信息
- ACT_RU_IDENTITYLINL 参与者相关信息
- ACT_RU_EVENT_SUBSCR 事件监听表
- ACT_RU_JOB 作业表
- ACT_RU_TIMER_JOB 定时器表
- ACT_RU_SUSPENDED_JOB 暂停作业表
- ACT_RU_DEADLETTER_JOB 死信表
- ACT_HI_* 历史数据库表(HI表示History)
- ACT_HI_PROCINST 历史流程实例表
- ACT_HI_ACTINST 历史节点信息表
- ACT_HI_TASKINST 历史任务表
- ACT_HI_VARINST 历史变量
- ACT_HI_IDENTITYLINK 历史参与者
- ACT_HI_DETAIL 历史变更
- ACT_HI_ATTACHMENT 附件
- ACT_HI_COMMENT 评论
- ACT_EVT_LOG 事件日志
6.2 数据库建表语句
- Mysql建表语句
- 核心引擎activiti.mysql.create.engine.sql
- 历史数据activiti.mysql.create.history.sql
- 身份信息activiti.mysql.create.identity.sql
- Mysql删表语句
- 核心引擎activiti.mysql.drop.engine.sql
- 历史数据activiti.mysql.drop.history.sql
- 身份信息activiti.mysql.drop.identity.sql
7.BPMN 2.0(Business Process Model And Notation)
7.1 BPMN 2.0概述
- 是一套业务流程模型与符号建模标准
- 精准的执行语义来描述元素的操作
- 以xml为载体,以符号可视化业务
例子: