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) 將運行上下文中令牌的State和ActorId置null;
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事件。
五、StateImpl、StartStateImpl
1) 將上下文中令牌的狀態設定為當前狀態;
2) 觸發STATE_ENTER事件;
3) 假如狀態設定了swimlane屬性,從swimlane中取出actorId值設定為上下文中令牌的actorId值;
4) 假如State要求必須assignment但actorId為null,則報錯;
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置空,當前狀態設定為令牌當前狀態,令牌子進程實例設定為已經啟動成功的子工作流程;否則報錯。
新聞熱點
疑難解答