1. 程式人生 > >Activiti工作流引擎——元件說明

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中開發人員可以通過配置監聽器的方式監聽各種動作,例如流程啟動、結束、任務建立、任務完成。
監聽器分為兩類:執行監聽器和任務監聽器。