下面來(lái)說(shuō)說(shuō)OSWorkflow流程實(shí)例的結束。
在workflow pattern中有一種模式:Implicit Termination(隱性終止)。這種模式描述了這樣一種情形:活動(dòng)集中沒(méi)有任何可以執行(或有可能執行)的活動(dòng),此時(shí)流程實(shí)例已經(jīng)不能進(jìn)行任何操作和運轉。
這個(gè)和我們通常所說(shuō)的死鎖,不是一回事情:流程的死鎖是表示流程實(shí)例依然存在可以運行(或必需運行的)的活動(dòng)實(shí)例,但是由于缺少資源而不能執行某項操作而造成流程實(shí)例沒(méi)有正常運行。這種情況最為典型的就是,某一個(gè)出差了,但是沒(méi)有設置代理,造成任務(wù)沒(méi)有執行。
在OSWorkflow支持了Implicit Termination。當然OSWorkflow也支持我們最為常用的設置結束點(diǎn)。
先說(shuō)說(shuō)OSWorkflow對設置結束點(diǎn)的支持,這個(gè)是非常容易的,只需要將Step中的某一個(gè)Action的屬性finish的值設置為“true”即可。
既然這么簡(jiǎn)單,我為什么還要說(shuō)呢?
既然一個(gè)簡(jiǎn)單東東還拿來(lái)說(shuō),那就說(shuō)明這個(gè)東東其實(shí)不簡(jiǎn)單。
讓我們來(lái)思考一個(gè)問(wèn)題,OSWorkflow為什么會(huì )將finish這個(gè)屬性放在了Action而不是放在了Step上呢?
依據我們通常說(shuō)理解的:在眾多活動(dòng)節點(diǎn)中,有一個(gè)結束節點(diǎn),這個(gè)結束節點(diǎn)表示了流程實(shí)例結束的語(yǔ)義。實(shí)際上很多工作流引擎都是這么做的,shark,jbpm,yawl等等。
這是因為在OSWorkflow的視角中,并沒(méi)有一個(gè)Step這個(gè)概念。OSWorkflow真正只有兩個(gè)視角:State和Action。而step和status只是聯(lián)合扮演了state的角色。所以在OSWorkflow的執行引擎類(lèi)中,只有doAction等等操作方法,而沒(méi)有doStep之類(lèi)的方法。
對于執行引擎來(lái)說(shuō),其只知道,任何一種狀態(tài),都必然意味著(zhù)是由某種action所引起的變化結果。Action上設置Finish,表示這個(gè)Action只要發(fā)生,其產(chǎn)生的結果狀態(tài)就是“Finish”?!@是FSM(有限狀態(tài)機)的基本原則——一個(gè)Finish狀態(tài)的產(chǎn)生,就表示整個(gè)流程實(shí)例的結束。
所以想把OSWorkflow的精華理解透徹,就必須在腦海中先暫時(shí)放棄“活動(dòng)”、“結束點(diǎn)”、“起始點(diǎn)”之類(lèi)的概念?!?/span> 所以在這里順便說(shuō)一句額外的話(huà),OSWorkflow其實(shí)并不是非常適合剛剛結束工作流的初學(xué)者。剛剛接觸工作流的人,個(gè)人建議還是先鉆研鉆研WFMC的一些東東,雖然我們都說(shuō)XPDL這不好,那不好,其實(shí)xpdl之中有很多值得參考的思想。
聯(lián)系客服