JBPM源碼分析(二)---acceptToken函數

acceptToken是JBPM工作流引擎中的核心函數,它在每個節點中都有具體的實現。這個函數主要決定該節點如何處理到達該節點的令牌。理解了acceptToken,JBPM工作流的運行過程就懂得了一半。acctpToken在各節點類中具體實現的功能如下所示:

一、TransitionImpl

1)        觸發Transition事件;

2)        將到達節點作爲當前執行上下文節點;

3)        達到節點接受令牌(執行節點的acceptToken)。

二、DecisionImpl

1)        觸發DECISION_ENTER事件;

2)        調用DecisionHandler得到要執行的轉換(Transition);

3)        觸發DECISION_LEAVE事件;

4)        轉換接受令牌(執行節點的acceptToken)。

三、Fork

1)        觸發FORK_ENTER事件;

2)        將運行上下文中令牌的StateActorIdnull

3)        調用ForkHander

缺省的ForkHander,對於每一個它的轉換按順序執行以下操作:

l         觸發FORK_EVERY_LEAVE事件;

l         創建令牌,上下文中的令牌與新建令牌爲父子關係;

l         子令牌數據庫持久化;

l         將上下文中的令牌置爲子令牌,上下文的當前節點備份;

l         當前轉換接受令牌;

l         將上下文中的令牌置爲父令牌,節點還原;

l         子令牌reactiveJoin屬性設定爲將父令牌中的correspondingJoin

四、Join

1)        如果當前上下文中的令牌沒有結束,結束令牌(包括該令牌的所有子令牌);

2)        觸發JOIN_EVERY_ENTER事件;

3)        清楚上下文中的臨時變量;

4)        將令牌、當前Join節點置爲當前運行上下文中的令牌和節點;

5)        執行JoinHander

缺省的JoinHander在所有兄弟令牌都到達該Join節點後,激活父令牌,執行Join的轉換。父令牌激活時會觸發JOIN_LEAVE事件。

五、StateImplStartStateImpl

1)        將上下文中令牌的狀態設定爲當前狀態;

2)        觸發STATE_ENTER事件;

3)        如果狀態設定了swimlane屬性,從swimlane中取出actorId值設定爲上下文中令牌的actorId值;

4)        如果State要求必須assignmentactorIdnull,則報錯;

5)        記錄StateLog在令牌中;

6)        觸發STATE_AFTER_ASSIGNMENT事件。

六、EndStateImpl

1)        lastLog置空;

2)        上下文中的令牌置爲當前令牌;

3)        結束令牌(會觸發PROCESS_END事件)。

七、MilestoneImpl

1)        將上下文中令牌的狀態設定爲當前狀態;

2)        觸發MILESTONE_ENTER事件;

3)        從上下文中取出名稱爲Milestone名稱的變量;

4)        如果變量存在(不爲null),觸發MILESTONE_LEAVE事件,執行Milestone轉換(進入下一個狀態);否則,將令牌中的actorId值置空,在令牌中記錄日誌(等待)。

八、ProcessStateImpl

1)        在上下文令牌中記錄狀態日誌;

2)        取得ProcessInvocationHandler,啓動子工作流程;

3)        工作流啓動成功後,將上下文中令牌actorId置空,當前狀態設定爲令牌當前狀態,令牌子進程實例設定爲已經啓動成功的子工作流程;否則報錯。

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