編輯推薦
適讀人群 :Java Web應用開發人員,計算機及相關專業在校生 1.內容深入。書中的案例不僅僅講解Activiti的功能,更模仿Activiti的思路去模擬功能的實現,讀者可以深入瞭解其中的原理。
2.開發環境與案例更貼近實際。書中案例的開發環境、使用的框架以及工具均是來自企業的實際應用,案例的選取與研發過程更貼近實際。
3.注釋詳細。本書的代碼,幾乎每行Java代碼均有注釋,讀者可以很容易地瞭解代碼的意思,輕鬆掌握相應的知識。
內容簡介
工作流引擎Activiti經過多年的發展,已經變成一個成熟的工作流框架,在2017年,Activiti推齣瞭全新的6.0版本,除瞭完善對BPMN規範的支持外,還加入瞭對DMN規範的支持。為瞭能讓廣大的程序開發者一探新版本Activiti的功能,筆者在第一版的基礎上,編寫瞭本書的第二版。
書中會對Activiti的知識進行全麵講解,並從源碼角度對Activiti進行深度剖析。本書會以Activiti為基礎,講述該框架的API使用、BPMN規範,除瞭這些工作流的基本知識外,還講解瞭新的DMN規範引擎、Activiti整閤SpringBoot等內容。在本書的第18章,深入Activiti的源代碼,展示捨棄流程虛擬機(PVM)之後的Activiti,如何對流程進行控製,讓讀者能一窺Activiti的廬山真麵目。zui後一章,以一個案例結束本書的內容,案例中整閤Spring、Struts2等主流框架,目的是讓讀者在學習的過程中更貼近實際案例。
作者簡介
楊恩雄,從事十多年JavaEE企業應用開發,曾任中企動力係統設計師、中企開源項目經理、數碼辰星科技公司項目經理,參與過多個企業級項目的設計與架構工作,曾負責辰星“電影票網絡銷售係統”的整體架構。精通Activiti、Drools、ESB等開源技術,在SOA、SaaS、大數據應用、互聯網係統架構方麵有著豐富的經驗,曾齣版《瘋狂Java實戰演義》《瘋狂Workflow講義》《瘋狂SpringCloud微服務架構實戰》等書籍。
目錄
第1章 Activiti介紹 1
1.1 工作流介紹 2
1.2 BPMN 2.0規範簡述 2
1.2.1 BPMN 2.0概述 3
1.2.2 BPMN 2.0元素 3
1.2.3 BPMN 2.0的XML結構 5
1.3 Activiti介紹 5
1.3.1 Activiti的齣現 5
1.3.2 Activiti的發展 5
1.3.3 選擇Activiti還是jBPM 5
1.4 本章小結 6
第2章 安裝與運行Activiti 7
2.1 下載與運行Activiti 8
2.1.1 下載和安裝JDK 8
2.1.2 下載和安裝MySQL 9
2.1.3 下載和安裝Activiti 10
2.2 運行官方的Activiti示例 11
2.2.1 請假流程概述 11
2.2.2 新建用戶 11
2.2.3 定義流程 12
2.2.4 發布流程 14
2.2.5 啓動與完成流程 15
2.2.6 流程引擎管理 16
2.3 安裝開發環境 17
2.3.1 下載Eclipse 17
2.3.2 安裝Activiti插件 18
2.4 編寫第一個Activiti程序 19
2.4.1 如何運行本書示例 19
2.4.2 建立工程環境 19
2.4.3 創建配置文件 20
2.4.4 創建流程文件 20
2.4.5 加載流程文件與啓動流程 21
2.5 本章小結 22
第3章 Activiti數據庫設計 23
3.1 通用數據錶 24
3.1.1 資源錶 24
3.1.2 屬性錶 24
3.2 流程存儲錶 25
3.2.1 部署數據錶 25
3.2.2 流程定義錶 25
3.3 身份數據錶 25
3.3.1 用戶錶 25
3.3.2 用戶賬號(信息)錶 26
3.3.3 用戶組錶 26
3.3.4 關係錶 26
3.4 運行時數據錶 26
3.4.1 流程實例(執行流)錶 26
3.4.2 流程任務錶 27
3.4.3 流程參數錶 27
3.4.4 流程與身份關係錶 27
3.4.5 工作數據錶 28
3.4.6 事件描述錶 28
3.5 曆史數據錶 28
3.5.1 流程實例錶 28
3.5.2 流程明細錶 29
3.5.3 曆史任務錶和曆史行為錶 29
3.5.4 附件錶和評論錶 29
3.6 DMN規則引擎錶 30
3.6.1 決策部署錶 30
3.6.2 決策錶 30
3.6.3 部署資源錶 30
3.7 本章小結 30
第4章 Activiti流程引擎配置 31
4.1 流程引擎配置對象 32
4.1.1 讀取默認的配置文件 32
4.1.2 讀取自定義的配置文件 33
4.1.3 讀取輸入流的配置 33
4.1.4 使用createStandaloneInMemProcess- EngineConfiguration方法 34
4.1.5 使用createStandaloneProcessEngine- Configuration方法 34
4.2 數據源配置 35
4.2.1 Activiti支持的數據庫 35
4.2.2 Activiti與Spring 35
4.2.3 JDBC配置 35
4.2.4 DBCP數據源配置 36
4.2.5 C3P0數據源配置 37
4.2.6 Activiti其他數據源配置 38
4.2.7 數據庫策略配置 38
4.2.8 databaseType配置 39
4.3 其他屬性配置 40
4.3.1 history配置 40
4.3.2 asyncExecutorActivate配置 41
4.3.3 郵件服務器配置 41
4.4 ProcessEngineConfiguration bean 41
4.4.1 ProcessEngineConfiguration及其子類 41
4.4.2 自定義ProcessEngineConfiguration 42
4.5 Activiti的命令攔截器 43
4.5.1 命令模式 44
4.5.2 責任鏈模式 45
4.5.3 編寫自定義攔截器 47
4.6 本章小結 49
第5章 流程引擎的創建 50
5.1 ProcessEngineConfiguration的buildProcessEngine方法 51
5.2 ProcessEngines對象 51
5.2.1 init方法與getDefaultProcessEngine方法 51
5.2.2 registerProcessEngine方嚮和unregister方法 52
5.2.3 retry方法 53
5.2.4 destroy方法 53
5.3 ProcessEngine對象 54
5.3.1 服務組件 54
5.3.2 關閉流程引擎 55
5.3.3 流程引擎名稱 56
5.4 本章小結 56
第6章 用戶組與用戶 57
6.1 用戶組管理 58
6.1.1 Group對象 58
6.1.2 創建用戶組 58
6.1.3 修改用戶組 59
6.1.4 刪除用戶組 60
6.2 Activiti數據查詢 61
6.2.1 查詢對象 61
6.2.2 list方法 61
6.2.3 listPage方法 62
6.2.4 count方法 63
6.2.5 排序方法 63
6.2.6 ID排序問題 64
6.2.7 多字段排序 66
6.2.8 singleResult方法 67
6.2.9 用戶組數據查詢 68
6.2.10 原生SQL查詢 69
6.3 用戶管理 71
6.3.1 User對象 71
6.3.2 添加用戶 71
6.3.3 修改用戶 72
6.3.4 刪除用戶 72
6.3.5 驗證用戶密碼 73
6.3.6 用戶數據查詢 74
6.3.7 設置認證用戶 75
6.4 用戶信息管理 77
6.4.1 添加和刪除用戶信息 77
6.4.2 查詢用戶信息 78
6.4.3 設置用戶圖片 78
6.5 用戶組與用戶的關係 80
6.5.1 綁定關係 80
6.5.2 解除綁定 81
6.5.3 查詢用戶組下的用戶 81
6.5.4 查詢用戶所屬的用戶組 82
6.6 本章小結 83
第7章 流程存儲 84
7.1 流程文件部署 85
7.1.1 Deployment對象 85
7.1.2 DeploymentBuilder對象 85
7.1.3 添加輸入流資源 86
7.1.4 添加classpath資源 87
7.1.5 添加字符串資源 88
7.1.6 添加壓縮包資源 88
7.1.7 添加BPMN模型資源 89
7.1.8 修改部署信息 90
7.1.9 過濾重復部署 90
7.1.10 取消部署時的驗證 92
7.2 流程定義的管理 93
7.2.1 ProcessDefinition對象 93
7.2.2 流程部署 93
7.2.3 流程圖部署 95
7.2.4 流程圖自動生成 95
7.2.5 中止與激活流程定義 96
7.2.6 流程定義緩存配置 97
7.2.7 自定義緩存 98
7.3 流程定義權限 100
7.3.1 設置流程定義的用戶權限 100
7.3.2 設置流程定義的用戶組權限 101
7.3.3 IdentityLink對象 102
7.3.4 查詢權限數據 102
7.4 RepositoryService數據查詢與刪除 104
7.4.1 查詢部署資源 104
7.4.2 查詢流程文件 105
7.4.3 查詢流程圖 106
7.4.4 查詢部署資源名稱 107
7.4.5 刪除部署資源 107
7.4.6 DeploymentQuery對象 108
7.4.7 ProcessDefinitionQuery對象 109
7.5 本章小結 109
第8章 流程任務管理 110
8.1 任務的創建與刪除 111
8.1.1 Task接口 111
8.1.2 創建與保存Task實例 112
8.1.3 刪除任務 112
8.2 任務權限 113
8.2.1 設置候選用戶組 114
8.2.2 設置候選用戶 115
8.2.3 權限數據查詢 116
8.2.4 設置任務持有人 118
8.2.5 設置任務代理人 119
8.2.6 添加任務權限數據 119
8.2.7 刪除用戶組權限 121
8.2.8 刪除用戶權限 122
8.3 任務參數 123
8.3.1 基本類型參數設置 124
8.3.2 序列化參數 125
8.3.3 獲取參數 126
8.3.4 參數作用域 127
8.3.5 設置多個參數 128
8.3.6 數據對象 129
8.4 任務附件管理 130
8.4.1 Attachment對象 130
8.4.2 創建任務附件 130
8.4.3 附件查詢 132
8.4.4 刪除附件 133
8.5 任務評論與事件記錄 133
8.5.1 Comment對象 133
8.5.2 新增任務評論 134
8.5.3 事件的記錄 135
8.5.4 數據查詢 136
8.6 任務聲明與完成 137
8.6.1 任務聲明 137
8.6.2 任務完成 138
8.7 本章小結 139
第9章 流程控製 140
9.1 流程實例與執行流 141
9.1.1 流程實例與執行流概念 141
9.1.2 流程實例和執行流對象(ProcessInstance與Execution) 141
9.2 啓動流程 142
9.2.1 startProcessInstanceById方法 142
9.2.2 startProcessInstanceByKey方法 144
9.2.3 startProcessInstanceByMessage 145
9.3 流程參數 146
9.3.1 設置與查詢流程參數 147
9.3.2 流程參數的作用域 147
9.3.3 其他設置參數的方法 149
9.4 流程操作 149
9.4.1 流程觸發 149
9.4.2 觸發信號事件 150
9.4.3 觸發消息事件 152
9.4.4 中斷與激活流程 153
9.4.5 刪除流程 154
9.5 流程數據查詢 155
9.5.1 執行流查詢 155
9.5.2 流程實例查詢 157
9.6 本章小結 158
第10章 曆史數據管理和流程引擎管理 159
10.1 曆史數據管理 160
10.1.1 曆史流程實例查詢 160
10.1.2 曆史任務查詢 161
10.1.3 曆史行為查詢 163
10.1.4 曆史流程明細查詢 165
10.1.5 刪除曆史流程實例和曆史任務 166
10.2 工作的産生 167
10.2.1 異步任務産生的工作 168
10.2.2 定時中間事件産生的工作 169
10.2.3 定時邊界事件産生的工作 170
10.2.4 定時開始事件産生的工作 171
10.2.5 流程拋齣事件産生的工作 172
10.2.6 暫停工作的産生 174
10.2.7 無法執行的工作 175
10.3 工作管理 176
10.3.1 工作查詢對象 176
10.3.2 獲取工作異常信息 176
10.3.3 轉移與刪除工作 177
10.4 數據庫管理 178
10.4.1 查詢引擎屬性 178
10.4.2 數據錶信息查詢 179
10.4.3 數據庫操作 180
10.4.4 數據錶查詢 180
10.5 本章小結 181
第11章 流程事件 182
11.1 事件分類 183
11.1.1 按照事件的位置分類 183
11.1.2 按照事件的特性分類 183
11.2 事件定義 183
11.2.1 定時器事件定義 184
11.2.2 cron錶達式 184
11.2.3 錯誤事件定義 186
11.2.4 信號事件定義 186
11.2.5 消息事件定義 187
11.2.6 取消事件定義 187
11.2.7 補償事件定義 188
11.2.8 其他事件定義 188
11.3 開始事件 188
11.3.1 無指定開始事件 188
11.3.2 定時器開始事件 189
11.3.3 消息開始事件 190
11.3.4 錯誤開始事件 191
11.4 結束事件 193
11.4.1 無指定結束事件 193
11.4.2 錯誤結束事件 194
11.4.3 取消結束事件和取消邊界事件 196
11.4.4 終止結束事件 199
11. 5 邊界事件 200
11.5.1 定時器邊界事件 201
11.5.2 錯誤邊界事件 203
11.5.3 信號邊界事件 204
11.5.4 補償邊界事件 206
11.6 中間事件 209
11.6.1 中間事件分類 209
11.6.2 定時器中間事件 210
11.6.3 信號中間Catching事件 211
11.6.4 信號中間Throwing事件 213
11.6.5 消息中間事件 215
11.6.6 無指定中間事件 215
11.7 補償中間事件 215
11.7.1 補償執行次數 215
11.7.2 補償的執行順序 217
11.7.3 補償的參數設置 220
11.8 本章小結 221
第12章 流程任務 222
12.1 BPMN 2.0任務 223
12.1.1 任務的繼承 223
12.1.2 XML約束 223
12.1.3 任務的類型 225
12.2 用戶任務 226
12.2.1 分配任務候選人 226
12.2.2 分配任務代理人 228
12.2.3 權限分配擴展 228
12.2.4 使用任務監聽器進行權限分配 229
12.2.5 使用JUEL分配權限 230
12.3 腳本任務 232
12.3.1 腳本任務 232
12.3.2 JavaScript腳本 233
12.3.3 Groovy腳本 234
12.3.4 設置返迴值 235
12.3.5 JUEL腳本 236
12.4 服務任務 237
12.4.1 Java服務任務 238
12.4.2 實現JavaDelegate 238
12.4.3 使用普通Java Bean 240
12.4.4 在Activiti中調用Web Service 241
12.4.5 import元素 242
12.4.6 itemDefinition和message元素 242
12.4.7 interface與operation元素 243
12.4.8 設置Web Service參數與返迴值 243
12.4.9 發布Web Service 243
12.4.10 使用Web Service Task 245
12.4.11 JavaDelegate屬性注入 248
12.4.12 在JavaDelegate中調用Web Service 251
12.4.13 Shell任務 253
12.5 其他任務 255
12.5.1 手動任務和接收任務 255
12.5.2 郵件任務 257
12.5.3 Mule任務和業務規則任務 258
12.6 任務監聽器 259
12.6.1 使用class指定監聽器 259
12.6.2 使用expression指定監聽器 260
12.6.3 使用delegateExpression指定
監聽器 261
12.6.4 監聽器的觸發 262
12.6.5 屬性注入 263
12.7 流程監聽器 263
12.7.1 配置流程監聽器 263
12.7.2 觸發流程監聽器的事件 264
12.8 本章小結 267
第13章 其他流程元素 268
13.1 子流程 269
13.1.1 嵌入式子流程 269
13.1.2 調用式子流程 271
13.1.3 調用式子流程的參數傳遞 273
13.1.4 事件子流程 275
13.1.5 事務子流程 277
13.1.6 特彆子流程 280
13.2 順序流 282
13.2.1 條件順序流 282
13.2.2 默認順序流 284
13.3 流程網關 286
13.3.1 單嚮網關 286
13.3.2 並行網關 288
13.3.3 兼容網關 291
13.3.4 事件網關 293
13.4 流程活動特性 295
13.4.1 多實例活動 295
13.4.2 設置循環數據 297
13.4.3 獲取循環元素 298
13.4.4 循環的內置參數 300
13.4.5 循環結束條件 302
13.4.6 補償處理者 304
13.5 本章小結 304
第14章 Activiti與規則引擎 305
14.1 概述 306
14.1.1 規則引擎Drools 306
14.1.2 Drools下載與安裝 306
14.2 開發第一個Drools應用 307
14.2.1 建立Drools環境 307
14.2.2 編寫規則 308
14.2.3 加載與運行 308
14.3 Drools規則語法概述 309
14.3.1 規則文件結構 309
14.3.2 關鍵字 310
14.3.3 規則編譯 310
14.4 類型聲明 311
14.4.1 聲明新類型 312
14.4.2 使用ASM操作字節碼 313
14.4.3 類型聲明的使用 314
14.4.4 類型的繼承 316
14.4.5 聲明元數據 317
14.5 函數和查詢 317
14.5.1 函數定義和使用 318
14.5.2 查詢的定義和使用 320
14.6 規則語法 321
14.6.1 全局變量 322
14.6.2 規則屬性 323
14.6.3 條件語法 327
14.6.4 行為語法 330
14.7 Activiti調用規則 331
14.7.1 業務規則任務 332
14.7.2 製定銷售單優惠規則 333
14.7.3 實現銷售流程 336
14.8 本章小結 339
第15章 基於DMN的Activiti規則引擎 340
15.1 DMN規範概述 341
15.1.1 DMN的齣現背景 341
15.1.2 Activiti與Drools 341
15.1.3 DMN的XML樣例 341
15.2 DMN的XML規範 342
15.2.1 決策 342
15.2.2 決策錶 343
15.2.3 輸入參數 343
15.2.4 輸齣結果 344
15.2.5 規則 344
15.3 運行第一個應用 345
15.3.1 建立項目 345
15.3.2 規則引擎配置文件 346
15.3.3 編寫DMN文件 346
15.3.4 加載與運行DMN文件 347
15.4 規則引擎API簡述 348
15.4.1 創建規則引擎 348
15.4.2 配置規則引擎 349
15.4.3 數據查詢 350
15.4.4 執行DMN文件 350
15.5 規則匹配 351
15.5.1 MVEL錶達式簡介 351
15.5.2 執行第一個錶達式 351
15.5.3 使用對象執行錶達式 352
15.5.4 規則引擎規則匹配邏輯 353
15.5.5 自定義錶達式函數 354
15.5.6 Activiti中的自定義錶達式函數 355
15.5.7 銷售打摺案例 357
15.6 本章小結 360
第16章 整閤第三方框架 361
16.1 Spring Framework 362
16.1.1 Spring的IoC 362
16.1.2 Spring的AOP 362
16.1.3 使用IoC 363
16.1.4 使用AOP 364
16.2 Activiti整閤Spring 365
16.2.1 SpringProcessEngineConfiguration 365
16.2.2 資源的部署模式 367
16.2.3 ProcessEngineFactoryBean 367
16.2.4 在bean中注入Activiti服務 368
16.2.5 在Activiti中使用Spring的bean 369
16.3 Activiti整閤Web項目 371
16.3.1 安裝Tomcat插件 371
16.3.2 加入Spring 373
16.3.3 整閤Hibernate 375
16.3.4 配置聲明式事務 377
16.3.5 添加Struts配置 378
16.3.6 實現一個最簡單的邏輯 378
16.3.7 測試事務 380
16.3.8 添加Activiti 380
16.4 Activiti與Spring Boot 381
16.4.1 Spring Boot項目簡介 381
16.4.2 下載與安裝Maven 382
16.4.3 開發第一個Web應用 383
16.4.4 Activiti與Spring Boot的整閤 386
16.5 Activiti與JPA 388
16.5.1 建立與運行JPA項目 388
16.5.2 在Activiti中使用JPA 390
16.5.3 Activiti、Spring與JPA的整閤 391
16.5.4 基於JPA的例子 393
16.6 本章小結 395
第17章 Activiti開放的Web Service 396
17.1 Web Service簡介 397
17.1.1 Web Service 397
17.1.2 SOAP協議 397
17.1.3 REST架構 397
17.1.4 REST的設計準則 398
17.1.5 REST的主要特性 398
17.1.6 SOAP RPC與REST的區彆 399
17.2 使用Sping MVC發布REST 399
17.2.1 在Web項目中加入Spring MVC 400
17.2.2 發布REST的Web Service 401
17.2.3 使用Restlet編寫客戶端 402
17.2.4 使用CXF編寫客戶端 402
17.2.5 使用HttpClient編寫客戶端 403
17.2.6 準備測試數據 403
17.2.7 部署Activiti的Web Service 403
17.2.8 接口訪問權限 404
17.2.9 訪問Activiti接口 404
17.3 流程存儲服務 405
17.3.1 上傳部署文件 405
17.3.2 部署數據查詢 406
17.3.3 部署資源查詢 406
17.3.4 查詢單個部署資源 407
17.3.5 刪除部署 408
17.4 本章小結 409
第18章 Activiti功能進階 410
18.1 流程控製邏輯 411
18.1.1 概述 411
18.1.2 設計流程對象 411
18.1.3 創建流程節點行為類 413
18.1.4 編寫業務處理類 414
18.1.5 將流程XML轉換為Java對象 414
18.1.6 編寫客戶端代碼 416
18.2 Activiti的錶單 416
18.2.1 概述 416
18.2.2 錶單屬性 417
18.2.3 外部錶單 418
18.2.4 關於動態工作流和動態錶單 419
18.3 流程圖XML 419
18.3.1 節點元素 419
18.3.2 銜接元素 420
18.3.3 流程圖與流程文件的轉換 420
18.4 流程操作 421
18.4.1 流程迴退 421
18.4.2 會簽 422
18.5 本章小結 424
第19章 辦公自動化係統 425
19.1 使用技術 426
19.1.1 錶現層技術 426
19.1.2 MVC框架 426
19.1.3 Spring和Hibernate 426
19.2 功能簡述 427
19.2.1 係統的角色管理 427
19.2.2 薪資計算流程 427
19.2.3 請假流程 427
19.2.4 薪資調整流程 427
19.2.5 報銷流程 428
19.3 框架整閤 428
19.3.1 創建Web項目 428
19.3.2 整閤Spring 429
19.3.3 整閤Hibernate 430
19.3.4 整閤Struts2 432
19.3.5 整閤Activiti 433
19.4 數據庫設計 434
19.4.1 薪資錶 434
19.4.2 請假記錄錶 434
19.4.3 薪資調整記錄錶 435
19.4.4 報銷記錄錶 436
19.5 初始化數據 437
19.5.1 初始化角色數據 437
19.5.2 薪資計算流程 438
19.5.3 請假流程 439
19.5.4 報銷流程 439
19.5.5 薪資調整流程 440
19.6 角色管理 441
19.6.1 用戶組管理 442
19.6.2 用戶列錶 443
19.6.3 新建用戶 445
19.6.4 用戶登錄 446
19.7 流程啓動 447
19.7.1 啓動請假流程 447
19.7.2 啓動報銷流程 450
19.7.3 啓動薪資調整流程 452
19.8 申請列錶 453
19.8.1 申請列錶的實現 453
19.8.2 請假申請列錶 454
19.8.3 報銷申請列錶 455
19.8.4 薪資調整列錶 455
19.8.5 查看流程圖 456
19.9 流程任務 457
19.9.1 待辦任務列錶 457
19.9.2 領取任務與受理任務列錶 459
19.9.3 查詢任務信息 460
19.9.4 任務審批 462
19.9.5 運行OA的流程 463
19.10 本章小結 463
前言/序言
前 言
當今技術發展一日韆裏,各種技術框架如雨後春筍般湧現,技術正在改變世界、改變生活。作者從業十餘年,麵對如此變幻莫測的世界,亦難巋然不動,麵對日新月異的知識,時常懷著一顆謙卑的心。隻有學習,纔能帶來快樂,纔不會被淘汰。程序是枯燥的,但程序又是美麗的,看似冷冰冰的代碼,實則豐富多彩。
Java是目前世界上應用最廣泛的語言,在Java領域齣現瞭眾多優秀的框架和組件,這些組件正在慢慢提高編程的效率,使得編程這項原本枯燥的工作變得更為優雅與簡單。在工作流領域,湧現齣多個使用Java語言編寫的框架,如OpenWFE、jBPM、Shark,甚至在國內市麵上齣現瞭不少國産的工作流引擎。近年來,齣現瞭一款“全新”的工作流框架Activiti,經過幾年的發展,Activiti已經成為一款成熟的工作流産品。筆者在2014年,基於Activiti 5.0版本,編寫瞭《瘋狂Workflow講義》第一版,Activiti 6.0在2017年發布,為瞭幫助廣大的Java研發者學習新框架,筆者對《瘋狂Workflow講義》進行升級,並將多年的實踐經驗融入本書中。
本書經過約半年的編寫,至今能得以付梓,得益於多方襄助,對他們的感激之情,難以言錶。感謝傳道並解惑的恩師,感謝聰穎而好學的讀者,感謝善良和親愛的傢人,筆者會謝意永存、銘感不忘。
本書內容概括
本書是一本介紹Java工作流領域的書,以Activiti為核心,內容囊括瞭多個流行的企業級Java EE框架,全書主要可分為以下幾個部分。
第一部分:對Activiti的基礎知識進行講解,包括框架起源、基本的設計模式、數據庫設置以及框架配置等,該部分知識可以幫助讀者對Activiti有一個較為深入的認識,對Activiti的設計有一個初步的印象,該部分內容也可以作為整閤Activiti到項目中的參考。
第二部分:從源代碼的實現上講解Activiti各個模塊的API,除瞭講述這些API的作用外,還會引領讀者深入到這些API的內部,此部分內容可以作為一個詳細的Activiti API的幫助文檔。
第三部分:詳細講述瞭BPMN 2.0規範的內容,包括目前Activiti對該規範的實現情況。在講解BPMN 2.0規範時,將規範與Activiti的實現進行結閤,讓讀者在通俗易懂的例子示範下,對Activiti的實現及BPMN 2.0規範有較為深入的瞭解。
第四部分:Activiti 6支持的DMN規範,本書將在第15章中講述Activiti基於DMN規範的規則引擎。Activiti的規則引擎目前尚未正式麵世,筆者研讀瞭當前版本的源代碼,並帶領讀者優先體會瞭Activiti的規則引擎。
第五部分:講述如何在實際企業應用中使用Activiti,並與其他流行的開源框架進行整閤,包括企業應用開發所必須使用的Web Service、企業服務總綫、規則引擎、IoC框架和ORM框架等。除瞭主要的Activiti知識外,企業中常用框架的知識,也在該部分內容中得到瞭體現。通過學習這部分內容,可以極大豐富你的實戰知識,讓你成為一個更全麵的技術人員。
第六部分:在第18章中講述瞭Activiti的核心架構及Activiti的錶單知識,本書最後一章,通過講解一個辦公係統的開發過程,讓讀者更瞭解Activiti在實際生産中的應用,從而理論層麵,走上實踐的道路。
本書特點
筆者長期工作於企業的IT部門,有著豐富的企業應用開發經驗,因此本書具有以下特點。
1. 內容深入
從筆者接觸編程開始,就養成瞭查看源代碼的習慣,書中的示例不僅僅能幫助理解Activiti的功能,更藉鑒瞭Activiti的思路去模擬功能的實現,所以讀者能夠深入瞭解其中的原理。
2. 開發環境與示例更貼近實際
本書中示例的開發環境、使用的框架及工具均來自企業的實際應用,示例的選取與研發過程更貼近實際。
3. 注釋詳細
本書的代碼幾乎每行都有注釋,讀者可以很容易地瞭解代碼的意思,輕鬆掌握相應的知識。
本書寫給誰看
如果你有一定的Java語言基礎,進行過Web項目的開發,對工作流有一定的認識,那麼本書可以幫助你提升關於工作流的知識水平。如果你是一個從事過企業應用開發的程序員,本書同樣適閤你,本書的知識可以幫助你深入理解工作流引擎,使你可以將這些工作流框架應用到實際的企業生産中。
衷心感謝
首先非常感謝李剛老師,一直以來,他既是我的老師,也是我的技術後盾,非常幸運人生能有這樣一位良師益友。
其次感謝齣版社的編輯,為本書的齣版做瞭很多細緻的工作,並為本書提齣瞭許多寶貴的意見。
最後感謝我的傢人,你們是我前進的動力。
智能時代的企業級流程引擎:Activiti 6.x 深度實踐與應用開發 在當今快速變化的商業環境中,企業運營效率和流程自動化已成為決定競爭力的核心要素。從審批流程到復雜的業務協作,再到跨部門的聯動,高效、靈活、可靠的工作流管理係統是企業數字化轉型的基石。本書旨在為廣大開發者、架構師以及對企業級應用開發感興趣的讀者,提供一個深入理解並掌握Activiti 6.x這一強大開源流程引擎的全麵指南。 本書定位與價值 本書並非一本簡單的API手冊,而是將理論與實踐緊密結閤,從零開始,循序漸進地帶領讀者走進Activiti的世界。我們將深入剖析Activiti 6.x的核心架構、設計理念以及關鍵組件,講解如何利用其強大的功能來構建和管理復雜的業務流程。本書的價值在於: 理論深度與實踐廣度兼顧: 我們不僅會講解Activiti的原理,更會通過大量貼近實際業務場景的案例,展示如何在企業級應用中靈活運用Activiti。 版本聚焦與趨勢把握: 聚焦Activiti 6.x,這是目前企業級應用中廣泛應用的穩定版本,並對後續版本的發展趨勢進行前瞻性分析,幫助讀者掌握最新的技術動態。 從入門到精通的階梯式學習: 無論您是初次接觸工作流引擎,還是已有相關經驗,本書都能為您提供清晰的學習路徑,幫助您快速上手並逐步深入。 解決實際問題的能力培養: 本書強調的是解決實際問題的能力。通過閱讀和實踐本書內容,讀者將能夠獨立設計、開發、部署和維護企業級的流程應用。 核心內容概覽 第一部分:流程引擎原理與基礎 本部分將為讀者打下堅實的理論基礎,理解Activiti 6.x為何能夠成為一個強大的流程引擎。 流程引擎的演進與現代企業需求: 探討傳統工作流管理的局限性,以及現代企業對流程自動化、靈活性、可擴展性和集成性的新需求,引齣Activiti的齣現及其解決之道。 Activiti 6.x 架構剖析: 深入解析Activiti 6.x的核心組件,包括流程引擎(Process Engine)、流程倉庫(Repository Service)、運行時服務(Runtime Service)、任務服務(Task Service)、曆史服務(History Service)、身份服務(Identity Service)和管理服務(Management Service)等。理解它們之間的協同工作機製。 BPMN 2.0規範解讀與Activiti的實現: BPMN(Business Process Model and Notation)是流程建模的事實標準。我們將詳細解讀BPMN 2.0規範中的關鍵元素(如任務、網關、事件、泳道等),並講解Activiti如何將其轉化為可執行的流程定義。 第一個Activiti流程:從建模到執行: 通過一個簡單的“請假申請”流程,手把手帶領讀者完成流程模型的繪製、部署、流程實例的啓動、任務的拾取與完成,以及流程實例狀態的查詢。 第二部分:Activiti 6.x 核心功能深度實踐 本部分將進入Activiti 6.x的核心功能,通過豐富的實例,展示其強大的流程控製和管理能力。 流程模型設計與高級特性: 用戶任務(User Task): 詳解分配規則(Assignee, Candidate Users, Candidate Groups)、任務監聽器(Task Listeners)等。 排他網關(Exclusive Gateway): 實現條件分支,處理不同決策路徑。 並行網關(Parallel Gateway): 實現流程的並行執行,提高效率。 包容網關(Inclusive Gateway): 靈活控製並行分支的閤並與拆分。 事件(Events): 涵蓋起始事件、結束事件、中間捕獲事件、中間拋齣事件,以及定時事件(Timer Events)、消息事件(Message Events)、信號事件(Signal Events)等,實現流程的觸發與響應。 子流程(Sub-processes): 講解如何設計和調用子流程,實現流程的模塊化和復用。 調用活動(Call Activity): 實現流程之間的嵌套調用,構建更復雜的流程體係。 泳道與池(Lanes & Pools): 理解如何在流程圖中清晰地劃分責任區域,明確參與者。 Java API 深度應用: Repository Service: 流程定義的新增、查詢、刪除,以及版本管理。 Runtime Service: 流程實例的啓動、掛起、激活、終止,以及變量的管理。 Task Service: 任務的查詢、拾取、認領、轉派、簽收、辦理、迴退等操作。 History Service: 查詢已完成或已終止的流程實例和任務的曆史信息,用於審計和分析。 Identity Service: 用戶、群組、權限等身份信息的管理,與流程任務分配集成。 錶單(Forms)與流程變量(Process Variables): 錶單設計與集成: 講解如何設計用戶任務所需的錶單,以及Activiti如何與前端錶單引擎(如Flowable Forms、Form.io等)集成,實現動態錶單。 流程變量管理: 深入理解局部變量、全局變量的概念,以及變量在流程流轉中的傳遞與作用。 事件驅動的流程: 定時事件(Timer Events)的應用: 實現流程的延遲執行、周期性執行,以及超時提醒。 消息事件(Message Events)與信號事件(Signal Events): 學習如何在不同流程實例之間、甚至不同係統之間進行消息通信,實現異步解耦。 任務監聽器(Task Listeners)與流程監聽器(Execution Listeners): 事件驅動的自定義邏輯: 講解如何通過監聽器在流程事件(如任務創建、任務完成、流程啓動、流程結束等)發生時,執行自定義的Java代碼,實現流程的智能化和自動化。 第三部分:Activiti 6.x 集成與擴展 本部分將帶領讀者將Activiti 6.x無縫集成到實際的企業應用中,並探討如何根據業務需求進行擴展。 與Spring Boot集成: 快速搭建Activiti開發環境: 利用Spring Boot的便利性,快速配置Activiti依賴,簡化開發環境的搭建。 Spring Bean調用: 學習如何在流程監聽器、Java服務任務中方便地調用Spring管理的Bean。 事務管理: 探討Activiti與Spring事務管理的配閤,保證數據的一緻性。 RESTful API 詳解與應用: Activiti RESTful API: 詳細介紹Activiti 6.x提供的RESTful接口,使其可以被各種客戶端(Web應用、移動應用、第三方係統)調用。 構建基於RESTful API的流程管理係統: 演示如何利用RESTful API,實現前端界麵對流程的啓動、任務管理、流程監控等功能。 自定義服務任務(Service Tasks): 集成外部係統: 學習如何通過自定義服務任務,調用外部的Web服務、數據庫操作、消息隊列等,實現流程與業務係統的深度集成。 Java Delegated Tasks: 詳細講解如何實現`JavaDelegatedTask`接口,編寫自定義的Java代碼來處理流程中的復雜邏輯。 用戶與權限管理集成: 與企業現有用戶體係集成: 講解如何利用Activiti的Identity Service,與LDAP、OAuth2等身份認證係統集成,實現統一的用戶和權限管理。 自定義用戶與群組查詢: 示例如何實現自定義的用戶與群組查詢邏輯,滿足企業特有的組織結構需求。 流程監控與管理: Activiti Explorer/Admin: 介紹Activiti提供的可視化管理工具,用於流程設計、部署、監控和調試。 自定義監控界麵: 討論如何通過Activiti API,開發更符閤企業需求的流程監控和報錶係統。 流程的可視化與調試: 流程圖的渲染與高亮: 學習如何在運行時動態渲染流程圖,並高亮當前活動節點,方便實時監控。 流程實例的調試技巧: 介紹Activiti提供的調試工具和方法,幫助開發者快速定位和解決流程中的問題。 第四部分:高級主題與最佳實踐 本部分將深入探討Activiti 6.x的一些高級特性,並總結實戰中的經驗教訓,幫助讀者構建穩定、高效、可維護的流程應用。 流程的遷移與升級: 探討在流程模型發生變化時,如何平滑地遷移現有流程實例,避免業務中斷。 流程的國際化: 如何處理多語言的流程任務、錶單等。 性能優化與調優: 分析Activiti的性能瓶頸,提供數據庫優化、緩存策略、JVM調優等方麵的建議。 集群與高可用: 討論如何在集群環境下部署Activiti,確保流程引擎的高可用性。 安全性考慮: 講解Activiti在安全方麵的最佳實踐,如權限控製、數據加密等。 與微服務架構的集成: 探討Activiti如何作為獨立的服務,或集成到微服務體係中,實現流程的解耦和復用。 實戰案例深度解析: 選取幾個典型的企業級應用場景(如:閤同審批、訂單處理、IT服務管理、人力資源流程等),深入剖析其Activiti實現方案。 本書特色 代碼示例豐富且貼近實戰: 每個關鍵技術點都配有可運行的Java代碼示例,方便讀者動手實踐。 圖文並茂,易於理解: 大量使用流程圖、架構圖、UML圖等可視化元素,幫助讀者清晰理解復雜概念。 強調解決實際問題: 避免空泛的理論討論,聚焦於如何利用Activiti解決企業在流程自動化過程中遇到的實際挑戰。 麵嚮不同層次讀者: 無論您是初學者還是有經驗的開發者,都能從中獲益。 目標讀者 Java後端開發工程師 企業應用架構師 IT項目經理 對工作流引擎和流程自動化感興趣的技術愛好者 希望提升企業運營效率和數字化水平的技術團隊 通過閱讀本書,您將不僅掌握Activiti 6.x的強大功能,更能深刻理解企業級流程引擎的設計理念和應用模式,從而在數字化轉型浪潮中,構建齣更智能、更高效、更具競爭力的企業應用。