文章目錄
- ??1.1 Activiti 介紹
- ??1.2 Activiti 開發流程
- ??1.3 BPMN 2.0 規范是什么
- ??1.4 BPMN 2.0 基本流程符號
- ????1.4.1 事件 Event
- ????1.4.2 活動
- ????1.4.3 網關 Gateway
- ??1.5 Activiti API 服務接口
- ????1.5.1 核心Service接口及其獲取
??1.1 Activiti 介紹
Activiti
是由 jBPM (BPM,Business Process Management 即業務流程管理) 的創建者 Tom Baeyens 離開 JBoss 之后建立的項目,構建在開發 jBPM 版本 1 到 4 時積累的多年經驗的基礎之上,旨在創建下一代的 BPM 解 決方案。
Activiti 作為一個開源的工作流引擎,它實現了BPMN 2.0規范,可以發布設計好的流程定義,并通過api進行流程調 度。 Activiti 作為一個遵從 Apache 許可的工作流和業務流程管理開源平臺,其核心是基于Java的超快速、超穩定的 BPMN2.0 流程引擎,強調流程服務的可嵌入性和可擴展性,同時更加強調面向業務人員。
Activiti 流程引擎重點關注在系統開發的易用性和輕量性上。每一項 BPM 業務功能 Activiti 流程引擎都以服務的形 式提供給開發人員。通過使用這些服務,開發人員能夠構建出功能豐富、輕便且高效的 BPM 應用程序。 Activiti是一個針對企業用戶、開發人員、系統管理員的輕量級工作流業務管理平臺,其核心是使用Java開發的快 速、穩定的BPMN 2.0流程引擎。Activiti是在ApacheV2許可下發布的,可以運行在任何類型的Java程序中,例如服 務器、集群、云服務等。
Activiti可以完美地與Spring集成。同時,基于簡約思想的設計使Activiti非常輕量級。 官網:https://www.activiti.org/
??1.2 Activiti 開發流程
- 畫流程定義模型: 遵守BPMN的流程規范,使用BPMN的流程定義工具,通過 流程符號 把整個業務流程定義出來,可以將流程 定義文件字節流保存到模型數據表中(Model)。
- 部署流程定義: 加載畫好的流程定義文件,將它轉換成流程定義數據(ProcessDefinition),保存到流程定義數據表中。
- 啟動流程(提交流程申請): 生成流程實例數據(ProcessInstance),生成第1節點任務數據(Task)。
- 處理人審批流程節點任務: 完成任務審批,生成審批結果,生成下一節點任務數據。
??1.3 BPMN 2.0 規范是什么
業務流程模型注解(Business Process Modeling Notation - BPMN)是業務流程模型的一種標準圖形注解。這個 標準是由對象管理組(Object Management Group - OMG)維護的。
標準的早期版本(1.2版以及之前)僅僅限制在模型上, 目標是在所有的利益相關者之間形成通用的理解, 在文 檔,討論和實現業務流程之上。 BPMN標準證明了它自己,現在市場上許多建模工具都使用了BPMN標準中的元素 和結構。
BPMN規范的2.0版本,當前已經處于最終階段了, 允許添加精確的技術細節在BPMN的圖形和元素中, 同時制定 BPMN元素的執行語法。 通過使用XML語言來指定業務流程的可執行語法, BPMN規范已經演變為業務流程的語 言, 可以執行在任何兼容BPMN2的流程引擎中, 同時依然可以使用強大的圖形注解。
目前BPMN2.0是最新的版本,它用于在BPM上下文中進行布局和可視化的溝通。BPMN 2.0是使用一些符號來明確 業務流程設計流程圖的一整套符號規范,它能增進業務建模時的溝通效率。
??1.4 BPMN 2.0 基本流程符號
????1.4.1 事件 Event
開始 中間事件 結束
????1.4.2 活動
活動是工作或任務的一個通用術語。一個活動可以是一個任務,還可以是一個當前流程的子處理流程;
????1.4.3 網關 Gateway
網關用來處理決策:
- 排他網關 (x)
只有一條路徑會被選擇。流程執行到該網關時,按照輸出流的順序逐個計算,當條件的計算結果為true時,繼 續執行當前網關的輸出流; 如果多條線路計算結果都是 true,則會執行第一個值為 true 的線路。如果所有網關計算結果沒有true,則引 擎會拋出異常。 排他網關需要和條件順序流結合使用,default 屬性指定默認順序流,當所有的條件不滿足時會執行默認順序流。
- 并行網關 (+)
所有路徑會被同時選擇 分支: 并行執行所有輸出順序流,為每一條順序流創建一個并行執行線路。 匯聚 :所有從并行網關拆分并執行完成的線路均在此等候,直到所有的線路都執行完成才繼續向下執行。
- 包含網關 (o)
可以同時執行多條線路,也可以在網關上設置條件分支:計算每條線路上的表達式,當表達式計算結果為true時,創建一個并行線路并繼續執行 匯聚:所有從并行網關拆分并執行完成的線路均在此等候,直到所有的線路都執行完成才繼續向下執行。
- 事件網關 (o+)
專門為中間捕獲事件設置的,允許設置多個輸出流指向多個不同的中間捕獲事件。當流程執行到事件網關 后,流程處于等待狀態,需要等待拋出事件才能將等待狀態轉換為活動狀態。
??1.5 Activiti API 服務接口
Activiti 流程引擎包含了25張表,而且表之間的關系也比較復雜,比如包含各種外鍵約束。
按照傳統的方式,有了數據庫表后,就應該為每張表創建 Entity 實體類,然后為其創建對應的 DAO 接口,然 后再創建對應的 Service來實現對表數據的增刪改查;
但是按照傳統方式的,就會有一個很嚴峻的問題,表的數量太多,并且關系復雜,還要兼顧流程引擎的處理方 式,自己去搞一套,幾乎不可能;
其實不需要我們去創建Entity 、 DAO、Service、Controller,因為Activiti已經把這些東西給搞好了,只需要 調用即可。
Process Engine API 和服務
引擎 API 是與 Activiti 交互的最常見方式。
可以從ProcessEngine中獲取包含工作流/ BPM方法的各種服務。
ProcessEngine和服務對象是線程安全的。因此,可以為整個服務器保留對其中之一的引用。
Service 是工作流引擎提供用于進行工作流部署、執行、管理的服務接口,我們使用對應Service接口可以操作對應 的數據表。
????1.5.1 核心Service接口及其獲取
// 會在首次調用時初始化并構建一個流程引擎,此后始終返回相同的流程引擎。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 引擎管理類
ManagementService managementService = processEngine.getManagementService();
// 動態修改流程管理類
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
// 流程運行管理類
RuntimeService runtimeService = processEngine.getRuntimeService();
// 流程倉庫管理類
RepositoryService repositoryService = processEngine.getRepositoryService();
// 任務管理類
TaskService taskService = processEngine.getTaskService();
// 歷史管理類
HistoryService historyService = processEngine.getHistoryService();