一種基于事件的工作流間協(xié)作的系統(tǒng)及方法
【專利摘要】本發(fā)明公開了一種基于事件的工作流間協(xié)作的系統(tǒng)和方法,該系統(tǒng)包括:交互單元、處理單元、分發(fā)單元;所述交互單元分別與所述處理單元和總線通信連接,所述分發(fā)單元分別與所述處理單元、工作流引擎、所述交互單元通信連接;所述交互單元接收所述總線發(fā)送的消息濾除其中的事件傳送給所述處理單元,所述處理單元根據(jù)事件路由表對交互單元傳遞過來的數(shù)據(jù)判定,判定時間消息的層次級別,并提交至分發(fā)單元,所述分發(fā)單元根據(jù)事件層次級別,將消息轉(zhuǎn)發(fā)給流程引擎或者通過交互單元發(fā)送至總線。本發(fā)明能夠有效的降低整合異構(gòu)的工作流系統(tǒng)的成本,不破壞原有的不同系統(tǒng),從而降低工作流系統(tǒng)間協(xié)作的費(fèi)用,對于流轉(zhuǎn)流協(xié)作要求較高的領(lǐng)域。
【專利說明】一種基于事件的工作流間協(xié)作的系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種埋地管道陰極保護(hù)數(shù)據(jù)采集裝置,屬埋地管道保護(hù)于【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]國際工作流管理聯(lián)盟(Workflow Management Coal it1n,WfMC)的成立標(biāo)志著工作流技術(shù)開始進(jìn)入相對成熟的階段。為了實(shí)現(xiàn)不同工作流產(chǎn)品之間的互操作,WfMC在工作流管理系統(tǒng)的相關(guān)術(shù)語、體系結(jié)構(gòu)及應(yīng)用編程接口等方面制定了一系列標(biāo)準(zhǔn)。工作流管理聯(lián)盟給出的工作流定義是:工作流是指整個或部分經(jīng)營過程在計算機(jī)支持下的全自動或半自動化。在實(shí)際情況下可以更廣泛地把凡是計算機(jī)軟件系統(tǒng)(工作流管理系統(tǒng))控制其執(zhí)行的過程都稱為工作流。
[0003]EDA (Event Driven Architecture,事件驅(qū)動架構(gòu))是 Gartner 在 2003 年提出的一種基于事件的架構(gòu)。在該架構(gòu)中,事件消息獨(dú)立的、松耦合的在組件間發(fā)布或傳遞,且傳遞的各方并不了解對方的存在。EDA這種特點(diǎn)將極大改善對各式各樣、毫無關(guān)聯(lián)的事件的響應(yīng)能力。先進(jìn)EDA技術(shù)已經(jīng)在很多工具中得到了應(yīng)用。
[0004]企業(yè)服務(wù)總線(Enterprise Service Bus, ESB)的概念是從面向服務(wù)體系架構(gòu)(Service Oriented Architecture, SOA)發(fā)展而來的。SOA描述了一種IT基礎(chǔ)設(shè)施的應(yīng)用集成模型;其中的軟構(gòu)件集是以一種定義清晰的層次化結(jié)構(gòu)相互耦合。一個ESB是一個預(yù)先組裝的SOA實(shí)現(xiàn),它包含了實(shí)現(xiàn)SOA分層目標(biāo)所必需的基礎(chǔ)功能部件。而且現(xiàn)有的大多企業(yè)服務(wù)總線產(chǎn)品都是基于事件驅(qū)動開發(fā)的。
[0005]工作流系統(tǒng)發(fā)展到今天,和不同的技術(shù)的結(jié)合已經(jīng)有了很多的嘗試,其中尤其是EDA的引入,很多產(chǎn)品有基于事件驅(qū)動的工作流的功α。比如IBM,就在工作環(huán)境下引入工作流和事件,通過服務(wù)總線完成交互的實(shí)現(xiàn)。Marechaux等人提出利用ESB (EnterpriseService Bus)方式來合并實(shí)踐服務(wù),以實(shí)現(xiàn)對事件的檢測、觸發(fā)以及發(fā)布等。
[0006]但主流的工作流的發(fā)展趨勢仍然是主要解決簡單的工作流問題,對于復(fù)雜的流程的交互的工作環(huán)境的支持并不夠。較多的內(nèi)容由開發(fā)人員使用手寫代碼完成,復(fù)用性并不好?,F(xiàn)在的工作流系統(tǒng)大多引入了事件驅(qū)動的概念,但是支持并不完善,只是簡單的部分的解決了對于單個工作流的支持,而且并不包括代碼自動生成和自動化部署,不支持事件的建模。而對于事件的完美支持,可以很好的解決工作流之間的邏輯耦合問題。
[0007]復(fù)雜的流程環(huán)境不管是對于設(shè)計者和開發(fā)者都是一個挑戰(zhàn),而不難看出,對于復(fù)雜的工作環(huán)境,主要需要解決的問題是保證邏輯準(zhǔn)確的情況下,如何更好的協(xié)同合作的問題,而且,其中引發(fā)的關(guān)于某些開發(fā)內(nèi)容需要復(fù)用的問題,也是不容忽視的。
【發(fā)明內(nèi)容】
[0008]本發(fā)明要解決的技術(shù)問題是:了減少流程之間的邏輯耦合,以減輕流程設(shè)計人員在設(shè)計之初的邏輯負(fù)擔(dān)。
[0009]為實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明提供了一種基于事件的工作流間協(xié)作的系統(tǒng),包括:
[0010]交互單元、處理單元、分發(fā)單元;
[0011]所述交互單元分別與所述處理單元和總線通信連接,所述分發(fā)單元分別與所述處理單元、工作流引擎、所述交互單元通信連接;
[0012]所述交互單元接收所述總線發(fā)送的消息濾除其中的事件傳送給所述處理單元,所述處理單元根據(jù)事件路由表對交互單元傳遞過來的數(shù)據(jù)判定,判定時間消息的層次級別,并提交至分發(fā)單元,所述分發(fā)單元根據(jù)事件層次級別,將消息轉(zhuǎn)發(fā)給流程引擎或者通過交互單元發(fā)送至總線。
[0013]其中較優(yōu)地,所述交互單元包括:
[0014]總線消息交互模塊、內(nèi)部消息交互模塊、事件過濾模塊、和消息解析模塊;
[0015]所述總線消息交互模塊與總線建立連接向總線訂閱交互事件,向總線接收或發(fā)送事件;所述消息解析模塊接收交互單元傳輸?shù)南⒑蠼馕霾魉椭潦录^濾模塊,過濾后發(fā)送到內(nèi)部消息交互模塊,內(nèi)部消息交互模塊發(fā)送至所述處理單元;內(nèi)部消息交互模塊接受分發(fā)單元的消息,再將消息發(fā)到解析模塊封裝,然后由總線消息交互模塊發(fā)出,再發(fā)送至總線。
[0016]其中較優(yōu)地,所述處理單元包括:
[0017]持久化模塊、綁定模塊和路由模塊;
[0018]所述路由模塊與所述持久化模塊、所述綁定模塊通信連接;
[0019]綁定模塊用于綁定流程引擎,對工作流引擎進(jìn)行實(shí)時監(jiān)控,解析其中的流程信息,節(jié)點(diǎn)信息和事件信息,在系統(tǒng)初始化時,進(jìn)行綁定,并把信息交給路由模塊處理;
[0020]路由模塊解析流程信息和時間信息,構(gòu)建全局視圖,進(jìn)行事件路由;
[0021 ] 持久化模塊,在整個系統(tǒng)中需要對事件表存儲。
[0022]其中較優(yōu)地,所述分發(fā)單元包括:消息封裝模塊和消息發(fā)送模塊;
[0023]其中消息封裝模塊先對事件消息解析,根據(jù)事件的層次定位到消息的目的地,然后將消息封裝成可用的結(jié)構(gòu),將其遞交給消息發(fā)送模塊;消息發(fā)送模塊將消息傳遞給指定的模塊。
[0024]另一方面,本發(fā)明還提供一種基于事件的工作流間協(xié)作的方法,包括如下步驟:綁定工作流引擎,綁定總線;
[0025]解析業(yè)務(wù)流程管理模型,得到各節(jié)點(diǎn)的屬性信息,流程信息和事件信息;
[0026]對工作流引擎實(shí)時監(jiān)控,獲取事件消息;
[0027]根據(jù)事件消息生成與對應(yīng)的事件路由表;
[0028]根據(jù)所述事件路由表,對每次的事件通信進(jìn)行路由。
[0029]其中較優(yōu)地,所述根據(jù)所述事件路由表,對每次的事件通信進(jìn)行路由的步驟具體包括:
[0030]S1:對工作流引擎進(jìn)行實(shí)時監(jiān)控,獲取事件消息;
[0031]S2:根據(jù)當(dāng)前事件消息比對事件路由表;如有相應(yīng)的事件,則執(zhí)行S3,否則執(zhí)行S40
[0032]S3.根據(jù)事件路由表上的指定信息,將封裝好的事件消息,發(fā)送到分發(fā)單元。
[0033]S4.在事件路由表中注冊當(dāng)前事件消息的內(nèi)容,返回SI ;
[0034]S5.分發(fā)單元根據(jù)事件消息的目的地,將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn);
[0035]S6.交互單元將事件消息封裝,發(fā)送給總線系統(tǒng)。
[0036]其中較優(yōu)地,所述將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn)的步驟具體包括:
[0037]判斷是否有流程實(shí)例;
[0038]若無流程實(shí)例,則根據(jù)流程啟動相應(yīng)的流程實(shí)例,再發(fā)送;
[0039]若流程實(shí)例不在本流程引擎內(nèi)部,則分發(fā)給交互單元處理。
[0040]其中較優(yōu)地,所述分發(fā)單元根據(jù)事件消息的目的地,將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn)的具體步驟包括:
[0041]處理單元解析事件消息,判斷事件路由表是否中是否有處理這個事件消息的條件;
[0042]如果有處理這個事件消息的條件,則交給分發(fā)單元,由分發(fā)單元將消息給目標(biāo)流程實(shí)例;
[0043]如果無處理這個事件消息的條件,則交給交互單元,由交互單元發(fā)給總線,去尋找其他流程引擎。
[0044]本發(fā)明提供的基于事件的工作流間協(xié)作的和方法,具有良好的易用性,不改變有用系統(tǒng),即插即用。本發(fā)明具有良好的可擴(kuò)展性,基于本系統(tǒng)的核心特征,對于不同近期可以輕量級的適配,可擴(kuò)展性高。高效性,本系統(tǒng)可以大大減輕流程設(shè)計人員的工作,具有很好的高效性。
【專利附圖】
【附圖說明】
[0045]圖1為本發(fā)明實(shí)施例的工作流間協(xié)作的系統(tǒng)的結(jié)構(gòu)示意圖;
[0046]圖2為本發(fā)明系統(tǒng)的交互單元組成結(jié)構(gòu)示意圖;
[0047]圖3為本發(fā)明系統(tǒng)的處理單元的組成示意圖;
[0048]圖4為本發(fā)明實(shí)施例的工作流間協(xié)作的方法的示意圖;
[0049]圖5為本發(fā)明系統(tǒng)的業(yè)務(wù)流程環(huán)境的示意圖;
[0050]圖6為本發(fā)明實(shí)施例的流程間協(xié)作示意圖;
[0051]圖7為供暖系統(tǒng)報警流程與保修流程協(xié)作實(shí)例示意圖;
[0052]圖8為供暖系統(tǒng)保修流程與審計流程協(xié)作實(shí)例示意圖。
【具體實(shí)施方式】
[0053]下面結(jié)合附圖和實(shí)施例,對本發(fā)明的【具體實(shí)施方式】作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
[0054]如圖1所示,本發(fā)明提供一種基于事件的工作流間協(xié)作的系統(tǒng),包括:交互單元、處理單元、分發(fā)單元;所述交互單元分別與所述處理單元和總線通信連接,所述分發(fā)單元分別與所述處理單元、工作流引擎、所述交互單元通信連接;所述交互單元接收所述總線發(fā)送的消息濾除其中的事件傳送給所述處理單元,所述處理單元根據(jù)事件路由表對交互單元傳遞過來的數(shù)據(jù)判定,判定時間消息的層次級別,并提交至分發(fā)單元,所述分發(fā)單元根據(jù)事件層次級別,將消息轉(zhuǎn)發(fā)給流程引擎或者通過交互單元發(fā)送至總線。下面對本發(fā)明提供的基于事件的工作流間協(xié)作的系統(tǒng)展開詳細(xì)的說明。
[0055]如圖2所示,交互單元包括:總線消息交互模塊、內(nèi)部消息交互模塊、事件過濾模塊、和消息解析模塊;所述總線消息交互模塊與總線建立連接向總線訂閱交互事件,向總線接收或發(fā)送事件,并接受分發(fā)單元路由過來的消息;所述事件過濾模塊用于對接收到的原始事件進(jìn)行過濾,濾除事件中的噪聲,過濾事件的不同層次,判斷事件是否需要向下傳遞;所述消息解析模塊用于事件的解析、整合,將其傳換成統(tǒng)一的消息格式,并傳遞給處理單元進(jìn)行下一步處理。具體地:
[0056]交互單元包含四個模塊:總線消息交互模塊、內(nèi)部消息交互模塊、事件過濾模塊和消息解析模塊。其中總線消息交互模塊,與總線系統(tǒng)建立連接,向總線系統(tǒng)訂閱交互消息事件,向總線系統(tǒng)接收或者發(fā)送事件,并且接收分發(fā)單元路由過來的消息;事件過濾模塊用于對接到的原始事件進(jìn)行過濾,濾除事件噪聲,只留下有意義的、與業(yè)務(wù)邏輯緊密相關(guān)的事件,過濾事件的不同層次,判斷事件是否需要向下傳遞;消息解析模塊用于事件的解析、整合,將其傳換成統(tǒng)一的消息格式,并傳遞給處理單元進(jìn)行下一步處理。
[0057]總線消息交互單元是一個發(fā)布/訂閱消息系統(tǒng)的客戶端,總線作為一種透明的結(jié)構(gòu),鏈接不同系統(tǒng)間的總線消息接收模塊。發(fā)布/訂閱是一種消息范式,消息的發(fā)送者把將要發(fā)布的消息標(biāo)記為不同的類別,不需要知道具體的接收者,接收者只需要訂閱這個消息類別就可以接收到這個消息。訂閱者可以對一個或多個類別感興趣,只需接收感興趣的消息,同樣不需要知道發(fā)布者到底是什么。這種發(fā)布者和訂閱者的解耦帶來了更好的可擴(kuò)放性和更為動態(tài)的網(wǎng)絡(luò)拓?fù)洹?br>
[0058]系統(tǒng)初始化時,總線消息交互單元會綁定總線系統(tǒng),訂閱感興趣的主題。當(dāng)總線系統(tǒng)接收到同主題的數(shù)據(jù)時,將數(shù)據(jù)轉(zhuǎn)發(fā)給交互單元的總線消息交互單元。總線消息交互單元將數(shù)據(jù)轉(zhuǎn)發(fā)至處理單元,處理單元的路由模塊調(diào)用事件過濾模塊對接收到的消息過濾,事件過濾模塊會對接收到的消息進(jìn)行過濾。事件層次過濾模塊的實(shí)質(zhì)是一個事件處理引擎。由于發(fā)布訂閱模式對于主題的要求,系統(tǒng)會接收所有消息,如果對它們?nèi)慷歼M(jìn)行處理,既無必要,也會浪費(fèi)寶貴的計算資源。在此模塊內(nèi)部過濾消息層次,排除不需要處理的事消息。事件過濾模塊利用事件處理引擎,根據(jù)工作流事件的匹配規(guī)則過濾事件。最后,消息解析模塊把這些已過濾的事件發(fā)送給消息解析模塊,由消息解析模塊整合成特定的事件消息格式,以供處理單元處理。
[0059]如圖3所示,所述處理單元包括:持久化模塊、綁定模塊和路由模塊;所述路由模塊與所述持久化模塊、所述綁定模塊通信連接;綁定模塊用于綁定流程引擎,對流程引擎進(jìn)行實(shí)時監(jiān)控,解析其中的流程信息,節(jié)點(diǎn)信息和事件信息,在系統(tǒng)初始化時,進(jìn)行綁定,并把信息交給路由模塊處理;路由模塊解析流程信息和時間信息,構(gòu)建全局視圖,進(jìn)行事件路由;持久化模塊,在整個系統(tǒng)中需要對事件表存儲。具體地:
[0060]處理單元包含三個模塊:持久化模塊、綁定模塊和路由模塊。綁定模塊用于綁定流程引擎,對流程引擎進(jìn)行實(shí)時監(jiān)控,解析其中的流程信息,節(jié)點(diǎn)信息和事件信息,在系統(tǒng)初始化時,進(jìn)行綁定,并把信息交給路由模塊處理。路由模塊在系統(tǒng)中位于核心位置,其工作內(nèi)容包括,解析流程信息和時間信息,構(gòu)建全局視圖,進(jìn)行事件路由。最后是,持久化模塊,在整個系統(tǒng)中需要對事件表存儲。處理單元的大致步驟如下:
[0061]1.初始化系統(tǒng),初始的事件路由表由設(shè)計人員導(dǎo)入。綁定流程引擎,將初始化的流程信息和事件信息初始化到工作內(nèi)存中;
[0062]2.持續(xù)對流程引擎進(jìn)行監(jiān)控,監(jiān)控流程實(shí)例發(fā)出的事件消息,實(shí)時更新事件表,并將事件表存儲;
[0063]3.整合流程信息和事件信息,呈現(xiàn)全局化的事件表,在系統(tǒng)運(yùn)行過程中以視圖呈現(xiàn);
[0064]4.對于新輸入的事件消息,查閱事件表,從而整合事件消息的層次,然后將事件消息送到分發(fā)單元。
[0065]分發(fā)單元主要包含兩個模塊:消息封裝模塊和消息發(fā)送模塊。其中消息封裝模塊先對事件消息解析,根據(jù)事件的層次定位到消息的目的地,然后將消息封裝成可用的結(jié)構(gòu),將其遞交給消息發(fā)送模塊;消息發(fā)送模塊將消息傳遞給指定的模塊。
[0066]為進(jìn)一步體現(xiàn)本發(fā)明提供的基于事件的工作流間協(xié)作的系統(tǒng)的優(yōu)越性,本發(fā)明還提供一種應(yīng)用上述系統(tǒng)的基于事件的工作流間協(xié)作的方法,如圖4所示,該方法包括如下步驟:綁定工作流引擎,綁定總線;解析業(yè)務(wù)流程管理模型,得到各節(jié)點(diǎn)的屬性信息,流程信息和事件信息;對工作流引擎實(shí)時監(jiān)控,生成全局事件表,生成數(shù)據(jù)持久數(shù)據(jù);根據(jù)各節(jié)點(diǎn)的所述流程信息,節(jié)點(diǎn)信息和事件信息,生成顯示數(shù)據(jù)并顯示;根據(jù)所述流程信息,節(jié)點(diǎn)信息以及所述視顯示數(shù)據(jù),對事件信息路由處理。下面對本發(fā)明提供的基于事件的工作流間協(xié)作的方法展開詳細(xì)的說明。
[0067]步驟101:分發(fā)單元綁定流程引擎,交互單元綁定總線。
[0068]具體地,處理單元中的綁定模塊解析連接流程引擎,保持實(shí)時通信。所述綁定模塊,連接到流程引擎,并持續(xù)監(jiān)控,實(shí)時控制數(shù)據(jù)。
[0069]步驟102:處理單元解析業(yè)務(wù)管理流程模型,解析JBPM流程模型,得到各節(jié)點(diǎn)的屬性信息、流程信息和事件信息。
[0070]具體地,解析業(yè)務(wù)流程處理裝置中的業(yè)務(wù)流程管理模型JBPMJ得到各節(jié)點(diǎn)的屬性信息。屬性信息包括:節(jié)點(diǎn)名稱、任務(wù)的執(zhí)行者、節(jié)點(diǎn)的迀移路徑。其中,節(jié)點(diǎn)的迀移路徑可以是一條或者多條。
[0071]解析所述業(yè)務(wù)流程管理模型JBPM,得到事件信息;其中,事件信息是工作流建模過程中加入的事件信息。
[0072]步驟103:處理單元中的綁定模塊對流程引擎實(shí)時監(jiān)控,生成全局事件表,并保存。
[0073]具體地,所述根據(jù)所述業(yè)務(wù)數(shù)據(jù)表,并保存數(shù)據(jù),包括:根據(jù)所述事件表的數(shù)據(jù)結(jié)構(gòu),生成與所述事件表對應(yīng)的Pojo類文件、Hibernate映射文件、Service類文件、Dao類文件、業(yè)務(wù)配置文件。上述方案中,與所述全局事件表對應(yīng)是指與所述全局事件表的名稱相對應(yīng)。這里,在Service類文件中,需引用與其名稱相對應(yīng)的Dao類文件的一個實(shí)例。
[0074]上述方案中,生成與所述業(yè)務(wù)數(shù)據(jù)表對應(yīng)的Pojo類文件,具體為:獲取全局事件表的字段類型和字段名稱;向Pojo類文件中寫入與所述全局事件表的字段類型和字段名稱對應(yīng)的屬性信息,同時寫入每個屬性信息所對應(yīng)的獲取(getter)應(yīng)用和設(shè)置(setter)應(yīng)用。
[0075]步驟104:處理單元中的路由模塊根據(jù)各節(jié)點(diǎn)的所述流程信息,節(jié)點(diǎn)信息和事件信息,生成顯示數(shù)據(jù)并顯示。
[0076]優(yōu)選地,所述根據(jù)所述流程信息,節(jié)點(diǎn)信息和事件信息,生成顯示數(shù)據(jù)并顯示的具體步驟包括:根據(jù)所述流程信息,節(jié)點(diǎn)信息和事件信息,生成超文本標(biāo)記語言Html標(biāo)簽;基于所述Html標(biāo)簽,生成顯示數(shù)據(jù)并顯示。
[0077]步驟105:處理單元根據(jù)所述流程信息,節(jié)點(diǎn)信息以及所述顯示數(shù)據(jù),對事件消息路由。
[0078]處理流程的方法的整體步驟包括:
[0079]S1.流程實(shí)例運(yùn)轉(zhuǎn)到某一任務(wù)節(jié)點(diǎn),任務(wù)節(jié)點(diǎn)產(chǎn)生事件消息。事件消息形如(ID,eventID,name, proinstanceID, taskID, VARIABLES, act1n)。
[0080]S2.處理單元中的綁定模塊監(jiān)控到事件消息,交給路由模塊,路由模塊比對事件路由表。如有相應(yīng)的事件,貝1J進(jìn)入3,否則進(jìn)入4。其中,路由表形如(ID, eventID, condit1n,act1n),ID與事件消息對應(yīng),貝U表示同一事件會導(dǎo)向同一個流程,eventID與事件消息對應(yīng),貝Ij表示同一個流程實(shí)例,將唯一導(dǎo)向同一流程實(shí)例,condit1n和act1n表征條件及動作。
[0081]S3.根據(jù)事件路由表上的指定信息,將封裝好的事件消息,發(fā)送到分發(fā)單元。封裝后的事件消息形如(Content,Event),Content表征事件消息的內(nèi)容及類型,Event為原事件消息。
[0082]S4.本事件消息的內(nèi)容在事件路由表中注冊,包括流程實(shí)例信息。此時發(fā)出事件消息的流程實(shí)例,處于掛起狀態(tài),直到綁定模塊監(jiān)控到了相應(yīng)的事件消息,從而根據(jù)事件路由表中的注冊信息再次激活流程實(shí)例。這種激活的行為,是通過設(shè)計人員對全局視圖的觀察,發(fā)現(xiàn)需要處理的事件消息,設(shè)計并啟動相應(yīng)的流程實(shí)例達(dá)到的。
[0083]S5.分發(fā)單元根據(jù)事件消息的目的地,將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn),若無流程實(shí)例,則根據(jù)流程啟動相應(yīng)的流程實(shí)例,再發(fā)送。若流程實(shí)例不在本流程引擎內(nèi)部,則分發(fā)給交互單元處理。
[0084]S6.交互單元將事件消息封裝,發(fā)送給總線系統(tǒng),經(jīng)總線系統(tǒng)路由,發(fā)送給知道的流程引擎。封裝后的事件消息形如(Topic,Message),topic內(nèi)封裝了 Content和單獨(dú)的表征事件類型的Type信息,Message內(nèi)封裝的是Eevent。
[0085]S7.指定的流程引擎的交互單元接收到消息后,解析交給處理單元,其后續(xù)行為同步驟S2及其以下。
[0086]優(yōu)選地,對事件消息路由的具體步驟包括:
[0087]針對每個節(jié)點(diǎn),根據(jù)所述節(jié)點(diǎn)的信息、相應(yīng)的流程信息和時間信息,生成與所述節(jié)點(diǎn)對應(yīng)的事件路由表;處理單元根據(jù)所述事件路由表,對每次的事件通信進(jìn)行路由,具體步驟如圖5,分對外路由和對內(nèi)路由。
[0088]優(yōu)選地,所述根據(jù)所述對事件的路由,分為靜態(tài)路由和動態(tài)路由,其中事件消息的結(jié)構(gòu)描述為:
[0089]E = (ID, eventID, name, proinstanceID, taskID, VARIABLES, act1n),其中:ID,為事件實(shí)例標(biāo)識符,在流程引擎中唯一標(biāo)識一個事件,在事件發(fā)起時由系統(tǒng)自動產(chǎn)生;eVentID,為事件標(biāo)識符,在事件路由表中定義,在事件流通過程中,標(biāo)識事件的行為;name,事件消息的名字;proinstanceID,為流程實(shí)例標(biāo)識符,接收事件時定位到指定流程;taskID,為活動節(jié)點(diǎn)標(biāo)識符,接收事件時定位到指定活動節(jié)點(diǎn);VARIABLES,為業(yè)務(wù)數(shù)據(jù)的數(shù)組,在發(fā)出事件時,指定各字段的名,在接收事件時,指定各字段的值;act1n,預(yù)留字段,在事件消息需要定位時目標(biāo)節(jié)點(diǎn)時,幫助消息定位任務(wù)節(jié)點(diǎn)。
[0090]處理事件消息的靜態(tài)路由處理過程具體過程包括:
[0091]S201:流程實(shí)例產(chǎn)生事件消息,將事件消息交給處理單元;
[0092]S202:處理單元解析事件消息,判斷事件路由表是否中是否有處理這個事件消息的條件,在這里靜態(tài)路由意味著對于事件的處理已經(jīng)嵌入到路由表中;
[0093]S203:如S202中的消息,如果是目標(biāo)在本流程引擎內(nèi),則交給分發(fā)單元,由分發(fā)單元將消息給目標(biāo)流程實(shí)例;
[0094]S204:如S202中的消息,如果是目標(biāo)在其他流程引擎,則交給交互單元,由交互單元發(fā)給總線,去尋找其他流程引擎。
[0095]處理事件消息的動態(tài)路由處理過程具體過程包括:
[0096]S301:流程實(shí)例產(chǎn)生事件消息,將事件消息交給處理單元;
[0097]S302:處理單元解析事件消息,判斷事件路由表是否中是否有處理這個事件消息的條件,在這里靜態(tài)路由意味著對于事件的處理未嵌入到路由表中;
[0098]S303:通過流程人員對全局事件的監(jiān)控,對于可以處理的事件項(xiàng)目,生成單獨(dú)的流程實(shí)例處理事件路由表中的路由項(xiàng),其具體過程怎等同于靜態(tài)路由的處理過程。
[0099]下面以供暖系統(tǒng)為例,對本發(fā)明實(shí)施案例的流程間協(xié)作方法做進(jìn)一步的說明。圖6為本發(fā)明實(shí)施例的流程間協(xié)作系統(tǒng)在工作流系統(tǒng)中的位置示意圖,供暖系統(tǒng)主要有四大塊組成,報警流程工作流引擎,報修流程工作流引擎,計費(fèi)工作流引擎和審計工作流引擎。四大工作流引擎由于安全的考慮或者是歷史問題,未能集成到同一工作流引擎,所以應(yīng)用本工作流間協(xié)作系統(tǒng),對原有工作流引擎進(jìn)行組合。報警流程會觸發(fā)報修流程,通知啟動報修流程,報修流程會涉及到計費(fèi)問題和審計問題。
[0100]本系統(tǒng)的宗旨在于不破壞原有工作流引擎,對現(xiàn)有異構(gòu)工作流引擎進(jìn)行交互。所以在工作流引擎初始化階段主要有兩階段的工作,
[0101]在工作流設(shè)計階段,在原有設(shè)計工具中加入事件化工作流節(jié)點(diǎn),〈event form ="EVENT"eventId = "00030"condit1n = ""act1n = ""g = 〃219,179, 104, 52"name ="報修"Xtransit1n to = 〃派遣維修員〃/>〈/event>,審計任務(wù)節(jié)點(diǎn)插入原來設(shè)計的工作流程的不同任務(wù)節(jié)點(diǎn)中間,不影響原有工作流工作。在工作流引擎業(yè)務(wù)數(shù)據(jù)庫中加入EVENT數(shù)據(jù)庫表單,工作流引擎API中加入對event節(jié)點(diǎn)的操作,其主要有四個屬性值eventld,condit1n,act1n,name,通過API在流程中任務(wù)節(jié)點(diǎn)的流轉(zhuǎn)過程中,將屬性值存入數(shù)據(jù)庫,持久化模塊監(jiān)控數(shù)據(jù)庫,以后續(xù)的使用。name屬性寬泛表征事件消息,便于第一次過濾,比如報修事件,有報修啟動和報修結(jié)束,若流程實(shí)例只接收報修事件則可以將其他事件均忽略,在流程內(nèi)部再對啟動和結(jié)束事件進(jìn)行篩選。event Id對事件消息精準(zhǔn)比對。condit1n代表事件消息的動作的條件,空值表示廣播,act1n代表事件消息的動作。在流程設(shè)計階段的事件任務(wù)節(jié)點(diǎn),其事件消息是發(fā)送的消息,act 1n屬性一般為空值,由流程引擎API在工作流程中任務(wù)節(jié)點(diǎn)運(yùn)轉(zhuǎn)過程中填充。
[0102]另外對于新設(shè)計的工作流,可以利用改造的工作流設(shè)計工具,普通的任務(wù)節(jié)點(diǎn)加入了事件消息功會K。〈task candidate-groups = "accepters^eventForm =〃EVENT〃eventName = 〃 報修"condit1n = "out"act1n = 〃"g = "219,179, 104, 52"name=〃受理報修〃Xtransit1n to = 〃派遣維修員〃/X/task>。本task節(jié)點(diǎn)自帶了事件消息,對于原有的工作流引擎API,加入了對其四個屬性的功能。其屬性值同上。
[0103]持久化模塊要監(jiān)控數(shù)據(jù)庫,對事件消息實(shí)時處理,其中一部分要在初始化階段初始化內(nèi)部事件路由表單。同樣是根據(jù)報修事件消息,事件表單的一條記錄為(ID ="00030",NAME = 〃 報修 〃,COND = "in",ACT = 〃pid = 1346812397859〃)。事件路由表會以視圖形式呈現(xiàn),管理人員可以對事件路由表監(jiān)控,對于普通的事件消息,事件消息本身帶有的屬性可以完成路由的情況。但是對于一些事件消息中未指明的情況,管理人員可以對于新增加的事件定向,也就是在ACT中加入目標(biāo)流程的彳目息。
[0104]圖7圖8為本系統(tǒng)基本的業(yè)務(wù)流程實(shí)例,圖7為結(jié)合靜態(tài)和動態(tài)路由的基本業(yè)務(wù)流程,下面結(jié)合供暖系統(tǒng)的情況對本發(fā)明實(shí)施例的代碼生成方法做進(jìn)一步詳細(xì)說明。
[0105]步驟701:底層數(shù)據(jù)采集到了報警信號。報警流程工作流引擎對報警信號處理,診斷報警信號,發(fā)出報警音,提醒值班人員。普通的流程引擎一般運(yùn)行到這里。經(jīng)過對報警流程工作流引擎的改造,在報警流程實(shí)例中在觸發(fā)報警音的活動節(jié)點(diǎn),加入發(fā)出報警事件消息。(ID = 0001, eventID = 00040, name = 〃報警 〃,proinstanceID =1346812398840,taskID = 140006)。
[0106]步驟702:處理單元的綁定模塊監(jiān)聽報警流程工作流引擎中的報警事件,綁定模塊將監(jiān)聽到的報警事件發(fā)送至路由模塊,路由模塊比對事件路由。匹配(ID = "00040",NAME = 〃報警",COND = "out",ACT = 〃")。對于沒有初始化注冊到事件路由表的事件和首次出現(xiàn)的事件消息,設(shè)計人員觀察到事件消息后,為事件消息指派動作,并在事件路由表中注冊,同時更新顯示的數(shù)據(jù)。對于本消息,因?yàn)镃OND = "out",ACT為空值,則直接廣播。
[0107]步驟703:路由模塊根據(jù)路由表地址封裝事件消息,交給分發(fā)單元,分發(fā)單元遞交給交互單元,再遞交給總線系統(tǒng),經(jīng)總線系統(tǒng)發(fā)送到指定的報修流程工作流引擎的交互單
J L.ο
[0108]步驟704:處理單元中的路由模塊匹配路由表,發(fā)現(xiàn)(ID = 〃00040〃,NAME = 〃報警〃,COND = "in",ACT = 〃pid = 1346812397869〃),沒有 task_id,所以直接啟動指定 pid的報修流程實(shí)例來處理。
[0109]步驟705:報修流程實(shí)例處理完事件之后,根據(jù)事件消息帶有的task_id(任務(wù)節(jié)點(diǎn)的id同事件消息中的taskID)和pid (任務(wù)節(jié)點(diǎn)的流程實(shí)例id同事件消息中的proinstanceID)原路返回,提示值班人員已經(jīng)處理此報警。
[0110]由此可以看出,對于事件消息的路由分為靜態(tài)和動態(tài),靜態(tài)一般在系統(tǒng)初始化時,會封裝到事件路由表,動態(tài)需要設(shè)計人員對事件消息進(jìn)行指派,指派之后一般會形成固定路徑,從而在下次處理同一事件消息變?yōu)殪o態(tài)。在圖中右側(cè),指明了一種比較常見的事件一對多模式,本系統(tǒng)也有支持。
[0111]圖8涉及到特殊的事件消息傳送,具體過程如下:
[0112]步驟801:報修流程被發(fā)起。維修人員接單的任務(wù)節(jié)點(diǎn),會產(chǎn)生報修啟動事件消息。(ID = 0002, eventID = 00030, name = 〃 報修 〃,proinstanceID = 1346812398840, taskID=130006)ο
[0113]步驟802:處理單元的綁定模塊檢測到報修流程工作流引擎中報修啟動事件消息,處理單元將報修啟動事件消息發(fā)送到路由模塊,路由模塊查閱事件路由表。匹配(ID ="00030",NAME = 〃報修〃,COND = "out",ACT = 〃〃)的路由項(xiàng)。報修啟動事件消息發(fā)送到分發(fā)單元,分發(fā)單元交給交互單元,再由其遞交給總線系統(tǒng),廣播出去消息。由于審計功能和計費(fèi)功能在原始設(shè)計中就有參考,所以在審計流程引擎的路由表的初始化中就加入其中,(ID = "00030",NAME = 〃 報修",COND = 〃in",ACT = "pid = 1366812297860,task_id = 1600")。對于審計流程,系統(tǒng)運(yùn)行后審計流程實(shí)例隨即啟動,交互單元收到報修事件消息,交給路由模塊直接找到到相應(yīng)任務(wù)節(jié)點(diǎn),再由分發(fā)單元發(fā)送到相應(yīng)的任務(wù)節(jié)點(diǎn)。報修消息會在審計流程實(shí)例的報修任務(wù)節(jié)點(diǎn)中記錄。
[0114]步驟803:報修啟動消息經(jīng)如上同樣的流程,經(jīng)本系統(tǒng)發(fā)送到計費(fèi)流程引擎。
[0115]步驟804:計費(fèi)流程引擎中的處理單元接收到消息后,匹配路由表(ID = "00030",NAME = 〃 報修 〃,COND = "in",ACT = "pid = 1346812398845〃),交給分發(fā)單元,分發(fā)單元啟動計費(fèi)流程實(shí)例。
[0116]步驟805:報修流程處理完后,產(chǎn)生報修結(jié)束事件。(ID = 0003,eventID =00031, name = 〃 報修結(jié)束 ”,proinstanceID = 1346812398840, taskID = 130008)路由方式同報修啟動消息,但是在匹配路由表中(ID = "00030",NAME = 〃報修",COND ="answer",ACT = 〃〃),由于COND = "answer",本事件消息需要應(yīng)答,所以除了原來的操作還需要在路由表中加入本事件消息(ID = 〃00030〃,NAME = 〃0003〃,C0ND = "answer",ACT=〃1346812398840130008〃)。同時審計流程引擎接收消息并處理這一事件的方式同報修啟動事件一致。
[0117]步驟806:計費(fèi)流程接收消息并處理。在接收到報修結(jié)束消息之后,計費(fèi)完成,產(chǎn)生完成計費(fèi)事件消息(ID = 0001, eventID = 00040, name = 〃 計費(fèi)完成 〃,proinstanceID=350002,taskID = 300006,act 1n = "1346812398840130008")。本事件消息經(jīng)過計費(fèi)流程引擎的模塊從總線廣播出去,在報修流程引擎中接收到事件消息后,比對路由項(xiàng),對于成功比對的ACT屬性,就定位到了相應(yīng)的任務(wù)節(jié)點(diǎn),再由分發(fā)單元發(fā)送到相應(yīng)的任務(wù)節(jié)點(diǎn)。
[0118]由于審計流程引擎和報修流程引擎的脫離,可以很好的解決安全性問題。在總線系統(tǒng)中,報修事件的消息為(Topic = 〃報修〃,type = 00,Message = event)會有統(tǒng)一的一級標(biāo)題Topic,報警流程引擎,審計流程引擎和計費(fèi)流程引擎,會根據(jù)事件消息中封裝的類型Type屬性,區(qū)分其為報修啟動和報修技術(shù),從而做出不同的操作,或者不做操作,將消息過濾掉。
[0119]綜上所述,本發(fā)明提供的基于事件的工作流間協(xié)作的系統(tǒng)和方法有以下兩方面的優(yōu)點(diǎn)。
[0120]第一方面、總線環(huán)境下消息驅(qū)動與不同的流程間相融合,從而達(dá)到不同流程間的交互??偩€技術(shù)利于透明傳輸,基于發(fā)布/訂閱的消息傳遞可以盡可能的減少系統(tǒng)的耦合程度,對外提供透明的接口,大大降低了系統(tǒng)的復(fù)雜度,使得整個系統(tǒng)由消息驅(qū)動起來。一旦處置邏輯需要變化,只需要修改相應(yīng)的流程或者web服務(wù),將流程重新部署即可,不會影響系統(tǒng)自身,最大限度體現(xiàn)了系統(tǒng)的靈活性和異構(gòu)性。分散不同的邏輯到不同的流程中,利用設(shè)計。
[0121]第二方面、事件處理方式的應(yīng)用。由于業(yè)務(wù)邏輯的不斷復(fù)雜,對流程的要求也越來越多,無法提供合適的流程粒度,事件驅(qū)動的流程引擎,好處就在于可以解耦流程與流程節(jié)點(diǎn),并且使用事件處理技術(shù),可以從原子事件中提取、過濾出有價值的、有意義的基本事件,或者更進(jìn)一步,將基本事件組合成復(fù)雜事件,這也就是時間分層。系統(tǒng)可以有針對性的對這些事件進(jìn)行分析處理,將系統(tǒng)的其他單元從海量事件中解放出來,同時也達(dá)到了計算資源的更高效使用。
[0122]以上實(shí)施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關(guān)【技術(shù)領(lǐng)域】的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
【權(quán)利要求】
1.一種基于事件的工作流間協(xié)作的系統(tǒng),其特征在于,包括: 交互單元、處理單元、分發(fā)單元; 所述交互單元分別與所述處理單元和總線通信連接,所述分發(fā)單元分別與所述處理單元、工作流引擎、所述交互單元通信連接; 所述交互單元接收所述總線發(fā)送的消息濾除其中的事件傳送給所述處理單元,所述處理單元根據(jù)事件路由表對交互單元傳遞過來的數(shù)據(jù)判定,判定時間消息的層次級別,并提交至分發(fā)單元,所述分發(fā)單元根據(jù)事件層次級別,將消息轉(zhuǎn)發(fā)給流程引擎或者通過交互單元發(fā)送至總線。
2.如權(quán)利要求1所述的工作流間協(xié)作的系統(tǒng),其特征在于,所述交互單元包括: 總線消息交互模塊、內(nèi)部消息交互模塊、事件過濾模塊、和消息解析模塊; 所述總線消息交互模塊與總線建立連接向總線訂閱交互事件,向總線接收或發(fā)送事件;所述消息解析模塊接收交互單元傳輸?shù)南⒑蠼馕霾魉椭潦录^濾模塊,過濾后發(fā)送到內(nèi)部消息交互模塊,內(nèi)部消息交互模塊發(fā)送至所述處理單元;內(nèi)部消息交互模塊接受分發(fā)單元的消息,再將消息發(fā)到解析模塊封裝,然后由總線消息交互模塊發(fā)出,再發(fā)送至總線。
3.如權(quán)利要求1所述的工作流間協(xié)作的系統(tǒng),其特征在于,所述處理單元包括: 持久化模塊、綁定模塊和路由模塊; 所述路由模塊與所述持久化模塊、所述綁定模塊通信連接; 綁定模塊用于綁定流程引擎,對工作流引擎進(jìn)行實(shí)時監(jiān)控,解析其中的流程信息,節(jié)點(diǎn)信息和事件信息,在系統(tǒng)初始化時,進(jìn)行綁定,并把信息交給路由模塊處理; 路由模塊解析流程信息和時間信息,構(gòu)建全局視圖,進(jìn)行事件路由; 持久化模塊,在整個系統(tǒng)中需要對事件表存儲。
4.如權(quán)利要求1所述的工作流間協(xié)作的系統(tǒng),其特征在于,所述分發(fā)單元包括:消息封裝模塊和消息發(fā)送模塊; 其中消息封裝模塊先對事件消息解析,根據(jù)事件的層次定位到消息的目的地,然后將消息封裝成可用的結(jié)構(gòu),將其遞交給消息發(fā)送模塊;消息發(fā)送模塊將消息傳遞給指定的模塊。
5.一種基于事件的工作流間協(xié)作的方法,其特征在于,包括如下步驟: 綁定工作流引擎,綁定總線; 解析業(yè)務(wù)流程管理模型,得到各節(jié)點(diǎn)的屬性信息,流程信息和事件信息; 對工作流引擎實(shí)時監(jiān)控,獲取事件消息; 根據(jù)事件消息生成與對應(yīng)的事件路由表; 根據(jù)所述事件路由表,對每次的事件通信進(jìn)行路由。
6.如權(quán)利要求5所述的工作流間協(xié)作的方法,其特征在于,所述根據(jù)所述事件路由表,對每次的事件通信進(jìn)行路由的步驟具體包括: 51:對工作流引擎進(jìn)行實(shí)時監(jiān)控,獲取事件消息; 52:根據(jù)當(dāng)前事件消息比對事件路由表;如有相應(yīng)的事件,則執(zhí)行S3,否則執(zhí)行S4。 53.根據(jù)事件路由表上的指定信息,將封裝好的事件消息,發(fā)送到分發(fā)單元。 54.在事件路由表中注冊當(dāng)前事件消息的內(nèi)容,返回SI; 55.分發(fā)單元根據(jù)事件消息的目的地,將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn); 56.交互單元將事件消息封裝,發(fā)送給總線系統(tǒng)。
7.如權(quán)利要求6所述的工作流間協(xié)作的方法,其特征在于,所述將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn)的步驟具體包括: 判斷是否有流程實(shí)例; 若無流程實(shí)例,則根據(jù)流程啟動相應(yīng)的流程實(shí)例,再發(fā)送; 若流程實(shí)例不在本流程引擎內(nèi)部,則分發(fā)給交互單元處理。
8.如權(quán)利要求5所述的工作流間協(xié)作的方法,其特征在于,所述分發(fā)單元根據(jù)事件消息的目的地,將事件消息發(fā)給流程實(shí)例的任務(wù)節(jié)點(diǎn)的具體步驟包括: 處理單元解析事件消息,判斷事件路由表是否中是否有處理這個事件消息的條件; 如果有處理這個事件消息的條件,則交給分發(fā)單元,由分發(fā)單元將消息給目標(biāo)流程實(shí)例; 如果無處理這個事件消息的條件,則交給交互單元,由交互單元發(fā)給總線,去尋找其他流程引擎。
【文檔編號】G06Q10/06GK104517189SQ201410832067
【公開日】2015年4月15日 申請日期:2014年12月26日 優(yōu)先權(quán)日:2014年12月26日
【發(fā)明者】吳步丹, 林榮恒, 劉博超, 陳俊亮 申請人:北京郵電大學(xué)