專利名稱:一種流程狀態(tài)機的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及有限狀態(tài)機,具體地說,涉及一種流程狀態(tài)機的軟件實現(xiàn)方法,更具體地說,涉及通訊協(xié)議開發(fā)中業(yè)務(wù)流程狀態(tài)機的通用軟件實現(xiàn)方法。
背景技術(shù):
有限狀態(tài)機Finite State Machine簡稱FSM,是自動機理論中研究對象,可以用軟件或硬件實現(xiàn)。在如通信協(xié)議流程的軟件模塊開發(fā)中,大量涉及業(yè)務(wù)流程狀態(tài)的變化,以描述業(yè)務(wù)流程的實現(xiàn),非常適合于采用FSM結(jié)構(gòu)和流程狀態(tài)機。在通信協(xié)議流程和業(yè)務(wù)流程狀態(tài)機的具體實現(xiàn)中,需要不斷的變換狀態(tài),遷入和遷出進程,等待和處理進程的消息。對于通信協(xié)議流程,狀態(tài)處理和轉(zhuǎn)換貫穿流程處理始終,在流程狀態(tài)較多時,處理是比較復雜繁瑣的,整個流程狀態(tài)處理的質(zhì)量和效率決定于流程狀態(tài)開發(fā)人員所選擇的業(yè)務(wù)流程狀態(tài)機的處理和實現(xiàn)方法。目前,開發(fā)人員對于各種流程狀態(tài)機處理和實現(xiàn)都是根據(jù)具體流程的情況采用不同的具體方法,而對于通訊系統(tǒng)中含復雜的通訊業(yè)務(wù)流程的流程狀態(tài)機的處理和實現(xiàn),這種方式由于未涉及一個總的思路和方式,實現(xiàn)復雜的流程狀態(tài)機就會繁瑣、效率不高并且不清晰,從而造成整個通訊系統(tǒng)的流程狀態(tài)處理的質(zhì)量和效率得不到根本性保證。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是,如何采用棧和棧操作,構(gòu)造一種流程狀態(tài)機的通用實現(xiàn)方法,能夠清晰和高效地實現(xiàn)復雜的流程狀態(tài)機,以保障流程狀態(tài)處理的質(zhì)量和效率。
本發(fā)明上述技術(shù)問題這樣解決,構(gòu)造一種流程狀態(tài)機的實現(xiàn)方法,其特征在于,采用狀態(tài)棧模型,包括正常處理流程、異常消息處理和異常狀態(tài)處理中流程狀態(tài)機的通用實現(xiàn)方法。
在按照本發(fā)明提供的流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述狀態(tài)棧模型是多級流程狀態(tài)棧,包括主狀態(tài)和各級子狀態(tài)。
在按照本發(fā)明提供的流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述多級流程狀態(tài)棧是二級流程狀態(tài)棧,包括一個主狀態(tài)和多個子狀態(tài)。
在按照本發(fā)明提供的流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述通用狀態(tài)棧的正常消息處理流程,包括以下步驟4.1)狀態(tài)棧初始化;4.2)狀態(tài)棧等待消息,狀態(tài)棧獲得被分發(fā)的消息,取出狀態(tài)棧的當前狀態(tài),如果有當前狀態(tài),轉(zhuǎn)入對應(yīng)狀態(tài)的消息處理,如果沒有當前狀態(tài),主狀態(tài)入狀態(tài)棧,轉(zhuǎn)入主狀態(tài)的消息處理,所述當前狀態(tài)是子狀態(tài)或主狀態(tài);4.3)所述消息處理完后,返回調(diào)用該消息處理的狀態(tài);如果返回子狀態(tài),判斷要遷移的下一個子狀態(tài)或主狀態(tài),設(shè)置當前子狀態(tài)出狀態(tài)棧和所述下一個子狀態(tài)或主狀態(tài)入狀態(tài)棧,遷移出本進程,返回步驟(4.2);如果返回主狀態(tài),判斷流程是否完畢,如果流程未完畢,判斷要遷移的子狀態(tài),設(shè)置主狀態(tài)出狀態(tài)棧和所述子狀態(tài)入狀態(tài)棧并遷移出本進程,返回步驟(4.2);否則清除狀態(tài)棧,結(jié)束正常處理流程。
在按照本發(fā)明提供的流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述通用狀態(tài)棧的異常消息處理流程,包括以下步驟5.1)判斷異常消息是否對當前流程將造成干涉和沖突,如果不造成干涉和沖突,所述狀態(tài)棧的異常消息處理流程會丟棄該異常消息;
5.2)如果造成干涉和沖突,根據(jù)該異常消息的沖突類型或者沖突優(yōu)先級,對狀態(tài)棧中內(nèi)容進行部分重置或全部重置。
在按照本發(fā)明提供的流程狀態(tài)機的實現(xiàn)方法,其特征在于,在步驟(4.3)所述取出狀態(tài)棧的當前子狀態(tài)的步驟前加入消息判斷的步驟,即判斷消息是正常消息或異常消息,是正常消息,繼續(xù)步驟(4.2),否則轉(zhuǎn)入異常消息處理流程,即步驟(5.1)。
在按照本發(fā)明提供的流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述通用狀態(tài)棧的異常狀態(tài)處理流程中,所述狀態(tài)棧設(shè)置了特定狀態(tài)的保持定時器,當狀態(tài)棧進入所述特定狀態(tài),開始啟動保持定時器,定時掃描,一旦所述特定狀態(tài)超時,清除狀態(tài)棧,結(jié)束處理流程。
本發(fā)明提供的一種流程狀態(tài)機的通用實現(xiàn)方法,提高了通訊系統(tǒng)業(yè)務(wù)流程狀態(tài)的處理效率,簡化了處理流程,并可以作為一種通用實現(xiàn)方法應(yīng)用于各種狀態(tài)機的處理。
圖1是本發(fā)明提供的二級流程狀態(tài)棧結(jié)構(gòu)和狀態(tài)遷移的示意圖。
圖2是本發(fā)明提供的通用狀態(tài)棧正常消息處理流程的示意圖。
具體實施例方式
結(jié)合附圖和實施例,對本發(fā)明方法進一步展開。首先,說明發(fā)明方法的基礎(chǔ)點如下本發(fā)明主要是利用棧的操作對狀態(tài)遷移和變換進行處理,棧的操作反映了狀態(tài)的變化,由棧的操作推動流程的發(fā)展,處理流程簡潔清晰;從面向?qū)ο蟮挠^點來看,狀態(tài)具有震蕩、回溯和反復的行為特點,和狀態(tài)棧的行為屬性完全符合,該方法可以用面向?qū)ο笤O(shè)計的模式實現(xiàn),同時狀態(tài)棧模型適合于一般流程狀態(tài)機的實現(xiàn),有很強的通用性。
狀態(tài)棧模型中流程狀態(tài)一般可劃分為多級。用流程狀態(tài)棧實現(xiàn)時,可一般只劃分兩級即主狀態(tài)和子狀態(tài)(除主狀態(tài)外的狀態(tài)),二級流程狀態(tài)棧的結(jié)構(gòu)如圖1所示。業(yè)務(wù)流程進入主狀態(tài)后,有很多子狀態(tài)都是條件性執(zhí)行的,可能不按順序,甚至可能是倒序和回溯執(zhí)行,但每次當前狀態(tài)處理完成后,都要回到調(diào)用它的狀態(tài),來判斷流程的走向,選擇要進入的下一個狀態(tài)。在當前狀態(tài)里作出選擇判斷要遷移到的下個狀態(tài),進行狀態(tài)遷移。等待下一個消息,進行消息處理和狀態(tài)變換,直到子狀態(tài)遷移到主狀態(tài),并且主狀態(tài)處理完成,清除狀態(tài)棧,結(jié)束處理流程。
按照本發(fā)明提出的通用流程狀態(tài)機的實現(xiàn)方法,對各個步驟逐個說明如下(狀態(tài)棧用面向?qū)ο蠓绞綄崿F(xiàn))(一)正常處理實現(xiàn)流程,其過程如圖2所示1、與各種具體業(yè)務(wù)實現(xiàn)對應(yīng)的業(yè)務(wù)處理進程啟動、資源分配、狀態(tài)棧初始化開始進行業(yè)務(wù)流程時,對準備處理的每個客戶端的流程都分配一個狀態(tài)棧數(shù)據(jù)區(qū),其數(shù)據(jù)數(shù)據(jù)區(qū)內(nèi)容根據(jù)具體的協(xié)議描述和流程處理需要確定。所述狀態(tài)棧數(shù)據(jù)區(qū)的個數(shù)和內(nèi)容也可自定義。
(產(chǎn)生消息,業(yè)務(wù)進程調(diào)度和切換,進入消息處理流程,由協(xié)議處理機給它分配的各個狀態(tài)棧分發(fā)消息)2、狀態(tài)棧等待它的消息,狀態(tài)棧獲取被分發(fā)給它的消息準備進行處理,判斷消息類別,如果是正常消息,按以下正常流程處理,取出狀態(tài)棧的當前狀態(tài)(如果是異常消息,進行丟棄或沖突處理)①如當前狀態(tài)為空,表明是該狀態(tài)棧的首個消息,更改狀態(tài)棧數(shù)據(jù)區(qū)數(shù)據(jù),主狀態(tài)入棧,轉(zhuǎn)入主狀態(tài)消息處理的方法處理所述消息;②否則,轉(zhuǎn)入對應(yīng)的狀態(tài)消息處理的方法處理所述消息。該狀態(tài)可以是主狀態(tài),也可以是子狀態(tài)。
3、所述消息處理完成后,返回調(diào)用該消息處理的狀態(tài);如果是子狀態(tài),判斷要遷移的狀態(tài),更改狀態(tài)棧數(shù)據(jù)區(qū)數(shù)據(jù),設(shè)置原狀態(tài)出棧、要遷移的狀態(tài)入棧,并遷移出本進程,返回步驟2;如果是主狀態(tài),判斷流程是否完畢,如果處理未完,則判斷要遷移的狀態(tài),更改狀態(tài)棧數(shù)據(jù)區(qū)數(shù)據(jù),設(shè)置原狀態(tài)出棧、要遷移的狀態(tài)入棧,并遷移出本進程,返回步驟2;;否則清除狀態(tài)棧,釋放分配資源,退出消息處理流程。
(二)異常消息的處理(在業(yè)務(wù)狀態(tài)機處理中,必須比較充分地考慮流程中的異常情況。本實施例異常處理分兩部分實現(xiàn),分別是異常消息的處理(二)和異常狀態(tài)處理(三)。)在收到消息并從棧中提取狀態(tài)準備進行處理時,該消息可能不是該流程狀態(tài)所期望的消息或者是會引發(fā)沖突的消息。如果該消息不需要處理,則可將其丟棄,等待下一個消息進行處理和由此引發(fā)的狀態(tài)遷移;如果此消息對當前流程將造成干涉和沖突,必須進行處理。這時,可以根據(jù)沖突類型或者沖突優(yōu)先級,對狀態(tài)棧中內(nèi)容進行重置,設(shè)置新的主狀態(tài)或子狀態(tài),包括全部和部分重置。全部重置就是取消原有流程和狀態(tài),重設(shè)主狀態(tài),轉(zhuǎn)入新的業(yè)務(wù)流程;而部分重置就是設(shè)置新的子狀態(tài)。(對于多級狀態(tài)棧,部分重置就是重新設(shè)置某一層或相關(guān)的幾層狀態(tài),而不改變主狀態(tài),實現(xiàn)只更改部分業(yè)務(wù)子流程的目的)(三)狀態(tài)異常的處理在流程狀態(tài)長時間的變遷中,可能因為某種異常情況造成狀態(tài)棧的狀態(tài)長時間懸掛而無法遷移,導致資源吊死。處理時可以針對相應(yīng)狀態(tài)進行定時掃描,流程進入該狀態(tài)就設(shè)置該狀態(tài)的保持定時器,定時器超時即可認為狀態(tài)發(fā)生異常,然后清理現(xiàn)場,釋放資源,結(jié)束流程處理。
權(quán)利要求
1.一種流程狀態(tài)機的實現(xiàn)方法,其特征在于,采用狀態(tài)棧模型,包括通用狀態(tài)棧的正常消息處理流程、通用狀態(tài)棧的異常消息處理流程和通用狀態(tài)棧的異常狀態(tài)處理流程。
2.根據(jù)權(quán)利要求1所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述狀態(tài)棧模型是多級狀態(tài)棧,包括主狀態(tài)和各級子狀態(tài)。
3.根據(jù)權(quán)利要求1所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述多級狀態(tài)棧是二級流程狀態(tài)棧,包括一個主狀態(tài)和多個子狀態(tài)。
4.根據(jù)權(quán)利要求1-3中任何一項所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述通用狀態(tài)棧的正常消息處理流程,包括以下步驟4.1)狀態(tài)棧初始化;4.2)狀態(tài)棧等待消息,狀態(tài)棧獲得被分發(fā)的消息,取出狀態(tài)棧的當前狀態(tài),如果有當前狀態(tài),轉(zhuǎn)入對應(yīng)狀態(tài)的消息處理,如果沒有當前狀態(tài),主狀態(tài)入狀態(tài)棧,轉(zhuǎn)入主狀態(tài)的消息處理,所述當前狀態(tài)是子狀態(tài)或主狀態(tài);4.3)所述消息處理完后,返回調(diào)用該消息處理的狀態(tài);如果返回子狀態(tài),判斷要遷移的下一個子狀態(tài)或主狀態(tài),設(shè)置當前子狀態(tài)出狀態(tài)棧和所述下一個子狀態(tài)或主狀態(tài)入狀態(tài)棧,遷移出本進程,返回步驟(4.2);如果返回主狀態(tài),判斷流程是否完畢,如果流程未完畢,判斷要遷移的子狀態(tài),設(shè)置主狀態(tài)出狀態(tài)棧和所述子狀態(tài)入狀態(tài)棧并遷移出本進程,返回步驟(4.2);否則清除狀態(tài)棧,結(jié)束正常處理流程。
5.根據(jù)權(quán)利要求4所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述通用狀態(tài)棧的異常消息處理流程,包括以下步驟5.1)判斷異常消息是否對當前流程將造成干涉和沖突,如果不造成干涉和沖突,所述狀態(tài)棧的異常消息處理流程會丟棄該異常消息;5.2)如果造成干涉和沖突,根據(jù)該異常消息的沖突類型或者沖突優(yōu)先級,對狀態(tài)棧中內(nèi)容進行部分重置或全部重置。
6.根據(jù)權(quán)利要求4所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,在步驟(4.3)所述取出狀態(tài)棧的當前子狀態(tài)的步驟前加入消息判斷的步驟,即判斷消息是正常消息或異常消息,是正常消息,繼續(xù)步驟(4.3),否則轉(zhuǎn)入異常消息處理流程,即步驟(5.1)。
7.根據(jù)權(quán)利要求5所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,在步驟(4.3)所述取出狀態(tài)棧的當前子狀態(tài)的步驟前加入消息判斷的步驟,即判斷消息是正常消息或異常消息,是正常消息,繼續(xù)步驟(4.3),否則轉(zhuǎn)入異常消息處理流程,即步驟(5.1)。
8.根據(jù)權(quán)利要求5所述流程狀態(tài)機的實現(xiàn)方法,其特征在于,所述通用狀態(tài)棧的異常狀態(tài)處理流程中,所述狀態(tài)棧設(shè)置了特定狀態(tài)的保持定時器,當狀態(tài)棧進入所述特定狀態(tài),開始啟動所述保持定時器,定時掃描,一旦所述特定狀態(tài)超時,清除狀態(tài)棧,結(jié)束處理流程。
全文摘要
本發(fā)明涉及一種狀態(tài)機的軟件實現(xiàn)方法,具體公開了一種流程狀態(tài)機的軟件實現(xiàn)方法,它采用狀態(tài)棧模型,包括通用狀態(tài)棧的正常消息處理流程、異常消息處理流程和異常狀態(tài)處理流程。這種流程狀態(tài)機的實現(xiàn)方法可以提高通訊系統(tǒng)業(yè)務(wù)流程狀態(tài)的處理效率,簡化處理流程,并可以作為一種通用實現(xiàn)方法應(yīng)用于各種狀態(tài)機的處理。
文檔編號G06F9/40GK1519706SQ0311520
公開日2004年8月11日 申請日期2003年1月23日 優(yōu)先權(quán)日2003年1月23日
發(fā)明者郭磊, 郭 磊 申請人:深圳市中興通訊股份有限公司