内容简介
本书从原理分析和企业应用两个方面,由浅入深,由易到难地对Activiti源码展开了系统深入的讲解,包括Activiti的底层架构设计思想以及缺陷修正、流程文档的解析、默认元素的解析、自定义元素的解析、事件转发器、事件清洗器等、定时作业、流程虚拟机(PVM)、事务、缓存以及会话缓存、监听器、封装MyBatis的整个过程、会签的实现(加签、退签和减签),节点跳转(常规节点、分支节点、会签节点),会签自定义权重实战,接管Activiti等等内容。本书不仅介绍了如何合理的使用Activiti,还讲解了使用Activiti的误区和对框架中的部分缺陷进行修正已经优化扩展Activiti的技巧。从而使Activiti可以更好的为项目服务。从而帮助读者全面掌控和改造Activiti。如果你想要深入透彻地掌控和改造Activiti,那么这是你不可错过的一本干货书。
作者简介:
冀正 资深Java技术专家,长期从事Java软件开发工作,对Java程序设计、JVM、工作流(Activiti、Flowable)有深入的研究,对设计模式、大数据等技术有浓厚的兴趣,擅长系统的性能优化以及底层设计,多年的开发积累了丰富的经验,撰写了大量的工作流相关技术文章,深受读者的好评和追随。多年来一直从事OA、ERP、金融等系统的开发与架构设计工作,持续关注并深入研究工作流引擎。目 录:
前言1. 环境搭建
1.1 环境搭建
1.1.1 安装GitHub
1.1.2 安装Maven
1.2 编译源码
1.3 源码目录说明
1.4 安装流程设计器
1.5 工程搭建
2. 探险流程引擎
2.1 流程配置文件
2.1.1 Activiti配置风格
2.1.2 Spring配置风格
2.2 流程引擎架构
2.3 构造流程引擎实例对象
2.3.1 初始化流程引擎之Activiti配置风格
2.3.2 构造流程引擎实例对象
2.3.3 创建流程引擎配置类实例
2.3.4 初始化流程引擎
2.3.5 初始化流程引擎之Spring配置风格
2.4 初始化流程引擎配置类
2.5 配置器
2.5.1 初始化配置器
2.5.2 配置器实战
2.6 初始化流程引擎
2.6.1 操作引擎表
2.7 管理流程引擎
2.7.1 注册流程引擎
2.7.2 关闭流程引擎
2.8 流程引擎生命周期监听器
2.9 其他方式构造引擎实例
2.9.1 ProcessEngineConfiguration类创建引擎
2.9.2 编程方式创建引擎
3. 初识流程资源部署
3.1 流程资源概述
3.1.1 流程文档部署生命周期
3.1.2 DeploymentBuilder核心类
3.2 流程文档部署
3.2.1 定义流程文档
3.2.2 文本方式部署
3.2.3 classpath资源部署
3.2.4 流式部署
3.3 BpmnModel方式部署
3.4 校验BpmnModel实例对象
3.5 BpmnModel转换流程文档
3.6 流程文档转换BpmnModel
3.7 使用建议
4. 流程文档解析原理
4.1 文档解析基础
4.1.1 文档解析模型
4.1.2 Activiti文档解析技术选型演变
4.1.3 文档解析实战
4.2 元素解析功能架构设计
4.2.1 BPMN2.0元素概述
4.2.2 元素解析功能架构设计
4.2.3 开闭原则
4.2.4 元素与元素属性承载类以及元素解析器对应关系
4.2.5 元素属性承载类架构
4.3 元素解析环境准备
4.3.1 文档转换器
4.3.2 封装流程文档数据流
4.3.3 初始化元素解析器
4.3.4 文档转换器功能
4.3.5 元素解析环境准备
4.3.6 验证流程文档格式
4.4 元素解析
4.4.1 元素解析入口
4.4.2 解析根元素
4.4.3 黑名单处理机制
4.4.4 流程内元素解析入口
4.4.5 解析连线
4.4.6 获取元素坐标
4.5 子元素解析
4.5.1 初始化子元素解析器
4.5.2 解析子元素
4.5.3 解析扩展元素
4.6 节点与连线关联
5. 自定义元素解析
5.1 自定义元素解析原理
5.2 存储自定义元素属性值
5.3 自定义元素实战
5.4 扩展黑名单元素
5.4.1 扩展元素属性原理
5.4.2 任务节点扩展属性实战
5.5 扩展非黑名单元素
5.5.1 自定义元素解析器
5.5.2 替换引擎元素解析器
6. 事件转发器
6.1 初始化事件转发器
6.2 事件转发器架构
6.3 注册事件监听器
6.4 事件转发功能之新老版本兼容
6.5 事件转发原理以及缺陷
6.6 添加事件监听器
6.6.1 使用配置方式添加
6.6.2 动态添加
6.7 日志监听器
6.7.1 初始化日志监听器
6.7.2 初始化日志处理器
6.7.3 日志处理器架构
6.7.4 收集日志数据入口
6.8 日志清洗器架构
6.8.1 数据库日志清洗器
6.8.2 生成日志数据
6.8.3 日志存储
6.9 自定义日志清洗器
7. 流程文档部署原理
7.1 初始化部署器
7.1.1 初始化内置部署器
7.1.2 部署器依赖关系
7.2 部署命令
7.2.1 过滤重复文档
7.2.2 设置标识位
7.2.3 添加会话缓存
7.2.4 部署管理器
7.3 Bpmn部署器
7.3.1 获取资源信息
7.3.2 封装资源信息
7.3.3 校验资源名称
7.3.4 计算流程定义版本值
7.3.5 生成流程定义id值
7.3.6 移除过期作业
7.3.7 添加作业
7.3.8 处理消息
7.3.9 处理信号
7.3.10 设置流程启动人
7.4 自定义部署器实战
8. 缓存
8.1 背景
8.2 初始化缓存策略
8.3 部署管理器
8.4 缓存处理类架构
8.5 默认缓存处理类及Bug
8.6 流程定义缓存
8.6.1 自定义缓存处理类
8.6.2 验证自定义缓存处理类
8.7 Activiti新特性之节点缓存
8.8 节点缓存实战
8.9 节点缓存原理
8.9.1 初始化节点缓存数据
8.9.2 更新节点缓存
8.9.3 节点缓存架构
8.9.4 节点缓存使用误区
8.10 自定义节点缓存实战
8.10.1 自定义节点缓存类
8.10.2 修复Activiti节点缓存不更新Bug
8.10.3 扩展引擎配置类功能
8.10.4 配置器高级用法
8.10.5 使用自定义节点缓存类
8.11 任务节点缓存数据获取原理
8.11.1 获取任务节点缓存数据
8.11.2 解析任务节点缓存数据
8.11.3 运用任务节点缓存数据
8.12 动态修改任务节点缓存数据
8.13 节点缓存使用技巧
9. 定时作业
9.1 初始化作业执行器
9.2 初始化作业处理器
9.2.1 任务超时作业
9.2.2 定时任务作业
9.2.3 定时启动流程实例作业
9.2.4 其他作业
9.3 作业执行器原理
9.3.1 初始化作业执行器
9.3.2 启动作业执行器
9.4 添加定时作业
9.5 执行定时作业
9.5.1 查询作业
9.6 处理作业
9.6.1 批量处理作业
9.6.2 执行作业之异常处理
9.7 关闭作业执行器
9.8 自定义作业处理器
10. 流程虚拟机
10.1 流程虚拟机原理
10.2 虚拟机入口
10.3 流程定义转换准备
10.3.1 初始化对象解析器集合
10.3.2 初始化内置对象解析器
10.3.3 解析调度类BpmnParseHandlers
10.3.4 BpmnParseHandler架构
10.3.5 对象解析器架构
10.4 流程对象解析入口
10.5 流程子元素对象解析入口
10.5.1 任务节点对象解析器
10.5.2 创建ActivityImpl实例对象
10.5.3 多实例对象解析
10.5.4 连线对象解析
10.6 PvmProcessElement类架构
10.7 自定义对象解析器
10.7.1 任务节点扩展属性
10.7.2 自定义任务节点对象解析器
10.7.3 获取自定义属性
10.7.4 运用自定义对象解析器
10.8 流程虚拟机实战
10.8.1 获取流程虚拟机对象
10.8.2 入侵流程虚拟机
10.9 操作连线表达式
10.9.1 自动计算连线表达式
10.9.2 获取连线表达式
11. 监听器原理
11.1 监听器生命周期
11.2 内置记录监听器
11.2.1 内置任务记录监听器
11.2.2 内置执行记录监听器
11.3 历史解析器架构
11.3.1 添加内置记录监听器
11.3.2 初始化历史解析器
11.3.3 历史节点结束通知
11.3.4 控制归档历史数据级别
11.3.5 更新历史数据
11.3.6 历史节点开始通知
11.4 注入执行监听器
11.4.1 创建执行监听器
11.5 注入任务监听器
11.6 触发执行监听器
11.6.1 class方式调度
11.6.2 delegateExpression方式调度
11.6.3 expression方式调度
11.6.4 执行监听器触发入口
11.7 触发任务监听器
11.8 监听器代理
11.8.1 默认代理类
11.8.2 自定义代理类
11.9 自定义全局任务监听器
11.10 Activiti新特性之字段注射模式
12. Activiti之设计模式
12.1.1 命令模式的结构说明
12.1.2 命令模式实战
12.2 Activiti命令模式
12.2.1 初始化命令配置类
12.2.2 Activiti事务传播行为
12.2.3 Spring事务拦截器
12.2.4 初始化命令调度者
12.2.5 初始化命令上下文工厂
12.2.6 初始化命令拦截器
12.3 Activiti职责链模式
12.4 命令相关类职责
12.5 命令拦截器
12.5.1 日志拦截器
12.5.2 命令上下文拦截器
12.5.3 上下文类
12.5.4 创建命令上下文实例对象
12.5.5 命令调度者拦截器
12.6 自定义命令拦截器
12.7 命令类调度入口
12.8 Activiti事务
12.8.1 MyBatis事务管理
12.8.2 事务上下文架构
12.8.3 事务上下文工厂类
12.8.4 事务监听器
12.8.5 注册同步事务
13. 流程虚拟机运转
13.1 流程实例运转入口
13.2 启动流程实例命令类
13.2.1 获取ProcessDefinitionEntity实例对象
13.2.2 重新生成流程定义缓存数据
13.3 创建流程实例
13.3.1 创建ExecutionEntity实例对象
13.3.2 获取dataObject
13.3.3 区别流程实例与执行实例
13.3.4 添加历史流程实例数据
13.4 虚拟机运转原理
13.5 AtomicOperation架构
13.6 流程实例启动
13.6.1 非异步节点处理
13.6.2 异步节点处理
13.7 原子类流转
13.7.1 流程启动原子类
13.7.2 流程启动准备原子类
13.7.3 活动节点执行原子类
13.7.4 开始节点行为类
13.7.5 途经连线
13.7.6 通知连线完成原子类
13.7.7 连线销毁原子类
13.7.8 其他原子类
13.8 Activiti新特性之忽略节点
14. 行为篇
14.1 活动行为工厂类
14.1.1 初始化活动行为工厂类
14.1.2 活动行为类架构
14.2 排他网关行为类原理
14.3 扩展排他网关实战
14.3.1 自定义排他网关行为类
14.3.2 自定义活动行为工厂类
14.3.3 替换默认活动行为工厂类
14.4 任务节点处理人多元化配置
14.4.1 任务处理人扩展
14.4.2 自定义任务解析器
14.4.3 自定义任务行为类
14.4.4 自定义活动行为工厂类
14.5 忽略节点使用误区
14.6 修复Activiti忽略节点Bug
14.7 修复Activiti子流程业务键Bug
15. Activiti存储之MyBatis
15.1 初始化dataSource
15.2 Activiti数据访问层关系分析
15.2.1 实体类与数据库的映射
15.2.2 实例化SqlSessionFactory
15.3 自定义Mapper实战
15.3.1 自定义Mapper
15.3.2 自定义SQL执行原理
15.4 SessionFactory
15.4.1 初始化SessionFactory
15.4.2 SessionFactory架构
15.5 Session
15.5.1 Session架构
15.5.2 实例化方式创建Session实例
15.5.3 反射方式创建Session实例
15.5.4 实例化DbSqlSession
15.6 SQL语句
15.6.1 SQL语句适配器
15.6.2 SQL执行id值生成规则
15.7 数据层和数据的关系
15.7.1 PersistentObject业务对象
15.7.2 实体管理类
15.8 添加会话缓存
15.9 更新操作
15.9.1 会话缓存方式更新
15.9.2 SqlSession方式更新
15.10 删除操作
15.10.1 DeleteOperation接口
15.10.2 BulkDeleteOperation删除数据
15.10.3 CheckedDeleteOperation删除数据
15.10.4 乐观锁
15.11 刷新会话缓存入口
15.12 会话缓存数据持久化
15.12.1 移除不必要数据
15.12.2 刷新序列化变量
15.12.3 获取更新对象
15.12.4 刷新数据
15.12.5 解决依赖数据插入先后顺序
15.12.6 性能优化
16. 实战
16.1 高并发id生成器
16.1.1 id生成器初始化
16.1.2 自增id生成器
16.1.3 自定义主键生成器
16.2 变量类型
16.2.1 初始化变量管理类
16.2.2 变量管理类架构
16.2.3 变量处理类
16.2.4 自定义变量处理类
16.3 ServiceLoader方式注入配置器
16.4 节点跳转
16.4.1 常规节点跳转
16.4.2 分支节点跳转
16.4.3 多实例节点跳转
16.5 会签
16.5.1 串行多实例
16.5.2 认领和归还任务
16.5.3 代理任务
16.5.4 并行多实例
16.5.5 加签
16.5.6 减签和退签
16.6 会签节点自定义权重实现
16.6.1 定义处理人权重
16.6.2 获取权重信息并自动计算
16.6.3 优化建议
16.7 接管Activiti
16.7.1 接管Activiti映射文件
16.7.2 禁用用户表和组表
16.7.3 自定义用户角色和部门表
16.7.4 扩展任务节点参与者表
16.7.5 自定义任务节点参与者命令类
16.7.6 流程文档支持设置部门属性
16.7.7 解析及运用流程文档部门属性
16.7.8 自定义代办SQL
16.8 接管Activiti实体管理类