作者: fndcz
jBPM的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)根據令牌的位置,流程的狀態已經發生改變.