專利名稱:一種工作流運行方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種工作流運行方法及系統(tǒng)。
背景技術(shù):
工作流運行工作由工作流引擎來完成,工作流引擎是工作流系統(tǒng)的核心組件,負 責(zé)解析流程定義,維持流程實例運行的環(huán)境。它能夠協(xié)調(diào)處理流程節(jié)點間的路由、客戶端的 請求(如啟動流程、提交任務(wù)、查詢?nèi)蝿?wù)、流程監(jiān)控)、任務(wù)的分派和調(diào)度、資源分配等。流 程定義是對真實業(yè)務(wù)過程進行抽象而形成的一套“計算模型”,它能夠被工作流引擎理解并 作為流程運行的程序規(guī)則,它由子流程和活動組成。子流程也是一個流程,它能夠被流程嵌 套。流程定義模型是一套用來描述“流程定義”以及其相關(guān)的定義對象的模型對象?;顒?定義是對真實業(yè)務(wù)過程中任務(wù)、事宜、工作項、步驟和環(huán)節(jié)等的抽象,它是流程執(zhí)行中的最 小工作單元,可以由計算機自動完成。任務(wù)定義為人工活動定義。是需要人工參與完成的 一個活動。流程實例是流程定義的每一次執(zhí)行所生成的對象,它維護一套屬于自己的“運行 環(huán)境和數(shù)據(jù)”,包含流程的狀態(tài)、數(shù)據(jù)和控制信息,任務(wù)實例的狀態(tài)、數(shù)據(jù)和控制信息,以及 一些臨時的執(zhí)行信息等。流程運行模型是一套用來描述“流程實例”以及其相關(guān)的運行對 象的模型對象。任務(wù)實例是任務(wù)定義的每一次執(zhí)行所生成的對象,任務(wù)實例也具有狀態(tài)、數(shù) 據(jù)和控制信息。現(xiàn)有技術(shù)中對于工作流運行方法或者產(chǎn)品有很多,但是現(xiàn)有技術(shù)中的每一款工作 流產(chǎn)品都會有自己獨特的工作流運行流程,根據(jù)工作流運行的需求和應(yīng)用場景的不同,其 控制流程也各不相同,但是因為這些工作流運行方法針對的應(yīng)用場景不大,因此,各種工作 流運行流程只能適應(yīng)于較小范圍的工作流運行。因此現(xiàn)有的工作流運行方法和產(chǎn)品存在以下缺點首先,難以滿足大數(shù)據(jù)量以及 大并發(fā)高負載的工作流運行需求,其次,模型和數(shù)據(jù)結(jié)構(gòu)設(shè)計復(fù)雜,也增加了開發(fā)、測試和 管理的應(yīng)用難度,最后,在滿足性能需求的可能性下,技術(shù)架構(gòu)過于復(fù)雜或者硬件需求過 高,又無法滿足低成本集約化的要求。因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題就是如何能夠提出一 種工作流運行方法,用以解決現(xiàn)有技術(shù)難以滿足大數(shù)據(jù)量以及大并發(fā)高負載的工作流運行 需求的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種工作流運行方法,用以解決現(xiàn)有技術(shù)難以 滿足大數(shù)據(jù)量以及大并發(fā)高負載的工作流運行需求的問題,進一步的,其模型和數(shù)據(jù)結(jié)構(gòu) 設(shè)計簡單,也減少了開發(fā)、測試和管理的應(yīng)用難度。本發(fā)明的另一個目的是將上述構(gòu)思應(yīng)用于具體的應(yīng)用環(huán)境中,提供一種工作流運 行系統(tǒng),從而保證該方法的實現(xiàn)和應(yīng)用。為解決上述技術(shù)問題,本發(fā)明實施例提供了一種工作流運行方法,包括預(yù)先設(shè)置流程定義模型和流程運行模型,所述流程定義模型包括預(yù)置的任務(wù)定義、流程定義、節(jié)點和 遷移四類對象,所述流程定義由節(jié)點和遷移構(gòu)成,所述節(jié)點包括開始節(jié)點、結(jié)束節(jié)點和/或 任務(wù)節(jié)點,所述任務(wù)定義從屬于一個所述任務(wù)節(jié)點;所述流程運行模型包括預(yù)置的流程實 例、流程分支、任務(wù)實例和流程變量四類對象;按照預(yù)置的流程定義創(chuàng)建流程實例,并創(chuàng)建與所述流程實例對應(yīng)的執(zhí)行線程;觸發(fā)所述執(zhí)行線程流轉(zhuǎn),以在所述流程實例的開始節(jié)點獲取離開的流程遷移流 向;調(diào)用所述流程遷移流向以觸發(fā)工作流的運行。優(yōu)選的,所述調(diào)用所述流程遷移流向以觸發(fā)工作流的運行,具體包括調(diào)用流程遷移流向之后進入目標節(jié)點;當(dāng)所述目標節(jié)點為任務(wù)節(jié)點時,依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并執(zhí)行。優(yōu)選的,所述依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并執(zhí)行之后,還包括將所述流程實例和任務(wù)實例的數(shù)據(jù)一次性寫入數(shù)據(jù)庫中。優(yōu)選的,所述依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并執(zhí)行之后,還包括調(diào)用所述任務(wù)實例的結(jié)束方法;提交用于存儲流程數(shù)據(jù)或業(yè)務(wù)數(shù)據(jù)的流程變量;創(chuàng)建執(zhí)行線程并獲取任務(wù)遷移流向; 按照所述任務(wù)遷移流向進入下一個目標任務(wù)節(jié)點。優(yōu)選的,所述依據(jù)進入的目標任務(wù)節(jié)點預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并執(zhí)行之 后,還包括更新在流程實例中所述任務(wù)實例對應(yīng)的當(dāng)前節(jié)點;寫入新的任務(wù)實例數(shù)據(jù)和流程變量數(shù)據(jù);更新已經(jīng)存在的流程變量數(shù)據(jù)。優(yōu)選的,當(dāng)遷移流向為零個時,所述零個遷移流向?qū)?yīng)于所述流程實例的結(jié)束節(jié) 點;當(dāng)遷移流向為多個時,所述多個遷移流向?qū)?yīng)于并發(fā)分支或者選擇分支的情況;所述 并發(fā)分支表示所有的遷移流向同時執(zhí)行,所述選擇分支表示執(zhí)行所述多個遷移流向中的一支。本發(fā)明實施例還提供了一種工作流運行系統(tǒng),包括流程定義模型和流程運行模 型;所述流程定義模型包括預(yù)置的任務(wù)定義、流程定義、節(jié)點和遷移四類對象,所述流 程運行模型包括預(yù)置的流程實例、流程分支、任務(wù)實例和流程變量四類對象,所述流程定義 由節(jié)點和遷移構(gòu)成,所述節(jié)點包括開始節(jié)點、結(jié)束節(jié)點和/或任務(wù)節(jié)點,所述任務(wù)定義從屬 于一個所述任務(wù)節(jié)點;所述任務(wù)定義和流程定義為所述流程定義模型和所述流程運行模型 之間的兩個聯(lián)系點,所述任務(wù)定義與任務(wù)實例以關(guān)系1:0... *對應(yīng),所述流程定義與流程 實例以關(guān)系1:0... *對應(yīng),所述關(guān)系1:0. .. *表示1與0至任一自然數(shù)之間的任意一個數(shù) 值的對應(yīng)關(guān)系。 優(yōu)選的,所述流程變量包括任務(wù)實例層級的流程變量、流程實例層級的流程變量 和流程分支層級的流程變量。優(yōu)選的,N個流程變量對應(yīng)存儲于一個Map數(shù)據(jù)結(jié)構(gòu)中。
優(yōu)選的,所述流程運行模型與數(shù)據(jù)庫中的流程實例表、任務(wù)實例表流程分支表和 流程變量表;其中,所述流程實例表用于存儲流程實例的狀態(tài)和數(shù)據(jù)信息;所述任務(wù)實例表用于存儲任務(wù)實例的狀態(tài)和數(shù)據(jù)信息;
所述流程分支表用于存儲流程分支的狀態(tài)和數(shù)據(jù)信息;所述流程變量表用于存儲工作流運行過程中使用的流程變量數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點在本實施例中,工作流運行系統(tǒng)包括流程定義模型和流程運行模型,其中,所述流 程定義模型包括預(yù)置的任務(wù)定義、流程定義、節(jié)點和變遷共四類對象,所述流程運行模型包 括預(yù)置的流程實例、流程分支、任務(wù)實例和流程變量共四類對象,所述任務(wù)定義和流程定義 為所述流程定義模型和所述流程運行模型之間的兩個聯(lián)系點?;谏鲜瞿P瓦M行工作流運 行時,可以按照預(yù)置的流程定義創(chuàng)建流程實例,并創(chuàng)建與所述流程實例對應(yīng)的執(zhí)行線程;觸 發(fā)所述執(zhí)行線程流轉(zhuǎn),以在所述流程實例的開始節(jié)點獲取離開的流程遷移流向;調(diào)用所述 流程遷移流向以觸發(fā)工作流的運行。由于流程定義模型和流程運行模型的簡單和通用,因 此工作流運行時也可以滿足大數(shù)據(jù)量以及大并發(fā)高負載的工作流運行需求,其次,也減少 了開發(fā)、測試和管理的應(yīng)用難度,最后,在滿足性能需求的可能性下,技術(shù)架構(gòu)不會過于復(fù) 雜,硬件需求也不會過高,又可以滿足低成本集約化的要求。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明的一種工作流運行系統(tǒng)實施例的結(jié)構(gòu)示意圖;圖2是本發(fā)明的一種工作流運行方法實施例1的流程圖;圖3是本發(fā)明的方法實施例1中步驟203的流程圖;圖4是本發(fā)明的一種工作流運行方法實施例2的流程圖。
具體實施例方式為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實 施方式對本發(fā)明作進一步詳細的說明。本發(fā)明可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如個人計算機、服務(wù) 器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、包括以上任何系統(tǒng)或設(shè)備 的分布式計算環(huán)境等等。本發(fā)明可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序 模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組 件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本發(fā)明,在這些分布式計算環(huán)境中,由 通過通信網(wǎng)絡(luò)而被連接的遠程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以 位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
在本發(fā)明實施例中,工作流運行系統(tǒng)包括了流程定義模型和流程運行模型;其中, 參考圖1所示,所述流程定義模型11包括預(yù)置的流程定義111、任務(wù)定義112、節(jié)點113和 遷移114共兩類對象,所述流程定義由節(jié)點和遷移構(gòu)成,所述節(jié)點具有多種擴展的子類型, 例如開始節(jié)點、結(jié)束節(jié)點和任務(wù)節(jié)點等等,但是節(jié)點不一定同時包括所有的子類型;所述 任務(wù)定義從屬于一個所述任務(wù)節(jié)點;所述遷移可以表示工作流運行的遷移流向;所述流程 運行模型12包括預(yù)置的流程實例121、流程分支122、流程變量123和任務(wù)實例124共四 類對象,所述任務(wù)定義和流程定義為所述流程定義模型和所述流程運行模型之間的兩個 聯(lián)系點,所述任務(wù)定義與任務(wù)實例以關(guān)系1:0...*對應(yīng),所述流程定義與流程實例以關(guān)系 1:0...*對應(yīng),所述關(guān)系1:0...*表示1與0至任一自然數(shù)之間的任意一個數(shù)值的對應(yīng)關(guān) 系。需要說明的是,所述流程定義模型還可以包括各種類型的節(jié)點、流向和事件等對 象模型。并且流程定義模型和流程運行模型之間只有兩個聯(lián)系點,分別為流程定義和流程 實例以關(guān)系1:0.. .*對應(yīng),表示一個流程定義對應(yīng)0或多個流程實例,即是如果一個流程定 義沒有被執(zhí)行過,則對應(yīng)0個流程實例,如果被執(zhí)行多次則對應(yīng)多個流程實例(例如被執(zhí)行 5次之后則對應(yīng)5個流程實例)。任務(wù)定義和任務(wù)實例以關(guān)系1:0. . . *對應(yīng),表示一個任務(wù) 定義對應(yīng)0或多個任務(wù)實例,即是如果一個任務(wù)定義沒有被執(zhí)行過,則對應(yīng)0個任務(wù)實例, 如果被執(zhí)行過多次則會對應(yīng)多個任務(wù)實例(例如被執(zhí)行6次之后則對應(yīng)6個任務(wù)實例)。下面重點介紹本發(fā)明實施例的重點流程運行模型。在本發(fā)明實施例中的流程運行 模型具體包括了流程實例、流程分支、任務(wù)實例和流程變量四類核心對象,用于描述流程運 行期間的狀態(tài)和數(shù)據(jù)。其中,流程實例和流程分支同時實現(xiàn)了流程執(zhí)行接口。所述流程執(zhí) 行接口是抽象出流程實例和流程分支的有關(guān)流程執(zhí)行線程的一組操作,每個流程實例或是 流程分支都對應(yīng)一個執(zhí)行線程,每個線程只管理和處理線程內(nèi)部事務(wù),這樣在多流程分支 并發(fā)的情況下各流程分支并也能夠行不悖且互不影響。在流程運行模型中,流程實例、流程分支和任務(wù)實例可以分別管理自己層級的流 程變量,這樣可以使得流程變量的歸屬清晰且訪問受控,也可以提高流程數(shù)據(jù)的交互性和 安全性。1個流程變量分別對應(yīng)1個流程實例,或者0或1個任務(wù)實例,或者0或1個流程 分支。因為流程變量必然關(guān)聯(lián)于流程,同時任務(wù)實例層級的流程變量關(guān)聯(lián)1個任務(wù)實例,而 不屬于任務(wù)實例級的流程變量則對應(yīng)0個任務(wù)實例,同理,流程分支層級的流程變量關(guān)聯(lián)1 個分支實例,不屬于流程分支級的流程變量則對應(yīng)0個流程分支。 在流程運行模型中,流程實例是流程定義的一次執(zhí)行所產(chǎn)生的對象。1個流程實例 對應(yīng)1個流程定義,實現(xiàn)流程執(zhí)行接口,1個流程實例且對應(yīng)0或多個流程分支,或者1個流 程實例對應(yīng)0或多個任務(wù)實例,或者對應(yīng)0或多個流程變量。在本發(fā)明實施例中,流程沒有 并發(fā)流程分支的情況時則對應(yīng)0個流程分支,在0個任務(wù)的流程1個流程實例即對應(yīng)0個 任務(wù)實例,且沒有流程變量的時候1個流程實例對應(yīng)0個流程變量。在流程運行模型中,任務(wù)實例是任務(wù)定義的一次執(zhí)行所產(chǎn)生的對象。1個任務(wù)實例 就對應(yīng)1個流程定義,且1個任務(wù)實例對應(yīng)1個流程實例,1個任務(wù)實例對應(yīng)0或1個流程 變量,因為沒有流程變量的任務(wù)實例對應(yīng)0個流程變量,擁有流程變量的任務(wù)實例對應(yīng)1個 流程變量。同時1個任務(wù)實例對應(yīng)0或1個流程分支,因為不屬于流程分支上的任務(wù)實例 則對應(yīng)0個流程分支,屬于流程分支上的任務(wù)實例則對應(yīng)1個流程分支。
在流程運行模型中,流程分支是流程并發(fā)分支的一次執(zhí)行所產(chǎn)生的對象,它實現(xiàn) 流程執(zhí)行接口。1個流程分支對應(yīng)1個流程實例,且1個流程分支對應(yīng)0 (當(dāng)1個流程分支 中沒有任何任務(wù)實例時則對應(yīng)0個任務(wù)實例)或多個任務(wù)實例,1個流程分支對應(yīng)0或1個 流程變量。沒有流程變量的流程分支對應(yīng)0個流程變量,而擁有流程變量的流程分支則對 應(yīng)1個流程變量。 對于本發(fā)明實施例中提及的流程變量,可以采用一組鍵值對實現(xiàn),并且將這組鍵 值對使用映射(Map)數(shù)據(jù)結(jié)構(gòu)保存,這樣在數(shù)據(jù)庫持久化和讀取的時候,進行序列化和反 序列化操作,就可以將多個流程變量鍵值對合并成一個Map,從而可以對應(yīng)數(shù)據(jù)庫的一條記 錄。本發(fā)明實施例中的這種流程變量的實現(xiàn)方式能夠節(jié)省數(shù)據(jù)庫的存儲數(shù)量,并且能提高 數(shù)據(jù)庫的讀取性能。需要說明的是,因為流程定義模型在系統(tǒng)運行期間極少更改,在發(fā)布新流程的時 候也是新增操作,因此可以完全緩存于內(nèi)存中,這樣可以進一步節(jié)省數(shù)據(jù)庫的讀取操作,進 而提高系統(tǒng)運行的整體性能。因為對于使用數(shù)據(jù)庫作為狀態(tài)持久化的工作流服務(wù),都需要 頻繁的數(shù)據(jù)庫讀寫,屬于數(shù)據(jù)庫訪問密集型系統(tǒng),所以本發(fā)明實施例中流程定義模型和流 程運行模型可以實現(xiàn)數(shù)據(jù)庫性能的優(yōu)化和提升。參考圖2,示出了本發(fā)明的一種工作流運行方法實施例1的流程圖,本實施例可以 認為是發(fā)起流程的過程,可以包括以下步驟步驟201 按照預(yù)置的流程定義創(chuàng)建流程實例,并創(chuàng)建與所述流程實例對應(yīng)的執(zhí) 行線程。首先需要根據(jù)流程定義創(chuàng)建流程實例。此時會執(zhí)行讀取流程定義和創(chuàng)建流程實例 操作,其中讀取流程定義數(shù)據(jù)因為實在緩存與內(nèi)存中執(zhí)行,因此并無實際的數(shù)據(jù)庫讀取操 作。并且因為流程定義數(shù)據(jù)存儲于內(nèi)存中,所以讀取速度很快。本步驟中創(chuàng)建的流程實例 數(shù)據(jù)也存儲于內(nèi)存中,即是在本步驟執(zhí)行時并無數(shù)據(jù)庫寫入操作。同時,還需要創(chuàng)建與所述流程實例對應(yīng)的執(zhí)行線程并返回。執(zhí)行線程是一個引擎 執(zhí)行對象,它通過“流程執(zhí)行”接口所持有,獲得執(zhí)行線程對象是因為它是實際控制和操作 流程實例或流程分支的對象,所有的流程實例和流程分支的操作都需要通過執(zhí)行線程,這 樣就統(tǒng)一了操作界面。步驟202 觸發(fā)所述執(zhí)行線程流轉(zhuǎn),以在所述流程實例的開始節(jié)點獲取離開的流 程遷移流向。觸發(fā)執(zhí)行線程執(zhí)行流轉(zhuǎn),發(fā)起流程后,整個流程的第一個節(jié)點是開始節(jié)點,流程從 開始節(jié)點開始流轉(zhuǎn)推進。本發(fā)明實施例中,在開始節(jié)點不做流程狀態(tài)的停留,因此直接離開 開始節(jié)點。但在離開開始節(jié)點之前,首先要獲取其離開的遷移流向。對于流程運行模型來 說,每一個節(jié)點都可能對應(yīng)0或多個遷移流向,0個遷移流向一般對應(yīng)于流程的最后一個節(jié) 點即是結(jié)束節(jié)點,因為流程已經(jīng)結(jié)束,所以不會再有遷移流向。多個遷移流向的情況一般對 應(yīng)于并發(fā)分支或者選擇分支的情況,并發(fā)分支就是所有的遷移流向都同時執(zhí)行,選擇分支 的情況是執(zhí)行所有遷移流向其中的一支。步驟203 調(diào)用所述流程遷移流向以觸發(fā)工作流的運行。在獲取到所述流程遷移流向之后,會根據(jù)流程運行的實際情況,選擇其中的一個 或多個遷移流向進行調(diào)用,以觸發(fā)工作流的運行。
參考圖3所示,所述步驟203中工作流的運行具體可以包括以下步驟步驟301 調(diào)用流程遷移流向之后進入目標節(jié)點。調(diào)用遷移流向完畢以后,即進入遷移流向另外一端的目標節(jié)點。步驟302 當(dāng)所述目標節(jié)點為任務(wù)節(jié)點時,依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并 執(zhí)行。
進入目標節(jié)點后,馬上進行節(jié)點執(zhí)行,如果節(jié)點是任務(wù)節(jié)點,就會創(chuàng)建“任務(wù)實 例”。根據(jù)節(jié)點所定義的“任務(wù)定義”,執(zhí)行后會產(chǎn)生0或多個“任務(wù)實例”。需要說明的是, 此時“任務(wù)實例”也存放于內(nèi)存中,此時并無數(shù)據(jù)庫寫入操作。在所有的步驟全部完成之后,所述方法還可以包括步驟303 將所述流程實例和任務(wù)實例的數(shù)據(jù)一次性寫入數(shù)據(jù)庫中。在步驟303中,會將新生成的對象一次性寫入數(shù)據(jù)庫,對應(yīng)于本實施例的方法,會 寫入一條流程實例和0或多條任務(wù)實例數(shù)據(jù)。 在實際應(yīng)用中,對于更為復(fù)雜的帶有“流程分支”和“流程變量”的情況,其執(zhí)行流 程也十分類似。即對于擁有“流程分支”的流程,會創(chuàng)建多個對應(yīng)于流程分支的執(zhí)行線程, 每個執(zhí)行線程的執(zhí)行也遵照上述從“執(zhí)行線程”開始的執(zhí)行時序。對于在操作的過程中使 用了 “流程變量”的情況,則會創(chuàng)建多個對應(yīng)于流程實例、流程分支或是任務(wù)實例的流程變 量。在整個操作時序完成以后,一次性寫入數(shù)據(jù)庫。本實施例中,因為采用了流程定義模型和流程運行模型,同時基于所述流程定義 模型和流程運行模型的工作流運行模式,可以滿足大數(shù)據(jù)量以及大并發(fā)高負載的工作流運 行需求,其次,流程定義模型和流程運行模型的設(shè)計簡單也減少了開發(fā)、測試和管理的應(yīng)用 難度,并且滿足低成本集約化的要求。參考圖4,示出了本發(fā)明的一種工作流運行方法實施例2的流程圖,本實施例重點 介紹完成任務(wù)的處理時序,在實施例1的步驟302之后,還可以包括以下步驟步驟401 調(diào)用所述任務(wù)實例的結(jié)束方法。首先調(diào)用所述任務(wù)實例的結(jié)束方法,開始整個完成任務(wù)的過程。步驟402 提交用于存儲流程數(shù)據(jù)或業(yè)務(wù)數(shù)據(jù)的流程變量。在實際應(yīng)用中,完成任務(wù)的時候會提交一些流程變量,用于存儲該任務(wù)完成所涉 及到的流程數(shù)據(jù)或者是業(yè)務(wù)數(shù)據(jù)。此時提交的流程變量會根據(jù)流程變量自身的層級(流程 實例層級、流程分支層級或是任務(wù)實例層級)分別關(guān)聯(lián)于自身的宿主對象。此時流程變量 存放于內(nèi)存中,因此并不進行數(shù)據(jù)庫寫入操作。步驟403 創(chuàng)建執(zhí)行線程并獲取任務(wù)遷移流向。在本步驟中,創(chuàng)建任務(wù)實例的執(zhí)行線程,并獲取到任務(wù)遷移流向??梢詤⒖紝嵤├?1中“發(fā)起流程”的獲得流程遷移流向的介紹。步驟404 按照所述任務(wù)遷移流向進入目標任務(wù)節(jié)點。執(zhí)行線程會根據(jù)流程運行的實際情況,選擇其中的一個或多個遷移流向進行調(diào) 用。離開當(dāng)前任務(wù)節(jié)點,并調(diào)用選擇好的遷移流向進行調(diào)用。調(diào)用遷移流向完畢以后,即進 入遷移流向另外一端的目標節(jié)點。步驟405 更新在流程實例中所述任務(wù)實例對應(yīng)的當(dāng)前節(jié)點。同實施例1中的流程,在所有的步驟全部完成之后,會將新生成的對象一次性寫入數(shù)據(jù)庫,對應(yīng)于本“完成任務(wù)”操作時序,它會更新一條流程實例,因為流程實例的當(dāng)前節(jié) 點已經(jīng)發(fā)生了變化,但是因為已經(jīng)存在,所以只做更新當(dāng)前節(jié)點操作。步驟406 寫入新的任務(wù)實例數(shù)據(jù)和流程變量數(shù)據(jù)。而此時對于數(shù)據(jù)庫中的任務(wù)實例數(shù)據(jù),則是寫入0或多條任務(wù)實例數(shù)據(jù),或者流程變量數(shù)據(jù)。步驟407 更新已經(jīng)存在的流程變量數(shù)據(jù)。而對于流程變量數(shù)據(jù),則只是更新已經(jīng)存在的流程變量數(shù)據(jù)。需要說明的是,對于更為復(fù)雜的帶有“流程分支”的情況,其操作時序也十分類似。 即對于完成任務(wù)后形成多個“流程分支”的流程,會創(chuàng)建多個對應(yīng)于流程分支的執(zhí)行線程, 每個執(zhí)行線程的執(zhí)行也遵照“發(fā)起流程”操作時序從“執(zhí)行線程”開始的執(zhí)行時序。在本發(fā)明實施例中,由于流程定義模型和流程運行模型本身的簡潔,因此對應(yīng)數(shù) 據(jù)庫的操作非常集約,都只有有限的狀態(tài)持久化和讀取的操作。需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列 的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因為 依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知 悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明 所必須的。需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重 點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。 對于系統(tǒng)類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參 見方法實施例的部分說明即可。需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包 含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括 沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個......,,限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。以上對本發(fā)明所提供的一種工作流運行方法及工作流運行系統(tǒng)進行了詳細介紹, 本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用 于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的 思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為 對本發(fā)明的限制。
權(quán)利要求
1.一種工作流運行方法,其特征在于,預(yù)先設(shè)置流程定義模型和流程運行模型,所述流 程定義模型包括預(yù)置的任務(wù)定義、流程定義、節(jié)點和遷移四類對象,所述流程定義由節(jié)點和 遷移構(gòu)成,所述節(jié)點包括開始節(jié)點、結(jié)束節(jié)點和/或任務(wù)節(jié)點,所述任務(wù)定義從屬于一個所 述任務(wù)節(jié)點;所述流程運行模型包括預(yù)置的流程實例、流程分支、任務(wù)實例和流程變量四類 對象,該方法包括按照預(yù)置的流程定義創(chuàng)建流程實例,并創(chuàng)建與所述流程實例對應(yīng)的執(zhí)行線程; 觸發(fā)所述執(zhí)行線程流轉(zhuǎn),以在所述流程實例的開始節(jié)點獲取離開的流程遷移流向; 調(diào)用所述流程遷移流向以觸發(fā)工作流的運行。
2.如權(quán)利要求1所述的方法,其特征在于,所述調(diào)用所述流程遷移流向以觸發(fā)工作流 的運行,具體包括調(diào)用流程遷移流向之后進入目標節(jié)點;當(dāng)所述目標節(jié)點為任務(wù)節(jié)點時,依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并執(zhí)行。
3.如權(quán)利要求2所述的方法,其特征在于,所述依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并 執(zhí)行之后,還包括將所述流程實例和任務(wù)實例的數(shù)據(jù)一次性寫入數(shù)據(jù)庫中。
4.如權(quán)利要求2所述的方法,其特征在于,所述依據(jù)預(yù)置的任務(wù)定義創(chuàng)建任務(wù)實例并 執(zhí)行之后,還包括調(diào)用所述任務(wù)實例的結(jié)束方法; 提交用于存儲流程數(shù)據(jù)或業(yè)務(wù)數(shù)據(jù)的流程變量; 創(chuàng)建執(zhí)行線程并獲取任務(wù)遷移流向; 按照所述任務(wù)遷移流向進入下一個目標任務(wù)節(jié)點。
5.如權(quán)利要求4所述的方法,其特征在于,所述依據(jù)進入的目標任務(wù)節(jié)點預(yù)置的任務(wù) 定義創(chuàng)建任務(wù)實例并執(zhí)行之后,還包括更新在流程實例中所述任務(wù)實例對應(yīng)的當(dāng)前節(jié)點; 寫入新的任務(wù)實例數(shù)據(jù)和流程變量數(shù)據(jù); 更新已經(jīng)存在的流程變量數(shù)據(jù)。
6.如權(quán)利要求1所述的方法,其特征在于,當(dāng)遷移流向為零個時,所述零個遷移流向?qū)?應(yīng)于所述流程實例的結(jié)束節(jié)點;當(dāng)遷移流向為多個時,所述多個遷移流向?qū)?yīng)于并發(fā)分支 或者選擇分支的情況;所述并發(fā)分支表示所有的遷移流向同時執(zhí)行,所述選擇分支表示執(zhí) 行所述多個遷移流向中的一支。
7.一種工作流運行系統(tǒng),其特征在于,包括流程定義模型和流程運行模型;所述流程定義模型包括預(yù)置的任務(wù)定義、流程定義、節(jié)點和遷移四類對象,所述流程運 行模型包括預(yù)置的流程實例、流程分支、任務(wù)實例和流程變量四類對象,所述流程定義由節(jié) 點和遷移構(gòu)成,所述節(jié)點包括開始節(jié)點、結(jié)束節(jié)點和/或任務(wù)節(jié)點,所述任務(wù)定義從屬于一 個所述任務(wù)節(jié)點;所述任務(wù)定義和流程定義為所述流程定義模型和所述流程運行模型之間 的兩個聯(lián)系點,所述任務(wù)定義與任務(wù)實例以關(guān)系1:0. .. *對應(yīng),所述流程定義與流程實例 以關(guān)系1:0...*對應(yīng),所述關(guān)系1:0...*表示1與0至任一自然數(shù)之間的任意一個數(shù)值的 對應(yīng)關(guān)系。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述流程變量包括任務(wù)實例層級的流程變量、流程實例層級的流程變量和流程分支層級的流程變量。
9.如權(quán)利要求7所述的系統(tǒng),其特征在于,N個流程變量對應(yīng)存儲于一個Map數(shù)據(jù)結(jié)構(gòu)中。
10.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述流程運行模型與數(shù)據(jù)庫中的流程實例 表、任務(wù)實例表流程分支表和流程變量表;其中,所述流程實例表用于存儲流程實例的狀態(tài)和數(shù)據(jù)信息; 所述任務(wù)實例表用于存儲任務(wù)實例的狀態(tài)和數(shù)據(jù)信息; 所述流程分支表用于存儲流程分支的狀態(tài)和數(shù)據(jù)信息; 所述流程變量表用于存儲工作流運行過程中使用的流程變量數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種工作流運行方法及系統(tǒng),所述方法包括預(yù)先設(shè)置流程定義模型和流程運行模型,所述流程定義模型包括預(yù)置的任務(wù)定義、流程定義、節(jié)點和遷移四類對象,流程運行模型包括預(yù)置的流程實例、流程分支、任務(wù)實例和流程變量四類對象,按照預(yù)置的流程定義創(chuàng)建流程實例,并創(chuàng)建與流程實例對應(yīng)的執(zhí)行線程;觸發(fā)執(zhí)行線程流轉(zhuǎn),以在所述流程實例的開始節(jié)點獲取離開的流程遷移流向;調(diào)用流程遷移流向以觸發(fā)工作流的運行。本發(fā)明首先可以滿足大數(shù)據(jù)量以及大并發(fā)高負載的工作流運行需求,其次,也減少了開發(fā)、測試和管理的應(yīng)用難度,最后,在滿足性能需求的可能性下,技術(shù)架構(gòu)不會過于復(fù)雜,硬件需求也不會過高,又可以滿足低成本集約化的要求。
文檔編號G06F9/44GK102043625SQ20101060117
公開日2011年5月4日 申請日期2010年12月22日 優(yōu)先權(quán)日2010年12月22日
發(fā)明者劉博 , 劉旭, 牛志嘉 申請人:中國農(nóng)業(yè)銀行股份有限公司