jbpm的Token,node

Token

jbpm中最重要的概念,應該是令牌(Token)和信令(Signal)

在整個流程實例運行過程中,我們可以迅速的利用token得到其當前的current state。在解決“並行”等(比如Fork)問題時,jBpm讓Token對象維護了父子關係,這種關係在涉及到Fork的時候會產生。 jBpm讓Token這個對象身兼了多種使命:(1)快速定位current state (2)用於fork,join算法 (3)用於告知任務執行者的任務索引。

如下代碼:

//pd是process definition,pi是process instance ProcessInstance

pi = new ProcessInstance( pd );

//得到根令牌

Token token = pi.getRootToken();

//發信令

token.signal();

Token的signal方法也可以傳入transition參數,這個方法把信令發送給Token,這樣,令牌將被激活,並沿指定的transition離開當前的狀態(如果沒有指定transition,將沿缺省的transition 離開當前狀態).

jbpm是怎麼實現的呢?其實很簡單:

1)Token記錄了當前的狀態(current state),只有當前的狀態(或稱節點)擁有該令牌

2)向TOKEN發signal後,當前狀態收到該signal

3)當前狀態把令牌傳給signal中指定的transition

4)transition收到令牌後,不強佔,馬上把令牌傳給下個狀態.

5)根據令牌的位置,流程的狀態已經發生改變.

 

node

 

一個流程圖由許多node和transition組成。每個node都有一種類型,這個類型決定了當流程執行到這個node時的不同行爲。jbpm有一組node type可以供你選擇,當然你可以定製自己node 。
node的作用
node有兩個主要的作用:
1)執行java代碼,比如說創建task instance(任務實例)、發出通知、更新數據庫等等。很典型的就是在node 上掛上我們的action
2) 控制流程的執行:
A、等待狀態
流程進入到這個node時將處於等待狀態,直到一個signal 的發出
B、流程將沿着一個leaving transition越過這個node
這種情況特殊一點,需要有個action掛在這個node上(注意這個action不是event觸發的!),action中將會調用到API裏
executionContext.leaveNode(String transitionName),transitionName即這裏的leaving transition名字。
C、創建新的執行路徑
很典型的就是fork node。流程在這裏會分叉,產生新的執行路徑。這樣就創建了新的token,每個新的token代表一個新的執行路徑。注意的是,這些新的token和產生前的token是父子關係!
D、結束執行路徑
一個node可以結束一條執行路徑,這同樣意味着相應的token的結束和流程的結束。 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章