jBPM工作流程定義
對jBPM來講,工作流由一些節點和用戶定義的Hander組成。一個工作流從start-state開始,中間經過若干個節點(state、fork、milestone、process-state、decision和join),最後結束於end-state。節點之間通過transient來連接,指明當前節點下面要經過的節點。經過節點時,jBPM會觸發相應的Hander來完成用戶指定的工作。Hander包括各種事件的ActionHander;指定節點指定操作Actor的AssignmentHandler;定義節點工作的Hander,包括fork節點ForkHander,Join節點JoinHander,decision節點的DecisionHander,process-state節點的ProcessInvocationHandler。jBPM對Hander都有缺省的實現,如果用戶沒有指定相應Hander,jBPM就使用缺省Hander。<o:p></o:p>
定義工作流程的時候,可以根據實際業務流程,先畫UML狀態圖,然後根據活動圖和jpdl編寫processdefinition.xml-jBPM工作流定義文件。狀態圖的節點可以對應到jpdl的相應節點,比如狀態對應於state、轉換(分叉)對於fork。流程定義文件設計的時候,可以將一些業務處理放在Hander處理。<o:p></o:p>
jBPM節點實際上是XPDL規範中Activity的細化,是一種特殊的Activity。start-state與end-state節點,是由jBPM負責處理,jBPM從start-state節點開始工作流程,在end-state結束工作流程。<o:p></o:p>
state節點要外部的參與才能進入到下一個狀態,比如請假流程中需要經理批准的步驟。<o:p></o:p>
Join相當於activity transition 的join,fork相當於activity transition 的fork,但是採用怎樣join和fork,用戶可以自己定義。缺省的fork相當於XPDL 的AND FORK,每個分叉都走;缺省的join 相當於XPDL 的AND JOIN,所有分叉都到達後,才進入下一節點。<o:p></o:p>
Decision相當於編程語言中的判斷,由DecisionHander決定下一個要經過的節點。通過自己定義DecisionHander,用戶可以藉助decision節點實現自動節點,即流程到這裏,執行一定操作,自動進入下一個節點。<o:p></o:p>
Process-state相當於subflow activity,ProcessInvocationHandler負責處理具體調用子流程的過程,比如子流程名稱,傳遞的參數等。jBPM沒有規定子流程的調用過程,只是提供了一個DefaultProcessInvocationHandler,給出了一個調要的範例。<o:p></o:p>
Milestone是一種特殊的節點,用於同步兩個執行路徑,比如執行到milestone節點後,jBPM就等待,等到另外一條路徑上某個節點發出可以繼續的信號後,jBPM才進入milestone的下一個節點。節點通過MilestoneReachedActionHandler來發消息。<o:p></o:p>
工作流中用到的所有變量通過Variable來說明,變量類型通過type來定義。類型定義必須要繼承org.jbpm.delegation.Serializer接口。變量是作爲字符串存儲在數據庫中的,因此類型要提供與字符串類型相互轉換的方法。jBPM變量的作用域是工作流本身。<o:p></o:p>
流程執行到某個節點的時候,會觸發節點的相應事件。事件類型包括process-start、process-end、state-enter、state-leave、state-after-assignment、milestone-enter、milestone-leave、decision-enter、decision-leave、fork-enter、fork-every-leave、join-every-enter、join-leave、transition。事件具體執行的操作,用戶通過繼承ActionHander接口來指定。<o:p></o:p>