图书目录

CONTENTS

目  录

第一部分  BPMN 2.0基础

第1章  参与者 3

第2章  任务 8

2.1  服务任务 8

2.2  发送任务 8

2.3  用户任务 9

2.4  业务规则任务 9

2.5  脚本任务 9

2.6  接收任务 9

2.7  手工任务 9

2.8  任务标记 10

第3章  网关 11

3.1  排他网关 11

3.2  条件序列流和默认序列流 12

3.2.1  条件序列流 12

3.2.2  默认序列流 12

3.3  并行网关 12

3.4  包含网关 13

3.5  事件网关 13

第4章  事件 15

4.1  基本概念 15

4.2  事件类型 16

4.2.1  开始事件 16

4.2.2  空白事件 17

4.2.3  消息事件 17

4.2.4  定时器事件 19

4.2.5  错误事件 21

4.2.6  升级事件 23

4.2.7  信号事件 25

4.2.8  取消和补偿事件 26

4.2.9  条件事件 30

4.2.10  链接事件 32

4.2.11  终止事件 32

4.2.12  并行事件 32

4.3  小结 33

第5章  子流程 34

5.1  嵌入式子流程 35

5.2  调用活动 36

5.3  事件子流程 36

5.4  事务子流程 39

第二部分  Camunda介绍

第6章  Camunda简介 43

6.1  Camunda BPM主要组件 43

6.2  Camunda BPM架构概述 44

6.2.1  流程引擎架构 44

6.2.2  Camunda BPM平台架构 45

6.2.3  集群模式 46

6.2.4  多租户模型 46

第7章  流程引擎 47

7.1  流程引擎基本概念 47

7.1.1  流程定义 47

7.1.2  流程实例 48

7.1.3  执行 50

7.1.4  活动实例 51

7.1.5  作业和作业定义 52

7.2  流程引擎的引导 53

7.2.1  应用程序管理流程引擎 53

7.2.2  共享的、容器管理的流程引擎 53

7.3  流程引擎API 53

7.3.1  服务API 53

7.3.2  查询API 56

7.4  流程变量 59

7.4.1  变量作用域和可见性 59

7.4.2  变量设置和检索 61

7.4.3  支持的变量值 62

7.4.4  Java对象API 64

7.4.5  类型化值API 64

7.4.6  API的可互换性 68

7.4.7  输入输出变量映射 68

7.5  流程实例修改 70

7.5.1  流程修改示例 70

7.5.2  在JUnit测试中修改流程实例 72

7.6  重启流程实例 72

7.7  委托代码 73

7.7.1  Java委托 74

7.7.2  字段注入 74

7.7.3  委托变量映射 76

7.7.4  执行监听器 76

7.7.5  任务监听器 78

7.7.6  监听器字段注入 79

7.7.7  访问流程引擎服务 81

7.7.8  从委托代码中抛出BPMN错误 81

7.7.9  在委托代码中设置业务键 81

7.8  表达式语言 82

7.8.1  委托代码 82

7.8.2  条件 83

7.8.3  输入输出参数 83

7.8.4  值 84

7.9  脚本 84

7.9.1  使用脚本任务 84

7.9.2  使用脚本作为执行监听器 85

7.9.3  使用脚本作为任务监听器 85

7.9.4  使用脚本作为条件 86

7.9.5  使用脚本作为输入输出参数 86

7.9.6  脚本引擎的缓存 87

7.9.7  脚本编译 88

7.9.8  加载脚本引擎 88

7.9.9  引用流程应用程序提供的类 88

7.9.10  脚本执行期间可用的变量 88

7.9.11  通过脚本访问流程引擎服务 89

7.9.12  使用脚本打印日志到控制台 89

7.9.13  脚本源 89

7.10  外部任务 91

7.10.1  外部任务模式 91

7.10.2  BPMN中申明外部任务 92

7.10.3  使用REST API处理外部任务 92

7.10.4  使用Java API处理外部任务 93

7.11  流程版本 99

7.12  流程实例迁移 100

7.13  数据库 100

7.13.1  数据库模式 100

7.13.2  数据库配置 101

7.14  历史和审计日志 103

7.14.1  选择历史记录级别 104

7.14.2  设置历史级别 105

7.14.3  用户操作日志 105

7.14.4  清理历史数据 105

7.15  部署缓存 105

7.15.1  自定义缓存的最大容量 106

7.15.2  自定义缓存实现 106

7.16  流程中的事务 107

7.16.1  等待状态 107

7.16.2  事务边界 107

7.16.3  异步延续 108

7.16.4  异常回滚 110

7.16.5  事务集成 111

7.16.6  乐观锁定 111

7.17  作业执行器 111

7.17.1  作业执行器激活 112

7.17.2  单元测试中的作业执行器 112

7.17.3  作业创建 112

7.17.4  作业获取 113

7.17.5  作业执行 115

7.17.6  并发作业执行 115

7.17.7  作业执行器和多流程引擎 117

7.17.8  集群设置 118

7.18  多租户 119

7.19  ID生成器 119

7.19.1  数据库ID生成器 120

7.19.2  UUID生成器 120

7.20  指标 120

7.20.1  内置指标 120

7.20.2  指标查询 121

7.21  事件 121

7.21.1  事件类型 122

7.21.2  创建和解决自定义事件 122

7.21.3  (去)激活事件 122

7.21.4  实现自定义事件处理程序 122

7.22  流程引擎插件 123

7.22.1  配置流程引擎插件 123

7.22.2  内置流程引擎插件列表 124

7.23  身份服务 124

7.23.1  为用户、组和租户定制白名单 124

7.23.2  数据库身份服务 125

7.23.3  LDAP身份服务 125

7.23.4  登录节流 126

7.24  授权服务 127

7.25  时区 127

7.25.1  流程引擎 127

7.25.2  数据库 127

7.25.3  Camunda Web应用程序 127

7.25.4  集群设置 127

7.26  错误处理 127

7.26.1  错误处理策略 127

7.26.2  监控和恢复策略 129

第8章  流程应用程序 131

8.1  流程应用程序类 131

8.1.1  EmbeddedProcessApplication 132

8.1.2  SpringProcessApplication 133

8.2  processes.xml部署描述符 134

8.2.1  空processes.xml 135

8.2.2  processes.xml文件的位置 135

8.2.3  自定义processes.xml文件的位置 136

8.2.4  在processes.xml文件中配置流程引擎 136

8.2.5  在processes.xml文件中指定流程归档的租户ID 136

8.2.6  流程应用程序部署 137

8.3  流程应用程序事件监听器 139

8.4  流程应用程序资源访问 141

8.4.1  上下文切换 141

8.4.2  声明流程应用程序上下文 142

第9章  用户任务表单 144

9.1  嵌入式任务表单 144

9.2  生成任务表单 145

9.2.1  表单字段 146

9.2.2  表单字段的验证 146

9.3  外部任务表单 148

9.4  通用任务表单 148

9.5  JSF任务表单 149

9.5.1  向流程应用程序添加JSF表单 149

9.5.2  创建简单的用户任务表单 150

9.5.3  它是怎样工作的 150

9.5.4  访问流程变量 151

9.5.5  设计任务表单的样式 154

第10章  外部任务客户端 156

10.1  特性 156

10.2  客户端引导 156

10.2.1  请求拦截器 157

10.2.2  主题订阅 157

10.2.3  处理程序 157

10.2.4  完成任务 157

10.2.5  延长任务的锁定时间 157

10.2.6  解锁任务 158

10.2.7  报告失败 158

10.2.8  BPMN错误报告 158

10.2.9  变量 158

10.2.10  日志记录 158

10.3  外部任务吞吐量 159

第11章  DMN引擎 160

11.1  嵌入式DMN引擎 160

11.1.1  Maven依赖 160

11.1.2  构建DMN引擎 160

11.1.3  DMN引擎的配置 161

11.1.4  日志记录 162

11.2  使用DMN引擎API评估决策 162

11.2.1  分析决策 162

11.2.2  评估决策 164

11.3  DMN引擎中的表达式 167

11.3.1  DMN中的表达式 167

11.3.2  支持的表达式语言 168

11.3.3  默认表达式语言 169

11.3.4  配置表达式语言 169

11.4  DMN引擎中的数据类型 170

11.4.1  支持的数据类型 170

11.4.2  设置输入的数据类型 171

11.4.3  设置输出的数据类型 171

11.4.4  设置变量的数据类型 171

11.4.5  实现自定义数据类型 171

11.5  使用DMN引擎测试决策 172

第12章  决策 173

12.1  配置DMN引擎 173

12.1.1  使用Java API配置DMN引擎 173

12.1.2  使用Spring XML文件配置DMN引擎 174

12.2  流程引擎库中的决策 174

12.2.1  部署一个决策 174

12.2.2  使用存储库服务部署决策 174

12.2.3  使用流程应用程序部署决策 175

12.2.4  查询决策存储库 175

12.2.5  查询决策存储库的授权 176

12.3  流程引擎中的决策服务 176

12.3.1  评估一个决策 176

12.3.2  评估决策的授权 177

12.3.3  处理决策结果 177

12.3.4  评估决策的历史 178

12.4  从流程中调用决策 178

12.4.1  与BPMN集成 178

12.4.2  决策结果 179

12.4.3  在决策中访问变量 181

12.4.4  表达式语言集成 182

12.5  DMN决策的历史记录 182

12.5.1  查询已评估的决策 182

12.5.2  历史决策实例 183

第13章  日志记录 185

13.1  使用共享流程引擎的预配置日志 185

13.2  为嵌入式流程引擎使用添加日志后端 185

13.2.1  使用Java Util日志 185

13.2.2  使用Logback 186

第14章  测试 187

14.1  单元测试 187

14.1.1  JUnit 4 187

14.1.2  JUnit 3 187

14.1.3  部署测试资源 188

14.2  测试的社区扩展 188

14.2.1  Camunda BPM Assert Scenario 188

14.2.2  Camunda BPM Process Test Coverage 189

14.3  最佳实践 191

14.3.1  编写针对性测试 191

14.3.2  测试范围 191

第三部分  Camunda实战入门

第15章  快速入门 195

15.1  使用Camunda BPM 平台建模并实现工作流 195

15.1.1  新建一个BPMN流程图 195

15.1.2  开始一个简单的流程 195

15.1.3  配置服务任务 197

15.1.4  配置执行属性 197

15.1.5  保存BPMN流程图 198

15.2  实现外部任务工作者 199

15.2.1  先决条件 199

15.2.2  新建一个Maven项目 199

15.2.3  添加Camunda外部任务客户端依赖 199

15.2.4  添加Java类 200

15.2.5  运行Worker 200

15.3  部署流程 201

15.3.1  使用Camunda Modeler部署流程 201

15.3.2  使用Cockpit确认部署 202

15.3.3  启动流程实例 203

15.4  引入人工干预 205

15.4.1  添加用户任务 205

15.4.2  配置用户任务 207

15.4.3  在用户任务中配置基本表单 208

15.4.4  部署流程 208

15.4.5  完成任务 208

15.5  流程动态化 210

15.5.1  添加两个网关 211

15.5.2  配置网关 212

15.5.3  部署流程 212

15.5.4  完成任务 212

15.6  决策自动化 214

15.6.1  向流程添加业务规则任务 214

15.6.2  使用Camunda Modeler创建DMN表 215

15.6.3  指定DMN表 215

15.6.4  部署DMN表 218

15.6.5  使用Cockpit确认部署 219

15.6.6  使用Cockpit和任务列表进行检查 220

第16章  Java流程应用程序入门 223

16.1  新建一个Java流程项目 223

16.1.1  新建一个Maven项目 223

16.1.2  添加Camunda Maven依赖 223

16.1.3  添加流程应用程序类 224

16.1.4  添加部署描述符 224

16.2  建模流程 225

16.2.1  新建一个BPMN流程图 225

16.2.2  配置用户任务 226

16.2.3  配置执行属性 227

16.2.4  保存流程图 227

16.3  部署和测试流程 227

16.3.1  使用Maven构建Web应用程序 227

16.3.2  部署到Apache Tomcat 227

16.3.3  用Cockpit确认部署 228

16.3.4  启动流程实例 229

16.3.5  配置流程启动授权 230

16.3.6  完成任务 231

16.4  添加HTML表单 232

16.4.1  添加开始表单 232

16.4.2  添加任务表单 233

16.4.3  重建和部署 234

16.5  从服务任务调用Java类 234

16.5.1  向流程添加服务任务 234

16.5.2  添加JavaDelegate实现 235

16.5.3  在流程中配置类 236

第17章  Spring Boot流程应用程序入门 237

17.1  新建Spring Boot流程应用程序项目 237

17.1.1  新建一个Maven项目 237

17.1.2  添加Camunda BPM和Spring Boot依赖 237

17.1.3  将主类添加到Spring Boot应用程序中 238

17.1.4  构建和运行 239

17.2  配置Spring Boot项目 240

17.2.1  自定义配置 240

17.2.2  构建和运行 240

17.3  建模BPMN 流程 240

17.3.1  建模一个可执行的BPMN 2.0流程并部署 240

17.3.2  创建流程应用程序 241

17.3.3  在部署流程应用程序之后启动流程实例 241

17.3.4  重建和测试 242

第18章  Spring Framework流程应用程序入门 243

18.1  新建Spring Web应用程序项目 243

18.1.1  新建一个Maven项目 243

18.1.2  添加Camunda BPM和Spring Framework依赖 243

18.1.3  添加用于引导Spring容器的web.xml文件 245

18.1.4  添加Spring应用程序上下文XML配置文件 245

18.2  嵌入式流程引擎配置 246

18.3  从服务任务调用Spring Bean 248

18.3.1  建模一个可执行的BPMN 2.0流程 249

18.3.2  使用Spring自动部署BPMN 2.0流程 249

18.3.3  从Spring Bean启动流程实例 250

18.3.4  从BPMN 2.0服务任务调用Spring Bean 250

18.4  使用共享流程引擎 252

第19章  DMN入门 255

19.1  新建DMN Java项目 255

19.1.1  新建一个Maven项目 255

19.1.2  添加Camunda Maven依赖 255

19.1.3  添加流程应用程序类 256

19.1.4  添加META-INF/processes.xml部署描述符 257

19.2  创建DMN决策表 257

19.2.1  新建一个DMN决策表 257

19.2.2  从表头开始 258

19.2.3  配置输入表达式和输出名 259

19.2.4  配置输入和输出的类型 260

19.2.5  添加规则 261

19.2.6  配置命中策略 263

19.2.7  保存决策表 264

19.3  评估、部署和测试决策表 264

19.3.1  评估决策表 264

19.3.2  使用Maven构建Web应用程序 264

19.3.3  部署到Apache Tomcat 265

19.3.4  从Cockpit确认部署 265

19.3.5  从Cockpit核实评估结果 265

19.4  建模、评估和部署决策需求图 266

19.4.1  从决策表切换到DRD 267

19.4.2  设置DRD的名称和Id 267

19.4.3  在DRD中创建一个新的决策 268

19.4.4  配置决策表并添加规则 269

19.4.5  评估决策 271

19.4.6  构建和部署Web应用程序 272

19.4.7  用Cockpit核实评估结果 272

第四部分  Camunda完整项目案例

第20章  保险流程实战 277

20.1  新建流程项目 277

20.2  运行流程 277

20.3  查看默认流程 278

20.4  设计流程 281

20.5  配置流程 282

20.5.1  配置保险申请人 282

20.5.2  配置保险公司 282

20.5.3  配置开始事件 283

20.5.4  配置“检查申请完整性”服务任务 284

20.5.5  配置申请“资料完整”网关 285

20.5.6  配置“发送补充资料通知”脚本任务 286

20.5.7  配置“发送补充资料通知”结束事件 287

20.5.8  配置“查验保险资格”服务任务 287

20.5.9  配置保险资格“合格”网关 288

20.5.10  配置“拒保”调用活动 289

20.5.11  配置“计算保额” 292

20.5.12  配置“创建保单” 293

20.5.13  配置“发送保单” 294

20.5.14  配置“收到保单” 295

20.5.15  配置“确保”结束事件 295

20.5.16  配置“审查案例” 295

20.5.17  配置“风险可控?”网关 296

20.5.18  配置“拒保”调用活动 297

20.5.19  配置“拒保”结束事件 297

20.6  测试流程 297

20.6.1  UT 297

20.6.2  确定测试用例 297

20.6.3  编写测试代码 298

20.6.4  执行测试 301

20.7  其他配置 302

20.7.1  配置服务端口 302

20.7.2  配置MySQL数据库 302

20.7.3  配置默认管理员账户 303

20.8  执行流程 303

20.8.1  启动服务 303

20.8.2  启动流程 303

20.8.3  创建新用户 304

20.8.4  完成用户任务 306

20.9  更新流程 307

20.9.1  修改流程 307

20.9.2  部署流程 308

20.10  常用配置 308

20.10.1  配置使用Python脚本 308

20.10.2  配置流程模块重用 308

20.10.3  配置外部任务 309

第21章  运维自动化案例实战 314

21.1  新建流程项目 314

21.2  设计流程 314

21.3  配置流程 315

21.3.1  配置参与者 315

21.3.2  配置“收到Kafka消息”消息开始事件 315

21.3.3  配置“Kafka消息处理”服务任务 316

21.3.4  配置“收到告警”消息开始事件 317

21.3.5  配置“告警预处理”服务任务 317

21.3.6  配置网关 319

21.3.7  配置“处理告警”用户任务 320

21.3.8  配置“处理告警”服务任务 320

21.3.9  配置“验证处理结果”任务 321

21.3.10  配置结束事件 322

21.3.11  保存流程 322

21.4  配置Kafka 322

21.4.1  添加依赖 322

21.4.2  设计消息模型 322

21.4.3  配置Kafka属性 323

21.4.4  创建Kafka Producer 323

21.4.5  创建Kafka Consumer 324

21.4.6  创建REST Controller 326

21.5  执行流程 327

21.5.1  启动服务 327

21.5.2  发送告警 328

21.5.3  发送Kafka消息 329

21.5.4  触发用户任务 330

21.5.5  历史记录与审计 331

附录A  Camunda安装 332

A.1  安装Camunda BPM 332

A.1.1  先决条件 332

A.1.2  安装Camunda BPM平台 332

A.2  安装Camunda Modeler 333

附录B  Maven项目模板(原型) 335

B.1  可用Maven原型的概述 335

B.2  Maven 原型在Eclipse IDE中的使用 335

B.2.1  总结 335

B.2.2  详细说明 336

B.3  Intellij IDEA的使用 340

B.3.1  添加Archetype 340

B.3.2  新建项目 342

B.4  在命令行上的使用 344

B.4.1  交互式 344

B.4.2  完全自动化 344

                       

??

??

??

IV |  Camunda工作流开发实战——Spring Boot+BPMN+DMN

  目   录 |  V