天天看點

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的結束和流程的結束。