亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種業(yè)務流程調度的計算機設備、方法和裝置制造方法

文檔序號:6518998閱讀:182來源:國知局
一種業(yè)務流程調度的計算機設備、方法和裝置制造方法
【專利摘要】本發(fā)明涉及流程管理領域,公開了一種業(yè)務流程調度的計算機設備,方法和裝置。業(yè)務流程調度方法包括:確定待調度的節(jié)點配置有事務分割點;根據(jù)所述事務分割點,創(chuàng)建異步任務,所述異步任務包含在待調度節(jié)點中所述事務分割點之后的待調度任務;使用第一線程執(zhí)行包括流程中除異步任務之外的任務的事務,提交該第一線程執(zhí)行的事務,以保障數(shù)據(jù)一致性;使用第二線程執(zhí)行所述異步任務,實現(xiàn)任務節(jié)點之間的事務分割。
【專利說明】一種業(yè)務流程調度的計算機設備、方法和裝置
【技術領域】
[0001]本發(fā)明涉及流程管理技術,特別涉及一種業(yè)務流程調度的計算機設備、方法和裝置。
【背景技術】
[0002]工作流是一種由相關業(yè)務活動依時序或邏輯關系相互連接而成的業(yè)務流程。在業(yè)務開展過程中,文檔、信息或任務依據(jù)組織規(guī)范在多個參與者之間傳遞、處理或執(zhí)行。工作流技術的最主要特點是業(yè)務過程的部分或整體在計算機應用環(huán)境下的自動化,這些過程通常是指人與機器相結合的活動,如信息技術(IT, Information Technology)的應用程序以及工具交互的過程等。一個工作流包括一組任務(或活動)及它們的相互順序關系,還包括流程及任務的啟動和終止條件,以及對每個任務的描述。
[0003]工作流管理系統(tǒng)是指定義、創(chuàng)建以及執(zhí)行工作流的系統(tǒng),主要提供以下三個方面的功能支持:建造功能,對工作流過程及其組成活動定義和建模;運行控制功能,在運行環(huán)境中管理工作流過程,對工作流過程中的活動進行調度;運行交互功能,在工作流運行中,與用戶(業(yè)務工作的參與者或控制者)及外部應用程序進行交互。
[0004]目前,工作流技術得到了廣泛應用,比如,在企業(yè)業(yè)務中弓丨入工作流進行業(yè)務流程管理。業(yè)務流程管理(Business Process Management, BPM)相關的中間件套件,一般由建模工具(負責業(yè)務流程的建模),BPM引擎(負責業(yè)務流程的驅動),流程管理控制臺,技術框架平臺構成,能夠嵌入到業(yè)務系統(tǒng)中,以對上層業(yè)務提供流程建模和引擎流程實例調度應用編程接口(Application Programminglnterface, API)的方式,幫助業(yè)務完成流程的編排部署和運行調度,為企業(yè)打造符合其業(yè)務發(fā)展的各種流程。
[0005]圖1所示即是一個使用BPM編排的典型業(yè)務流程示意圖,從同步信息到完成訂單是個完整的開戶流程,其中同步信息、同步價格至完成訂單中的每一環(huán)節(jié)均為一個任務,每個任務上都配置了業(yè)務的服務,各個服務按照圖1預先編排好的順序依次執(zhí)行。其中,每一個任務在流程調度執(zhí)行時,對應一個節(jié)點。由于開戶流程本身并不是本發(fā)明關心的問題,所以在此不作詳細說明。
[0006]對于業(yè)務流程,客戶的要求包括:
[0007]1.流程能夠按照業(yè)務目標,在邏輯配置正確的前提下開始執(zhí)行各個業(yè)務服務直到結束;
[0008]2.流程能夠記錄每一步的執(zhí)行信息,供業(yè)務跟蹤查詢;
[0009]3.流程向前流轉要與業(yè)務數(shù)據(jù)的變化保持數(shù)據(jù)一致性;
[0010]4.流程某個節(jié)點發(fā)生異常,則停在異常節(jié)點,并支持失敗重試或人工干預,直到能夠再次執(zhí)行下去,且已經(jīng)完成的業(yè)務服務調用不受影響;
[0011]5.當引擎進程異常終止,需要支持進程重啟后從尚未完成的任務恢復執(zhí)行;
[0012]6.流程調度性能要高。
[0013]現(xiàn)有技術的一種方案中,首先使用可視化的流程編排工具,完成業(yè)務流程定義的服務配置和順序編排,BPM引擎基于上述編排好的流程定義,依據(jù)業(yè)務的輸入和調用請求,完成流程的向前驅動直至完成。BPM引擎流轉過程會持久化到數(shù)據(jù)庫,且持久化過程中采用事務機制控制,保證數(shù)據(jù)一致性。為保證BPM平臺和業(yè)務之間的事務被統(tǒng)一調度,則業(yè)務和BPM平臺需要使用相同的事務框架,如Spring事務框架或其它類似的事務框架。業(yè)務發(fā)起調用BPM平臺API的接口也需要配置聲明式事務。聲明式事務指采用在配置文件中聲明的方式來處理事務。采用聲明式事務的好處是改變事務管理時,只需在配置文件中重新配置,無需改變代碼,重新編譯。業(yè)務調用啟動流程API,驅動流程向前流轉的過程中,由于采用事務控制,如果中間某一節(jié)點發(fā)生異常,事務會回滾到事務開始點,而不能回滾到異常節(jié)點,也不支持從異常節(jié)點恢復執(zhí)行。
[0014]因此,在業(yè)務流程調度過程中,現(xiàn)有技術無法滿足業(yè)務和BPM平臺既能夠保持數(shù)據(jù)一致性,又能夠保證出現(xiàn)異常時流程終止在異常節(jié)點,后續(xù)從異常節(jié)點重新恢復執(zhí)行。

【發(fā)明內容】

[0015]本發(fā)明實施例提供一種業(yè)務流程調度的計算機設備、方法和裝置,使業(yè)務和BPM平臺能夠保持數(shù)據(jù)一致性,又能夠保證出現(xiàn)異常時流程終止在異常節(jié)點,恢復時從異常節(jié)點開始執(zhí)行。
[0016]本發(fā)明實施例的技術方案是這樣實現(xiàn)的:
[0017]第一方面,提供了一種執(zhí)行流程調度的計算機設備,用于調度執(zhí)行一個流程,所述流程包括至少一個節(jié)點,所述計算機設備包括:存儲器和處理器,其中,所述存儲器用于存儲所述計算機設備的指令;所述處理器用于執(zhí)行所述存儲器中的指令以完成以下步驟:
[0018]確定待調度的節(jié)點配置有事務分割點;
[0019]根據(jù)所述事務分割點,創(chuàng)建異步任務,所述異步任務包含所述待調度的節(jié)點中所述事務分割點之后的待調度任務;
[0020]使用第一線程執(zhí)行包含流程中除所述異步任務之外的任務的事務,提交所述第一線程執(zhí)行的事務;
[0021]使用第二線程執(zhí)行所述異步任務。
[0022]在第一方面的第一種可能的實現(xiàn)方式中,所述處理器進一步用于將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中。
[0023]結合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中包括:根據(jù)注冊的事務提交事件回調監(jiān)聽,監(jiān)聽到所述第一線程執(zhí)行的事務成功提交時,將所述異步任務放入所述第一流程引擎進程的待調度任務隊列中。
[0024]第二方面,提供了一種業(yè)務流程調度方法,包括:
[0025]確定待調度的節(jié)點配置有事務分割點;
[0026]根據(jù)所述事務分割點,創(chuàng)建異步任務,所述異步任務包含所述待調度的節(jié)點中在所述事務分割點之后的待調度任務;
[0027]使用第一線程執(zhí)行包含流程中除所述異步任務之外的任務的事務,提交所述第一線程執(zhí)行的事務;
[0028]使用第二線程執(zhí)行所述異步任務。[0029]在第二方面的第一種可能的實現(xiàn)方式中,在所述提交第一線程執(zhí)行的事務后,進一步包括,將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中。
[0030]結合第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,,所述方法進一步包括:注冊事務提交事件回調監(jiān)聽;
[0031]所述將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中具體包括:監(jiān)聽到所述第一線程執(zhí)行的事務成功提交時,將所述異步任務放入所述第一流程引擎進程的待調度任務隊列中。
[0032]在第二方面的第三種可能的實現(xiàn)方式中,在創(chuàng)建異步任務后進一步包括:將所述異步任務持久化;
[0033]所述提交第一線程執(zhí)行的事務后進一步包括:將所述持久化的異步任務保存到數(shù)據(jù)庫中。若所述異步任務未執(zhí)行完畢,所述第二線程所屬的第一引擎進程異常終止,第二流程引擎進程從所述數(shù)據(jù)庫中獲取所述異步任務,調度執(zhí)行所述異步任務。
[0034]第三方面,提供了一種流程調度裝置,用于執(zhí)行一個流程,所述流程包括至少一個節(jié)點,所述流程調度裝置包括:確定單元,創(chuàng)建單元,事務提交單元和執(zhí)行單元;
[0035]所述確定單元,用于確定待調度的節(jié)點配置有事務分割點;
[0036]所述創(chuàng)建單元,用于根據(jù)所述確定單元確定的所述事務分割點,創(chuàng)建異步任務,所述異步任務包含在所述待調度的節(jié)點中所述事務分割點之后的待調度任務;
[0037]所述執(zhí)行單元,用于使用第一線程執(zhí)行包含流程中除所述異步任務之外的任務的事務,并提交所述第一線程執(zhí)行的事務;使用第二線程執(zhí)行所述異步任務。
[0038]第四方面,提供了一種計算機可讀存儲介質,其中保存有可被計算機處理器執(zhí)行的指令,所述指令用于執(zhí)行以下步驟:
[0039]確定待調度的節(jié)點配置有事務分割點;
[0040]根據(jù)所述事務分割點,創(chuàng)建異步任務,所述異步任務包含所述待調度的節(jié)點中在所述事務分割點之后的待調度任務;
[0041]使用第一線程執(zhí)行包含流程中除異步任務之外的任務的事務,提交所述第一線程執(zhí)行的事務;
[0042]使用第二線程執(zhí)行所述異步任務。
[0043]可見,采用本發(fā)明實施例的技術方案,在流程節(jié)點中配置事務分割點,執(zhí)行除異步任務外已調度任務的線程在執(zhí)行完畢后提交事務。由于異步任務外的已調度任務遵循事務機制來提交,保障了數(shù)據(jù)一致性。使用新的線程調度事務分割點后的異步任務,實現(xiàn)了任務之間的事務分割。當出現(xiàn)異常時流程調度終止在異步任務,恢復時從異步任務開始執(zhí)行。
【專利附圖】

【附圖說明】
[0044]圖1為現(xiàn)有的一個使用BPM編排的典型業(yè)務流程示意圖。
[0045]圖2為一種采用事務分割點的事務處理流程示意圖。
[0046]圖3為本發(fā)明實施例的一種BMP業(yè)務應用系統(tǒng)架構圖。
[0047]圖4為本發(fā)明實施例中服務器的組成架構圖。
[0048]圖5為本發(fā)明實施例的一種流程引擎的模塊示意圖。[0049]圖6是本發(fā)明實施例的一種流程調度方法的流程圖。
[0050]圖7是本發(fā)明另一實施例的流程調度方法的流程圖。
[0051]圖8是本發(fā)明實施例的流程調度裝置的結構示意圖。
【具體實施方式】
[0052]為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明作進一步地詳細說明。
[0053]為實現(xiàn)事務執(zhí)行不成功時,能回滾到中間某一節(jié)點,而不是回滾到事務的開始節(jié)點,可在流程中新增事務分割點(savepoint)到某一節(jié)點上,對每一個節(jié)點分別進行持久化。當BPM引擎驅動流程過程中遇到事務分割點時,將事務分割點前的事務先提交,再創(chuàng)建一個新的事務,來控制BMP流程后續(xù)節(jié)點的執(zhí)行。
[0054]具體實現(xiàn)的方式以圖2如示的場景為例來說明:業(yè)務APIl,BPM調度API和業(yè)務API2被配置在一個聲明式事務Tl中,Tl是最外層事務。其中,業(yè)務APII,業(yè)務API2為業(yè)務的執(zhí)行方法,BPM調度API為平臺的調度方法。BPM調度API會預先配置內層事務T2,T2會自動加入業(yè)務事務Tl中。在BPM調度API中預先配置有事務分割點,根據(jù)該事務分割點,可以提前提交內層事務Τ2,并為未完成的BPM調度API的剩余部分流程新建內層事務Τ3,由Τ3控制BPM流程的后續(xù)節(jié)點的流轉。由于采用統(tǒng)一事務管理,Τ2提交的同時會將Tl也提前提交,而Τ3無法管理到業(yè)務ΑΡΙ2,業(yè)務ΑΡΙ2失去了事務管理,會導致數(shù)據(jù)不一致。因此,該方案雖然能夠將事務回滾到異常節(jié)點,但不能保持數(shù)據(jù)一致性。為解決該問題,本發(fā)明的實施例通過先提交除事務分割點之后的待調度任務之外的任務所組成的事務,然后使用新的線程來執(zhí)行流程中事務分割點后的待調度任務,使業(yè)務和BPM平臺能夠保持數(shù)據(jù)一致性,又能夠保證出現(xiàn)異常時流程終止在配置有事務分割點的異常節(jié)點,恢復時從該異常節(jié)點繼續(xù)執(zhí)行。
[0055]為便于理解,對流程、事務、任務、線程和進程這些術語進行說明。流程、事務、任務屬業(yè)務層面的表述,而線程、進程是機器執(zhí)行層面的表述。流程對應整個業(yè)務,可包含多個任務。流程被一個進程管理。一個事務由一個線程來執(zhí)行,一個線程可包含多段事務。一個事務可包含一個或多個任務;一個任務在被線程執(zhí)行時也稱為一個節(jié)點。任務是可以分割的。一個流程引擎中運行有一個進程,一個進程可包含多個線程,線程被進程所驅動。
[0056]圖3為本發(fā)明實施例的一個BMP業(yè)務應用系統(tǒng)架構圖。業(yè)務系統(tǒng)301用于完成業(yè)務流程的編排部署和運行調度。業(yè)務系統(tǒng)可以是集群系統(tǒng),該集群系統(tǒng)是由互相連接的計算機組成的并行或分布式系統(tǒng)。作為一種實施方式,業(yè)務系統(tǒng)301可包括至少一個服務器,例如包括服務器a302、服務器b307。服務器a302具體可包括業(yè)務模塊303和BPM引擎304,服務器b與服務器a有相似的結構。業(yè)務模塊303用于接收用戶的業(yè)務請求,向BPM引擎304發(fā)起業(yè)務流程調度的請求。BPM引擎304用于從數(shù)據(jù)庫308讀取流程定義,驅動和調度流程。數(shù)據(jù)庫308存儲流程定義及相關的數(shù)據(jù)。
[0057]業(yè)務系統(tǒng)301中的服務器還可以與本地的業(yè)務流程306或第三方業(yè)務系統(tǒng)(圖未示出)進行交互,調度其中的服務。業(yè)務流程306包含至少一個任務。如圖3所示的例子,業(yè)務流程306包括任務1,任務2,直至任務η,η為大于2的自然數(shù)。業(yè)務系統(tǒng)301使用BPM建模工具305抽象出業(yè)務流程306,生成流程定義并存儲到數(shù)據(jù)庫308中。其中,在流程定義中配置流程任務的事務分割點。流程定義中包含流程中各任務對應的節(jié)點、節(jié)點之間的關系,輸入輸出數(shù)據(jù),事務分割點等。該流程定義具體可用流程圖,或靜態(tài)配置文件表示,存儲在數(shù)據(jù)庫308或文件系統(tǒng)中。當服務器中的BPM引擎收到業(yè)務調度請求,則會讀取該流程定義,進行流程調度。若調度到的節(jié)點包含有事務分割點,為事務分割點之后的待調度任務創(chuàng)建異步任務。異步任務流程調度具體包括:除事務分割點之后的待調度任務以外的任務組成一個事務,由一個線程執(zhí)行;當執(zhí)行該事務的線程結束,相對應的事務成功提交后,該事務分割點之后的待調度任務,即異步任務,由另一線程調度執(zhí)行。同時,該異步任務會被正式寫入數(shù)據(jù)庫,以備執(zhí)行該異步任務的進程故障時,其他服務器中的BPM引擎進程可以獲取該異步任務。
[0058]當業(yè)務系統(tǒng)301的異步任務流程調度發(fā)生異常,則BPM引擎304中執(zhí)行該異步任務的線程停留在發(fā)生異常的節(jié)點不再繼續(xù)調度執(zhí)行。若是執(zhí)行異步任務的線程異常,BPM引擎會從異步任務調度線程池中再獲取一個空閑線程執(zhí)行該異步任務,重新執(zhí)行異步任務。若是當前BPM引擎進程異常終止,則業(yè)務系統(tǒng)中的其他服務器,如服務器b,的BPM引擎進程會監(jiān)控到這一異常終止或收到服務器a中BPM引擎進程異常終止的通知消息,根據(jù)接管策略從數(shù)據(jù)庫中獲取未完成的異步任務,把異常終止的BPM引擎進程正在執(zhí)行的任務恢復繼續(xù)執(zhí)行。
[0059]圖4是本發(fā)明實施例提供的業(yè)務系統(tǒng)中服務器的示意性框圖。本實施例中,服務器可以為一計算機設備,具體包括一基于處理器的計算機。如圖4所示,服務器400可包括總線410,處理器402,存儲器404,輸入輸出接口 406,通信接口 408??偩€410可包括一通路,在計算機各個部件之間傳送信息。處理器402用于處理信息,執(zhí)行指令或操作,具體可以是一個通用中央處理器(CPU),微處理器,特定應用集成電路application-specificintegrated circuit (ASIC),或一個或多個用于控制本發(fā)明方案程序執(zhí)行的集成電路。服務器還包括一個或多個存儲器404,用于存儲信息和指令,存儲器可以是只讀存儲器read-only memory (ROM)或可存儲靜態(tài)信息和指令的其他類型的靜態(tài)存儲設備,隨機存取存儲器random access memory (RAM)或者可存儲信息和指令的其他類型的動態(tài)存儲設備,也可以是磁盤存儲器。這些存儲器通過總線410與處理器402相連接。
[0060]輸入輸出接口 406可包括輸入裝置或輸出裝置。輸入裝置用以接收用戶輸入的數(shù)據(jù)和信息,例如鍵盤,鼠標、攝像頭,掃描儀,光筆,語音輸入裝置,觸摸屏等。輸出裝置用以允許輸出或顯示信息給用戶,包括顯示屏,打印機,揚聲器等。計算設備還包括一個網(wǎng)絡接口 408,該網(wǎng)絡接口使用任何收發(fā)器一類的裝置,以便與其他設備或通信網(wǎng)絡通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(WLAN)等。處理器402也能通過總線410與輸入輸出接口 406,網(wǎng)絡接口 408相連接。
[0061]存儲器404保存有執(zhí)行本發(fā)明方案的部件的程序指令,包括業(yè)務模塊410,BPM引擎412的程序。存儲器404中還可以保存操作系統(tǒng)和其他應用程序。處理器402用于讀取并執(zhí)行存儲器404中的程序或者指令,并在執(zhí)行的過程中通過網(wǎng)絡接口 408與其它設備進行通信。具體地,當處理器402執(zhí)行存儲器404中的指令時,處理器402可執(zhí)行圖6中所示的步驟601-604。
[0062]圖5為流程引擎的結構示意圖,該流程引擎即圖4中的BPM引擎412。如圖5所示,流程引擎510包括流程解析器511,任務管理器512和任務執(zhí)行器513。流程解析器511用于確定待調度的節(jié)點配置有事務分割點。具體地,流程解析器511讀取數(shù)據(jù)庫308中的流程定義,并對流程定義進行解析,確定該待調度的節(jié)點中是否配置有事務分割點。在調度過程中,當在待調度的節(jié)點中發(fā)現(xiàn)預先設置的事務分割點時,任務管理器512在當前被調度的流程節(jié)點的執(zhí)行線程中創(chuàng)建異步任務。該異步任務包含流程定義中在事務分割點之后的未調度執(zhí)行的任務。該異步任務不在當前線程中執(zhí)行,而是在當前線程結束后,由另一線程,即第二線程,調度執(zhí)行。任務管理器512還將創(chuàng)建的異步任務持久化,準備寫入數(shù)據(jù)庫。
[0063]任務管理器512還會注冊聲明式事務的事務提交事件回調監(jiān)聽(callback)。事務提交事件回調監(jiān)聽指監(jiān)聽到該事務提交事件,就調用預先注冊的回調方法。該事務提交事件回調監(jiān)聽作用在于保證異步任務的調度發(fā)生在事務分割點前的事務提交之后。
[0064]執(zhí)行當前被調度的流程節(jié)點的線程被稱為當前線程。一個線程執(zhí)行完畢,會返回到外層的聲明式事務;線程返回表示本線程結束,新的線程可以啟動。當前線程結束,則該線程對應的最外層的聲明式事務會隨著線程返回而提交。由于已預先注冊了事務提交事件回調監(jiān)聽,任務管理器512會在監(jiān)聽到外層事務成功提交時,按預先注冊的回調方法,把已創(chuàng)建的異步任務放入線程共享的所屬的BPM引擎進程的待調度任務隊列515中。任務管理器512在當前線程結束時,還會把該異步任務同步寫入到數(shù)據(jù)庫中。任務隊列515中的任務數(shù)據(jù)與數(shù)據(jù)庫中的任務數(shù)據(jù)是相同的,不同之處在于任務隊列是臨時存于內存中,數(shù)據(jù)庫中數(shù)據(jù)可持久保存。異步任務調度線程池中的一個線程會從該任務隊列中獲取異步任務進行調度,調度成功后會把該異步任務從數(shù)據(jù)庫中刪除。
[0065]任務執(zhí)行器513用于使用第二線程執(zhí)行異步任務。異步任務調度線程池中預先申請有若干個空閑線程等待啟用。該第二線程是從異步任務調度線程池中獲取的。
[0066]如果異步任務調度過程中,執(zhí)行該異步任務的第一 BPM引擎進程發(fā)生異常,則另一服務器中的第二 BPM引擎進程會監(jiān)控到第一 BPM引擎進程出現(xiàn)異?;蚴盏降谝?BPM引擎進程異常終止的通知消息,第二 BPM引擎進程從數(shù)據(jù)庫中獲取發(fā)生異常的BPM引擎進程未完成的異步任務,由第二 BPM引擎的任務執(zhí)行器繼續(xù)執(zhí)行該異步任務。
[0067]在本實施例中,在流程節(jié)點中配置事務分割點,使執(zhí)行除異步任務之外的已調度任務的線程在執(zhí)行完畢后自動返回到外層的事務。由于外層的事務遵循事務機制來提交,保障了數(shù)據(jù)一致性。使用新的線程調度事務分割點后的異步任務,實現(xiàn)任務節(jié)點之間的事務分割,當出現(xiàn)異常時流程調度終止在異步任務,恢復時從異步任務開始執(zhí)行;同時通過異步任務調度線程池的調度提供了高性能的流程執(zhí)行方案。
[0068]圖6是本發(fā)明一個實施例提供的流程調度方法的流程圖。以下描述的方法可以被圖4所示的服務器,或圖5所示的流程引擎來執(zhí)行。
[0069]在601步驟,流程引擎確定待調度的節(jié)點配置有事務分割點。
[0070]使用BPM建模工具構建流程圖時,在流程的節(jié)點之間或某一節(jié)點中預先配置有事務分割點。事務分割點的配置被格式化存儲在流程定義中。假如,流程定義符合業(yè)務流程建模與標注(Business Process Model and Notation, BPMN)規(guī)范時,則使用活動(Activity),如業(yè)務任務(Service Task)的擴展屬性進行事務分割點存儲。
[0071]例如:〈startEvent id=//startSimple//name=//Start//uf 1: asynExecute=//true///>
[0072]“ asynExecute=〃true〃 ”表示該節(jié)點需異步調度,配置有事務分割點。
[0073]流程引擎在調度過程中,根據(jù)流程定義發(fā)現(xiàn)待調度的某一節(jié)點中配置有事務分割點。以使用一段XML描述來定義事務分割點為例,該事務分割點的XML描述可以在節(jié)點流程定義描述的開始或中間,流程引擎均可解析確定出該節(jié)點中配置有事務分割點。
[0074]在步驟602,根據(jù)事務分割點,流程引擎創(chuàng)建異步任務。該異步任務包含流程定義中待調度節(jié)點中在事務分割點之后的待調度任務。
[0075]創(chuàng)建異步任務后,還可以對該異步任務持久化,具體為緩存異步任務在數(shù)據(jù)庫保存接口中,準備寫入數(shù)據(jù)庫。
[0076]在步驟603,流程引擎使用第一線程執(zhí)行包含流程中除異步任務之外的任務的事務,完成后,提交該事務。
[0077]第一線程結束,在第一線程中包含了流程中除異步任務以外任務的事務被執(zhí)行完畢提交。提交的事務包括事務分割點之前的已調度執(zhí)行的任務,其中可以包括事務分割點之后的,除異步任務以外的外層事務中的任務節(jié)點。
[0078]第一線程執(zhí)行的事務提交時,可將異步任務放入第一線程所屬的第一流程引擎進程的待調度任務隊列中。第一流程引擎進程具體可以是BMP引擎運行的進程。第一線程執(zhí)行的事務提交后,異步任務還被寫入到數(shù)據(jù)庫中。
[0079]在步驟604,流程引擎使用第二線程執(zhí)行所述異步任務。
[0080]第一流程引擎進程采用一個新線程,即第二線程,執(zhí)行該異步任務,繼續(xù)調度流程。該異步任務處理成功后,流程引擎刪除數(shù)據(jù)庫中保存的該異步任務。
[0081]若異步任務未執(zhí)行完畢,第二線程異常終止,則第一流程引擎進程重新從異步任務調度線程池中獲取一個空閑線程,即第三線程,使用第三線程調度從待調度任務隊列中取出的異步任務,重新開始執(zhí)行該異步任務。若第一流程引擎進程異常終止,則第二流程引擎進程會監(jiān)控到第一流程引擎異常終止或收到第一流程引擎進程異常終止的通知消息,從數(shù)據(jù)庫中獲取所述未完成的異步任務,分配線程調度執(zhí)行所述異步任務。
[0082]本發(fā)明的實施方式中,在流程節(jié)點中配置事務分割點,對于異步任務采用不同的線程調度,即異步線程調度,使執(zhí)行配置有事務分割點的節(jié)點的線程在第一線程執(zhí)行完畢后自動返回到外層的事務。由于外層的事務遵循事務機制來提交,保障了數(shù)據(jù)一致性。進一步地,使用第二線程驅動事務分割點后的后續(xù)流程流轉,實現(xiàn)任務節(jié)點之間的事務分割,當出現(xiàn)異常時流程調度終止在異步任務,恢復時從異步任務開始執(zhí)行;同時通過異步任務調度線程池的調度提供了高性能的流程執(zhí)行方案。
[0083]圖7是本發(fā)明一個實施例提供的流程調度具體過程的流程圖。本實施例的步驟執(zhí)行,以圖2中的業(yè)務流程包括業(yè)務APIl,BPM調度API和業(yè)務API2為例進行說明,其中BPM調度API中設置有事務分割點。
[0084]步驟701,BPM引擎的進程發(fā)起流程調度。
[0085]步驟702,BPM引擎啟動流程定義中預先配置的事務。在本實施例中,BPM引擎啟動的事務Tl配置包含有業(yè)務API I,BPM調度API和業(yè)務API2,事務Tl后續(xù)也被稱為外層事務。事務Tl由一個線程來執(zhí)行,后續(xù)也稱為當前線程。
[0086]一般地,事務包含一個或多個任務,該事務由一個線程執(zhí)行,線程被BPM引擎進程所驅動。一個任務在被線程執(zhí)行時也稱之為一個節(jié)點。
[0087]步驟703,BPM引擎確定待調度節(jié)點是否包含事務分割點,如果否,則轉至步驟704,如果是,則轉至步驟705。[0088]在本實施例中,BPM調度API中預先設置有一個事務分割點。
[0089]步驟704,待調度節(jié)點不包含事務分割點時,BPM引擎在當前線程中繼續(xù)執(zhí)行下一節(jié)點。當前線程即執(zhí)行當前被調度的流程節(jié)點的線程,即圖6實施例中的第一線程。
[0090]步驟705,BPM引擎在待調度節(jié)點中發(fā)現(xiàn)事務分割點時,在當前線程中創(chuàng)建異步任務,并持久化。在本實施例中,該異步任務包含BPM調度API在事務分割點之后的待調度任務。本實施例中,持久化(Persistence)具體為緩存異步任務在數(shù)據(jù)庫保存接口中。持久化的作用是把數(shù)據(jù),如內存中的對象,存儲在關系型的數(shù)據(jù)庫,磁盤文件、XML數(shù)據(jù)文件中。
[0091]異步任務的設置可以具體為一段XML描述,如bpmn2extn:nextFlowExecutionMode="ASYNCHR0N0US_C0NTINUE"。
[0092]步驟706,注冊事務提交事件回調監(jiān)聽。在回調監(jiān)聽的注冊代碼中定義有異步任務的線程啟動方法。事務提交事件回調監(jiān)聽保證異步任務的線程啟動在當前線程的事務提交之后。該事務提交事件回調監(jiān)聽的注冊可以在步驟705之后,也可以預先在流程定義中配置。
[0093]步驟707,當前線程執(zhí)行完畢,外層事務Tl隨著當前線程返回而提交。提交的事務Tl包含業(yè)務API1,BPM調度API中事務分割點之前的已調度任務,以及業(yè)務API2。BPM調度API中事務分割點之后的待調度任務,即異步任務,則沒有被執(zhí)行提交。
[0094]步驟708,按照已注冊的事務提交事件回調監(jiān)聽的回調方法,在外層事務Tl提交的時候,異步任務被放入當前流程引擎進程待調度的任務隊列中。該任務隊列可由異步任務調度線程池中的線程來調度。該異步任務調度線程池中預先申請有若干個空閑線程等待啟用。
[0095]步驟709,外層事務Tl提交時,異步任務還被寫入數(shù)據(jù)庫。寫入數(shù)據(jù)庫后,該異步任務可被持久保存。步驟709與步驟708的執(zhí)行可不分先后順序。
[0096]步驟710,監(jiān)測當前流程引擎進程是否異常終止,若進程異常終止,執(zhí)行步驟711,若正常運行,執(zhí)行步驟712。
[0097]步驟711,第二流程引擎進程從數(shù)據(jù)庫獲取異常終止的流程引擎進程未完成的異步任務,分配流程繼續(xù)調度,完成后轉至步驟713。該第二流程引擎進程會主動監(jiān)控是否有其他流程引擎進程異常終止,或第二流程引擎進程收到第一流程引擎進行異常終止的通知消息。
[0098]步驟712,當前BPM引擎使用新線程(即第二線程)執(zhí)行異步任務,繼續(xù)調度。該新的線程是從異步任務調度線程池中獲取的。若異步任務未執(zhí)行完畢,執(zhí)行異步任務的線程異常終止,BPM引擎從異步任務調度線程池中再取出一個空閑線程,即第三線程,執(zhí)行所述異步任務。
[0099]步驟713,異步任務執(zhí)行完成。數(shù)據(jù)庫中的異步任務被刪除。
[0100]基于上述流程調度方法,圖8為本發(fā)明實施例提供的一種流程調度裝置的組成結構示意圖。如圖8所示,該流程調度裝置包括:確定單元801,創(chuàng)建單元803,執(zhí)行單元805。
[0101]確定單元801,用于確定待調度的節(jié)點配置有事務分割點;
[0102]創(chuàng)建單元803,用于根據(jù)確定單元801確定的所述事務分割點,創(chuàng)建異步任務,所述異步任務包含在待調度的節(jié)點中所述事務分割點之后的待調度任務;
[0103]執(zhí)行單元805,用于使用第一線程執(zhí)行包含流程中除異步任務以外的任務的事務,并提交所述第一線程執(zhí)行的事務;使用第二線程執(zhí)行所述異步任務。
[0104]該執(zhí)行單元805進一步用于:將創(chuàng)建單元創(chuàng)建的異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中。
[0105]該執(zhí)行單元805還進一步用于根據(jù)注冊的事務提交事件回調監(jiān)聽,監(jiān)聽到所述第一線程執(zhí)行的事務成功提交時,將所述異步任務放入所述第一流程引擎進程的待調度任務隊列中。
[0106]執(zhí)行單元805進一步用于將所述異步任務持久化;在所述提交第一線程執(zhí)行的事務后,將所述持久化的異步任務保存到數(shù)據(jù)庫中,以便于當所述異步任務未執(zhí)行完畢,所述第二線程所屬的第一流程引擎進程異常終止時,第二流程引擎進程從所述數(shù)據(jù)庫中獲取所述異步任務,調度執(zhí)行所述異步任務。
[0107]確定單元801是根據(jù)存儲在所述數(shù)據(jù)庫的流程定義確定所述事務分割點。
[0108]可見,采用本發(fā)明實施例的技術方案,流程調度裝置發(fā)現(xiàn)在流程節(jié)點中配置有事務分割點時,創(chuàng)建異步任務,對于異步任務采用異步線程調度。執(zhí)行配置有事務分割點的節(jié)點的線程在該線程執(zhí)行完畢后,遵循事務的機制來提交,保障了數(shù)據(jù)一致性。進一步地,使用新的線程驅動事務分割點后的后續(xù)流程流轉,實現(xiàn)任務節(jié)點之間的事務分割。
[0109]上述裝置內的各單元之間的信息交互、執(zhí)行過程等內容,由于與本發(fā)明方法實施例基于同一構思,具體內容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
[0110]本文中應用了具體實施例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其思想;同時,對于本領域的一般技術人員,依據(jù)本發(fā)明的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發(fā)明的限制。
【權利要求】
1.一種流程調度裝置,用于執(zhí)行一個流程,所述流程包括至少一個節(jié)點,所述流程調度裝置包括:確定單元,創(chuàng)建單元和執(zhí)行單元;所述確定單元,用于確定待調度的節(jié)點配置有事務分割點;所述創(chuàng)建單元,用于根據(jù)所述確定單元確定的所述事務分割點,創(chuàng)建異步任務,所述異步任務包含在所述待調度的節(jié)點中所述事務分割點之后的待調度任務;所述執(zhí)行單元,用于使用第一線程執(zhí)行包含流程中除異步任務之外的任務的事務,并提交所述第一線程執(zhí)行的事務;使用第二線程執(zhí)行所述異步任務。
2.根據(jù)權利要求1所述的流程調度裝置,其特征在于,所述執(zhí)行單元進一步用于:將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中。
3.根據(jù)權利要求2所述的流程調度裝置,其特征在于,所述執(zhí)行單元用于將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中所述執(zhí)行單元包括:所述執(zhí)行單元用于根據(jù)注冊的事務提交事件回調監(jiān)聽,監(jiān)聽到所述第一線程執(zhí)行的事務成功提交時,將所述異步任務放入所述第一流程引擎進程的待調度任務隊列中。
4.根據(jù)權利要求2或3所述的流程調度裝置,其特征在于,所述執(zhí)行單元進一步用于在所述異步任務未執(zhí)行完畢,所述第二線程異常終止時,從所述待調度任務隊列中取出所述異步任務,使用第三線程執(zhí)行所述異步任務。
5.根據(jù)權利要求1所述的流程調度裝置,其特征在于,所述執(zhí)行單元進一步用于將所述異步任務持久化;在所述第一線程執(zhí)行的事務提交后,將所述持久化的異步任務保存到數(shù)據(jù)庫中,以便當所述異步任務未執(zhí)行完畢,所述第二線程所屬的第一流程引擎進程異常終止時,第二流程引擎進程從所述數(shù)據(jù)庫中獲取所述異步任務,調度執(zhí)行所述異步任務。
6.根據(jù)權利要求1-5中任一權利要求所述的流程調度裝置,其特征在于,所述事務分割點存儲在數(shù)據(jù)庫的流程定義中。
7.根據(jù)權利要求1-6中任一權利要求所述的流程調度裝置,其特征在于,所述事務是聲明式事務。
8.—種業(yè)務流程調度方法,所述流程包括至少一個節(jié)點,所述方法包括:確定待調度的節(jié)點配置有事務分割點;根據(jù)所述事務分割點,創(chuàng)建異步任務,所述異步任務包含所述待調度的節(jié)點中在所述事務分割點之后的待調度任務;使用第一線程執(zhí)行包含流程中除所述異步任務之外的任務的事務,提交所述第一線程執(zhí)行的事務;使用第二線程執(zhí)行所述異步任務。
9.根據(jù)權利要求8所述的方法,其特征在于,在所述提交第一線程執(zhí)行的事務后,進一步包括,將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中。
10.根據(jù)權利要求9所述的方法,其特征在于,所述方法進一步包括:注冊事務提交事件回調監(jiān)聽;所述將所述異步任務放入所述第一線程所屬的第一流程引擎進程的待調度任務隊列中具體包括:監(jiān)聽到所述第一線程執(zhí)行的事務成功提交時,將所述異步任務放入所述第一流程引擎進程的待調度任務隊列中。
11.根據(jù)權利要求9或10所述的方法,其特征在于,所述方法進一步包括:在所述異步任務未執(zhí)行完畢,所述第二線程異常終止時,從所述待調度任務隊列中取出所述異步任務,使用第三線程執(zhí)行所述異步任務。
12.根據(jù)權利要求8所述的方法,其特征在于,在創(chuàng)建異步任務后進一步包括:將所述異步任務持久化;所述提交第一線程執(zhí)行的事務后進一步包括:將所述持久化的異步任務保存到數(shù)據(jù)庫中。
13.根據(jù)權利要求12所述的方法,其特征在于,所述方法進一步包括:若所述異步任務未執(zhí)行完畢,所述第二線程所屬的第一引擎進程異常終止,第二流程引擎進程從所述數(shù)據(jù)庫中獲取所述異步任務,調度執(zhí)行所述異步任務。
14.根據(jù)權利要求8-13中任一權利要求所述的方法,其特征在于,所述事務分割點存儲在數(shù)據(jù)庫的流程定義中。
15.一種執(zhí)行流程調度的計算機設備,其特征在于,所述計算機設備用于執(zhí)行一個流程,所述流程包括至少一個節(jié)點,所述計算機設備包括:存儲器和處理器,其中:所述存儲器用于存儲所述計算機設備的指令;所述處理器用于執(zhí)行所述存儲器中的指令,以完成以下步驟:確定待調度的節(jié)點配置有事務分割點;根據(jù)所述事務分割點,創(chuàng)建異步任務,所述異步任務包含所述待調度的節(jié)點中所述事務分割點之后的待調度任務;使用第一線程執(zhí)行包含流程中除`所述異步任務之外的任務的事務,提交所述第一線程執(zhí)行的事務;使用第二線程執(zhí)行所述異步任務。
16.根據(jù)權利要求15所述的計算機設備,其特征在于,所述處理器進一步用于根據(jù)注冊的事務提交事件回調監(jiān)聽,監(jiān)聽到所述第一線程執(zhí)行的事務成功提交時,將所述異步任務放入所述第一流程引擎進程的待調度任務隊列中。
17.根據(jù)權利要求16所述的計算機設備,其特征在于,所述處理器進一步用于在所述異步任務未執(zhí)行完畢,所述第二線程異常終止時,從所述待調度任務隊列中取出所述異步任務,使用第三線程執(zhí)行所述異步任務。
18.根據(jù)權利要求15所述的計算機設備,其特征在于,所述處理器進一步用于:將所述異步任務持久化;在所述第一線程執(zhí)行的事務提交后,將所述持久化的異步任務保存到數(shù)據(jù)庫中;以便在所述異步任務未執(zhí)行完畢,所述第二線程所屬的第一流程引擎進程異常終止時,第二流程引擎進程從所述數(shù)據(jù)庫中獲取所述異步任務,調度執(zhí)行所述異步任務。
【文檔編號】G06Q10/06GK103593236SQ201310567968
【公開日】2014年2月19日 申請日期:2013年11月14日 優(yōu)先權日:2013年11月14日
【發(fā)明者】周俊杰, 魏瑪那·娜拉西馬哈·摩西, 烏帕薩娜·哈弗里 申請人:華為技術有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1