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