一種基于aop的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)及方法
【專利摘要】本發(fā)明涉及一種基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)及方法。該系統(tǒng)在原有的ESB架構(gòu)體系中加入了AOP模塊,通過AOP模塊對(duì)ESB服務(wù)端上的服務(wù)添加AOP切面處理功能。通過在AOP模塊中預(yù)先構(gòu)建AOP切面(aspect),定義其AOP切入點(diǎn)(pointcut)條件和通知(advice)動(dòng)作等內(nèi)容,本發(fā)明能夠在不更改已部署的服務(wù)代碼的前提下重新定義業(yè)務(wù)流程或者增加新的業(yè)務(wù)功能,同時(shí),當(dāng)業(yè)務(wù)需求變化時(shí),ESB服務(wù)端只需在AOP模塊中重新構(gòu)建AOP切面,定義AOP切入點(diǎn)條件和/或通知?jiǎng)幼骷纯蓾M足新的業(yè)務(wù)需求,業(yè)務(wù)擴(kuò)展性強(qiáng),靈活度高。
【專利說明】—種基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及面向服務(wù)架構(gòu)的軟件開發(fā)應(yīng)用【技術(shù)領(lǐng)域】,尤其涉及一種基于面向切面編程(Aspect Oriented Programming, A0P)的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)及方法。
【背景技術(shù)】
[0002]目前,在軟件開發(fā)應(yīng)用【技術(shù)領(lǐng)域】中,面向服務(wù)的架構(gòu)(Service OrientedArchitecture, SOA)是一種比較流行的軟件架構(gòu)。它是一種基于松稱合、基于標(biāo)準(zhǔn)的架構(gòu)體系,能夠?qū)?yīng)用程序的不同功能單元(也稱服務(wù))通過定義良好的接口和契約彼此聯(lián)系起來。而企業(yè)服務(wù)總線(Enterprise Service Bus, ESB)是SOA的一個(gè)基礎(chǔ)架構(gòu)。它是一種在松耦合的服務(wù)和應(yīng)用之間標(biāo)準(zhǔn)的集成方式,為不同的、復(fù)雜的架構(gòu)之間提供了 一種基于信息傳遞或者事件驅(qū)動(dòng)的基礎(chǔ)架構(gòu)。如圖1所示,ESB將服務(wù)與客戶端通過網(wǎng)絡(luò)的方式連接起來,服務(wù)可以運(yùn)行在一個(gè)或者多個(gè)ESB節(jié)點(diǎn)上,每個(gè)ESB節(jié)點(diǎn)可以是一臺(tái)物理機(jī)或者虛擬機(jī),且一臺(tái)機(jī)器上可以運(yùn)行多個(gè)服務(wù)實(shí)例。ESB采用標(biāo)準(zhǔn)的傳輸協(xié)議連接不同的客戶端系統(tǒng),例如FTP (文件傳輸協(xié)議)、HTTP (超文本傳送協(xié)議),提供面向服務(wù)的應(yīng)用,例如信息處理、過濾、數(shù)據(jù)加工、路由和信息存儲(chǔ)等。通常,ESB也以服務(wù)的形式運(yùn)行在ESB服務(wù)端中,與客戶端之間以消息進(jìn)行交互,對(duì)接收到的信息以一個(gè)合理的順序進(jìn)行消息再加工。目前,ESB服務(wù)端框架能夠有效地處理不同的消息或者事件,但是卻不能將消息或者事件直接路由到一個(gè)目標(biāo)服務(wù)。換言之,ESB必須在一個(gè)服務(wù)處理類中通過服務(wù)代碼判斷消息或者事件所攜帶的條件而調(diào)用另外一個(gè)服務(wù),而其框架本身不可以預(yù)先通過條件判斷將消息或者事件直接路由到指定的目標(biāo)服務(wù)。如圖1所示,是在ESB服務(wù)端將一個(gè)消息從一個(gè)服務(wù)路由到另外的一個(gè)服務(wù)的現(xiàn)有的實(shí)施方式。在該實(shí)施方式中,服務(wù)A和服務(wù)B需要負(fù)責(zé)快速的消息處理,當(dāng)消息的大小大于50KB時(shí),服務(wù)A和服務(wù)B將消息傳遞給服務(wù)D ;而服務(wù)C卻沒有這樣的業(yè)務(wù)需求。為了實(shí)現(xiàn)上述功能,服務(wù)A和服務(wù)B的代碼中加入有如下邏輯,如果消息的大小大于50KB (if (message_size) >50KB),將消息傳遞給服務(wù)D。這種傳統(tǒng)的實(shí)施方法有一個(gè)弱點(diǎn),即,當(dāng)業(yè)務(wù)需求發(fā)生變化時(shí),例如需要將消息容量擴(kuò)充到75KB時(shí),技術(shù)人員需要重新修改服務(wù)A和服務(wù)B中的邏輯代碼來滿足新的業(yè)務(wù)需求,相應(yīng)地,與服務(wù)A和服務(wù)B相關(guān)的代碼,以及其他受影響的代碼都需要重新編譯。同理,如果服務(wù)C也需要此項(xiàng)業(yè)務(wù)功能,服務(wù)C的代碼也需要更改并重新編譯。這給后期的維護(hù)和擴(kuò)展工作帶來了不便。
【發(fā)明內(nèi)容】
[0003]針對(duì)上述問題,本發(fā)明提供了 一種基于面向切面編程(Aspect OrientedProgramming,A0P)的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)及方法?;谠撓到y(tǒng),企業(yè)服務(wù)總線能夠在不更改已部署的服務(wù)代碼的同時(shí)執(zhí)行額外操作。
[0004]本發(fā)明提供一種基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng),其特征在于,包括:
[0005]ESB服務(wù)端,其與客戶端進(jìn)行信息交互,并部署有對(duì)所述客戶端發(fā)來的對(duì)象進(jìn)行處理的服務(wù);[0006]AOP模塊,其對(duì)所述ESB服務(wù)端上部署的服務(wù)設(shè)置AOP切面,用于當(dāng)所述客戶端發(fā)來的對(duì)象請(qǐng)求所述ESB服務(wù)端上部署的服務(wù)時(shí),檢測(cè)所述對(duì)象的狀態(tài)屬性是否符合所述AOP切面中的AOP切入點(diǎn)條件,如果符合,執(zhí)行所述AOP切面中的通知?jiǎng)幼鳌?br>
[0007]根據(jù)本發(fā)明的實(shí)施例,上述ESB服務(wù)端和AOP模塊可以運(yùn)行在一個(gè)ESB節(jié)點(diǎn)中或者運(yùn)行在不同的ESB節(jié)點(diǎn)中。
[0008]此外,本發(fā)明還提供上述系統(tǒng)的一種工作方法,包括以下步驟:
[0009]當(dāng)客戶端發(fā)來的對(duì)象請(qǐng)求ESB服務(wù)端上部署的服務(wù)時(shí),檢測(cè)對(duì)象的狀態(tài)屬性是否符合AOP模塊的AOP切面中的AOP切入點(diǎn)條件,如果符合,執(zhí)行AOP切面中的通知?jiǎng)幼鳌?br>
[0010]具體地,當(dāng)客戶端發(fā)來的對(duì)象請(qǐng)求ESB服務(wù)端上部署的服務(wù)時(shí),在ESB進(jìn)入服務(wù)處理流程之前和/或在ESB進(jìn)入服務(wù)處理流程之后,檢測(cè)對(duì)象的狀態(tài)屬性是否符合AOP切面中的AOP切入點(diǎn)條件。
[0011]上述步驟中,當(dāng)業(yè)務(wù)需求變化時(shí),ESB服務(wù)端在AOP模塊中重新構(gòu)建AOP切面,定義AOP切入點(diǎn)條件和/或通知?jiǎng)幼鳌?br>
[0012]此外,在執(zhí)行AOP切面中的通知?jiǎng)幼髦?,可以直接結(jié)束或者繼續(xù)執(zhí)行原服務(wù)處
理流程。
[0013]上述通知?jiǎng)幼魇侵府?dāng)AOP切入點(diǎn)條件滿足時(shí),需要執(zhí)行的額外操作。
[0014]上述通知?jiǎng)幼骺梢园▽?duì)象從其請(qǐng)求的第一服務(wù)路由到ESB服務(wù)端上的第二服務(wù)。
[0015]上述通知?jiǎng)幼骺梢园ㄔ诂F(xiàn)有的服務(wù)處理流程中添加額外操作,同時(shí)保持該服務(wù)原來的處理動(dòng)作不變。
[0016]上述通知?jiǎng)幼靼ǘx與初始服務(wù)內(nèi)容完全相同的目標(biāo)服務(wù),作為初始服務(wù)的備份。
[0017]上述AOP切入點(diǎn)條件可以包括對(duì)象請(qǐng)求的服務(wù)處理該對(duì)象所需的時(shí)間。
[0018]上述AOP切入點(diǎn)條件可以包括對(duì)象所含信息量大小。
[0019]與現(xiàn)有技術(shù)相比,本發(fā)明帶來的有益效果是:
[0020]本發(fā)明在ESB服務(wù)端整合AOP模塊,利用AOP模塊的切面處理功能在不更改已部署的服務(wù)代碼的前提下重新定義業(yè)務(wù)流程或者增加新的業(yè)務(wù)功能;同時(shí),當(dāng)業(yè)務(wù)需求變化時(shí),ESB服務(wù)端只需在AOP模塊中重新構(gòu)建AOP切面,定義AOP切入點(diǎn)條件和/或通知?jiǎng)幼骷纯桑薷拇a后只需對(duì)AOP模塊中的切面代碼重新編譯即可滿足業(yè)務(wù)變更需求,業(yè)務(wù)擴(kuò)展性強(qiáng),靈活度高。
[0021]本發(fā)明的目的和其他優(yōu)點(diǎn)還可以通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
【專利附圖】
【附圖說明】
[0022]附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例共同用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:
[0023]圖1是現(xiàn)有的ESB架構(gòu)體系中消息從一個(gè)服務(wù)轉(zhuǎn)移到另一個(gè)服務(wù)的示意圖;
[0024]圖2是包含本發(fā)明提供的狀態(tài)預(yù)處理系統(tǒng)的一種ESB服務(wù)網(wǎng)絡(luò)架構(gòu)圖;
[0025]圖3是本發(fā)明提供的狀態(tài)預(yù)處理系統(tǒng)將消息從一個(gè)服務(wù)轉(zhuǎn)移到另一個(gè)服務(wù)的方法示意圖;
[0026]圖4是本發(fā)明提供的狀態(tài)預(yù)處理系統(tǒng)的整體工作方法的流程圖。
【具體實(shí)施方式】
[0027]如圖2所示,是包含本發(fā)明的基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)的一種ESB服務(wù)網(wǎng)絡(luò)架構(gòu)圖。該網(wǎng)絡(luò)架構(gòu)中包括一個(gè)ESB服務(wù)端和一個(gè)或多個(gè)客戶端:
[0028]與現(xiàn)有技術(shù)不同的是,在本發(fā)明中,ESB服務(wù)端配置有AOP模塊,能夠添加面向切面編程。在本發(fā)明的實(shí)施例中,ESB服務(wù)端和配置的AOP模塊優(yōu)選地運(yùn)行在一個(gè)ESB節(jié)點(diǎn)中,或運(yùn)行在不同的節(jié)點(diǎn)中。該ESB節(jié)點(diǎn)可以是一臺(tái)或者多臺(tái)機(jī)器,例如服務(wù)器、網(wǎng)關(guān)或者其他計(jì)算系統(tǒng),并運(yùn)行有一個(gè)或者多個(gè)服務(wù)實(shí)例。服務(wù)實(shí)例、AOP模塊、ESB服務(wù)端所需的數(shù)據(jù)或者代碼存儲(chǔ)在該ESB節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)單元中,被ESB服務(wù)端讀取訪問。該數(shù)據(jù)存儲(chǔ)單元可以包含一個(gè)或者多個(gè)存儲(chǔ)設(shè)備,既可以是ESB節(jié)點(diǎn)本身自帶的存儲(chǔ)目錄,也可以是獨(dú)立于ESB節(jié)點(diǎn)以外的其他存儲(chǔ)設(shè)備。
[0029]客戶端可以是任意的計(jì)算設(shè)備,如筆記本、臺(tái)式機(jī)、服務(wù)器、手機(jī)或者掌上電腦PDA等。在本發(fā)明的實(shí)施例中,優(yōu)選地,客戶端是企業(yè)里的一臺(tái)服務(wù)器。
[0030]客戶端與ESB服務(wù)端之間通過網(wǎng)絡(luò)連接,該網(wǎng)絡(luò)可以是私有網(wǎng)絡(luò)或者公共網(wǎng)絡(luò)。私有網(wǎng)絡(luò)包括局域網(wǎng)(LAN)、外維網(wǎng)(WAN)或者企業(yè)內(nèi)網(wǎng)(Intranet)等。公共網(wǎng)可以是因特網(wǎng)(Internet)。在常見的應(yīng)用中,客戶端一般通過標(biāo)準(zhǔn)傳輸協(xié)議(FTP、HTTP)與ESB服務(wù)端交換信息。例如,客戶端運(yùn)行客戶端應(yīng)用,以用戶界面(GUI)的方式向ESB服務(wù)端發(fā)起HTTP請(qǐng)求,并接收展現(xiàn)ESB服務(wù)端返回的結(jié)果。ESB服務(wù)端根據(jù)客戶端發(fā)來的請(qǐng)求,調(diào)用部署的服務(wù)處理動(dòng)作,該服務(wù)可以是一個(gè)或者是多個(gè)方法實(shí)現(xiàn)的一個(gè)功能點(diǎn),可以是系統(tǒng)服務(wù)和用戶自定義服務(wù)。其中,系統(tǒng)服務(wù)包括路由、安全管理(加密、解密)、事務(wù)管理、日志管理等,用戶自定義服務(wù)包括任意用戶以資源形式發(fā)布的代碼。
[0031]此外,客戶端也通過運(yùn)行客戶程序產(chǎn)生例如消息或者事件等有待ESB服務(wù)端上的服務(wù)處理的對(duì)象。例如,客戶端運(yùn)行客戶程序而產(chǎn)生消息,并將該消息發(fā)送到ESB服務(wù)端中的消息隊(duì)列中。部署在ESB服務(wù)端上的服務(wù)監(jiān)聽或者檢測(cè)ESB服務(wù)端中的消息隊(duì)列,以對(duì)消息做出相應(yīng)的處理。而在本發(fā)明中,配置有AOP模塊的ESB服務(wù)端在進(jìn)入該服務(wù)處理流程處理之前或者進(jìn)入該服務(wù)處理流程處理之后,都可以檢測(cè)消息的狀態(tài)屬性,當(dāng)消息的狀態(tài)屬性符合一定的條件時(shí),就轉(zhuǎn)而執(zhí)行一些額外操作。這里額外操作包括不會(huì)影響現(xiàn)有的服務(wù)處理流程,額外添加的一個(gè)或多個(gè)操作。【具體實(shí)施方式】是主要利用面向切面編程AOP技術(shù)構(gòu)建一個(gè)或者多個(gè)操作的代碼,它不僅不會(huì)影響客戶端的代碼或者是ESB服務(wù)端上已經(jīng)部署的服務(wù)代碼,而且還可以滿足不同的客戶端或者不同的ESB服務(wù)端,或者同一個(gè)ESB服務(wù)端上不同的服務(wù)的相同的功能需求。在本發(fā)明的實(shí)施例中,ESB節(jié)點(diǎn)中可以為系統(tǒng)管理員提供一個(gè)控制平臺(tái),用于增加、修改或者刪除這些額外操作。
[0032]在介紹ESB服務(wù)端如何結(jié)合面向切面編程AOP技術(shù)增加、修改或者刪除額外操作之前,先簡要地介紹一下面向切面編程AOP技術(shù)中的一些常用術(shù)語和工作原理。在面向?qū)ο缶幊?Object Oriented Programming, OOP)中,如java、c++等,一個(gè)計(jì)算程序可以劃分為相互獨(dú)立的模塊,每一個(gè)模塊由一段代碼組成,構(gòu)成一個(gè)具有獨(dú)立功能的個(gè)體。而根據(jù)業(yè)務(wù)的需要,一些系統(tǒng)級(jí)的服務(wù)代碼需要交叉地寫入這些模塊中。這些系統(tǒng)級(jí)的服務(wù)包括安全管理、數(shù)據(jù)日志、會(huì)話管理和權(quán)限認(rèn)證等。而面向切面編程就是用來管理這些系統(tǒng)級(jí)的服務(wù)代碼。在面向切面編程(Aspect Oriented Programming, AOP)中,這些系統(tǒng)級(jí)的服務(wù)代碼叫做切面(aspect),切面包含切入點(diǎn)(pointcut)和通知(advice)。其中,切入點(diǎn)(pointcut)是用于定義通知(advice)應(yīng)該切入到應(yīng)用程序的哪些連接點(diǎn)(jointpoint),例如方法調(diào)用、異常拋出或者字段修改,這種精準(zhǔn)的匹配是由切入點(diǎn)的正則表達(dá)式來定義的;通知(advice)就是當(dāng)連接點(diǎn)(jointpoint)到達(dá)時(shí),通知應(yīng)用程序去執(zhí)行切面中定義的動(dòng)作代碼。這種AOP技術(shù)能夠在不更改已部署的服務(wù)代碼的同時(shí)改變?cè)谐绦虻牟僮骰蛘咴谠谐绦虻幕A(chǔ)上增加額外操作,并且還能夠通過修改連接點(diǎn)(jointpoint)或者切面(aspect)靈活地修改動(dòng)作的執(zhí)行條件和執(zhí)行內(nèi)容。
[0033]綜上所述,本發(fā)明提出的基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理方法的基本策略就是在原有的ESB架構(gòu)體系中加入AOP模塊,通過AOP模塊對(duì)ESB服務(wù)端上的服務(wù)添加切面處理功能。具體來說,在AOP模塊中預(yù)先構(gòu)建切面(aspect),包括定義其切入點(diǎn)(pointcut)條件和通知(advice)動(dòng)作等內(nèi)容,以當(dāng)有來自客戶端的對(duì)象(例如消息或者事件)請(qǐng)求部署在ESB服務(wù)端的一個(gè)服務(wù)時(shí),檢測(cè)該對(duì)象所持的狀態(tài)屬性,當(dāng)對(duì)象的狀態(tài)屬性符合AOP切入點(diǎn)條件時(shí),自動(dòng)執(zhí)行通知中的動(dòng)作,從而達(dá)到在不更改已部署的服務(wù)代碼的前提下重新定義業(yè)務(wù)流程或者增加新的業(yè)務(wù)功能的技術(shù)效果。
[0034]上述系統(tǒng)在具體應(yīng)用時(shí)可以大致分為以下幾種情況:
[0035]當(dāng)對(duì)象請(qǐng)求ESB服務(wù)端提供一個(gè)服務(wù),且ESB尚未進(jìn)入該服務(wù)處理流程之前,檢測(cè)該對(duì)象所持的狀態(tài)屬性,如果狀態(tài)信息符合AOP切入點(diǎn)條件,自動(dòng)執(zhí)行通知中的動(dòng)作;
[0036]當(dāng)對(duì)象請(qǐng)求ESB服務(wù)端提供一個(gè)服務(wù),且ESB已經(jīng)進(jìn)入該服務(wù)處理流程之后,檢測(cè)該對(duì)象所持的狀態(tài)屬性,如果狀態(tài)信息符合AOP切入點(diǎn)條件,自動(dòng)執(zhí)行通知中的動(dòng)作;
[0037]當(dāng)然,上述兩種情況也可以結(jié)合起來運(yùn)用,即當(dāng)對(duì)象請(qǐng)求ESB服務(wù)端提供一個(gè)服務(wù)時(shí),在ESB進(jìn)入該服務(wù)處理流程之前和之后均檢測(cè)該對(duì)象所持的狀態(tài)屬性,如果狀態(tài)信息符合AOP切入點(diǎn)條件,自動(dòng)執(zhí)行通知中的動(dòng)作。
[0038]此外,上述三種情況中,當(dāng)執(zhí)行通知中的動(dòng)作之后,既可以直接結(jié)束,也可以返回繼續(xù)執(zhí)行原服務(wù)處理流程的后續(xù)操作。
[0039]無論何種情況,本發(fā)明提供的一種基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)及方法都具有以下優(yōu)點(diǎn)=ESB服務(wù)端利用AOP模塊的切面處理功能在不更改已部署的服務(wù)代碼的前提下重新定義業(yè)務(wù)流程或者增加新的業(yè)務(wù)功能;同時(shí),當(dāng)業(yè)務(wù)需求變化時(shí),例如:原定義的業(yè)務(wù)需求為當(dāng)消息的大小大于50KB時(shí),將消息傳遞給服務(wù)D,若新的業(yè)務(wù)需求需要改變?yōu)楫?dāng)消息的大小大于100KB時(shí),將消息傳遞給服務(wù)D,此時(shí)ESB服務(wù)端只需在AOP模塊中重新構(gòu)建AOP切面,定義AOP切入點(diǎn)條件和/或通知?jiǎng)幼骷纯?。即將代碼的修改控制在AOP模塊內(nèi)部,修改代碼后只需對(duì)AOP模塊中的切面代碼重新編譯即可滿足業(yè)務(wù)變更需求,業(yè)務(wù)擴(kuò)展性強(qiáng),靈活度高。
[0040]下面結(jié)合具體的實(shí)施例進(jìn)一步介紹本發(fā)明的技術(shù)方案及獲得的技術(shù)效果。
[0041]在本發(fā)明的實(shí)施例中,AOP模塊中的關(guān)于AOP技術(shù)的切入點(diǎn)需要明確以下兩個(gè)內(nèi)容:
[0042]I)對(duì)象請(qǐng)求的初始服務(wù);
[0043]2)進(jìn)入通知,執(zhí)行通知?jiǎng)幼鞯挠|發(fā)條件。[0044]通知中的動(dòng)作是指當(dāng)AOP切入點(diǎn)條件滿足時(shí),需要執(zhí)行的額外操作。它可以是將消息或者是事件從ESB服務(wù)端的一個(gè)服務(wù)路由到另外一個(gè)服務(wù),例如,當(dāng)AOP切入點(diǎn)條件滿足時(shí),將消息或者事件從第一個(gè)服務(wù)轉(zhuǎn)發(fā)給第二個(gè)服務(wù)處理;也可以是在現(xiàn)有的服務(wù)處理流程中添加額外操作而同時(shí)又保持該服務(wù)原有的處理動(dòng)作不變,例如,當(dāng)AOP切入點(diǎn)條件滿足時(shí),以郵件的方式通知系統(tǒng)管理員。
[0045]如圖3所示,仍以【背景技術(shù)】中描述的案例為例,基于本發(fā)明提供的狀態(tài)預(yù)處理系統(tǒng),AOP模塊編譯一個(gè)切面程序在ESB服務(wù)中,在切入點(diǎn)中定義初始服務(wù)是服務(wù)A和服務(wù)B,定義觸發(fā)條件是消息大小大于預(yù)定的閾值;在通知中定義動(dòng)作是將該消息轉(zhuǎn)向目標(biāo)服務(wù)
D。當(dāng)客戶端向ESB服務(wù)端發(fā)送消息時(shí),ESB服務(wù)端會(huì)將該消息與AOP模塊中預(yù)設(shè)的AOP切入點(diǎn)條件進(jìn)行匹配,在檢測(cè)到該消息請(qǐng)求服務(wù)A或者服務(wù)B,且該消息大小大于預(yù)定的閾值時(shí),ESB執(zhí)行通知?jiǎng)幼?,將該消息路由到服?wù)D中處理。在服務(wù)A或者服務(wù)B中,并不包含上述將消息路由給服務(wù)D處理的邏輯代碼,而僅僅包含自身提供的服務(wù)內(nèi)容。因此,當(dāng)業(yè)務(wù)條件發(fā)生改變時(shí),例如需要將消息容量從50KB擴(kuò)充到75KB時(shí),無需修改服務(wù)A和服務(wù)B的代碼,只需在AOP模塊中重新設(shè)置AOP切入點(diǎn)條件就可以滿足新的業(yè)務(wù)需求。
[0046]以此類似,典型的AOP切入點(diǎn)條件還可以是初始服務(wù)中對(duì)象請(qǐng)求的服務(wù)處理該對(duì)象所需的時(shí)間,或者對(duì)象所含信息量大小等等。當(dāng)該AOP切入點(diǎn)條件滿足時(shí),ESB可以將消息分發(fā)到指定的服務(wù)中,然后繼續(xù)進(jìn)行原初始服務(wù)處理流程的操作。這種實(shí)施方式可以用來有效防止拒絕式服務(wù)攻擊,即防止當(dāng)有大容量的消息請(qǐng)求服務(wù)時(shí),資源都被占用用來處理該消息而無可用資源處理潛在用戶的情況。除此之外,通知中還可以定義與初始服務(wù)內(nèi)容完全相同的目標(biāo)服務(wù),作為初始服務(wù)的備份。當(dāng)消息需要長時(shí)間處理或者當(dāng)消息隊(duì)列中的消息過多時(shí),可以將消息轉(zhuǎn)到作為備份的目標(biāo)服務(wù)中處理。
[0047]如圖4所示,是本發(fā)明提供的狀態(tài)預(yù)處理系統(tǒng)的整體工作方法的流程圖。在該實(shí)施例中,在AOP模塊中通過AOP切面,服務(wù)處理流程中加入了額外的處理流程,同時(shí)又能夠保持原有的處理動(dòng)作:
[0048]當(dāng)ESB服務(wù)端接收到對(duì)象請(qǐng)求部署在ESB服務(wù)端上的一個(gè)服務(wù)時(shí),首先檢測(cè)該對(duì)象是否具有與AOP切入點(diǎn)條件相符的狀態(tài)屬性:
[0049]如果有,AOP模塊進(jìn)入AOP切面程序處理流程,從而在不影響原服務(wù)代碼的情況下,執(zhí)行切面通知中的動(dòng)作,然后直接結(jié)束;
[0050]如果無,AOP模塊進(jìn)入服務(wù)處理流程執(zhí)行相應(yīng)的動(dòng)作,在該服務(wù)的處理過程中,如果檢測(cè)到對(duì)象具有與AOP切入點(diǎn)條件相符的狀態(tài)屬性,進(jìn)入AOP切面程序處理流程,執(zhí)行切面通知中的動(dòng)作,直接結(jié)束,否則在完成服務(wù)原有的操作之后結(jié)束。
[0051]這種通過AOP切面定義的額外動(dòng)作不會(huì)影響服務(wù)原有操作的運(yùn)行。
[0052]在上述實(shí)施例中,AOP模塊優(yōu)選地運(yùn)行在ESB節(jié)點(diǎn)中,可以采用JBoss的AOP編譯器編譯AOP模塊,例如ajc編輯器或者abc編輯器,當(dāng)然也可不限于此,目前常用的AOP編譯器都可以使用。另外,AOP模塊也可以運(yùn)行在ESB節(jié)點(diǎn)以外的系統(tǒng)平臺(tái)上,也不做具體限制。
[0053]以上所述,僅為本發(fā)明較佳的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉該技術(shù)的人員在本發(fā)明所揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng),其特征在于,包括: ESB服務(wù)端,其與客戶端進(jìn)行信息交互,并部署有對(duì)所述客戶端發(fā)來的對(duì)象進(jìn)行處理的服務(wù); AOP模塊,其對(duì)所述ESB服務(wù)端上部署的服務(wù)設(shè)置AOP切面,用于當(dāng)所述客戶端發(fā)來的對(duì)象請(qǐng)求所述ESB服務(wù)端上部署的服務(wù)時(shí),檢測(cè)所述對(duì)象的狀態(tài)屬性是否符合所述AOP切面中的AOP切入點(diǎn)條件,如果符合,執(zhí)行所述AOP切面中的通知?jiǎng)幼鳌?br>
2.如權(quán)利要求1所述的狀態(tài)預(yù)處理系統(tǒng),其特征在于: 所述ESB服務(wù)端和AOP模塊運(yùn)行在一個(gè)ESB節(jié)點(diǎn)中或者運(yùn)行在不同的ESB節(jié)點(diǎn)中。
3.一種如權(quán)利要求1或2的基于AOP的企業(yè)服務(wù)總線狀態(tài)預(yù)處理系統(tǒng)的工作方法,包括以下步驟: 當(dāng)客戶端發(fā)來的對(duì)象請(qǐng)求ESB服務(wù)端上部署的服務(wù)時(shí),檢測(cè)對(duì)象的狀態(tài)屬性是否符合AOP模塊的AOP切面中的AOP切入點(diǎn)條件,如果符合,執(zhí)行AOP切面中的通知?jiǎng)幼鳌?br>
4.如權(quán)利要求3所述的工作方法,其特征在于: 當(dāng)客戶端發(fā)來的對(duì)象請(qǐng)求ESB服務(wù)端上部署的服務(wù)時(shí),在ESB進(jìn)入服務(wù)處理流程之前和/或在ESB進(jìn)入服務(wù)處理流程之后,檢測(cè)對(duì)象的狀態(tài)屬性是否符合AOP切面中的AOP切入點(diǎn)條件。
5.如權(quán)利要求3所述的工作方法,其特征在于: 當(dāng)業(yè)務(wù)需求變化時(shí),ESB服務(wù)端在AOP模塊中重新構(gòu)建AOP切面,定義AOP切入點(diǎn)條件和/或通知?jiǎng)幼鳌?br>
6.如權(quán)利要求4所述的工作方法,其特征在于: 在執(zhí)行AOP切面中的通知?jiǎng)幼髦螅苯咏Y(jié)束或者繼續(xù)執(zhí)行原服務(wù)處理流程。
7.如權(quán)利要求3所述的工作方法,其特征在于: 所述通知?jiǎng)幼靼▽?duì)象從其請(qǐng)求的第一服務(wù)路由到ESB服務(wù)端上的第二服務(wù)。
8.根據(jù)權(quán)利要求3所述的工作方法,其特征在于: 所述通知?jiǎng)幼靼ㄔ诂F(xiàn)有的服務(wù)處理流程中添加額外操作同時(shí)保持該服務(wù)原來的處理動(dòng)作不變。
9.根據(jù)權(quán)利要求8所述的工作方法,其特征在于: 所述額外操作包括不影響現(xiàn)有的服務(wù)處理流程,額外添加的一個(gè)或多個(gè)操作。
10.根據(jù)權(quán)利要求3所述的工作方法,其特征在于: 所述通知?jiǎng)幼靼ǘx與初始服務(wù)內(nèi)容完全相同的目標(biāo)服務(wù),作為初始服務(wù)的備份。
11.如權(quán)利要求3所述的工作方法,其特征在于: 所述AOP切入點(diǎn)條件包括對(duì)象請(qǐng)求的服務(wù)處理該對(duì)象所需的時(shí)間。
12.如權(quán)利要求3所述的工作方法,其特征在于: 所述AOP切入點(diǎn)條件包括對(duì)象所含信息量大小。
【文檔編號(hào)】G06F9/54GK103618762SQ201310554404
【公開日】2014年3月5日 申請(qǐng)日期:2013年11月8日 優(yōu)先權(quán)日:2013年11月8日
【發(fā)明者】田蕾 申請(qǐng)人:中標(biāo)軟件有限公司