對jBPM來講,工作流由一些節(jié)點和用戶定義的Hander組成。一個工作流從start-state開始,中間經(jīng)過若干個節(jié)點(state、fork、milestone、process-state、decision和join),最后結(jié)束于end-state。節(jié)點之間通過transient來連接,指明當(dāng)前節(jié)點下面要經(jīng)過的節(jié)點。經(jīng)過節(jié)點時,jBPM會觸發(fā)相應(yīng)的Hander來完成用戶指定的工作。Hander包括各種事件的ActionHander;指定節(jié)點指定操作Actor的AssignmentHandler;定義節(jié)點工作的Hander,包括fork節(jié)點ForkHander,Join節(jié)點JoinHander,decision節(jié)點的DecisionHander,process-state節(jié)點的ProcessInvocationHandler。jBPM對Hander都有缺省的實現(xiàn),如果用戶沒有指定相應(yīng)Hander,jBPM就使用缺省Hander。
定義工作流程的時候,可以根據(jù)實際業(yè)務(wù)流程,先畫UML狀態(tài)圖,然后根據(jù)活動圖和jpdl編寫processdefinition.xml-jBPM工作流定義文件。狀態(tài)圖的節(jié)點可以對應(yīng)到jpdl的相應(yīng)節(jié)點,比如狀態(tài)對應(yīng)于state、轉(zhuǎn)換(分叉)對于fork。流程定義文件設(shè)計的時候,可以將一些業(yè)務(wù)處理放在Hander處理。
jBPM節(jié)點實際上是XPDL規(guī)范中Activity的細(xì)化,是一種特殊的Activity。start-state與end-state節(jié)點,是由jBPM負(fù)責(zé)處理,jBPM從start-state節(jié)點開始工作流程,在end-state結(jié)束工作流程。
state節(jié)點要外部的參與才能進(jìn)入到下一個狀態(tài),比如請假流程中需要經(jīng)理批準(zhǔn)的步驟。
Join相當(dāng)于activity transition 的join,fork相當(dāng)于activity transition 的fork,但是采用怎樣join和fork,用戶可以自己定義。缺省的fork相當(dāng)于XPDL 的AND FORK,每個分叉都走;缺省的join 相當(dāng)于XPDL 的AND JOIN,所有分叉都到達(dá)后,才進(jìn)入下一節(jié)點。
Decision相當(dāng)于編程語言中的判斷,由DecisionHander決定下一個要經(jīng)過的節(jié)點。通過自己定義DecisionHander,用戶可以借助decision節(jié)點實現(xiàn)自動節(jié)點,即流程到這里,執(zhí)行一定操作,自動進(jìn)入下一個節(jié)點。
Process-state相當(dāng)于subflow activity,ProcessInvocationHandler負(fù)責(zé)處理具體調(diào)用子流程的過程,比如子流程名稱,傳遞的參數(shù)等。jBPM沒有規(guī)定子流程的調(diào)用過程,只是提供了一個DefaultProcessInvocationHandler,給出了一個調(diào)要的范例。
Milestone是一種特殊的節(jié)點,用于同步兩個執(zhí)行路徑,比如執(zhí)行到milestone節(jié)點后,jBPM就等待,等到另外一條路徑上某個節(jié)點發(fā)出可以繼續(xù)的信號后,jBPM才進(jìn)入milestone的下一個節(jié)點。節(jié)點通過MilestoneReachedActionHandler來發(fā)消息。
工作流中用到的所有變量通過Variable來說明,變量類型通過type來定義。類型定義必須要繼承org.jbpm.delegation.Serializer接口。變量是作為字符串存儲在數(shù)據(jù)庫中的,因此類型要提供與字符串類型相互轉(zhuǎn)換的方法。jBPM變量的作用域是工作流本身。
流程執(zhí)行到某個節(jié)點的時候,會觸發(fā)節(jié)點的相應(yīng)事件。事件類型包括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。事件具體執(zhí)行的操作,用戶通過繼承ActionHander接口來指定。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。