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