一種基于eca規(guī)則的服務(wù)組合方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于異構(gòu)數(shù)據(jù)融合及業(yè)務(wù)集成技術(shù)領(lǐng)域,更具體地,涉及一種基于ECA規(guī) 則的服務(wù)組合方法。
【背景技術(shù)】
[0002] 隨著企業(yè)業(yè)務(wù)需求的不斷變化及擴(kuò)充,如何有效整合各企業(yè)及企業(yè)各部門之間的 業(yè)務(wù)資源,滿足用戶多樣性的功能需求,已成為一項(xiàng)日益重要的課題。在這種環(huán)境之下,Web 服務(wù)應(yīng)運(yùn)而生。Web服務(wù)基于一系列底層標(biāo)準(zhǔn),通過(guò)注冊(cè)、發(fā)布及發(fā)現(xiàn)等機(jī)制,將公共的服務(wù) 提供給用戶。以服務(wù)為基礎(chǔ)的架構(gòu)(Service Oriented Architecture, SOA)能夠有效屏蔽 分布式計(jì)算環(huán)境下異構(gòu)的底層環(huán)境,構(gòu)建面向服務(wù)的、松耦合的、靈活的企業(yè)應(yīng)用,因而越 來(lái)越多的企業(yè)將自己的業(yè)務(wù)功能打包成服務(wù)發(fā)布。
[0003] 然而,單一的服務(wù)無(wú)法滿足企業(yè)業(yè)務(wù)快速變化的需求。通過(guò)服務(wù)組合技術(shù),可以將 單一的、細(xì)粒度的服務(wù)通過(guò)有效的編排或重組,能夠生成粗粒度的、復(fù)雜的、具有業(yè)務(wù)價(jià)值 的服務(wù),實(shí)現(xiàn)業(yè)務(wù)增值。在當(dāng)前相關(guān)服務(wù)組合技術(shù)中,以BEA公司、IBM和微軟等提出的業(yè)務(wù) 流程執(zhí)行語(yǔ)言BPEL為代表。BPEL使用XML標(biāo)準(zhǔn)格式來(lái)描述Web服務(wù)如何重組以形成新的 服務(wù),并生成標(biāo)準(zhǔn)文件交由BPEL執(zhí)行引擎部署。隨著企業(yè)業(yè)務(wù)模型日益復(fù)雜及用戶需求的 動(dòng)態(tài)變化,基于BPEL-SOA的架構(gòu)方式已不能滿足應(yīng)用需求。主要表現(xiàn)在如下方面:一方面, 相對(duì)固定的業(yè)務(wù)流程與業(yè)務(wù)邏輯緊耦合,無(wú)法滿足業(yè)務(wù)動(dòng)態(tài)變化的需要;另一方面,服務(wù)本 身缺少主動(dòng)性及協(xié)調(diào)合作的能力。
【發(fā)明內(nèi)容】
[0004] 針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于ECA規(guī)則的服務(wù)組 合方法,其目的在于解決現(xiàn)有服務(wù)組合技術(shù)缺少動(dòng)態(tài)性和主動(dòng)性的問(wèn)題,能實(shí)現(xiàn)以事件驅(qū) 動(dòng)服務(wù)的動(dòng)態(tài)組合,同時(shí)提高了服務(wù)的主動(dòng)性。
[0005] 為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于ECA規(guī)則的服務(wù)組合方法,其特征在于, 包括如下步驟:(1)以XML格式存儲(chǔ)外部服務(wù)對(duì)應(yīng)的基本服務(wù)信息,注冊(cè)外部服務(wù);其中,基 本服務(wù)信息包括服務(wù)名、服務(wù)地址、操作名、輸入消息和輸出消息;(2)以XML格式存儲(chǔ)ECA 規(guī)則,建立事件名到相應(yīng)的ECA規(guī)則的映射表;其中,ECA規(guī)則包括事件名Event、事件觸發(fā) 條件Condition和活動(dòng)流程Activity ;活動(dòng)流程Activity包括基本活動(dòng)BaseActivity和 結(jié)構(gòu)化活動(dòng)StructActivity,其組成分別表示如下:
[0006] BaseActivity = {Receive, Assign, Invoke, Reply, Emit},
[0007] StructActivity = {Sequence, Flow, While, Switch};
[0008] 其中,Receive表示請(qǐng)求輸入活動(dòng),Assign表示參數(shù)賦值活動(dòng),Invoke表示服務(wù)調(diào) 用活動(dòng),Reply表示響應(yīng)輸出活動(dòng),Emit表示事件投遞活動(dòng);Sequence表示順序活動(dòng),F(xiàn)low 表示并行活動(dòng),While表示循環(huán)活動(dòng),Switch表示條件分支活動(dòng);(3)在客戶端請(qǐng)求到達(dá)后, 根據(jù)ECA規(guī)則,解析請(qǐng)求參數(shù)并構(gòu)建事件對(duì)象,將事件對(duì)象投遞到事件通道,形成先入先出 的消息隊(duì)列;(4)事件引擎從事件通道中獲取事件對(duì)象,根據(jù)事件名到相應(yīng)的ECA規(guī)則的映 射表和注冊(cè)的外部服務(wù),解析并執(zhí)行事件對(duì)象。
[0009] 優(yōu)選地,所述步驟(3)進(jìn)一步包括如下子步驟:(3-1)在客戶端請(qǐng)求到達(dá)后,解析 請(qǐng)求參數(shù),并將其序列化為指定的XML格式,得到序列化的XML字符串;其中,該XML格式與 ECA規(guī)則中的活動(dòng)流程Activity中請(qǐng)求輸入活動(dòng)Receive的文本值所定義的格式保持一 致;(3-2)構(gòu)建標(biāo)準(zhǔn)化的事件對(duì)象,標(biāo)準(zhǔn)化的事件對(duì)象包括事件對(duì)象的名稱、數(shù)據(jù)屬性和時(shí) 戳屬性;其中,事件對(duì)象的名稱與ECA規(guī)則中的事件名Event -致,事件對(duì)象的數(shù)據(jù)屬性為 步驟(3-1)得到的序列化的XML字符串,事件對(duì)象的時(shí)戳屬性為創(chuàng)建事件對(duì)象的系統(tǒng)絕對(duì) 時(shí)間;(3-3)將標(biāo)準(zhǔn)化的事件對(duì)象投遞到事件通道,形成先入先出的消息隊(duì)列;其中,在隊(duì) 列為空時(shí),等待事件觸發(fā),并將到達(dá)的事件對(duì)象投遞到隊(duì)尾,隊(duì)列長(zhǎng)度加一;在隊(duì)列為滿時(shí), 若新事件到達(dá)則循環(huán)等待直到隊(duì)列非滿;在隊(duì)列不為空也不為滿時(shí),由事件引擎主動(dòng)從隊(duì) 列頭獲取事件對(duì)象,隊(duì)列長(zhǎng)度減一。
[0010] 優(yōu)選地,所述步驟(4)進(jìn)一步包括如下子步驟:(4-1)事件引擎從事件通道中獲 取事件對(duì)象;(4-2)從事件對(duì)象中獲取事件對(duì)象名稱,檢索事件名到相應(yīng)的ECA規(guī)則的映 射表,獲取與事件對(duì)象名稱匹配對(duì)應(yīng)的ECA規(guī)則;(4-3)獲取ECA規(guī)則中的事件觸發(fā)條件 Condition,判斷是否滿足事件觸發(fā)條件Condition,是則順序執(zhí)行步驟(4-4);否則流程結(jié) 束;(4-4)遍歷活動(dòng)流程Activity,創(chuàng)建整個(gè)活動(dòng)流程所需的服務(wù)調(diào)用實(shí)例列表;(4-5)將 整個(gè)活動(dòng)流程作為一個(gè)可執(zhí)行的樹(shù)形結(jié)構(gòu),其中,葉子節(jié)點(diǎn)對(duì)應(yīng)基本活動(dòng),非葉子節(jié)點(diǎn)對(duì)應(yīng) 結(jié)構(gòu)化活動(dòng),從活動(dòng)流程Activity的根節(jié)點(diǎn)開(kāi)始,解析并執(zhí)行活動(dòng)節(jié)點(diǎn),直至遇到出口節(jié) 點(diǎn)響應(yīng)客戶端請(qǐng)求并結(jié)束整個(gè)活動(dòng)流程。
[0011] 優(yōu)選地,所述步驟(4-4)進(jìn)一步包括如下子步驟:(4-4-1)遍歷活動(dòng)流程 Activity,匹配服務(wù)調(diào)用活動(dòng)Invoke,提取活動(dòng)名稱、服務(wù)名和操作名等屬性信息,根據(jù) 服務(wù)名和操作名獲取該服務(wù)對(duì)應(yīng)操作的輸入消息和輸出消息;(4-4-2)將整個(gè)活動(dòng)流程 Activity作為一個(gè)新服務(wù),其輸入消息格式為Receive活動(dòng)的值,其輸出消息格式為Reply 活動(dòng)的值;(4-4-3)建立服務(wù)實(shí)例的活動(dòng)名稱到其輸入消息和輸出消息格式的映射表。
[0012] 優(yōu)選地,所述步驟(4-5)中,若當(dāng)前活動(dòng)節(jié)點(diǎn)為Sequnce、Flow、While或Switch, 則按照相應(yīng)的控制規(guī)則執(zhí)行其活動(dòng)子節(jié)點(diǎn);若當(dāng)前活動(dòng)節(jié)點(diǎn)為Receive、Assign、Invoke或 Emit,則執(zhí)行其功能函數(shù);若當(dāng)前活動(dòng)節(jié)點(diǎn)為Reply,則根據(jù)活動(dòng)流程Activity的名稱屬 性,在步驟(4-4)創(chuàng)建的服務(wù)調(diào)用實(shí)例列表中提取輸出消息,最后將輸出消息封裝成完整 的SOAP消息返回給客戶端,完成響應(yīng)過(guò)程。
[0013] 總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效 果:引入事件-條件-動(dòng)作(Event-Condition-Action,ECA)規(guī)則,能實(shí)現(xiàn)以事件驅(qū)動(dòng)服務(wù) 的動(dòng)態(tài)組合:當(dāng)外部業(yè)務(wù)邏輯發(fā)生變化時(shí),只需要?jiǎng)討B(tài)修改ECA規(guī)則即可實(shí)現(xiàn)服務(wù)功能的 更新;ECA規(guī)則所綁定的活動(dòng)流程在執(zhí)行過(guò)程中會(huì)根據(jù)活動(dòng)運(yùn)行情況觸發(fā)新事件,進(jìn)行嵌 套調(diào)用或異常通知,提高了服務(wù)的主動(dòng)性。
【附圖說(shuō)明】
[0014] 圖1是本發(fā)明實(shí)施例的基于ECA規(guī)則的服務(wù)組合方法流程圖;
[0015] 圖2是解析服務(wù)描述文檔WSDL所對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0016] 圖3是本發(fā)明實(shí)施例的方法中步驟⑶的細(xì)化流程圖;
[0017] 圖4是本發(fā)明實(shí)施例的方法中步驟(4)的細(xì)化流程圖。
【具體實(shí)施方式】
[0018] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì) 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要 彼此之間未構(gòu)成沖突就可以相互組合。
[0019] 如圖1所示,本發(fā)明實(shí)施例的基于ECA規(guī)則的服務(wù)組合方法包括如下步驟:
[0020] (1)加載外部服務(wù)描述文檔WSDL,以XML格式存儲(chǔ)外部服務(wù)對(duì)應(yīng)的基本服務(wù)信息, 注冊(cè)外部服務(wù),其中,基本服務(wù)信息包括服務(wù)名、服務(wù)地址、操作名、輸入消息和輸出消息。
[0021] 具體地,根據(jù)文件路徑名加載外部服務(wù)描述文檔WSDL,將WSDL解析為DOM節(jié)點(diǎn)樹(shù) 形式后,