Activiti工作流引擎——元件說明
工作流引擎簡介
工作流引擎被廣泛應用於各種資訊化系統中,將原本散亂的業務梳理後定製成業務規範流程,進而約束業務的規範化處理和運轉,定製流程規範後,將其部署到工作流引擎中,由他自動驅動業務流程的進行。
Activiti可以執行在任何型別的java程式中,例如伺服器、叢集、雲服務等。
Activiti可以完美的與spring整合。
Activiti的特點
- 資料持久化,底層使用MyBatis
- 引擎Service介面
- 流程設計器(Eclipse Designer、IDEA actiBMP、基於web的Activiti Modeler)
- 原生支援Spring
- 分離執行時與歷史資料
Activiti引擎的七大Service介面
Service介面 | 作用 |
---|---|
RepositoryService | 流程倉庫Service,用於管理流程倉庫,例如部署、刪除、讀取流程資源 |
IdentifyService | 身份Service,用於管理和查詢使用者、組之間的關係 |
RuntimeService | 執行時Service,可以也拿過來處理所有正在執行狀態的流程例項、任務等 |
TaskService | 任務Service,用於管理和查詢任務,例如簽收、辦理、指派等 |
FormService | 表單Service,用於讀取流程、任務相關的表單資料 |
HistoryService | 歷史Service,用於查詢所有歷史資料,例如流程例項、任務、活動、變數、附件 |
ManagementService | 引擎管理Service,和具體業務無關,主要可以查詢引擎配置、資料庫、作業等 |
Activiti架構
Activiti與BPMN 2.0規範
啟動事件與結束事件(Event)
啟動事件
啟動事件都是觸發型的,等待第三方觸發後才可以啟動。在ACTIVITI中可以通過呼叫API觸發啟動事件。
空啟動事件
<process id="myProcess_1" isClosed="false" isExecutable ="true" processType="None">
<startEvent id="_9" name="StartEvent"/>
</process>
由於startEvent 標籤中沒有任何其他的元素定義,所以稱為空啟動事件。
屬性列表為
form key:用來指定空啟動事件關聯的表單檔案
initiator:用來記錄啟動流程的人的ID
定時啟動事件
定時啟動事件用來一次性定時啟動、特定時間間隔後啟動。
timeDate:一次性定時啟動
timeDuration:設定多長時間後啟動流程
timeCycle:週期性啟動任務,用來設定迴圈的時間間隔、表示多長時間執行一次迴圈。
異常啟動事件
異常啟動事件可以觸發一個異常子流程,但不能通過API方式啟動,他總是在另外一個流程丟擲異常結束事件的時候被觸發。
空結束事件
空結束事件
結束事件是丟擲型的,空結束時間不處理丟擲的結果。
異常結束事件
異常結束事件定義了需要丟擲的錯誤程式碼,如果找到合適的異常開始時間則觸發異常開始事件,否則按照空結束事件處理。
終止結束事件
可以終止一個流程例項的執行。
取消結束事件
可以取消一個事務子流程的執行,同時只能在子流程中使用。
順序流(Sequence Flow)
如果一個元素在流程期間被訪問,流程會沿著該元素所有的輸出順序流繼續執行。多個輸出順序流會建立多條獨立的、並行的執行路徑。
標準順序流
允許新增監聽器
條件順序流
新增條件表示式,只有滿足條件才能通過順序流到達目標活動。
條件順序流的XMl描述是在順序流中新增條件表示式標籤conditionExpression,並且在conditionExpression中設定UEL表示式用於計算邏輯值。
任務(Task)
使用者任務
必須人為的觸發
指令碼任務
指令碼任務可以執行引擎依賴語言之外的指令碼語言,如Groovy、JavaScript
web service任務
通過web service任務可以呼叫外部的web service資源,完成呼叫只需要一些必須的配置就可以,並且支援標準的web service和rest風格的service。
業務規則任務
業務規則任務可以根據流程變數的值處理預設的業務規則。
郵件任務
郵件任務可以通過activiti傳送郵件,其中郵件資訊通過變數方式傳遞。
Camel任務
Camel是用來解決訊息路由的框架。
Mule任務
Mule任務和Camel任務相似,但他們是基於不同標準實現的。
手動任務
activiti把手動任務當作一個空任務來處理,當到達此任務時由引擎自動完成並轉向下一個任務。
接收任務
接收任務是一個功能簡單且單一的任務,在任務建立後開始等待訊息的到來,直到被觸發才會完成任務。
Shell任務
Shell任務允許在流程執行過程中執行本地作業系統中的指令碼、命令,是Activiti基於serviceTask擴充套件的一種任務。
閘道器(Gateway)
排他閘道器
排他閘道器用來對流程中的決定進行建模。
並行閘道器
並行閘道器用來對併發的任務進行流程建模,它能把單條線路任務拆分成多個路徑並行執行或將多條路線合併。
包容閘道器
包含閘道器融合了排它閘道器和並行閘道器的特性,排它閘道器執行在每條線路上設定條件,並行閘道器可以同時執行多條線路,包含閘道器既可以同時執行多條線路,又允許在閘道器上設定條件。
事件閘道器
它允許多個輸出流指向多個不同的中間捕獲時間。
子流程(Subprocess)
邊界事件(Boundary Event)
邊界事件
邊界事件是繫結在活動上的“捕獲型”事件,會一直監聽所有處於活動的某種事件的觸發,在捕獲到事件之後中斷活動,然後從邊界事件型別的資料流繼續執行。
中間事件(Intermediate Event)
中間捕獲事件
中間丟擲事件
監聽器(Listener)
監聽器是業務和流程的“非侵入式粘合劑”,在activiti中開發人員可以通過配置監聽器的方式監聽各種動作,例如流程啟動、結束、任務建立、任務完成。
監聽器分為兩類:執行監聽器和任務監聽器。