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

面向服務(wù)的架構(gòu)的制作方法

文檔序號(hào):6654764閱讀:172來(lái)源:國(guó)知局
專(zhuān)利名稱:面向服務(wù)的架構(gòu)的制作方法
技術(shù)領(lǐng)域
本公開(kāi)一般來(lái)說(shuō)涉及一種用于服務(wù)的中間件,具體涉及具有消息處理能力的轉(zhuǎn)換結(jié)構(gòu)(switching fabric),客戶和服務(wù)可以通過(guò)該轉(zhuǎn)換結(jié)構(gòu)通信。
背景技術(shù)
對(duì)于企業(yè)軟件應(yīng)用與基于網(wǎng)絡(luò)(web)瀏覽器的前端一起工作的需要引發(fā)了應(yīng)用服務(wù)器的開(kāi)發(fā)。應(yīng)用服務(wù)器提供了用于將前端web應(yīng)用與后端企業(yè)應(yīng)用集成的框架。除了從應(yīng)用服務(wù)器簡(jiǎn)單地調(diào)用企業(yè)應(yīng)用以外,還需要將不同的企業(yè)應(yīng)用段(piece)組合成復(fù)合應(yīng)用??梢赃@樣做的一種方式是將企業(yè)應(yīng)用顯示(expose)為其他系統(tǒng)可以訪問(wèn)的一組可重新使用的服務(wù)。但是,企業(yè)應(yīng)用通常被部署在多個(gè)應(yīng)用平臺(tái)和異構(gòu)(heterogeneous)環(huán)境中。這些因素使得所述復(fù)合工作量專(zhuān)有并編程驅(qū)動(dòng),導(dǎo)致脆弱和昂貴的集成。需要的是一種靈活的基礎(chǔ)設(shè)施,用于動(dòng)態(tài)地組合服務(wù)和處理可能在它們之間產(chǎn)生的任何不兼容。


圖1a是在一個(gè)實(shí)施例中的系統(tǒng)的圖解。
圖1b是按照一個(gè)實(shí)施例的服務(wù)總線架構(gòu)的圖解。
圖2是按照一個(gè)實(shí)施例的量度匯聚(metric aggregation)和配置傳播的圖解。
圖3是按照一個(gè)實(shí)施例的消息處理流水線的圖解。
圖4是按照一個(gè)實(shí)施例的前后流水線消息處理的圖解。
圖5是按照一個(gè)實(shí)施例的組件架構(gòu)的圖解。
圖6a圖解了具有單個(gè)流水線對(duì)節(jié)點(diǎn)和單個(gè)路由節(jié)點(diǎn)的消息處理圖。
圖6b圖解了按照一個(gè)實(shí)施例的具有分支節(jié)點(diǎn)的消息處理圖。
圖7是按照一個(gè)實(shí)施例的錯(cuò)誤處理范圍的圖解。
圖8是在一個(gè)實(shí)施例中的服務(wù)提供者的圖解。
圖9是按照一個(gè)實(shí)施例的監(jiān)控組件的圖解。
圖10是按照一個(gè)實(shí)施例的規(guī)則觸發(fā)機(jī)制的圖解。
圖11a圖解了按照一個(gè)實(shí)施例的包含組件A、B和C的初始核心狀態(tài)。
圖11b圖解了按照一個(gè)實(shí)施例的會(huì)話數(shù)據(jù)的更新。
圖12a-c圖解了按照一個(gè)實(shí)施例的附加的會(huì)話情況。
圖13a-c圖解了在會(huì)話視圖和核心狀態(tài)之間的不一致。
圖14是按照一個(gè)實(shí)施例的更新計(jì)劃執(zhí)行的圖解。
圖15a是按照一個(gè)實(shí)施例的成功更新的圖解。
圖15b圖解了由于應(yīng)用異常(exception)而導(dǎo)致的更新失敗。
圖15c圖解了由于服務(wù)器崩潰而導(dǎo)致的更新失敗。
具體實(shí)施例方式
通過(guò)示例而不是通過(guò)在附圖中的圖的限制來(lái)說(shuō)明本發(fā)明,在所述附圖中,類(lèi)似的附圖標(biāo)號(hào)表示類(lèi)似的項(xiàng)目。對(duì)于本公開(kāi)中的實(shí)施例的引用不一定是針對(duì)同一實(shí)施例,這樣的引用意指至少一個(gè)。雖然討論了具體的實(shí)現(xiàn),但是應(yīng)當(dāng)明白,如此做是出于說(shuō)明的目的。本領(lǐng)域內(nèi)的技術(shù)人員可以認(rèn)識(shí)到,在不脫離本發(fā)明的范圍和精神的情況下可以使用其他的組件和配置。在下面的說(shuō)明中,給出了多個(gè)具體細(xì)節(jié)以提供對(duì)本發(fā)明的充分說(shuō)明。但是,本領(lǐng)域內(nèi)的技術(shù)人員明白,可以不使用這些具體細(xì)節(jié)而實(shí)踐本發(fā)明。另外,為了不使本發(fā)明模糊不清,對(duì)公知的特征沒(méi)有詳細(xì)描述。
參見(jiàn)圖1a并且利用圖示,所述系統(tǒng)包括服務(wù)總線100,所述服務(wù)總線100表示將消息中介、web服務(wù)、商務(wù)對(duì)商務(wù)(B2B)服務(wù)網(wǎng)關(guān)和服務(wù)管理概念融合為以運(yùn)行時(shí)配置信息目錄/庫(kù)(repository)106和控制臺(tái)104為中心的組合。所述服務(wù)總線是一種容易使用的配置驅(qū)動(dòng)的中介,其有效和以高度的可用性、可擴(kuò)展性和可靠性來(lái)(無(wú)限制地)完成如下方面·橋接(bridge)在封裝(envelop)協(xié)議、傳輸協(xié)議、安全方案(scheme)、有效載荷內(nèi)容、單向和請(qǐng)求/響應(yīng)范例、同步和異步通信、點(diǎn)對(duì)點(diǎn)和發(fā)布/預(yù)訂領(lǐng)域中在發(fā)送方114發(fā)送的消息和接收方116期望的消息之間的差距(gap)。
·提供用于執(zhí)行諸如(但是不限于)多目的地發(fā)布、基于內(nèi)容的路由、鑒別和授權(quán),以及證書(shū)映射之類(lèi)的任務(wù)的附加計(jì)算能力。
·提供具有量度收集和顯示、警告顯示、跟蹤事件收集和使用、消息歸檔和服務(wù)級(jí)協(xié)議(SLA)管理的監(jiān)控能力。
圖1b是按照一個(gè)實(shí)施例的系統(tǒng)的圖解。在一個(gè)實(shí)施例中,所述系統(tǒng)包括服務(wù)總線100,其可以作為在客戶和服務(wù)之間的中介。本領(lǐng)域的技術(shù)人員可以明白,本公開(kāi)不限于或不依賴于任何具體類(lèi)型的服務(wù)或服務(wù)技術(shù)。許多服務(wù)類(lèi)型/技術(shù)——包括公知的那些和有待開(kāi)發(fā)的那些——全部在本公開(kāi)的范圍和精神內(nèi)。去往服務(wù)總線的消息到達(dá)傳輸108,并且可以被處理來(lái)確定例如要路由和/或發(fā)布所述消息去往的目的地、對(duì)于所述消息執(zhí)行的變換和/或安全處理。所述消息接著在傳輸110上被發(fā)出到綁定于一個(gè)服務(wù)或另一個(gè)服務(wù)總線。在一個(gè)實(shí)施例中,對(duì)于所述消息的響應(yīng)可以沿著通過(guò)所述服務(wù)總線的逆路徑。
在一個(gè)實(shí)施例中,可以在諸如從BEA系統(tǒng)公司可獲得的WebLogic服務(wù)器之類(lèi)的應(yīng)用服務(wù)器102上部分地或全部地實(shí)現(xiàn)所述服務(wù)總線。通過(guò)配置信息106來(lái)驅(qū)動(dòng)系統(tǒng),可以通過(guò)配置/監(jiān)控控制臺(tái)104來(lái)指定所述配置信息106,所述配置/監(jiān)控控制臺(tái)104提供了一個(gè)用戶界面,用于創(chuàng)建、修改和刪除配置信息。所述系統(tǒng)的所有方面是可動(dòng)態(tài)配置的。以非限定性的示例來(lái)舉例,用戶界面可包括下列的一個(gè)或多個(gè)1)在顯示裝置上被呈現(xiàn)或被投影到用戶的視網(wǎng)膜上的圖形用戶界面(GUI);2)響應(yīng)于聲音和/或語(yǔ)音命令的能力;3)響應(yīng)來(lái)自遙控裝置(例如蜂窩電話,PDA或其他適當(dāng)?shù)倪b控器)的輸入的能力;4)響應(yīng)姿態(tài)(例如面部及其它)的能力;5)響應(yīng)來(lái)自在同一或另一個(gè)計(jì)算設(shè)備上的處理的命令的能力;以及6)響應(yīng)來(lái)自計(jì)算機(jī)鼠標(biāo)和/或鍵盤(pán)的輸入的能力。本公開(kāi)不限于任何特定的用戶界面。本領(lǐng)域內(nèi)的技術(shù)人員可以認(rèn)識(shí)到,許多其他的用戶界面是可能的,并且完全在本公開(kāi)的范圍和精神內(nèi)。
在一個(gè)實(shí)施例中并且參見(jiàn)圖2,管理服務(wù)器112在企業(yè)中將所述配置信息分布到一個(gè)或多個(gè)主管(hosting)服務(wù)總線的被管理的服務(wù)器。在這些實(shí)施例的多個(gè)方面,被管理的服務(wù)器可以被部署在本領(lǐng)域內(nèi)公知的集群(cluster)中。配置信息可以自動(dòng)地向被管理的服務(wù)器傳播,以通過(guò)服務(wù)總線來(lái)進(jìn)行快速的本地檢索??梢宰詣?dòng)地從所有的被管理的服務(wù)器收集監(jiān)控量度以匯集和顯示在控制臺(tái)上。
在一個(gè)實(shí)施例中,由服務(wù)總線主管的服務(wù)(“服務(wù)代理”)和未由服務(wù)總線主管但是被服務(wù)代理調(diào)用的服務(wù)(“外部服務(wù)”)都被模型化為服務(wù)。服務(wù)代理作為服務(wù)的替身或外觀(即外部服務(wù)和服務(wù)代理)。以非限定性的示例為例,服務(wù)可以包括·被稱為端口(也稱為端點(diǎn)(endpoit))的一組具體的接口,每個(gè)具有傳輸?shù)刂泛拖嚓P(guān)聯(lián)的配置。在一個(gè)實(shí)施例中,該組端口構(gòu)成所述服務(wù)的負(fù)荷均衡和故障轉(zhuǎn)移(failover)的選擇,并且在特性上相同。
·可選用的抽象接口,其在一個(gè)實(shí)施例中是可能被操作破壞的接口中的消息部分的結(jié)構(gòu)的定義。
·綁定,其定義了有關(guān)到具體的消息的所述抽象接口中的消息部分的封裝和將該消息到傳輸?shù)慕壎ā?br> ·關(guān)于web服務(wù)安全(WSS)和web服務(wù)可靠消息傳送(WS-RM)的策略、
授權(quán)策略和需要由綁定層透明地執(zhí)行的動(dòng)作(例如登錄)。
在一個(gè)實(shí)施例中,對(duì)于基于超文本傳輸協(xié)議(安全)HTTP(S)的簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)web服務(wù)或Java消息傳送服務(wù)(JMS)傳輸來(lái)說(shuō),所述抽象接口、具體接口和綁定的web服務(wù)描述語(yǔ)言(WSDL)表示是可能的。在本實(shí)施例的各方面,WSDL資源或現(xiàn)有的服務(wù)可以被用作新的服務(wù)的接口的定義的模板。同樣被支持的是電子郵件、文件、WS-RM和文件傳輸協(xié)議(FTP)傳輸。在一個(gè)實(shí)施例中,所述服務(wù)總線可以定期地輪詢文件系統(tǒng)目錄以確定文件是否在文件傳送的情況下已準(zhǔn)備好處理。所述服務(wù)總線可以支持HTTP和JMS異步傳送的請(qǐng)求/響應(yīng)和單向范型(one way paradigm)。如果下層的傳輸支持消息的有序傳遞,則所述服務(wù)總線也可選地支持它。在另一個(gè)實(shí)施例中,服務(wù)總線支持外部標(biāo)記語(yǔ)言(XML)、非XML(使用MFL描述的結(jié)構(gòu))、二進(jìn)制、具有附件的多用途的網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)(電子郵件)以及SOAP封裝。
服務(wù)/服務(wù)代理過(guò)程可以具有用于同一綁定的多個(gè)端口。這些端口可以被用作負(fù)載均衡和故障轉(zhuǎn)移(failover)的選擇。服務(wù)/服務(wù)代理可以定義用于使用其端口的負(fù)載均衡策略。在一個(gè)實(shí)施例中,所述策略可以包括循環(huán)(roundrobin)和隨機(jī)(加權(quán)或未加權(quán))。所述端口作為負(fù)載均衡目的地,但是也可以作為有關(guān)故障的故障轉(zhuǎn)移(failover)的選擇。所述兩個(gè)概念被耦合在一起,用于高可用性的負(fù)載均衡方案。
服務(wù)代理也可以定義關(guān)于故障的重試策略和(用于請(qǐng)求/響應(yīng)的)應(yīng)用于其接口中的消息的超時(shí)策略和安全策略。這可以在服務(wù)級(jí)(應(yīng)用到所有的消息)或單獨(dú)的消息被指定以用于服務(wù)的操作。
在一個(gè)實(shí)施例中,通過(guò)一個(gè)或多個(gè)分類(lèi)方案來(lái)對(duì)服務(wù)分類(lèi)。例如,分類(lèi)可以是密鑰名稱,并且分類(lèi)值可以是用于所述密鑰名稱的值。服務(wù)可以具有用于多個(gè)分類(lèi)名稱的多個(gè)值。對(duì)于發(fā)現(xiàn)的目的來(lái)說(shuō),分類(lèi)是有用的。有多種定義密鑰名稱的公知的本體論(ontology)(或分類(lèi)方案)和所允許的值的等級(jí)。在本實(shí)施例的各方面,在分類(lèi)等級(jí)中的葉值(leaf value)用于分類(lèi)服務(wù)。在一個(gè)實(shí)施例中,服務(wù)消費(fèi)者可以被分類(lèi)來(lái)用于搜索。服務(wù)消費(fèi)者可以是組織或應(yīng)用,并且可以發(fā)送消息(或接收同步響應(yīng))。在另一個(gè)實(shí)施例中,服務(wù)消費(fèi)者與證書(shū)相關(guān)聯(lián),并且被綁定到用戶,所以它可以屬于用于授權(quán)的角色。
在一個(gè)實(shí)施例中,被稱為服務(wù)提供者的組織或應(yīng)用可以提供一組服務(wù)。為服務(wù)定義提供者是可選擇的,并且可以具有獨(dú)立的服務(wù)。例如,這些可以或者是在企業(yè)內(nèi)的內(nèi)部子組織或外部合伙組織或甚至單獨(dú)的應(yīng)用(語(yǔ)義由用戶決定)。而且,服務(wù)提供者可以像服務(wù)那樣被分類(lèi)以用于搜索。服務(wù)提供者可以與證書(shū)相關(guān)聯(lián),并且可以被綁定到用戶,所以它可以屬于用于授權(quán)的角色。服務(wù)提供者可以發(fā)送和接收消息。
在一個(gè)實(shí)施例中,服務(wù)代理的實(shí)現(xiàn)包括至少一個(gè)消息處理流水線定義。例如,這可以包括請(qǐng)求流水線和響應(yīng)流水線的定義。流水線是消息處理節(jié)點(diǎn),用于指定在調(diào)用外部(或另一個(gè)代理)服務(wù)之前對(duì)于服務(wù)代理的請(qǐng)求消息執(zhí)行什么動(dòng)作、在服務(wù)代理向客戶返回響應(yīng)之前對(duì)于來(lái)自由服務(wù)代理調(diào)用的服務(wù)的響應(yīng)執(zhí)行什么處理。每個(gè)流水線可以包括一系列的級(jí)。一個(gè)級(jí)實(shí)現(xiàn)與所述流水線兼容的協(xié)議和/或程序接口(programmatic interface)。被饋入所述流水線的消息伴隨可以被流水線級(jí)訪問(wèn)或修改的一組消息環(huán)境變量(包括包含消息內(nèi)容的變量)。
舉例來(lái)說(shuō),通常的流水線的各級(jí)包括·變換級(jí)允許控制要嵌套的流控制“if(如果)”結(jié)構(gòu)以選擇要執(zhí)行的影響環(huán)境的變換。web服務(wù)呼出或數(shù)據(jù)庫(kù)查找可以是用于設(shè)置輸出環(huán)境變量的XML查詢(XQuery)或可擴(kuò)展樣式表語(yǔ)言變換(XSLT)的替代。
·路由級(jí)允許“if”結(jié)構(gòu)和“case”結(jié)構(gòu)組合(和嵌套),以定義用于路由消息的單個(gè)端點(diǎn)和操作。在向每個(gè)端點(diǎn)發(fā)布消息之前,可以定義影響環(huán)境變量的一組變換。web服務(wù)呼出或數(shù)據(jù)庫(kù)查找可以是用于設(shè)置環(huán)境變量的XQuery或XSLT變換的替代。
·發(fā)布級(jí)允許“if”結(jié)構(gòu)和”case”結(jié)構(gòu)組合(和嵌套),以定義用于向其發(fā)布消息的一組端點(diǎn)和操作。向每個(gè)端點(diǎn)發(fā)布消息之前,可以定義影響環(huán)境變量的一組變換。web服務(wù)呼出或數(shù)據(jù)庫(kù)查找可以是用于設(shè)置環(huán)境變量的XQuery或XSLT變換的替代。對(duì)于環(huán)境的改變與每個(gè)被發(fā)布的端點(diǎn)隔離,并且不影響流水線的隨后處理。
·在一個(gè)實(shí)施例中,可以在綁定層中執(zhí)行WSS處理以及授權(quán)。
·跟蹤級(jí)允許使用用戶定義的信息來(lái)寫(xiě)入跟蹤記錄,因此跟蹤系統(tǒng)可以用于按照用戶定義的標(biāo)準(zhǔn)來(lái)搜索。
·歸檔級(jí)向檔案寫(xiě)入所述消息,以用于歷史和記錄保存目的。
·記錄級(jí)允許將所選擇的環(huán)境記錄到系統(tǒng)日志,以用于調(diào)試目的。
·驗(yàn)證級(jí)憑借MFL方案的XML來(lái)驗(yàn)證文檔。
·定制級(jí)實(shí)現(xiàn)與流水線兼容的協(xié)議和/或程序接口。
圖3是按照一個(gè)實(shí)施例的消息處理流水線的圖解。操作流水線可以根據(jù)由所述消息的內(nèi)容指示的操作來(lái)處理消息。在一個(gè)實(shí)施例中,通過(guò)用戶選擇的標(biāo)準(zhǔn)來(lái)執(zhí)行操作的確定。每個(gè)流水線可以包括一個(gè)或多個(gè)級(jí)(例如302、304、308、310)。單個(gè)服務(wù)級(jí)請(qǐng)求流水線300可以分支為多個(gè)操作流水線306和312。響應(yīng)處理以相關(guān)聯(lián)的操作流水線(314,316)開(kāi)始,所述相關(guān)聯(lián)的操作流水線(314,316)然后加入單個(gè)服務(wù)級(jí)響應(yīng)流水線318。在一個(gè)實(shí)施例中,在調(diào)用單向操作的情況下,使用空消息來(lái)執(zhí)行所述響應(yīng)流水線。這允許對(duì)于服務(wù)代理構(gòu)造響應(yīng),因此在請(qǐng)求/響應(yīng)和單向操作之間的橋接是可能的(例如,服務(wù)代理輸入可以是單向的,而其輸出是請(qǐng)求/響應(yīng),或反之亦然)。服務(wù)代理或者從被調(diào)用的服務(wù)吸收響應(yīng),或者為客戶產(chǎn)生響應(yīng)。
在一個(gè)實(shí)施例中,在請(qǐng)求流水線和響應(yīng)流水線以及其他消息處理節(jié)點(diǎn)之間共享環(huán)境,并且其值包括單獨(dú)的請(qǐng)求/響應(yīng)消息。在本實(shí)施例的各方面,所述環(huán)境是一組預(yù)定的XML變量。可以動(dòng)態(tài)地對(duì)環(huán)境增加和刪除新變量。以非限定性示例為例。預(yù)定的環(huán)境變量具有關(guān)于所述消息的信息、傳輸報(bào)頭、安全負(fù)責(zé)體(security principal)、當(dāng)前服務(wù)代理的配置信息和用于由服務(wù)代理調(diào)用的主要路由和預(yù)訂服務(wù)的配置信息。在一個(gè)實(shí)施例中,環(huán)境可以由各級(jí)按照XQuery/Xupdate表達(dá)來(lái)讀取和修改。
進(jìn)一步舉例來(lái)說(shuō),環(huán)境可以包括變量$header(報(bào)頭)、$body(主體)和$attachments(附件)。這些是包裝器(wrapper)變量,所述包裝器變量分別包括SOAP報(bào)頭、SOAP主體內(nèi)容和MIME附件。該環(huán)境給出了所有消息是SOAP消息的表達(dá),并且非SOAP消息被映射到此范型中。在二進(jìn)制或MFL數(shù)據(jù)的情況下,用于表示在$attachments或$body中的文件的XML元素涉及具有唯一標(biāo)識(shí)符的實(shí)際文件。在SOAP RPC的情況下,主體內(nèi)容本身是包含被用類(lèi)型表征的(typed)RPC的參數(shù)的包裝器元素。
在一個(gè)實(shí)施例中,系統(tǒng)具有內(nèi)置類(lèi)型的系統(tǒng),如果期望的話可用于在設(shè)計(jì)時(shí)使用。當(dāng)在設(shè)計(jì)時(shí)的變換或在條件中創(chuàng)建XQuery表達(dá)式時(shí),所述變量可以在編輯器中被聲明為具有一個(gè)或多個(gè)類(lèi)型,以幫助容易地創(chuàng)建XQuery。在另一個(gè)實(shí)施例中,可以在XML模式、MFL或WSDL資源中指定所述類(lèi)型。此類(lèi)型聲明過(guò)程注意到要被類(lèi)型表征(type)的變量的特性(是用于所述類(lèi)型的元素或所述類(lèi)型本身的包裝器)。它還提供幫助來(lái)容易地訪問(wèn)在$body中的SOAP RPC參數(shù)或文檔。
在一個(gè)實(shí)施例中,如果在一個(gè)級(jí)中發(fā)生了錯(cuò)誤,則該級(jí)可以具有要執(zhí)行的步驟序列。該步驟序列構(gòu)成那個(gè)級(jí)的錯(cuò)誤流水線或句柄(handler)。另外,可以對(duì)于整個(gè)流水線或整個(gè)服務(wù)代理定義錯(cuò)誤句柄。在出現(xiàn)錯(cuò)誤時(shí)調(diào)用所存在的最低范圍的錯(cuò)誤句柄。這種錯(cuò)誤句柄允許消息向端點(diǎn)發(fā)布,編制要返回到服務(wù)代理的調(diào)用器的錯(cuò)誤響應(yīng)消息,記錄所述消息,在修改環(huán)境后繼續(xù),或引發(fā)異常。引發(fā)異??梢詫⒖刂苽魉偷较乱粋€(gè)更高范圍的錯(cuò)誤流水線。
圖4是按照一個(gè)實(shí)施例的前后流水線消息處理的圖解。請(qǐng)求的處理包括入站的傳送402處理、入站的綁定層404處理、流水線執(zhí)行406、出站的綁定層408處理和出站的傳送410處理。在這些實(shí)施例的多個(gè)方面,所述綁定層自動(dòng)操作將要執(zhí)行的一些處理,如向/從環(huán)境變量映射、封裝和解除封裝消息以及執(zhí)行WSS安全和授權(quán)。初始路由目的地和發(fā)布目的地可以工作在此范型中。在一個(gè)實(shí)施例中,在調(diào)用了初始路由端點(diǎn)后,響應(yīng)流水線處理遵循類(lèi)似的模型。在另一個(gè)圖解中,來(lái)自流水線級(jí)的web服務(wù)調(diào)用(callout)420通過(guò)綁定層416,然后通過(guò)傳輸層418。在一個(gè)實(shí)施例中,所述調(diào)用響應(yīng)沿著逆向路徑。
在一個(gè)實(shí)施例中,用戶是安全負(fù)責(zé)方,它可以或者是人、組織或過(guò)程。用戶可以或者調(diào)用用戶界面(控制臺(tái)用戶)或消息傳送接口(按服務(wù)消費(fèi)者或提供者建模的用戶)。服務(wù)消費(fèi)者和提供者可以與用戶相關(guān)聯(lián)以鑒別來(lái)自該提供者或消費(fèi)者的消息。用戶可以屬于一個(gè)組,并且一個(gè)組也可以屬于一個(gè)組。組和用戶可以屬于角色(role),它們是用來(lái)向其分配對(duì)資源的訪問(wèn)權(quán)的單位(unit)。在一個(gè)實(shí)施例中,在系統(tǒng)中的資源提供者、消費(fèi)者和服務(wù)可以被組織為一組項(xiàng)目,每個(gè)項(xiàng)目具有文件夾的等級(jí)以避免名稱沖突,但是也提供了用于組織屬于一些部門(mén)的資源和服務(wù)并且搜索它們的方便方式。
在一個(gè)實(shí)施例中,控制臺(tái)支持任務(wù)級(jí)授權(quán)。作為說(shuō)明,服務(wù)總線控制臺(tái)用戶或過(guò)程可以以一個(gè)或多個(gè)下面的預(yù)定角色來(lái)操作·集成管理員是服務(wù)總線超級(jí)用戶,并且可以做任何事。
·集成操作員可以使用控制臺(tái)來(lái)監(jiān)控服務(wù)總線動(dòng)作(bus activity),執(zhí)行消息跟蹤,并且可以中止/恢復(fù)服務(wù)并且改變它們的工作時(shí)間。
·集成監(jiān)控器具有對(duì)于所有事情的完整讀取訪問(wèn),并且可以輸出任何資源、服務(wù)、提供者、消費(fèi)者或項(xiàng)目。
·集成部署器具有對(duì)于全部事情的完全讀取訪問(wèn),并且可以創(chuàng)建、編輯或輸入/輸出資源、服務(wù)、提供者、消費(fèi)者或項(xiàng)目。
·集成安全管理員可以讀取、創(chuàng)建、刪除、編輯ACL、證書(shū)、密鑰庫(kù)、用戶、組和角色。
在一個(gè)實(shí)施例中,資源是過(guò)程/實(shí)體的可以重新使用的公共定義和/或說(shuō)明(例如那個(gè)實(shí)體的配置信息)。資源通常由多個(gè)服務(wù)使用,并且是跨越企業(yè)或部門(mén)的標(biāo)準(zhǔn)化定義或說(shuō)明。資源的示例是分類(lèi)模式(schema)、MFL模式、XSD模式、XQuery映射、XSLT映射、WSDL接口和WS策略文件。分類(lèi)模式定義了單個(gè)類(lèi)別名稱和所述類(lèi)別名稱的分級(jí)的一組值。可以使用注冊(cè)的方案(registered scheme)來(lái)分類(lèi)服務(wù)、提供者和消費(fèi)者??梢允褂靡粋€(gè)分類(lèi)模式的多個(gè)葉值或來(lái)自多個(gè)分類(lèi)模式的葉值將它們分類(lèi)。在一個(gè)實(shí)施例中,可以通過(guò)名稱來(lái)查找在系統(tǒng)中的所有資源。在另一個(gè)實(shí)施例中,可以通過(guò)向分類(lèi)模式應(yīng)用搜索濾波器來(lái)查找資源。
模式描述原語(yǔ)(primitive)或結(jié)構(gòu)化的數(shù)據(jù)的類(lèi)型。MFL模式描述非XML數(shù)據(jù)的類(lèi)型。XML模式描述XML的類(lèi)型。XML模式類(lèi)型可以輸入或包括其他的模式文件。變換映射描述了在兩種類(lèi)型之間的映射。XSLT映射描述了使用XSLT標(biāo)準(zhǔn)的對(duì)于XML數(shù)據(jù)的映射。XQuery映射使用XQuery標(biāo)準(zhǔn)而描述了XML和非XML(MFL)數(shù)據(jù)的映射。
WSDL接口是用于服務(wù)接口的模板,并且描述了包括該接口中的操作的服務(wù)的抽象接口以及操作簽名中的消息部分的類(lèi)型。它還可選擇地描述所述消息部分向所述消息的綁定(封裝)和所述消息向傳輸?shù)慕壎?。它也可選擇地描述服務(wù)的具體接口。
WS策略描述了安全和可靠的消息傳送策略。它描述了使用什么算法來(lái)在消息中簽字或加密什么。它也描述了當(dāng)接收時(shí)應(yīng)當(dāng)對(duì)于所述消息使用什么鑒別機(jī)制。
圖5是按照一個(gè)實(shí)施例的組件架構(gòu)的圖解。服務(wù)總線可以被部署在也作為管理服務(wù)器502的單個(gè)服務(wù)器上或服務(wù)器集群上(例如,一個(gè)集群包括一組聚集的被管理的服務(wù)器500)。配置框架組件504可以提供用于配置信息的CRUD(創(chuàng)建、讀取、更新、刪除)能力以及對(duì)象和文件完整性保護(hù)、高速緩沖存儲(chǔ)和索引、引用完整性(referential integrity)和配置傳播。所述管理服務(wù)器可以向被管理的服務(wù)器傳播所述配置信息。
在一個(gè)實(shí)施例中,任務(wù)框架組件506可以提供對(duì)于任務(wù)或組合任務(wù)(多個(gè)任務(wù)的任務(wù))的操作取消和系列化能力,它們是包括對(duì)于獨(dú)立的配置對(duì)象的多個(gè)CRUD操作的配置操作。配置傳播的單元是任務(wù),任務(wù)可以包含執(zhí)行特殊代碼,并且可以包含在被管理的服務(wù)器中部署EAR或WAR(主要用于自動(dòng)數(shù)據(jù)庫(kù)(automatic database)或?qū)τ趥鬏數(shù)妮p加權(quán)的web應(yīng)用的部署),并且支持粗顆粒的并發(fā)性控制(系列化任務(wù)執(zhí)行)。在一個(gè)實(shí)施例中,匯聚框架組件524可以提供用于收集量度并且將它們傳播到管理服務(wù)器以用于集群寬匯集的能力。在一個(gè)實(shí)施例中,數(shù)據(jù)越舊,則被匯集的數(shù)據(jù)變得越粗(在持續(xù)時(shí)間方面)。例如對(duì)于最后的小時(shí)(last hour),匯集間隔是5分鐘。此前,對(duì)于最后一天,匯集間隔是1個(gè)小時(shí)。此前,對(duì)于最后一周,匯集間隔是1天,等等。
在一個(gè)實(shí)施例中,警告系統(tǒng)510分析被匯集的量度以確定是否違反了服務(wù)級(jí)協(xié)議(SLA)規(guī)則,并且如果肯定則發(fā)出(raise)警告。在一個(gè)實(shí)施例中,警告目的地可以是電子郵件、web服務(wù)、WLI記錄器、隊(duì)列等(在必要時(shí)可以增加更多)。
在一個(gè)實(shí)施例中,控制臺(tái)用戶界面(UI)組件512是與門(mén)戶(portal)集成的基于JSP的小門(mén)戶(portlet)??刂婆_(tái)UI提供對(duì)于在控制臺(tái)上的監(jiān)控和配置的支持。
在一個(gè)實(shí)施例中,外部和服務(wù)代理配置組件514定義了代理或外部服務(wù)接口的抽象的、具體的安全和訪問(wèn)策略和綁定信息。服務(wù)代理是由服務(wù)總線服務(wù)器主管的中介人,而外部服務(wù)是在一些其他的服務(wù)器中駐留的、消息要路由到的外部端點(diǎn)。對(duì)于服務(wù)代理,它定義了由服務(wù)代理根據(jù)流水線架構(gòu)而對(duì)于輸入和輸出消息執(zhí)行的順序消息處理。它在存在大量的服務(wù)時(shí)也提供搜索能力。
按照一個(gè)實(shí)施例,用戶和證書(shū)配置組件516可以定義UI(用戶界面)和消息傳送用戶以及屬性和與該用戶相配的證書(shū)。在本實(shí)施例的各個(gè)方面,用戶可以按等級(jí)分成多個(gè)組,并且組和用戶可以屬于一個(gè)角色,所述角色被許可訪問(wèn)資源。消息傳送用戶可以是可發(fā)送消息的服務(wù)消費(fèi)者或提供發(fā)送或接收消息的服務(wù)的服務(wù)提供者。
在一個(gè)實(shí)施例中,資源配置組件518可以用于定義共享資源,如(但是不限于)模板WSDL(web服務(wù)定義語(yǔ)言)、WS安全策略、模式、本體論(用于分類(lèi)服務(wù)和服務(wù)提供者的分類(lèi)方案)和可以被多個(gè)服務(wù)平衡(leverage)的變換映射。在有大量資源時(shí)它還提供搜索能力。
在一個(gè)實(shí)施例中,監(jiān)控組件520提供監(jiān)控UI用于服務(wù)總線系統(tǒng)顯示警告和量度。
在一個(gè)實(shí)施例中,輸入/輸出組件522允許在服務(wù)總線安裝之間的服務(wù)和其他資源的移動(dòng)。設(shè)計(jì)(design)、籌備(stage)和制作(production)全部是獨(dú)立的香草(vanilla)服務(wù)總線安裝。如果輸入的對(duì)象已經(jīng)存在(替換或保持),則輸入允許指定環(huán)境特定配置參數(shù)和使用的方法。它還允許通過(guò)將被輸入的對(duì)象鏈接到相同類(lèi)型的現(xiàn)有對(duì)象而解決在所述被輸入的對(duì)象中的未解決的參考。
在一個(gè)實(shí)施例中,傳輸和傳輸SPI 526組件提供了用于插入新傳輸?shù)募軜?gòu),并且也支持HTTP、JMS、電子郵件、FTP、文件、WS-RM(web服務(wù)可靠消息傳送)和從框體(box)的定時(shí)器事件傳輸。每當(dāng)可能時(shí),支持流(streaming)、可靠性、消息排序和請(qǐng)求/響應(yīng)以及單向消息。
在一個(gè)實(shí)施例中,流水線運(yùn)行時(shí)和級(jí)SPI 528組件提供了用于由用戶插入新定制級(jí)的框架,并且在服務(wù)代理中提供了環(huán)境管理和通過(guò)請(qǐng)求和響應(yīng)流水線的消息流動(dòng)。
在一個(gè)實(shí)施例中,服務(wù)代理流水線可以通過(guò)綁定層530而在任何端與傳輸接口連接,所述綁定層530可以根據(jù)對(duì)于服務(wù)代理(入站的)和被調(diào)用的(出站的)外部或服務(wù)代理定義的策略來(lái)處理消息封裝、記錄WSS處理和授權(quán)。
在一個(gè)實(shí)施例中,端點(diǎn)具有基于統(tǒng)一資源標(biāo)識(shí)符(URI)的地址。例如,服務(wù)是向服務(wù)目錄注冊(cè)的入站或出站端點(diǎn)。例如,它可以具有相關(guān)聯(lián)的WSDL、安全設(shè)置等。路由器是有名的流水線的集合。流水線是被命名的級(jí)的序列,用于表示非分支的單向處理路徑。級(jí)是用戶配置的處理步驟,諸如變換、路由等。流水線是可以作為消息處理圖的一部分的消息處理節(jié)點(diǎn)。下面是消息如何從入站端點(diǎn)(服務(wù)代理)通過(guò)系統(tǒng)流向出站端點(diǎn)(通常是外部服務(wù)或另一個(gè)服務(wù)代理)的非常基本的概觀(overview)。
傳輸層→綁定層→消息處理圖→綁定層→傳輸層在一個(gè)實(shí)施例中,所述消息處理圖是會(huì)發(fā)生消息處理和操縱的地方。雖然綁定和傳輸層主要處理通信和消息封裝/解除封裝,但是消息處理和操縱也在這些層中發(fā)生。
在一個(gè)實(shí)施例中,傳輸層負(fù)責(zé)處理與客戶和目的地端點(diǎn)的通信。它還支持諸如HTTP和JMS之類(lèi)的多種通信協(xié)議,并且負(fù)責(zé)產(chǎn)生包含諸如端點(diǎn)URI和任何相關(guān)聯(lián)的傳輸報(bào)頭之類(lèi)的東西的配置信息。對(duì)于消息內(nèi)容,傳輸層主要處理以輸入/輸出流形式的原始字節(jié)(raw byte)和諸如JMS消息類(lèi)的實(shí)例之類(lèi)的傳輸特定消息對(duì)象。在另一個(gè)實(shí)施例中,傳輸層僅僅用于向系統(tǒng)中提供消息和從系統(tǒng)獲得消息——它不執(zhí)行對(duì)于消息內(nèi)容的任何操縱。
在一個(gè)實(shí)施例中,綁定層主要負(fù)責(zé)組裝和解除組裝消息。它也可以作為在傳輸層和路由器之間的中介,所述傳輸層主要處理字節(jié)流,所述路由器可以使用更豐富的消息環(huán)境表示。由于性能上的原因,綁定層可以使用按需的(on demand)處理來(lái)避免解除封裝消息和解除調(diào)度(unmarshal)數(shù)據(jù),直到它必要時(shí)。
在另一個(gè)實(shí)施例中,綁定層還是執(zhí)行安全處理的地方。在入站方,通過(guò)接收服務(wù)代理的配置來(lái)確定安全處理。在出站方,通過(guò)目的地服務(wù)的配置來(lái)確定處理。在另一個(gè)實(shí)施例中,綁定層是服務(wù)特定的,并且依賴于配置參數(shù)來(lái)執(zhí)行其任務(wù)。
在一個(gè)實(shí)施例中,路由器負(fù)責(zé)實(shí)現(xiàn)服務(wù)代理的請(qǐng)求和響應(yīng)邏輯。可以使用用于操縱消息內(nèi)容的單向消息處理流水線節(jié)點(diǎn)來(lái)實(shí)現(xiàn)請(qǐng)求和響應(yīng)路徑。通過(guò)使用分支節(jié)點(diǎn)來(lái)確定要沿著幾個(gè)流水線路徑的哪個(gè)而使得條件執(zhí)行可能。請(qǐng)求路徑通常以發(fā)出對(duì)另一個(gè)服務(wù)或服務(wù)代理的請(qǐng)求的路由節(jié)點(diǎn)結(jié)束。來(lái)自那個(gè)服務(wù)的響應(yīng)啟動(dòng)響應(yīng)路徑處理,其后,可以向服務(wù)代理客戶發(fā)回響應(yīng)。該響應(yīng)反向通過(guò)所述消息處理圖。
在一個(gè)實(shí)施例中,流水線節(jié)點(diǎn)可以按類(lèi)型表征為三種類(lèi)別之一請(qǐng)求、響應(yīng)和錯(cuò)誤。請(qǐng)求流水線用于處理路由器的請(qǐng)求路徑,而響應(yīng)流水線用于處理響應(yīng)路徑。錯(cuò)誤流水線被用作錯(cuò)誤句柄,并且在下面的獨(dú)立部分中詳細(xì)討論。除了指示流水線的目的之外,所述類(lèi)型可以用于限制在流水線中可能出現(xiàn)哪些級(jí)。任何這樣的限制委托給單獨(dú)的級(jí)實(shí)現(xiàn)。
圖6a和6b圖解了按照一個(gè)實(shí)施例的消息處理圖。如上所述,路由器可以使用消息處理流水線來(lái)實(shí)現(xiàn)服務(wù)代理的請(qǐng)求/響應(yīng)邏輯。通過(guò)將請(qǐng)求和響應(yīng)流水線級(jí)配對(duì)在一起(“流水線對(duì)節(jié)點(diǎn)”),并且將它們組織為一個(gè)邏輯樹(shù)結(jié)構(gòu)或消息處理圖來(lái)創(chuàng)建所述請(qǐng)求和響應(yīng)路徑。在一個(gè)實(shí)施例中,節(jié)點(diǎn)實(shí)現(xiàn)了程序接口和/或協(xié)議,它與所述消息處理圖兼容。分支節(jié)點(diǎn)允許有條件的執(zhí)行,并且在分支的端點(diǎn)處的路由節(jié)點(diǎn)執(zhí)行任何請(qǐng)求/響應(yīng)發(fā)送。在一個(gè)實(shí)施例中,消息處理圖考慮了服務(wù)代理的動(dòng)作的清楚的概觀,使得路由動(dòng)作和分支條件作為整體設(shè)計(jì)的清晰的一部分,而不是將它們深深隱藏在流水線級(jí)內(nèi)部。請(qǐng)求消息跟隨通過(guò)所述消息處理圖的第一方向上的路徑。相關(guān)聯(lián)的響應(yīng)可以沿著通過(guò)所述消息處理圖的反向上的路徑行進(jìn)。
在一個(gè)實(shí)施例中,消息處理圖可以包括三個(gè)頂級(jí)組件的一個(gè)或多個(gè)實(shí)例(圖6a-6b)·流水線對(duì)節(jié)點(diǎn)(“PP”)。
·分支節(jié)點(diǎn)(“BR”)。
·路由節(jié)點(diǎn)(“RT”)。
圖6a圖解了具有單個(gè)流水線對(duì)節(jié)點(diǎn)600和單個(gè)路由節(jié)點(diǎn)602的消息處理圖,所述單個(gè)路由節(jié)點(diǎn)602被配置來(lái)向服務(wù)603轉(zhuǎn)發(fā)消息。所述流水線對(duì)節(jié)點(diǎn)將單個(gè)請(qǐng)求和單個(gè)響應(yīng)流水線節(jié)點(diǎn)一起捆綁為一個(gè)頂極元素。在另一個(gè)實(shí)施例中,流水線對(duì)節(jié)點(diǎn)可以具有在消息處理圖中的一個(gè)直接的子輩(descendant)。在請(qǐng)求消息處理期間,當(dāng)請(qǐng)求流水線節(jié)點(diǎn)訪問(wèn)流水線對(duì)節(jié)點(diǎn)時(shí),可以執(zhí)行所述請(qǐng)求流水線節(jié)點(diǎn)。當(dāng)為響應(yīng)處理逆轉(zhuǎn)路徑時(shí),可以執(zhí)行響應(yīng)流水線節(jié)點(diǎn)。
按照一個(gè)實(shí)施例,所述路由節(jié)點(diǎn)可以執(zhí)行請(qǐng)求/響應(yīng)與服務(wù)的通信。在本實(shí)施例的各方面,路由節(jié)點(diǎn)表示在服務(wù)代理的請(qǐng)求和響應(yīng)處理之間的邊界。當(dāng)路由節(jié)點(diǎn)發(fā)送請(qǐng)求消息時(shí),請(qǐng)求處理被認(rèn)為結(jié)束。當(dāng)路由節(jié)點(diǎn)接收響應(yīng)消息時(shí),響應(yīng)處理開(kāi)始。路由節(jié)點(diǎn)本身具有對(duì)于條件路由以及出站和響應(yīng)變換的支持。是否條件出現(xiàn)在路由節(jié)點(diǎn)中或在消息處理圖中作為分支節(jié)點(diǎn)由用戶負(fù)責(zé)。在一個(gè)實(shí)施例中,路由節(jié)點(diǎn)在所述圖中沒(méi)有任何子輩。
圖6b圖解了按照一個(gè)實(shí)施例的具有分支節(jié)點(diǎn)的消息處理圖。分支節(jié)點(diǎn)606允許處理以便精確地沿著幾個(gè)可能的路徑608之一來(lái)進(jìn)行。在這些實(shí)施例的各方面,可以通過(guò)單個(gè)查找表來(lái)驅(qū)動(dòng)分支,每個(gè)分支用簡(jiǎn)單但是唯一的串值(string value)作標(biāo)簽。在消息環(huán)境中的變量可以被指定用于該節(jié)點(diǎn)的查找變量,并且其值可以用于確定要沿著哪個(gè)分支。如果沒(méi)有分支匹配查找變量的值,則沿著默認(rèn)的分支??梢栽诘竭_(dá)分支節(jié)點(diǎn)之前完成設(shè)置查找變量的值。分支節(jié)點(diǎn)可以具有在所述圖中的幾個(gè)子輩;包括默認(rèn)分支的每個(gè)分支一個(gè)。
在一個(gè)實(shí)施例中,當(dāng)服務(wù)代理接收到請(qǐng)求時(shí),請(qǐng)求處理在消息處理圖的根部開(kāi)始。在某個(gè)點(diǎn),請(qǐng)求消息被傳送到流水線對(duì)節(jié)點(diǎn),在此,所述請(qǐng)求流水線節(jié)點(diǎn)被調(diào)用來(lái)執(zhí)行處理。當(dāng)請(qǐng)求消息被傳送到分支節(jié)點(diǎn)時(shí),請(qǐng)求沿著所選擇的分支被進(jìn)一步傳送。當(dāng)消息被傳送到路由節(jié)點(diǎn)時(shí),執(zhí)行路由與任何出站/響應(yīng)變換。當(dāng)由服務(wù)代理接收到響應(yīng)消息時(shí),它可以沿著與由請(qǐng)求消息采用的路徑相反的路徑而被傳送。對(duì)于簡(jiǎn)單結(jié)束而沒(méi)有路由節(jié)點(diǎn)的任何請(qǐng)求路徑發(fā)生相同的事情——服務(wù)總線啟動(dòng)響應(yīng)處理并且返回所述圖,但是不等待任何響應(yīng)。在響應(yīng)處理期間,當(dāng)我們遇到流水線對(duì)節(jié)點(diǎn)時(shí),我們執(zhí)行響應(yīng)流水線節(jié)點(diǎn)。當(dāng)我們遇到分支節(jié)點(diǎn)時(shí),它被當(dāng)作空操作,并且響應(yīng)被傳送到在所述分支之前的元素。當(dāng)響應(yīng)最后達(dá)到圖的根部時(shí),響應(yīng)被發(fā)回請(qǐng)求客戶(它可以是另一個(gè)服務(wù)或服務(wù)代理)。
在一個(gè)實(shí)施例中,任何元素可以出現(xiàn)在消息處理圖的根部。最簡(jiǎn)單的路由器設(shè)計(jì)之一是僅僅在頂部有一個(gè)路由節(jié)點(diǎn),用于表示整個(gè)圖。對(duì)于哪兩個(gè)元素可以鏈接在一起也沒(méi)有限制。例如,兩個(gè)流水線對(duì)節(jié)點(diǎn)可以被鏈接在一起而在兩者之間沒(méi)有分支節(jié)點(diǎn)。對(duì)于分支,每個(gè)分支可以以不同的元素開(kāi)始——一個(gè)分支可以用路由節(jié)點(diǎn)而立即終止,另一個(gè)可以由流水線對(duì)跟隨,并且另一個(gè)可以無(wú)論如何也沒(méi)有子輩。在后一種情況下,沒(méi)有子輩的分支僅僅表示如果選擇那個(gè)分支則響應(yīng)處理立即開(kāi)始。但是,一般來(lái)說(shuō),消息處理圖有可能具有兩種形式用于非操作服務(wù),所述圖有可能包含由路由節(jié)點(diǎn)跟隨的根部處的單個(gè)流水線對(duì);用于操作服務(wù),所述消息處理圖有可能再次包括根部處的單個(gè)流水線對(duì),其后跟隨基于操作的分支節(jié)點(diǎn),每個(gè)分支包括由路由節(jié)點(diǎn)跟隨的流水線對(duì)。
在一個(gè)實(shí)施例中,路由器可以用于基于WSDL的服務(wù),因此需要執(zhí)行操作特定的處理。與要求用戶手動(dòng)地配置基于操作的分支節(jié)點(diǎn)不同,系統(tǒng)可以提供零配置分支節(jié)點(diǎn),它基于操作自動(dòng)地分支??梢詫?duì)于在所述服務(wù)上定義的每個(gè)操作創(chuàng)建分支,并且分支變量當(dāng)然可以是$operation。
由于各種原因而在消息處理期間會(huì)發(fā)生錯(cuò)誤(例如在路由時(shí)的傳送錯(cuò)誤、在變換時(shí)的驗(yàn)證錯(cuò)誤、在解除調(diào)度時(shí)的安全錯(cuò)誤等)。通常,這些錯(cuò)誤始發(fā)自特定級(jí)、路由節(jié)點(diǎn)或綁定層,因?yàn)槟鞘强梢詫?shí)現(xiàn)多數(shù)路由器邏輯的地方。在一個(gè)實(shí)施例中,系統(tǒng)提供了一種機(jī)制,用于通過(guò)允許用戶定義錯(cuò)誤句柄來(lái)處理這些錯(cuò)誤。在一個(gè)實(shí)施例中,錯(cuò)誤句柄必須是另一個(gè)流水線節(jié)點(diǎn),它允許用戶執(zhí)行各種動(dòng)作,諸如登錄、變換和發(fā)布,以適當(dāng)?shù)靥幚礤e(cuò)誤。
在一個(gè)實(shí)施例中,錯(cuò)誤句柄可以被配置來(lái)用于整個(gè)服務(wù)代理以及用于每個(gè)流水線節(jié)點(diǎn)和其中的級(jí)。當(dāng)發(fā)生錯(cuò)誤時(shí),它由最內(nèi)部包含的錯(cuò)誤句柄來(lái)處理。例如,如果在變換級(jí)發(fā)生變換錯(cuò)誤,則它可以由那個(gè)級(jí)的錯(cuò)誤句柄來(lái)處理。如果未配置這樣的錯(cuò)誤句柄,則它可以通過(guò)下一級(jí)的錯(cuò)誤句柄來(lái)處理,所述下一級(jí)錯(cuò)誤句柄是包含變換級(jí)的流水線的錯(cuò)誤句柄。如果那個(gè)錯(cuò)誤句柄不存在,則隨后它被路由器級(jí)的錯(cuò)誤句柄處理。如果失敗,則默認(rèn)的系統(tǒng)級(jí)錯(cuò)誤句柄可以處理該錯(cuò)誤。
圖7是按照一個(gè)實(shí)施例的錯(cuò)誤處理范圍的圖解。每個(gè)閉合的框體表示一個(gè)錯(cuò)誤處理范圍??梢栽谒龈綀D中看出,用于在路由節(jié)點(diǎn)704發(fā)生的未被捕獲的錯(cuò)誤的下一級(jí)錯(cuò)誤句柄在路由器級(jí)的范圍706。如果在此范圍中沒(méi)有句柄,則將調(diào)用在系統(tǒng)級(jí)范圍708的句柄。對(duì)于未捕獲到其本身的錯(cuò)誤的流水線級(jí)700,錯(cuò)誤可以被傳播到流水線范圍702。如果其中沒(méi)有定義錯(cuò)誤句柄,則錯(cuò)誤可以傳播到系統(tǒng)級(jí)范圍708。每個(gè)組件——如果它是級(jí)——流水線或路由器可以具有錯(cuò)誤句柄。在一個(gè)實(shí)施例中,因?yàn)槿胝镜慕壎▽硬慌c任何特定的級(jí)或流水線相關(guān)聯(lián),因此在綁定層中發(fā)生的錯(cuò)誤可以由路由器級(jí)的句柄處理。出站的綁定層錯(cuò)誤可依賴于什么實(shí)體正在執(zhí)行通信而發(fā)生在幾個(gè)位置。例如,在路由期間發(fā)生的綁定層錯(cuò)誤可以被路由的節(jié)點(diǎn)的錯(cuò)誤句柄捕獲。類(lèi)似地,在發(fā)布級(jí)中的發(fā)布操作期間發(fā)生的綁定層錯(cuò)誤可以被級(jí)(stage)這一級(jí)別的錯(cuò)誤句柄捕獲。在一個(gè)實(shí)施例中,空的或未配置的錯(cuò)誤句柄等同于根本沒(méi)有錯(cuò)誤句柄。在我們的前一個(gè)變換示例中,如果級(jí)這一級(jí)別的錯(cuò)誤句柄被創(chuàng)建但是從未被配置,則所述錯(cuò)誤會(huì)“沸騰”到下一級(jí)別的句柄。在一個(gè)實(shí)施例中,當(dāng)錯(cuò)誤句柄可以使用三種動(dòng)作——重投、回答和繼續(xù)——之一來(lái)結(jié)束錯(cuò)誤句柄時(shí)。所述重投動(dòng)作表示錯(cuò)誤被重投,并且要被下一級(jí)別的錯(cuò)誤句柄處理。除非被指定,否則錯(cuò)誤句柄的默認(rèn)動(dòng)作是重投,這是為什么空錯(cuò)誤句柄像不存在的錯(cuò)誤句柄那樣表現(xiàn)的原因。回答動(dòng)作表示對(duì)于服務(wù)代理客戶立即產(chǎn)生響應(yīng)。所有的其他流水線處理被立即終止,并且根據(jù)與消息相關(guān)聯(lián)的環(huán)境變量來(lái)發(fā)送響應(yīng)消息。因此該由用戶來(lái)配置錯(cuò)誤句柄以在必要時(shí)變換這些變量以產(chǎn)生有意義的響應(yīng)消息。
繼續(xù)動(dòng)作用于繼續(xù)流水線處理,就好像根本沒(méi)有發(fā)生錯(cuò)誤。處理在成功地消耗(consume)錯(cuò)誤的任何點(diǎn)繼續(xù)。這可能要求用戶配置錯(cuò)誤句柄以安排環(huán)境變量,因?yàn)樗鼈兛赡芴幵谟陕酚善鞯钠溆嗖糠植黄谕臓顟B(tài)中。當(dāng)錯(cuò)誤句柄消除錯(cuò)誤時(shí),處理恢復(fù),就好像與所述錯(cuò)誤句柄相關(guān)聯(lián)的組件剛剛成功地結(jié)束執(zhí)行。例如,如果在一個(gè)級(jí)中發(fā)生錯(cuò)誤并且與那個(gè)級(jí)相關(guān)聯(lián)的錯(cuò)誤句柄消除了所述錯(cuò)誤,則處理以在所述流水線中的下一個(gè)級(jí)繼續(xù),就好像所述級(jí)已經(jīng)成功地結(jié)束。但是,如果沒(méi)有被配置到所述級(jí)的錯(cuò)誤句柄或如果所述錯(cuò)誤句柄重投了錯(cuò)誤,則通過(guò)流水線級(jí)的錯(cuò)誤句柄來(lái)消除所述錯(cuò)誤。如果如此的話,則處理恢復(fù),就好像整個(gè)流水線已經(jīng)成功地結(jié)束了執(zhí)行。例如,如果那個(gè)流水線是服務(wù)請(qǐng)求流水線,則我們可以以操作請(qǐng)求流水線來(lái)進(jìn)行。對(duì)于路由器級(jí)的錯(cuò)誤句柄,繼續(xù)等同于回答,因?yàn)樵诔晒Φ貓?zhí)行了路由器后的下一個(gè)動(dòng)作是向客戶發(fā)送響應(yīng)。
因?yàn)樵谝粋€(gè)實(shí)施例中錯(cuò)誤句柄僅僅是另一個(gè)流水線,則可以將其配置為類(lèi)似的任何其他的流水線。例如,發(fā)布級(jí)可以用于向其他服務(wù)發(fā)送錯(cuò)誤通知,變換級(jí)可以用于通知環(huán)境變量等。但是,一些級(jí)不允許出現(xiàn)在錯(cuò)誤句柄中。此時(shí),被禁止的級(jí)是路由級(jí)。除了標(biāo)準(zhǔn)的環(huán)境變量之外,在更多的方面還有可以用于錯(cuò)誤句柄的兩個(gè)另外的環(huán)境變量。當(dāng)錯(cuò)誤句柄被調(diào)用時(shí)設(shè)置這些變量,并且如果經(jīng)由繼續(xù)而恢復(fù)了正常的流水線處理,則自動(dòng)消除這些變量。所述兩個(gè)變量是$fault和$faultAction。$fult變量保存關(guān)于錯(cuò)誤和錯(cuò)誤發(fā)生的位置的信息。這個(gè)變量可以與其他的環(huán)境變量一起使用來(lái)在諸如發(fā)布和變換之類(lèi)的級(jí)中執(zhí)行條件動(dòng)作。錯(cuò)誤句柄可以甚至在將錯(cuò)誤重投到下一級(jí)的錯(cuò)誤句柄之前修改$fault的內(nèi)容。
$faultAction是用于確定一旦錯(cuò)誤句柄已經(jīng)結(jié)束了執(zhí)行而可以執(zhí)行什么動(dòng)作的特殊變量。它是簡(jiǎn)單的串值變量,可以取下列三個(gè)值之一“重投”、“回答”和“繼續(xù)”。當(dāng)錯(cuò)誤句柄結(jié)束執(zhí)行時(shí),查看這個(gè)變量以確定是否服務(wù)代理應(yīng)當(dāng)重投錯(cuò)誤,立即向客戶回答或繼續(xù)處理。這個(gè)變量被初始化為“重投”的值,因此如果用戶希望改變錯(cuò)誤句柄的默認(rèn)重投動(dòng)作,則需要變換以將所述值改變?yōu)榛蛘摺袄^續(xù)”或“回答”。
在一個(gè)實(shí)施例中,環(huán)境是屬性包。每個(gè)屬性(“變量”)具有名稱和相關(guān)聯(lián)的值。預(yù)定的環(huán)境變量用于表示在流水線中的多條消息,并且用于保存關(guān)于入站和出站的服務(wù)端點(diǎn)的信息。也可以在流水線處理期間引入另外的變量。在一個(gè)實(shí)施例中,可以使用XQuery表達(dá)來(lái)操縱環(huán)境變量。流水線級(jí)可以內(nèi)部地操縱環(huán)境,作為它們的動(dòng)作的一部分。
下面是在一個(gè)實(shí)施例中的系統(tǒng)定義的環(huán)境變量的列表以及按照一個(gè)實(shí)施例的簡(jiǎn)述。
·header(報(bào)頭)-包含用于SOAP消息的SOAP報(bào)頭。
·body(主體)-包含SOAP消息的SOAP主體。
·attachments(附件)-包含消息附件。
·inbound(入站)-包含關(guān)于接收到請(qǐng)求的服務(wù)代理的信息。
·outbound(出站)-包含關(guān)于要向其發(fā)送消息的目標(biāo)服務(wù)的信息。
·operation(操作)-識(shí)別正在被調(diào)用的服務(wù)代理操作(如果適用的話)。
·fault(默認(rèn))-包含關(guān)于已經(jīng)在處理期間發(fā)生的任何錯(cuò)誤的信息。
·faultAction(默認(rèn)動(dòng)作)-指定應(yīng)當(dāng)在執(zhí)行錯(cuò)誤句柄后采取什么動(dòng)作。
在一個(gè)實(shí)施例中,header、body和attachments表示當(dāng)消息流過(guò)消息處理圖時(shí)的消息的狀態(tài)??梢酝ㄟ^(guò)修改這些變量來(lái)完成修改所述消息。這些變量使用由服務(wù)代理接收的消息內(nèi)容來(lái)初始化,并且用于當(dāng)向其他服務(wù)發(fā)送(例如經(jīng)由路由)時(shí)構(gòu)造出站的消息。所有消息相關(guān)聯(lián)的變量可以被消息處理節(jié)點(diǎn)和級(jí)更新。所述變量整體是獨(dú)立的,并且可以單獨(dú)地被修改。
當(dāng)通過(guò)服務(wù)代理來(lái)發(fā)送消息時(shí),可以選擇那個(gè)變量的內(nèi)容要包括在所述消息中。在一個(gè)實(shí)施例中,該確定依賴于關(guān)于是否目標(biāo)端點(diǎn)正期望SOAP或非SOAP消息。在SOAP的情況下,header和body被組合在SOAP封裝(envelop)中以創(chuàng)建消息。在非SOAP的情況下,payload(有效負(fù)荷)是整個(gè)消息。在任何一種情況下,如果服務(wù)正期望附件,則可以從作為結(jié)果得到的消息和attachments變量產(chǎn)生MIME封裝。header變量包含與消息相關(guān)聯(lián)的任何SOAP報(bào)頭。它指向<SOAP:Header>元素,并且以報(bào)頭來(lái)作為子元素。如果是沒(méi)有報(bào)頭的SOAP消息或非SOAP消息的情況,則<SOAP:Header>元素可以是空的,沒(méi)有子元素。
body變量表示核心消息有效負(fù)荷,并且指向<SOAP:Body>元素。在SOAP消息的情況下,SOAP主體被從封裝提取,并且被分配到主體變量。如果消息是非SOAP或非XML,則全部消息內(nèi)容被布置在新創(chuàng)建的<SOAP:Body>元素中。因此,可以經(jīng)由同一變量并且使用同一封裝來(lái)獲得SOAP和非SOAP消息的核心有效負(fù)荷(例如在<SOAP:Body>元素中被包裝)。
attachments變量保存與消息相關(guān)聯(lián)的任何附件。在另一個(gè)實(shí)施例中,attachments變量是一條單根的XML,它對(duì)于每個(gè)獨(dú)立的附件具有一個(gè)子元素。這些子元素包含關(guān)于(從MIME報(bào)頭得到的)附件的信息以及附件內(nèi)容。在本實(shí)施例的各方面,attachment元素可以包括下列元素·Content-ID(內(nèi)容標(biāo)識(shí)符)-用于識(shí)別附件的全局唯一的參考。
·Content-Type(內(nèi)容類(lèi)型)-用于指定附件的介質(zhì)類(lèi)型和子類(lèi)型。
·Content-Transfer-Encoding(內(nèi)容傳送編碼)-指定如何編碼所述附件。
·Content-Description(內(nèi)容說(shuō)明)-內(nèi)容的文本說(shuō)明。
·Content-Location(內(nèi)容位置)-用于識(shí)別附件的基于局部唯一的URI的參考。
·Content-Disposition(內(nèi)容處置)-用于指定接收方如何處理附件。
·Body(主體)-保存附件數(shù)據(jù)。
在一個(gè)實(shí)施例中,入站和出站管理包含關(guān)于入站和出站端點(diǎn)的信息。入站變量包含關(guān)于接收到請(qǐng)求消息的服務(wù)代理的信息,而出站變量包含關(guān)于可以發(fā)送消息的目的地服務(wù)(例如路由)的信息。所述變量具有相同的XML模式,并且包含“服務(wù)”、“傳輸”和“客戶”子元素以及單個(gè)“名稱”屬性,所述單個(gè)“名稱”屬性用于當(dāng)端點(diǎn)被注冊(cè)在服務(wù)目錄中時(shí)標(biāo)識(shí)端點(diǎn)的名稱。
在一個(gè)實(shí)施例中,service(服務(wù))變量包含關(guān)于服務(wù)的一般信息,并可以包括下面的元素providerName-保存服務(wù)提供者的名稱versionGroup-用于識(shí)別服務(wù)的版本類(lèi)型version-用于識(shí)別與版本組相關(guān)聯(lián)的服務(wù)的版本號(hào)。
operation-用于識(shí)別在外部服務(wù)上正在被調(diào)用的操作的名稱。
在一個(gè)實(shí)施例中,transport(傳輸)元素包含關(guān)于服務(wù)的傳輸細(xì)節(jié),并且可以包括下面的元素·uri-用于識(shí)別端點(diǎn)的URI。對(duì)于入站,這是URI,消息按照它來(lái)到達(dá)。對(duì)應(yīng)出站,這是當(dāng)發(fā)送消息時(shí)要使用的URI,它覆蓋服務(wù)目錄中注冊(cè)的任何URI值。
·request-關(guān)于包括傳輸報(bào)頭的請(qǐng)求的傳輸特定配置信息。每個(gè)傳送可以具有其本身的RequestConfiguration信息的特殊化,因此這個(gè)元素的結(jié)構(gòu)最終依賴于正在被使用的傳輸。
·response-關(guān)于包括傳輸報(bào)頭的響應(yīng)的傳輸特定配置信息。與所述RequestConfiguration信息相同,這個(gè)元素的結(jié)構(gòu)最終依賴于正在被使用的傳輸。
·mode-用于指示是否通信形式是請(qǐng)求(單向)或請(qǐng)求-響應(yīng)(雙向)。
·security Type-用于指示傳輸?shù)陌踩?lèi)型。在一個(gè)實(shí)施例中,可能值是“非”、“基本”、“單向SSL”和“雙向SSL”。
·accountAlias-這個(gè)元素標(biāo)識(shí)向?qū)τ谧C書(shū)管理器注冊(cè)的外部服務(wù)帳戶的別名。傳輸層可以使用這個(gè)值來(lái)作為在證書(shū)管理器查找中的密鑰以獲得要用在出站的HTTP/S連接上的用戶名/密碼。
·qualityOfService-指定當(dāng)發(fā)送消息時(shí)期望的服務(wù)質(zhì)量。在一個(gè)實(shí)施例中,可能值是“最佳-效果”和“精確地-一次”。
·retryCount-當(dāng)發(fā)送消息時(shí)使用的重試次數(shù)。
·retryInternal-在試圖重發(fā)消息之前要等待的用秒表示的間隔。
在一個(gè)實(shí)施例中,消息處理級(jí)可以使用XQuery和/或XUpgate來(lái)操縱環(huán)境。在環(huán)境中的每個(gè)變量可以被表示為同一名稱的XQuery變量。例如,header變量在XQuery中作為$header可被訪問(wèn)。
在一個(gè)實(shí)施例中,環(huán)境變量值可以根據(jù)要求被產(chǎn)生,并且盡可能多地成流(stream)。例如,可以通過(guò)傳送層返回作為JavaInputStream(輸入流)的輸入的請(qǐng)求和響應(yīng)消息。在穿通(pass-thru)處理的情況下,不接觸所述流,直到服務(wù)代理將其發(fā)送到另一個(gè)服務(wù)或服務(wù)代理。對(duì)于SOAP消息,headers(報(bào)頭)變量可以是未調(diào)度的,而不必將body(主體)具體化。同樣,如果訪問(wèn)attachments(附件)變量,則可以解除封裝附件。在operation(操作)的情況下,如果特別地訪問(wèn)所述變量,則它也應(yīng)當(dāng)觸發(fā)有關(guān)請(qǐng)求消息的檢查以確定正在被調(diào)用的操作。
除了路由、變換和監(jiān)控,服務(wù)總線還包括使得有可能保證在客戶、服務(wù)代理和服務(wù)之間的安全消息交換的各種特征。在一個(gè)實(shí)施例中,服務(wù)總線提供在TLS/SSL上的消息機(jī)密性、消息完整性、服務(wù)器鑒別和客戶鑒別;SOAP消息的消息級(jí)機(jī)密性、完整性和發(fā)送方鑒別;在傳輸和消息級(jí)的訪問(wèn)控制;證書(shū)管理;以及安全審計(jì)。
在一個(gè)實(shí)施例中,在服務(wù)總線中的安全特征使用可插入的安全提供者架構(gòu)和安全服務(wù),諸如鑒別、身份聲明、授權(quán)、角色映射、審計(jì)、證書(shū)映射和證明書(shū)查找和確認(rèn)。服務(wù)總線可以使用作為構(gòu)建塊的所有這些提供者,用于提供較高級(jí)的安全服務(wù)。用戶可以將這些框體提供者中的任何一個(gè)替代為第三方提供者或它們自己的定制提供者。在一個(gè)實(shí)施例中,可以由從BEA系統(tǒng)公司可用的BEA WebLogic Enterprise SecurityTM提供服務(wù)總線安全。
圖8是在一個(gè)實(shí)施例中的服務(wù)提供者的圖示。由外部服務(wù)提供者804提供一個(gè)或多個(gè)外部服務(wù)808。中介服務(wù)總線服務(wù)被稱為可以由代理(或本地)提供者802提供的服務(wù)代理806。服務(wù)提供者是具有安全身份的應(yīng)用、組織或部門(mén)。調(diào)用服務(wù)代理并且具有安全身份的客戶被稱為服務(wù)消費(fèi)者800。外部服務(wù)提供者本來(lái)也是服務(wù)消費(fèi)者,因?yàn)樗鼈兛梢酝交虍惒降仨憫?yīng)請(qǐng)求。
通過(guò)在各個(gè)實(shí)施例中舉例來(lái)說(shuō),服務(wù)總線和外部服務(wù)可以在同一網(wǎng)絡(luò)中、在防火墻后或具有在服務(wù)消費(fèi)者和服務(wù)總線和/或服務(wù)總線和外部服務(wù)之間的防火墻的不同網(wǎng)絡(luò)上。在一個(gè)實(shí)施例中,服務(wù)代理和目標(biāo)服務(wù)共存在同一域中。此特殊情況可以是服務(wù)處理管理(BPM)。在頻譜的另一端,服務(wù)總線代理從在組織外部的交易伙伴接收消息或?qū)⑾⒙酚傻皆诮M織外部的交易伙伴。在一個(gè)實(shí)施例中,用戶管理處理在給定的鑒別提供者中的用戶、組和角色的創(chuàng)建、更新和刪除操作。這些提供者是安全框架的一部分。另外,用戶管理也允許創(chuàng)建一些用戶特性。用戶、組和角色可以利用控制臺(tái)配置,用于鑒別控制臺(tái)用戶和消息提供者。
在一個(gè)實(shí)施例中,用戶是在鑒別提供者中的實(shí)體。多個(gè)鑒別提供者被支持。一個(gè)組是其成員身份靜止并且由該組的管理員分配成員身份的用戶的邏輯分組。角色是用戶的邏輯分組和其成員身份根據(jù)角色條件或策略而被動(dòng)態(tài)計(jì)算的多個(gè)組。管理員可以在所支持的任何一個(gè)鑒別提供者中創(chuàng)建、讀取、更新和刪除用戶、組和角色。訪問(wèn)控制策略通?;诮巧?br> 在一個(gè)實(shí)施例中,服務(wù)總線支持在HTTPS上的傳輸級(jí)機(jī)密性、消息完整性和對(duì)于單向請(qǐng)求或請(qǐng)求/響應(yīng)(從客戶到服務(wù)總線)的客戶鑒別。服務(wù)總線可以執(zhí)行基于策略的訪問(wèn)控制,并且可以審計(jì)鑒別和授權(quán)事件。當(dāng)鑒別或授權(quán)失敗時(shí)觸發(fā)警告。在一個(gè)實(shí)施例中,當(dāng)激活服務(wù)代理時(shí),服務(wù)總線可以迅速地產(chǎn)生和部署薄web應(yīng)用。應(yīng)用服務(wù)器(例如WebLogic服務(wù)器)可以提供服務(wù)器方的SSL支持,包括會(huì)話管理、客戶證明書(shū)確認(rèn)和鑒別、信任管理和服務(wù)器SSL密鑰/證明書(shū)操縱。
在一個(gè)實(shí)施例中,所述應(yīng)用服務(wù)器可以以SSL協(xié)議向客戶發(fā)送其證明書(shū)。換句話說(shuō),客戶鑒別服務(wù)器,除此之外,在SSL握手期間,服務(wù)器可以請(qǐng)求客戶向服務(wù)器發(fā)送其證明書(shū),以便服務(wù)器鑒別客戶。這通常被稱為雙向SSL。當(dāng)未請(qǐng)求客戶發(fā)送其證明書(shū)時(shí),被稱為單向SSL。在SSL頂部的較高級(jí)的協(xié)議可以自由定義它們自己的鑒別機(jī)制。對(duì)于例如HTTPS,一旦完成了SSL握手,客戶可以通過(guò)在萬(wàn)維網(wǎng)鑒別HTTP報(bào)頭中發(fā)送他們的用戶名和密碼來(lái)向服務(wù)器鑒別。這被稱為BASIC(基本)鑒別。
在一個(gè)實(shí)施例中,如果服務(wù)代理已經(jīng)被配置為獲取客戶鑒別,則所述服務(wù)器可以向服務(wù)代理端點(diǎn)鑒別所有的請(qǐng)求。對(duì)于BASIC鑒別,服務(wù)器可以憑借相對(duì)于在領(lǐng)域中配置的鑒別提供者——諸如LDAP、有效目錄等——而鑒別客戶。對(duì)于CLIENT-CERT(客戶證明書(shū))鑒別,SSL引擎可以驗(yàn)證客戶證明書(shū)。一旦已經(jīng)建立了對(duì)于證明書(shū)的信任,則將證明書(shū)傳送到身份聲明提供者以提取客戶身份。在本實(shí)施例的各方面中,身份聲明提供者是服務(wù)器安全框架的另一個(gè)組件。身份聲明者被配置來(lái)提取證明書(shū)的某些字段來(lái)用做客戶身份,通常是在證明書(shū)中的SubjectDistinguishedName(主體識(shí)別名稱)的CN(公共名稱)或E(電子郵件)。最后,鑒別提供者被調(diào)用來(lái)收集用戶所屬的所有組。結(jié)尾的結(jié)果是簽字的Java鑒別和授權(quán)服務(wù)(JAAS)主題,一個(gè)負(fù)責(zé)體保存客戶身份,一個(gè)負(fù)責(zé)體用于用戶所屬的每個(gè)組。
在一個(gè)實(shí)施例中,服務(wù)總線也支持在HTTP代理上的基本客戶鑒別。當(dāng)首先部署HTTP/HTTPS代理時(shí),在授權(quán)提供者中存儲(chǔ)服務(wù)代理URI的訪問(wèn)控制策略。在一個(gè)實(shí)施例中,服務(wù)總線支持XACML。
在一個(gè)實(shí)施例中,如果服務(wù)代理不要求客戶鑒別,則初始訪問(wèn)控制策略許可對(duì)所有請(qǐng)求的訪問(wèn)。如果服務(wù)代理需要客戶鑒別(基本或CLIENT-CERT),則初始策略向所有的被鑒別的客戶許可訪問(wèn)(但是拒絕匿名請(qǐng)求)。安全管理員可以在服務(wù)總線控制臺(tái)上改變?cè)L問(wèn)控制策略。在服務(wù)總線中,用戶可以在下面的策略之間選擇不檢查的(所有的請(qǐng)求被許可訪問(wèn));排除的(拒絕所有的請(qǐng)求);被鑒別的用戶(拒絕匿名的請(qǐng)求);和一組角色。
在一個(gè)實(shí)施例中,成功鑒別導(dǎo)致產(chǎn)生JAAS主題,它包裝客戶身份負(fù)責(zé)體和用于用戶所屬的每個(gè)組的一個(gè)負(fù)責(zé)體??梢韵蚋鹘M分配用戶??梢砸越M(或其他標(biāo)準(zhǔn),諸如一日中的時(shí)間)來(lái)定義角色。在運(yùn)行時(shí)動(dòng)態(tài)確定用戶所屬的一組角色。如果訪問(wèn)控制策略是一組角色,則屬于一個(gè)或多個(gè)那些角色的用戶可以被許可訪問(wèn)。如果鑒別成功,則web容器調(diào)用服務(wù)總線HTTP/HTTPS傳輸提供者。從此,消息進(jìn)行到服務(wù)總線綁定層。綁定層存儲(chǔ)來(lái)自在消息環(huán)境中的被鑒別的JAAS主題的客戶負(fù)責(zé)體,并且調(diào)用請(qǐng)求流水線。流水線級(jí)可以在商務(wù)規(guī)則中利用所述客戶負(fù)責(zé)體。例如,可以應(yīng)用客戶特定變換,或者路由表?xiàng)l件可以考慮到所述客戶負(fù)責(zé)體。
在請(qǐng)求流水線節(jié)點(diǎn)的末端,代理通常將消息路由到目標(biāo)服務(wù)??梢酝ㄟ^(guò)在流水線中的路由級(jí)來(lái)確定目標(biāo)服務(wù)。路由級(jí)可以路由到同一目標(biāo)服務(wù),或者可以動(dòng)態(tài)地根據(jù)一些條件來(lái)選擇目標(biāo)服務(wù)。不論哪種方式,目標(biāo)服務(wù)都被指定為對(duì)于在服務(wù)總線服務(wù)目錄中注冊(cè)的外部服務(wù)(或服務(wù)代理)的參考。管理員使用服務(wù)總線控制臺(tái)來(lái)注冊(cè)外部服務(wù)。
在一個(gè)實(shí)施例中,當(dāng)注冊(cè)外部服務(wù)時(shí),輸入服務(wù)傳輸和所述服務(wù)的一個(gè)或多個(gè)URL。這是服務(wù)代理可以使用來(lái)將請(qǐng)求路由到那個(gè)特定外部服務(wù)的傳輸和URL。如果所述傳輸是HTTPS,則可以指定下面的鑒別方法之一基本、CLIENT-CERT或沒(méi)有客戶鑒別。如果傳輸是HTTP,則支持基本或沒(méi)有客戶鑒別。如果鑒別方法是基本,則可以指定可選用的ServiceAccount(服務(wù)帳戶)??梢栽谝院蟾采w出站(客戶,例如代理)鑒別。
在一個(gè)實(shí)施例中,服務(wù)總線支持在服務(wù)總線代理和外部服務(wù)之間的、單向的在HTTP(S)上發(fā)送的請(qǐng)求-響應(yīng)消息的傳輸級(jí)安全。HTTPS提供機(jī)密性和完整性。它也允許服務(wù)總線鑒別目標(biāo)服務(wù)器。另外,如果需要的話,則服務(wù)總線代理可以向外部服務(wù)鑒別。這類(lèi)似于入站傳輸安全,但是在這種情況下,服務(wù)總線啟動(dòng)HTTPS連接。注意,在出站的情況下,從SSL協(xié)議的角度來(lái)看,服務(wù)代理當(dāng)作為客戶,并且運(yùn)行目標(biāo)服務(wù)的服務(wù)器作為所述服務(wù)器。服務(wù)總線HTTPS傳輸提供者通過(guò)HTTPS連接向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求,并且接受HTTP響應(yīng)。目標(biāo)服務(wù)器可以向服務(wù)器發(fā)送其SSL證書(shū)。
在一個(gè)實(shí)施例中,可以對(duì)于HTTP/S使用兩種客戶鑒別方法CLIENT-CERT和基本。如果使用CLIENT-CERT鑒別來(lái)配置外部服務(wù),則在SSL握手期間,服務(wù)代理可以向目標(biāo)服務(wù)器發(fā)送其SSL客戶證明書(shū)。在一個(gè)實(shí)施例中,服務(wù)代理可選地與本地服務(wù)提供者相關(guān)聯(lián)。證書(shū)管理器將證書(shū)綁定到本地服務(wù)提供者。本地服務(wù)提供者可以具有用于SSL客戶鑒別的私有密鑰和證明書(shū)。這是服務(wù)代理在SSL握手期間可以使用的密鑰/證明書(shū)。許多服務(wù)代理可以通過(guò)引用同一本地服務(wù)提供者在來(lái)共享同一SSL客戶密鑰/證明書(shū)。在一個(gè)實(shí)施例中,外部服務(wù)可以要求服務(wù)代理通過(guò)發(fā)送用戶名和密碼來(lái)鑒別。這通常是在HTTPS上進(jìn)行的,但是服務(wù)總線也支持在HTTP上的基本鑒別。HTTPS提供加密的通道;因此,在HTTPS上發(fā)送密碼是安全的。另一方面,非常不推薦具有基本鑒別的HTTP,因?yàn)槊艽a在導(dǎo)線上以明文(base64編碼的)來(lái)傳送。
在一個(gè)實(shí)施例上,當(dāng)使用基本鑒別來(lái)配置HTTP或HTTPS外部服務(wù)時(shí),可以可選用地指定另外的服務(wù)帳戶。如果不指定服務(wù)帳戶,則服務(wù)代理可以以類(lèi)似于如何檢索服務(wù)代理SSL客戶密鑰的方式從證書(shū)管理器來(lái)確定要使用的用戶名和密碼服務(wù)代理與本地服務(wù)提供者相關(guān)聯(lián),并且用戶名/密碼與本地服務(wù)提供者相關(guān)聯(lián)。如果外部的服務(wù)指定服務(wù)帳戶,則在證書(shū)管理器中存儲(chǔ)那個(gè)服務(wù)帳戶的用戶名和密碼。在這種情況下,服務(wù)代理不從本地服務(wù)提供者獲得用戶名和密碼;相反,服務(wù)代理發(fā)送服務(wù)帳戶的用戶名/密碼。
在一個(gè)實(shí)施例中,消息環(huán)境具有允許流水線節(jié)點(diǎn)設(shè)計(jì)者指定要用于檢索用戶名/密碼證書(shū)的服務(wù)帳戶的名稱的元素。在請(qǐng)求流水線中的變換級(jí)可以設(shè)置消息內(nèi)容中的這個(gè)元素。如果被指定,則這個(gè)服務(wù)帳戶覆蓋本地服務(wù)提供者證書(shū)在一個(gè)實(shí)施例中,服務(wù)總線支持OASIS Web服務(wù)安全(WSS或簡(jiǎn)述為WSS)。WSS定義用于SOAP消息的消息機(jī)密性、完整性和發(fā)送方鑒別的框架。WSS適用于單獨(dú)的SOAP封裝(envelop)。WSS使用XML加密和XML-DSIG來(lái)作為創(chuàng)建塊。在客戶上的WSS運(yùn)行時(shí)加密和/或數(shù)字地簽字一個(gè)或多個(gè)獨(dú)立的消息部分。在一個(gè)實(shí)施例中,向所述封裝(envelop)增加新的SOAP報(bào)頭。WSS報(bào)頭包括XML-DSIG數(shù)字簽字、安全令牌和其他構(gòu)造。這些安全令牌可以用于發(fā)送方鑒別、密鑰包裝(一般承載(carry)使用接收方的公共密鑰而加密的隨機(jī)產(chǎn)生的對(duì)稱加密密鑰)、承載簽字驗(yàn)證證明書(shū)或用于包括具有發(fā)送方的加密公共密鑰的證明書(shū)(以便接收方可以加密所述響應(yīng))。結(jié)果是新的SOAP封裝(envelop)。當(dāng)接收方消除了被保護(hù)的封裝(envelop)時(shí),按相反次序執(zhí)行加密操作,并且去除安全報(bào)頭。接收方然后驗(yàn)證消息與其策略一致(例如所要求的消息部分被簽字和/或加密,使用所請(qǐng)求的權(quán)利保護(hù)來(lái)提供所要求的令牌,等等)。
在一個(gè)實(shí)施例中,可以數(shù)字地簽字和/或加密SOAP封裝(envelop)的各個(gè)部分。結(jié)果產(chǎn)生的消息仍然是有效的SOAP封裝(envelop)。例如,可以加密主體,可以簽字WS尋址報(bào)頭,并且可以既不簽字也不加密另一個(gè)報(bào)頭。WSS不依賴于安全信道。相反,保護(hù)單個(gè)的SOAP封裝(envelop)的一個(gè)或多個(gè)部分。不論使用什么下層協(xié)議/傳輸——諸如HTTP或JMS,都發(fā)送這個(gè)SOAP封裝(envelop)。安全措施被內(nèi)置在消息本身中,在傳輸協(xié)議之外、在去往應(yīng)用層的全程上保護(hù)消息。而且,中介可以在保護(hù)機(jī)密性、完整性和鑒別的安全屬性的同時(shí)中繼消息。因此,可以實(shí)現(xiàn)端到端機(jī)密性、消息完整性和發(fā)送方鑒別。舉例來(lái)說(shuō),入站W(wǎng)SS被保護(hù)的消息可以是·從服務(wù)消費(fèi)者向代理的請(qǐng)求。服務(wù)消費(fèi)者向請(qǐng)求應(yīng)用WSS,并且服務(wù)代理過(guò)程安全報(bào)頭,且強(qiáng)制執(zhí)行安全策略。
·從服務(wù)消費(fèi)者到代理的請(qǐng)求。服務(wù)消費(fèi)者向請(qǐng)求應(yīng)用WSS,但是服務(wù)代理不處理安全報(bào)頭并且不強(qiáng)制執(zhí)行安全策略。服務(wù)代理將請(qǐng)求路由到外部的服務(wù)。外部服務(wù)處理安全報(bào)頭,并且強(qiáng)制執(zhí)行所述策略。這是請(qǐng)求穿通(pass-through)的情形。
·從目標(biāo)服務(wù)到代理的響應(yīng)。目標(biāo)服務(wù)將WSS應(yīng)用于響應(yīng),并且服務(wù)代理過(guò)程安全報(bào)頭和強(qiáng)制執(zhí)行安全策略。
·從目標(biāo)服務(wù)到代理的響應(yīng)。目標(biāo)服務(wù)將WSS應(yīng)用于響應(yīng),但是服務(wù)代理不處理安全報(bào)頭,并且不強(qiáng)制執(zhí)行安全策略。服務(wù)代理將響應(yīng)轉(zhuǎn)發(fā)到服務(wù)消費(fèi)者。服務(wù)消費(fèi)者處理安全報(bào)頭,并且強(qiáng)制執(zhí)行所述策略。這是響應(yīng)穿通(pass-through)情況。
舉例而言,出站的WSS被保護(hù)的消息可以是·從代理到外部服務(wù)的消息。服務(wù)代理將WSS應(yīng)用于消息,并且目標(biāo)服務(wù)處理安全報(bào)頭,并且強(qiáng)制執(zhí)行所述策略。
·從代理到服務(wù)消費(fèi)者的響應(yīng)。所述服務(wù)代理將WSS應(yīng)用應(yīng)用于消息,并且服務(wù)消費(fèi)者處理安全報(bào)頭和強(qiáng)制執(zhí)行所述策略。
進(jìn)一步地舉例來(lái)說(shuō),服務(wù)消費(fèi)者可以向服務(wù)代理發(fā)送加密的WSS SOAP消息以用于路由,服務(wù)代理或許根據(jù)一些明文報(bào)頭——例如WS尋址報(bào)頭或定制報(bào)頭——的值來(lái)路由消息,后端(back-end)服務(wù)接收加密的消息,對(duì)它解密,并且處理所述請(qǐng)求。服務(wù)然后發(fā)送使用客戶的公共密鑰加密的響應(yīng)。服務(wù)代理將所述響應(yīng)交付給客戶。服務(wù)代理不必解密所述消息。服務(wù)消費(fèi)者和后端服務(wù)可以被保證服務(wù)代理不能讀取敏感的數(shù)據(jù)(因?yàn)榉?wù)代理沒(méi)有解密密鑰)。類(lèi)似地,服務(wù)消費(fèi)者可以包括用于鑒別目的的安全令牌,并且服務(wù)代理可以將令牌中繼到目標(biāo)服務(wù)。
在一個(gè)實(shí)施例中舉例來(lái)說(shuō),服務(wù)代理可以被配置來(lái)例如當(dāng)服務(wù)總線被用作用于來(lái)自外部商務(wù)伙伴的輸入請(qǐng)求的網(wǎng)關(guān)時(shí)處理在來(lái)自服務(wù)消費(fèi)者的輸入請(qǐng)求上的WSS報(bào)頭。當(dāng)服務(wù)代理和目標(biāo)服務(wù)處于同一位置以強(qiáng)制執(zhí)行在網(wǎng)關(guān)的訪問(wèn)控制時(shí)、并且當(dāng)目標(biāo)服務(wù)不支持WSS時(shí),這可能有益于從計(jì)算密集的解密、簽字驗(yàn)證和鑒別操作卸載(offload)后端服務(wù)。在一個(gè)實(shí)施例中,服務(wù)消費(fèi)者加密和/或簽字消息的一個(gè)或多個(gè)部分,和/或者包括鑒別令牌。服務(wù)代理鑒別所述令牌,解密消息,并且驗(yàn)證數(shù)字簽字?;赪SS鑒別令牌和消息內(nèi)容的訪問(wèn)控制可以在這里發(fā)生。明文消息然后通過(guò)請(qǐng)求流水線。在流水線的結(jié)尾,將消息路由到目標(biāo)服務(wù)。
舉例來(lái)說(shuō),服務(wù)代理可以代表服務(wù)消費(fèi)者將WSS應(yīng)用于消息。在這種情況下,服務(wù)代理從服務(wù)消費(fèi)者接收明文消息。消息像通常那樣流過(guò)請(qǐng)求流水線。在流水線的結(jié)尾,一旦已經(jīng)確定了目標(biāo)服務(wù)并且在實(shí)際發(fā)送消息之前,服務(wù)代理加密和/或簽字消息并且/或者向消息增加鑒別令牌。這個(gè)新的安全SOAP封裝(envelop)被交付給目標(biāo)服務(wù)。
在一個(gè)實(shí)施例中,系統(tǒng)支持OASIS Web服務(wù)安全標(biāo)準(zhǔn)以及用戶名令牌簡(jiǎn)檔(profile)和X.509令牌簡(jiǎn)檔。后端服務(wù)、客戶和服務(wù)代理可以被配置在由BEA、IBM、微軟、SAP、Sonic軟件和VeriSign開(kāi)發(fā)的web服務(wù)策略框架(WS-策略)規(guī)范后建模的可選的WS策略。這種框架定義了用于指定和配置web服務(wù)要求和能力的可擴(kuò)展架構(gòu)。
在給定的請(qǐng)求/響應(yīng)往返行程中,可以單獨(dú)地保護(hù)所有4個(gè)消息。在整個(gè)消息路徑中的四個(gè)消息的每個(gè)潛在地遭受在WS策略中指定的要求。發(fā)送方可以例如通過(guò)下述方式來(lái)應(yīng)用所述必要的步驟以產(chǎn)生符合所述策略的消息通過(guò)簽字和/或加密一個(gè)或多個(gè)消息部分,并且/或者包括所需要的鑒別令牌。接收方可以執(zhí)行所述必要的步驟來(lái)消費(fèi)所述消息,即解密、簽字確認(rèn)和令牌確認(rèn)/鑒別。另外,接收方可以驗(yàn)證所述消息事實(shí)上符合所述策略。
在一個(gè)實(shí)施例中,服務(wù)總線可以被配置它需要來(lái)安全地與服務(wù)消費(fèi)者和外部服務(wù)交互的證書(shū)。具體來(lái)說(shuō),在入站的消息上,服務(wù)總線可以被配置來(lái)·發(fā)送其(服務(wù)器)證書(shū),以便客戶可以鑒別服務(wù)總線服務(wù)器(例如在SSL握手期間)。
·在傳輸級(jí)或消息級(jí)鑒別消息發(fā)送方。
·使用服務(wù)總線的私有解密密鑰來(lái)解密加密的消息。
·驗(yàn)證在輸入的消息上的數(shù)字簽字。
在出站的消息上,服務(wù)總線可以被配置來(lái)·在連接的另一端鑒別服務(wù)器(例如在SSL握手期間)。
·在傳輸級(jí)或消息級(jí)向接收方鑒別其本身。
·使用預(yù)想的接收方的公共密鑰來(lái)加密消息。
·簽字消息以用于鑒別或數(shù)據(jù)完整性目的。
服務(wù)總線證書(shū)管理器組件可以提供一個(gè)操作、管理和維護(hù)API和一個(gè)用于管理證書(shū)和檢索證書(shū)的運(yùn)行時(shí)API。證書(shū)可以分為兩個(gè)種類(lèi)外部證書(shū)(屬于與服務(wù)代理交互的外部服務(wù)或服務(wù)消費(fèi)者的證書(shū));本地證書(shū)(屬于服務(wù)代理或作為整體的服務(wù)總線系統(tǒng)的證書(shū))。
在另一個(gè)實(shí)施例中,可以按照類(lèi)型來(lái)分類(lèi)證書(shū)。服務(wù)總線可以支持用戶名/密碼、私有密鑰/X.509證明書(shū)鏈和被信任的X.509證明書(shū)??梢詳U(kuò)展CredentialManager(證書(shū)管理器)以支持其他的證書(shū)類(lèi)型。在一個(gè)實(shí)施例中,證書(shū)——不論它是外部的或本地的——可以被綁定到服務(wù)總線資源。例如,如果代理的web服務(wù)安全策略要求使用RSA來(lái)加密入站的消息的SOAP主體,則可以有被綁定到服務(wù)代理的私有密鑰和X.509證明書(shū)鏈。所述CredentialManager管理在服務(wù)總線資源和證書(shū)之間的這些綁定。
在一個(gè)實(shí)施例中,CredentialManager管理這些證書(shū)·對(duì)于本地服務(wù)提供者加密證明書(shū)和對(duì)應(yīng)的私有密鑰;數(shù)字簽名私有密鑰和證明書(shū);用戶名/密碼;本地服務(wù)提供者的SSL私有密鑰和證明書(shū),用于SSL客戶鑒別;WSS鑒別(X.509令牌)的證明書(shū)和私有密鑰。
·對(duì)于外部服務(wù)提供者加密證明書(shū);數(shù)字簽字驗(yàn)證證明書(shū);用戶名/密碼;SSL客戶證明書(shū);SSL服務(wù)器證明書(shū);X.509鑒別證明書(shū)(用于WSS X.509令牌鑒別)·對(duì)于服務(wù)消費(fèi)者加密證明書(shū);數(shù)字簽字驗(yàn)證證明書(shū);用戶名/密碼;SSL客戶證明書(shū);WSS鑒別(X.509令牌)的X.509鑒別證明書(shū)在一個(gè)實(shí)施例中,規(guī)則基本上是用于評(píng)價(jià)表達(dá)和(通常)獲得布爾結(jié)果的聲明。如果所述規(guī)則評(píng)價(jià)為“真”,則規(guī)則可以包括被執(zhí)行的相關(guān)聯(lián)的動(dòng)作的列表。在規(guī)則中包括的條件的范圍可以從一日的當(dāng)前時(shí)間(例如商務(wù)日歷)到運(yùn)行時(shí)環(huán)境數(shù)據(jù)、用戶簡(jiǎn)檔等。通過(guò)非限定性示例,規(guī)則可以用于根據(jù)系統(tǒng)健康(health)和響應(yīng)時(shí)間來(lái)觸發(fā)SLA警告,基于特定條件來(lái)動(dòng)態(tài)地調(diào)整服務(wù)總線服務(wù)的“成本/健康”,在安全侵害的情況下發(fā)出通知,并且檢測(cè)服務(wù)攻擊的拒絕。例如規(guī)則1如果服務(wù)OrderRouter的平均響應(yīng)時(shí)間“大于”350毫秒,則通知規(guī)則2如果在上午9點(diǎn)和下午5點(diǎn)之間服務(wù)CreditCheck的響應(yīng)時(shí)間“大于”10秒,則調(diào)用Web服務(wù)“記錄故障單(trouble ticket)”在一個(gè)實(shí)施例中,可以經(jīng)由控制臺(tái)創(chuàng)建并且以XML來(lái)表示規(guī)則。XML配置方案可以定義規(guī)則格式。服務(wù)總線規(guī)則引擎可以根據(jù)規(guī)則的位置而支持幾種不同種類(lèi)的規(guī)則。隨后在該文件中進(jìn)一步詳細(xì)地說(shuō)明了各種規(guī)則類(lèi)型。在一個(gè)實(shí)施例中,服務(wù)總線規(guī)則具有下面的格式if<set of conditions>then<perform a set of Actions>(如果<一組條件>則<執(zhí)行一組動(dòng)作>)舉例來(lái)說(shuō),條件可以基于時(shí)間(日歷)和由監(jiān)控框架匯集的監(jiān)控?cái)?shù)據(jù)。這可以容易地被擴(kuò)展來(lái)包括許多條件類(lèi)型,如用戶簡(jiǎn)檔屬性、流水線環(huán)境運(yùn)行時(shí)數(shù)據(jù)等。在一個(gè)實(shí)施例中,每個(gè)條件類(lèi)型將其本身注冊(cè)到規(guī)則框架,并且提供配置和評(píng)價(jià)接口。這可以允許在未來(lái)插入所需要的那么多的條件類(lèi)型。
在一個(gè)實(shí)施例中,規(guī)則可以廣義地被劃分為下面兩個(gè)類(lèi)別SLA規(guī)則和聯(lián)機(jī)(inline)規(guī)則。SLA規(guī)則主要用于評(píng)價(jià)SLA和觸發(fā)警告以提前捕獲潛在的系統(tǒng)故障。這可以通過(guò)下述方式完成通過(guò)以規(guī)則的間隔來(lái)匯集來(lái)自所有的服務(wù)代理的監(jiān)控信息,并且檢查產(chǎn)生的狀態(tài)以保證所有的性能約束被滿足。聯(lián)機(jī)規(guī)則是有用的,因?yàn)樾枰С忠笤诹魉€執(zhí)行時(shí)觸發(fā)(大多來(lái)自錯(cuò)誤流水線)規(guī)則聯(lián)機(jī)而沒(méi)有監(jiān)控?cái)?shù)據(jù)匯集的延遲的使用情形。例如,“通知客戶從大致安全證書(shū)不匹配而始發(fā)的消息”。在這種情況下,需要從用戶管理模塊來(lái)查找客戶的聯(lián)系信息。這需要一種機(jī)制,用于在流水線中嵌入規(guī)則“觸發(fā)點(diǎn)”,并且允許商務(wù)用戶在運(yùn)行時(shí)將規(guī)則與這些觸發(fā)器相關(guān)聯(lián)。這樣的規(guī)則還需要將某個(gè)最小數(shù)量的運(yùn)行時(shí)環(huán)境數(shù)據(jù)傳遞到動(dòng)作(當(dāng)前的用戶簡(jiǎn)檔、當(dāng)前的消息等)。
可以經(jīng)由管理控制臺(tái)來(lái)構(gòu)造規(guī)則。每個(gè)規(guī)則與單個(gè)具體“實(shí)體”(服務(wù)、級(jí)、J2EE資源等)相關(guān)聯(lián)。規(guī)則模式可以定義每個(gè)規(guī)則的格式。在一個(gè)實(shí)施例中,規(guī)則構(gòu)建器為用戶提供前端以通過(guò)將構(gòu)造規(guī)則所需要的所有元素捆綁在一起來(lái)構(gòu)造規(guī)則。這包含指定規(guī)則名和綁定——所述規(guī)則被綁定所至的實(shí)體(服務(wù)、級(jí)、JMS資源等)。選擇服務(wù)意味著可以使用在流水線、路由器和傳輸中可用的監(jiān)控元素來(lái)構(gòu)造規(guī)則。在一個(gè)實(shí)施例中,綁定通過(guò)清楚地標(biāo)識(shí)什么運(yùn)行時(shí)數(shù)據(jù)-如果有的話-對(duì)所述規(guī)則可用來(lái)提供規(guī)則的“環(huán)境”。
在一個(gè)實(shí)施例中,可以指定規(guī)則的觸發(fā)器規(guī)則可以一次觸發(fā)動(dòng)作,并且等待手動(dòng)復(fù)位或條件自動(dòng)復(fù)位;每次時(shí)間規(guī)則評(píng)價(jià)為真時(shí)規(guī)則觸發(fā)動(dòng)作;并且,如果規(guī)則評(píng)價(jià)為真,則每“x”分鐘,規(guī)則觸發(fā)動(dòng)作,等等。
在一個(gè)實(shí)施例中,規(guī)則可以包括零或更多的條件。條件可以具有不同的類(lèi)型商務(wù)日歷、監(jiān)控?cái)?shù)據(jù)、運(yùn)行時(shí)環(huán)境變量等。規(guī)則框架被設(shè)計(jì)為從運(yùn)行時(shí)上看容易插入新的條件類(lèi)型。
根據(jù)規(guī)則被綁定所至的實(shí)體,規(guī)則構(gòu)建器用戶界面可以允許在所述規(guī)則中包括指定的條件類(lèi)型。例如,SLA規(guī)則可以被定義在那個(gè)具體綁定處可用的監(jiān)控?cái)?shù)據(jù)上。與JMS資源相關(guān)聯(lián)的規(guī)則可以包括基于由服務(wù)器定義的JMS資源量度的條件。但是,可以有特定的條件類(lèi)型,如可以與被部署到所有的綁定點(diǎn)的規(guī)則相關(guān)聯(lián)的商務(wù)日歷。這是因?yàn)槿諝v不依賴于任何具體的環(huán)境/綁定相關(guān)聯(lián)數(shù)據(jù)。每個(gè)條件包括一個(gè)或多個(gè)表達(dá),可以使用OR(或)和AND(與)操作符將其任意結(jié)合和嵌套。例如,考慮下面的規(guī)則如果“在上午9點(diǎn)和下午5點(diǎn)之間”“服務(wù)ABC的平均響應(yīng)時(shí)間超過(guò)2秒OR(或)安全侵害計(jì)數(shù)超過(guò)25”,則通過(guò)電子郵件向我通知“一次,直到手動(dòng)復(fù)位或條件自動(dòng)清除”。
在上面的規(guī)則中,有兩個(gè)條件類(lèi)型——商務(wù)日期和監(jiān)控?cái)?shù)據(jù)?;诒O(jiān)控?cái)?shù)據(jù)的條件被邏輯或(OR)。對(duì)于為真的上述規(guī)則,當(dāng)前的系統(tǒng)時(shí)間具有在上午9點(diǎn)和下午5點(diǎn)之間AND(與)平均響應(yīng)時(shí)間可以超過(guò)2秒OR(或)安全侵害可以超過(guò)25兩者中的任一個(gè)。條件在頂級(jí)全部被AND(與)。獨(dú)立的條件包括可以任意地被組合和嵌套的表達(dá)式(使用OR(或)和AND(與))。在一個(gè)實(shí)施例中,動(dòng)作的列表可以伴隨一個(gè)規(guī)則,所述規(guī)則指定當(dāng)所述規(guī)則評(píng)價(jià)為真時(shí)需要執(zhí)行的動(dòng)作。用戶可以選擇在規(guī)則中不包括任何動(dòng)作。在一個(gè)實(shí)施例中,規(guī)則具有至少一個(gè)條件OR(或)一個(gè)動(dòng)作??梢哉?qǐng)求用戶指定執(zhí)行所述動(dòng)作所需要的所有必要的配置參數(shù)。在一個(gè)實(shí)施例中,動(dòng)作的改變可以從諸如發(fā)出通知電子郵件之類(lèi)的簡(jiǎn)單任務(wù)到調(diào)用遠(yuǎn)程web服務(wù)以記錄被路由到具體工作列表的故障單。下面是可以在服務(wù)總線警告框架中可用的一些動(dòng)作經(jīng)由電子郵件來(lái)通知;調(diào)用web服務(wù);并且設(shè)置服務(wù)成本——在服務(wù)目錄中設(shè)置服務(wù)的“成本”。服務(wù)的成本可以用于進(jìn)行路由決定。
在一個(gè)實(shí)施例中,規(guī)則評(píng)價(jià)器當(dāng)被事件觸發(fā)時(shí)評(píng)價(jià)規(guī)則。這可以是經(jīng)由直接的API調(diào)用——規(guī)則評(píng)價(jià)器提供可以用于觸發(fā)規(guī)則評(píng)價(jià)的API方法。所述方法調(diào)用參數(shù)可以包含用于標(biāo)識(shí)需要被評(píng)價(jià)的一個(gè)或多個(gè)規(guī)則的信息。例如,當(dāng)新的監(jiān)控?cái)?shù)據(jù)變得對(duì)于那個(gè)服務(wù)可以可用時(shí),監(jiān)控?cái)?shù)據(jù)匯集器可以調(diào)用規(guī)則評(píng)價(jià)器API以評(píng)價(jià)與服務(wù)相關(guān)聯(lián)的SLA規(guī)則。也可以通過(guò)事件預(yù)訂來(lái)觸發(fā)規(guī)則評(píng)價(jià)——評(píng)價(jià)器可以向事件機(jī)制預(yù)訂,并且當(dāng)出現(xiàn)事件時(shí)觸發(fā)規(guī)則評(píng)價(jià)。事件環(huán)境可以包含可以在規(guī)則評(píng)價(jià)和動(dòng)作執(zhí)行中使用的所有運(yùn)行時(shí)信息。出現(xiàn)安全侵害事件的安全級(jí)可以觸發(fā)規(guī)則評(píng)價(jià)以通知管理員。在這個(gè)示例中,事件環(huán)境可以包含消息ID和發(fā)送方的地址,它們可以幫助管理員清楚地標(biāo)識(shí)問(wèn)題的來(lái)源??梢园凑疹A(yù)定的時(shí)間表經(jīng)由商務(wù)日歷觸發(fā)基于定時(shí)器的規(guī)則。在一個(gè)實(shí)施例中,調(diào)度服務(wù)可以產(chǎn)生規(guī)則評(píng)價(jià)器所預(yù)訂的定時(shí)器事件,并且當(dāng)出現(xiàn)所述事件時(shí)啟用(kick off)規(guī)則評(píng)價(jià)過(guò)程。在一個(gè)實(shí)施例中,一個(gè)框架匯集可以用于監(jiān)控系統(tǒng)的健康的數(shù)據(jù)。該框架的重要特征包括允許用戶容易地經(jīng)由配置向服務(wù)總線服務(wù)中嵌入性能監(jiān)控應(yīng)用;提供一種機(jī)制,用于禁止/使能在運(yùn)行時(shí)的監(jiān)控;匯集數(shù)據(jù)并且計(jì)算警告以向用戶通知潛在的系統(tǒng)故障;并且,提供關(guān)于所匯集的數(shù)據(jù)的基本量度(例如,最小、最大、平均等)。
在一個(gè)實(shí)施例中,監(jiān)控框架可以定義監(jiān)控元素的列表。監(jiān)控元素是監(jiān)控量度的特定類(lèi)別。監(jiān)控元素足夠一般化,因此它們可以被大量的組件使用。監(jiān)控元素的列表可以是可擴(kuò)展的,并且可以按照需要增加更多的這樣的元素。在一個(gè)實(shí)施例中,所述框架可以同時(shí)定義下面的監(jiān)控元素·計(jì)數(shù)器提供一種機(jī)制,供用戶在他們的代碼中定義和使用計(jì)數(shù)器,以跟蹤諸如所處理的請(qǐng)求數(shù)量、錯(cuò)誤數(shù)量、所處理的消息數(shù)量等之類(lèi)的事項(xiàng)。計(jì)數(shù)器可以提供用于增加、減少和復(fù)位計(jì)數(shù)器的當(dāng)前值的方法。
·定時(shí)器應(yīng)用可以使用定時(shí)器來(lái)定時(shí)特定的操作。定時(shí)器可以提供用于開(kāi)始、停止、復(fù)位和檢查自從定時(shí)器被啟動(dòng)起所流逝的時(shí)間量。
圖9是按照一個(gè)實(shí)施例的監(jiān)控組件的圖示。在管理服務(wù)器900上的配置管理器914捕獲監(jiān)控框架所需要的配置信息。例如,這可以包括用于每個(gè)應(yīng)用的監(jiān)控屬性、每個(gè)屬性的數(shù)據(jù)類(lèi)型、是否使能了監(jiān)控、需要對(duì)于每個(gè)應(yīng)用匯集監(jiān)控?cái)?shù)據(jù)的頻率等的列表。如果外部應(yīng)用對(duì)于監(jiān)控?cái)?shù)據(jù)感興趣,則它們也可以向配置管理器注冊(cè)。在一個(gè)實(shí)施例中,監(jiān)控管理器906運(yùn)行在被管理的服務(wù)器902上。在一個(gè)實(shí)施例中,監(jiān)控管理器可以通過(guò)MBeans 916而在外部或通過(guò)工廠而在內(nèi)部被暴露。它們的主要功能是管理在每個(gè)被管理的服務(wù)器上的被監(jiān)控的信息。也可以提供API,以便應(yīng)用可以調(diào)用用于它們的數(shù)據(jù)屬性的監(jiān)控功能。
在一個(gè)實(shí)施例中,數(shù)據(jù)匯集器910以規(guī)則的間隔(可配置)運(yùn)行在管理服務(wù)器上,并且匯集來(lái)自在給定的域中的被管理的服務(wù)器的所有的信息的數(shù)據(jù)。所匯集的數(shù)據(jù)被處理和被分為在每個(gè)應(yīng)用的配置中指定的具體時(shí)間間隔??刂婆_(tái)可以顯示監(jiān)控信息使用所匯集的數(shù)據(jù)。在規(guī)則的間隔,監(jiān)控?cái)?shù)據(jù)發(fā)布器(未示出)向被注冊(cè)的外部應(yīng)用發(fā)布數(shù)據(jù),用于歸檔或外部計(jì)算的目的。規(guī)則管理器918負(fù)責(zé)存儲(chǔ)規(guī)則,并且使用所匯集的數(shù)據(jù)評(píng)價(jià)規(guī)則。在一個(gè)實(shí)施例中,當(dāng)規(guī)則被評(píng)價(jià)為真時(shí),它調(diào)用警告管理器912。當(dāng)一個(gè)規(guī)則被評(píng)價(jià)為真時(shí),警告管理器通知其他處理。例如,它可以按照與規(guī)則相關(guān)聯(lián)的動(dòng)作來(lái)發(fā)送電子郵件和/或在隊(duì)列上布置消息。
在一個(gè)實(shí)施例,舉例來(lái)說(shuō),數(shù)據(jù)匯集器910在數(shù)據(jù)變得越舊時(shí)在存儲(chǔ)器中保存越來(lái)越少的數(shù)據(jù)??梢远x窗口以便在不同時(shí)段使用不同精度觀看數(shù)據(jù)。例如,我們定義下面的窗口5分鐘、1小時(shí)、24小時(shí)。對(duì)于計(jì)數(shù)器,它意味著我們?cè)谧詈?分鐘將存儲(chǔ)所有的改變(可以改變它并且決定按照例如秒或按照10秒來(lái)獲得改變)。對(duì)于最后的小時(shí),按照5分鐘來(lái)獲得改變。對(duì)于最后24小時(shí),按照小時(shí)來(lái)獲得改變。對(duì)于任何更長(zhǎng)的時(shí)段,按照天(隱含的)來(lái)獲得改變。使用這種配置,意味著我們需要在最后5分鐘在存儲(chǔ)器中存儲(chǔ)不定數(shù)量的值、對(duì)于最后的小時(shí)+12個(gè)值、對(duì)于最后一天+24個(gè)值、并且按天+1個(gè)值。因此,對(duì)于365天~=400個(gè)值。被匯集的數(shù)據(jù)可以被顯示在控制臺(tái)上的圖形中,并且/或者用于觸發(fā)規(guī)則。
在一個(gè)實(shí)施例中,用戶可以在控制臺(tái)中交互地指定規(guī)則。例如,控制臺(tái)可以顯示由服務(wù)的服務(wù)/級(jí)/傳輸/服務(wù)質(zhì)量組織的被監(jiān)控變量的樹(shù),該服務(wù)的服務(wù)/級(jí)/傳輸/服務(wù)質(zhì)量可以在所述規(guī)則的XQuery表達(dá)式中被拖放。
在一個(gè)實(shí)施例中,要使用監(jiān)控框架來(lái)捕獲監(jiān)控?cái)?shù)據(jù)的應(yīng)用可以指定需要被監(jiān)控的屬性的列表,并且可選地在那個(gè)窗口中指定有關(guān)更新時(shí)間和頻率的滑動(dòng)窗口以捕獲數(shù)據(jù)。當(dāng)指定在那個(gè)窗口中的滑動(dòng)窗口和間隔時(shí),系統(tǒng)也可以被配置來(lái)保存“近來(lái)的活動(dòng)窗口”,它是在被配置的最近時(shí)間間隔中制作的所有監(jiān)控條目的列表。在一個(gè)實(shí)施例中,系統(tǒng)支持使用計(jì)數(shù)器和定時(shí)器的監(jiān)控。
在一個(gè)實(shí)施例中,配置信息定義了每個(gè)應(yīng)用正在監(jiān)控的屬性的列表。每個(gè)應(yīng)用(或應(yīng)用實(shí)例,像在傳輸?shù)那闆r下那樣)可以像監(jiān)控框架注冊(cè)其本身。注冊(cè)可以包含提供可以被監(jiān)控的唯一名稱和屬性的列表(和對(duì)應(yīng)數(shù)據(jù)類(lèi)型)和時(shí)間窗口規(guī)范。框架可以發(fā)布所述配置的模式。
在一個(gè)實(shí)施例中,管理服務(wù)器包括由所述框架提供的所有運(yùn)行時(shí)功能。在一個(gè)管理服務(wù)器上,這可以包括匯集來(lái)自所有被管理的服務(wù)器的數(shù)據(jù);將所述數(shù)據(jù)分類(lèi)到各自的時(shí)間間隔窗口中;計(jì)算關(guān)于被匯集的數(shù)據(jù)的統(tǒng)計(jì);定義MBean接口以提供對(duì)于被匯集的數(shù)據(jù)的訪問(wèn)。向警告管理器通知在數(shù)據(jù)中的改變,因此可以觸發(fā)規(guī)則(或者在規(guī)則的間隔評(píng)價(jià)規(guī)則);并且,提供一種機(jī)制來(lái)向外部歸檔系統(tǒng)發(fā)布監(jiān)控?cái)?shù)據(jù)。在一個(gè)被管理的服務(wù)器上,監(jiān)控管理器可以定義供應(yīng)用記錄監(jiān)控?cái)?shù)據(jù)的API;提供數(shù)據(jù)的運(yùn)行時(shí)庫(kù);并且通過(guò)MBeans曝光其數(shù)據(jù)。
在一個(gè)實(shí)施例中,為了記錄監(jiān)控值,應(yīng)用(例如傳輸、流水線級(jí))需要通過(guò)傳送唯一的應(yīng)用名稱來(lái)首先檢索各自應(yīng)用的監(jiān)控環(huán)境。監(jiān)控環(huán)境提供被命名的計(jì)數(shù)器和計(jì)時(shí)器的訪問(wèn),用于提供記錄數(shù)據(jù)的方法。例如,采樣的源代碼可以看起來(lái)如下ctx.getMonitoringService().getTimer(“execution_time”).start();ctx.getMonitoringService().getCounter(“nb_messages”).increment();ctx.getMonitoringService().getTimer(“execution_time”).stop();管理服務(wù)器包括數(shù)據(jù)匯集器910,它在特定的輪詢間隔上輪詢每個(gè)被管理的服務(wù)器,并且匯集數(shù)據(jù)。被匯集的數(shù)據(jù)被分類(lèi)和被裝入在按照應(yīng)用名稱和所配置的各個(gè)時(shí)間窗口來(lái)組織的存儲(chǔ)器存儲(chǔ)倉(cāng)中。然后對(duì)所更新的數(shù)據(jù)計(jì)算統(tǒng)計(jì)。監(jiān)控運(yùn)行時(shí)Bean 916可以允許應(yīng)用訪問(wèn)這個(gè)被匯集的數(shù)據(jù)。另外,管理服務(wù)器可以通知規(guī)則管理器918,因此可以憑借被更新的數(shù)據(jù)和/或發(fā)布數(shù)據(jù)來(lái)運(yùn)行規(guī)則。
如果規(guī)則的條件為真,則可以執(zhí)行相關(guān)聯(lián)的動(dòng)作。在一個(gè)實(shí)施例中,可以將動(dòng)作實(shí)現(xiàn)為服務(wù)。在一個(gè)實(shí)施例中,可以在用戶指定的間隔定期評(píng)價(jià)規(guī)則。在一個(gè)實(shí)施例中,警告被實(shí)現(xiàn)為在服務(wù)總線上部署的服務(wù)??蚣芴峁┮环N配置機(jī)制,外部應(yīng)用可以從該配置機(jī)制選擇具有將有關(guān)特定的JMS題目的被匯集的監(jiān)控?cái)?shù)據(jù)發(fā)布給它們。
在一個(gè)實(shí)施例中,規(guī)則是用于評(píng)價(jià)一個(gè)或多個(gè)表達(dá)式和獲得布爾結(jié)果的聲明。在另一個(gè)實(shí)施例中,如果評(píng)價(jià)在規(guī)則中包括的所有條件的結(jié)果導(dǎo)致“真”值,則規(guī)則也具有被執(zhí)行的相關(guān)聯(lián)動(dòng)作的列表??梢栽谝?guī)則中包括的條件的示例是一日(商務(wù)日歷)的當(dāng)前時(shí)間;當(dāng)前的用戶簡(jiǎn)檔;應(yīng)用響應(yīng)時(shí)間(或其他監(jiān)控?cái)?shù)據(jù));以及由應(yīng)用遇到的安全侵害??梢栽谝?guī)則中包括的動(dòng)作的示例是通告電子郵件地址;發(fā)送消息;創(chuàng)建新的任務(wù)輸入項(xiàng);調(diào)用服務(wù);以及使能/禁止服務(wù)。
規(guī)則示例·簡(jiǎn)單動(dòng)作-當(dāng)特定服務(wù)的平均響應(yīng)時(shí)間超過(guò)某個(gè)門(mén)限值時(shí),向管理員發(fā)送通知。
·每天,在上午9點(diǎn)和下午5點(diǎn)之間,如果在5分鐘間隔中遇到多于10個(gè)安全侵害,則產(chǎn)生警告。
·如果在最后10分鐘中超過(guò)10次檢測(cè)到類(lèi)型X的消息,則記錄輸入項(xiàng)。
·如果類(lèi)型P的過(guò)程實(shí)例已經(jīng)“運(yùn)行”了超過(guò)12小時(shí),則創(chuàng)建管理列表任務(wù)條目。
在一個(gè)實(shí)施例中,可以幾種不同的方式——自然語(yǔ)言、XQuery聲明等——來(lái)表達(dá)規(guī)則??刂婆_(tái)可以允許用戶管理規(guī)則。可以將下層的規(guī)則持續(xù)為XML文檔,并且可以發(fā)布該XML的模式。在一個(gè)實(shí)施例中,規(guī)則框架運(yùn)行時(shí)可以消耗該XML文檔并且在運(yùn)行時(shí)評(píng)價(jià)規(guī)則。當(dāng)評(píng)價(jià)這些規(guī)則時(shí),XML文檔可以被轉(zhuǎn)換為適當(dāng)?shù)倪\(yùn)行時(shí)格式。基于例如條件的監(jiān)控量度可以被評(píng)價(jià)為XQuery。以非限定性示例為例并且參照?qǐng)D10,規(guī)則觸發(fā)器可以具有各種種類(lèi)被更新的監(jiān)控量度1010的可用性;事件1012;從一個(gè)狀態(tài)向另一個(gè)狀態(tài)過(guò)渡的過(guò)程;服務(wù)的平均響應(yīng)時(shí)間的改變;特定類(lèi)型的消息的到達(dá)1012;以及定期觸發(fā)規(guī)則的調(diào)度服務(wù)1018。
在一個(gè)實(shí)施例中,規(guī)則環(huán)境在評(píng)價(jià)在規(guī)則中包括的條件和動(dòng)作時(shí)封裝由規(guī)則消耗的運(yùn)行時(shí)數(shù)據(jù)。規(guī)則環(huán)境與規(guī)則觸發(fā)器緊密相關(guān)聯(lián)。在規(guī)則環(huán)境中包含的運(yùn)行時(shí)數(shù)據(jù)依賴于觸發(fā)器的類(lèi)型。例如,由與服務(wù)的平均響應(yīng)時(shí)間的改變相關(guān)聯(lián)的觸發(fā)器產(chǎn)生的規(guī)則環(huán)境可以包含服務(wù)的名稱和平均響應(yīng)時(shí)間的新值?;谑录|發(fā)器的規(guī)則環(huán)境可以包含事件的特性和與那個(gè)特定事件相關(guān)聯(lián)的數(shù)據(jù)。
規(guī)則可以被定義并與各種實(shí)體相關(guān)聯(lián)。在一個(gè)實(shí)施例中,規(guī)則綁定捕獲關(guān)于一個(gè)規(guī)則所相關(guān)聯(lián)的實(shí)體的信息。規(guī)則綁定以下述方式來(lái)影響規(guī)則環(huán)境清楚地定義什么運(yùn)行時(shí)數(shù)據(jù)——如果有的話——對(duì)所述規(guī)則可用。規(guī)則所相關(guān)聯(lián)的每個(gè)這樣的實(shí)體可以向所述規(guī)則提供可以用于構(gòu)建條件和動(dòng)作的一組數(shù)據(jù)。例如,被綁定到服務(wù)代理的SLA規(guī)則可以包括基于對(duì)那個(gè)服務(wù)可用的監(jiān)控量度的條件。如上所述,規(guī)則可以包括條件的列表和動(dòng)作的列表。每個(gè)規(guī)則可以具有下列結(jié)構(gòu)if<set of conditions>then<perform a set of Actions>(如果<一組條件>則<執(zhí)行一組動(dòng)作>)規(guī)則可以包括0個(gè)或多個(gè)條件。在一個(gè)實(shí)施例中,不包括的規(guī)則和條件總是為真,并且每次觸發(fā)規(guī)則時(shí)執(zhí)行動(dòng)作。條件可以具有不同的類(lèi)型商務(wù)日歷、監(jiān)控?cái)?shù)據(jù)、用戶簡(jiǎn)檔和其他適當(dāng)?shù)念?lèi)型。所述框架被設(shè)計(jì)使得可以容易地在運(yùn)行時(shí)插入新的條件類(lèi)型以容納由客戶期望的新的條件類(lèi)型。
在一個(gè)實(shí)施例中,可以在規(guī)則中包括的條件的類(lèi)型由規(guī)則綁定控制(dictate)。這個(gè)聲明的一個(gè)例外是諸如商務(wù)日歷之類(lèi)的條件,所述商務(wù)日歷可以與所有的規(guī)則相關(guān)聯(lián),因?yàn)樯虅?wù)日歷定義是“全局的”,而不捆綁到任何具體的綁定點(diǎn)。每個(gè)條件由可以使用邏輯或和邏輯與運(yùn)算符來(lái)任意組合和嵌套的一個(gè)或多個(gè)表達(dá)式組成。在一個(gè)實(shí)施例中,條件在頂級(jí)全部被與(AND)運(yùn)算。在規(guī)則中包括的所有條件需要評(píng)價(jià)為“真”以使得規(guī)則評(píng)價(jià)為真。就像新條件類(lèi)型可以在運(yùn)行時(shí)被增加到規(guī)則框架那樣,也可以在運(yùn)行時(shí)注冊(cè)新的動(dòng)作類(lèi)型。在一個(gè)實(shí)施例中,警告框架可以定義允許增加新動(dòng)作和條件的SPI。
規(guī)則觸發(fā)器負(fù)責(zé)啟動(dòng)(kick off)規(guī)則的評(píng)價(jià)的過(guò)程。如上所述,可以通過(guò)幾個(gè)不同的機(jī)制來(lái)觸發(fā)規(guī)則評(píng)價(jià)過(guò)程。在一個(gè)實(shí)施例中,舉例來(lái)說(shuō),這些機(jī)制可以包括更新的監(jiān)控量度的可用性;事件預(yù)訂——規(guī)則評(píng)價(jià)器在出現(xiàn)事件時(shí)可以預(yù)訂事件框架和觸發(fā)規(guī)則評(píng)價(jià);以及基于定時(shí)器的規(guī)則——調(diào)度服務(wù)可以產(chǎn)生規(guī)則評(píng)價(jià)器預(yù)訂的定時(shí)器事件,并且在固定的間隔啟動(dòng)規(guī)則評(píng)價(jià)。
在一個(gè)實(shí)施例中,評(píng)價(jià)規(guī)則包含評(píng)價(jià)在規(guī)則中包括的每個(gè)條件,并且如果所有的條件評(píng)價(jià)為真,則調(diào)用被包括的動(dòng)作。舉例來(lái)說(shuō),規(guī)則評(píng)價(jià)器通過(guò)在規(guī)則中包括的每個(gè)條件,并且調(diào)用與每個(gè)條件類(lèi)型相關(guān)聯(lián)的對(duì)應(yīng)的評(píng)價(jià)器以評(píng)價(jià)所述條件。在另一個(gè)實(shí)施例中,每個(gè)條件類(lèi)型注冊(cè)可以評(píng)價(jià)那個(gè)類(lèi)型的條件的評(píng)價(jià)器。注冊(cè)條件評(píng)價(jià)器包含實(shí)現(xiàn)由警告框架發(fā)布的Java接口。
在一個(gè)實(shí)施例中,規(guī)則框架提供了一種服務(wù)提供者接口(SPI),通過(guò)它可以注冊(cè)另外的條件和動(dòng)作類(lèi)型。在一個(gè)實(shí)施例中,每個(gè)動(dòng)作和條件類(lèi)型被實(shí)現(xiàn)為獨(dú)立的web應(yīng)用。當(dāng)部署所述應(yīng)用時(shí),收聽(tīng)者類(lèi)(listener class)注冊(cè)這些條件和動(dòng)作類(lèi)型。
在一個(gè)實(shí)施例中,規(guī)則綁定標(biāo)識(shí)可以將規(guī)則與其相關(guān)聯(lián)的位置。每個(gè)服務(wù)(外部和代理的)可以定義可以向其部署規(guī)則的一個(gè)或多個(gè)綁定點(diǎn)。綁定點(diǎn)可以捕獲由在那個(gè)服務(wù)代理中的所有流水線、級(jí)和傳輸注冊(cè)的監(jiān)控量度。規(guī)則可以被綁定到這個(gè)綁定點(diǎn),并且在這個(gè)綁定點(diǎn)可用的監(jiān)控量度可以用于構(gòu)造條件。在一個(gè)實(shí)施例中,每次創(chuàng)建/更新/刪除服務(wù)代理時(shí),通知向配置管理器注冊(cè)的收聽(tīng)者。這個(gè)收聽(tīng)者可以提取在服務(wù)中的綁定點(diǎn),并且將它們注冊(cè)到警告綁定管理器。
在一個(gè)實(shí)施例中,當(dāng)實(shí)體進(jìn)入“存在(existence)”時(shí),包含規(guī)則綁定點(diǎn)的每個(gè)“實(shí)體”(服務(wù)或處理)可以向警告管理器注冊(cè)這些綁定點(diǎn)。對(duì)于服務(wù)總線服務(wù),這意味著當(dāng)創(chuàng)建服務(wù)時(shí)注冊(cè)綁定點(diǎn)。對(duì)于BPM處理,當(dāng)部署所述處理時(shí)這個(gè)注冊(cè)發(fā)生。在一個(gè)實(shí)施例中,綁定點(diǎn)的這個(gè)庫(kù)可以被保持,并且可以對(duì)經(jīng)由控制臺(tái)和其他工具可以使用的JMX接口瀏覽可用。
在一個(gè)實(shí)施例中,警告管理器可以提供用于獲得服務(wù)/處理名稱的API和包含新的監(jiān)控量度的規(guī)則環(huán)境。警告管理器可以隨后查找對(duì)于那個(gè)服務(wù)或處理注冊(cè)的所有綁定點(diǎn),并且評(píng)價(jià)被綁定到每個(gè)綁定點(diǎn)的所有規(guī)則。
在一個(gè)實(shí)施例中,除了在配置時(shí)提供的所有信息之外,規(guī)則環(huán)境可以包括由規(guī)則綁定產(chǎn)生的所有運(yùn)行時(shí)數(shù)據(jù)。條件和動(dòng)作評(píng)價(jià)器可以提取這個(gè)運(yùn)行時(shí)數(shù)據(jù),并且在所產(chǎn)生的警告中嵌入對(duì)應(yīng)的值。下面的表列出了可以在規(guī)則環(huán)境中可用的字段

表1按照一個(gè)實(shí)施例的運(yùn)行時(shí)規(guī)則數(shù)據(jù)在一個(gè)實(shí)施例中,規(guī)則框架可以暴露一組JMX API以配置規(guī)則。這些API可以向管理規(guī)則提供插入、檢索、確認(rèn)和保持功能。這可以允許第三方工具直接與JMX層交互以管理規(guī)則和完全地繞過(guò)WLI 9.0管理控制臺(tái)。
多個(gè)規(guī)則可以與單個(gè)綁定點(diǎn)相關(guān)聯(lián)??梢砸圆渴鹨?guī)則的順序來(lái)執(zhí)行規(guī)則。用戶可以在任何時(shí)間改變這個(gè)順序。在一個(gè)實(shí)施例中,創(chuàng)建規(guī)則包含將一個(gè)規(guī)則與綁定點(diǎn)相關(guān)聯(lián)。例如,這么做的兩種方式1.瀏覽綁定點(diǎn)——管理員首先瀏覽來(lái)自綁定庫(kù)的所有綁定點(diǎn),選擇一個(gè),并且創(chuàng)建與那個(gè)綁定點(diǎn)相關(guān)聯(lián)的規(guī)則。
2.瀏覽實(shí)體——在這種情況下,管理員通過(guò)首先標(biāo)識(shí)他/她要將規(guī)則相關(guān)聯(lián)的實(shí)體(服務(wù)總線服務(wù)目錄或BPM處理查看器)開(kāi)始。然后向用戶提供在服務(wù)/處理中可用的規(guī)則綁定點(diǎn)的列表,選擇一個(gè)綁定點(diǎn),并且創(chuàng)建與那個(gè)綁定點(diǎn)相關(guān)聯(lián)的規(guī)則。
在一個(gè)實(shí)施例中,每個(gè)規(guī)則條件和動(dòng)作類(lèi)型可以定義其本身的模式以表示動(dòng)作或條件配置數(shù)據(jù)。這個(gè)條件或動(dòng)作配置被返回到警告管理器來(lái)作為系列化的XML,并且警告管理器可以將這個(gè)數(shù)據(jù)保持為規(guī)則定義的一部分。當(dāng)配置條件或動(dòng)作時(shí),規(guī)則環(huán)境被傳送到每個(gè)條件和動(dòng)作類(lèi)型。這允許條件配置機(jī)制執(zhí)行確認(rèn)以保證在綁定點(diǎn)可用的監(jiān)控?cái)?shù)據(jù)被包括在所述條件配置中。
在一個(gè)實(shí)施例中,被部署到特定綁定點(diǎn)的規(guī)則可以包括監(jiān)控在具體綁定點(diǎn)可用的數(shù)據(jù)元素。對(duì)于使用WLI控制臺(tái)來(lái)管理規(guī)則的用戶,可以通過(guò)控制臺(tái)來(lái)自動(dòng)執(zhí)行該確認(rèn)。所述控制臺(tái)可以容易地保證在相關(guān)聯(lián)的綁定可用的數(shù)據(jù)元素用于構(gòu)造在規(guī)則中包括的條件和動(dòng)作。在一個(gè)實(shí)施例中,監(jiān)控管理器匯集監(jiān)控?cái)?shù)據(jù)的集群范圍(cluster wide)的量度,并且對(duì)于已經(jīng)更新了可用的監(jiān)控量度的每個(gè)服務(wù)/處理觸發(fā)與每個(gè)綁定點(diǎn)相關(guān)聯(lián)的規(guī)則的評(píng)價(jià)。警告管理器可以首先構(gòu)造所述特定綁定點(diǎn)的規(guī)則環(huán)境。然后,可獲得被部署到那個(gè)綁定點(diǎn)的所有規(guī)則,并且可以以配置規(guī)則的順序來(lái)評(píng)價(jià)每個(gè)規(guī)則。規(guī)則環(huán)境被傳遞給每個(gè)條件H動(dòng)作評(píng)價(jià)器。如果在規(guī)則中的所有條件評(píng)價(jià)為真,則執(zhí)行在規(guī)則中包括的動(dòng)作。規(guī)則運(yùn)行時(shí)狀態(tài)對(duì)象跟蹤激發(fā)每個(gè)條件和動(dòng)作的結(jié)果。這個(gè)信息用于保證不對(duì)于用戶已經(jīng)被通知的預(yù)先存在的條件重復(fù)激發(fā)警告。
在一個(gè)實(shí)施例中,規(guī)則運(yùn)行時(shí)狀態(tài)對(duì)象也被傳送到每個(gè)動(dòng)作和條件。這個(gè)對(duì)象也可以定義每個(gè)條件和動(dòng)作的占位符(placeholder)以布置可以用于產(chǎn)生每個(gè)被評(píng)價(jià)的規(guī)則的跟蹤記錄的記錄數(shù)據(jù)。警告記錄條目被產(chǎn)生為可以在任何一個(gè)數(shù)據(jù)集中包含的跟蹤數(shù)據(jù)元素。可以在控制臺(tái)上顯示跟蹤記錄。在一個(gè)實(shí)施例中,路由節(jié)點(diǎn)提供了消息處理圖的請(qǐng)求/響應(yīng)通信。它用于向所選擇的服務(wù)分派消息,并且如果適用的話則等待響應(yīng)。因?yàn)樵谝粋€(gè)實(shí)施例中將路由當(dāng)作服務(wù)代理的主要消息路徑的一部分,因此任何所接收的響應(yīng)可以被用作在響應(yīng)處理中的響應(yīng)消息。在一個(gè)實(shí)施例中,路由節(jié)點(diǎn)包括一組路由。路由識(shí)別目標(biāo)服務(wù)(例如服務(wù)代理或外部代理),并且包括用于確定如何可以將消息封裝和發(fā)送到那個(gè)服務(wù)的一些另外的配置選擇。出站的變換是允許在將消息和環(huán)境發(fā)送到目標(biāo)服務(wù)之前修改所述消息和環(huán)境的一組變換動(dòng)作。響應(yīng)變換類(lèi)似地是被應(yīng)用到所接收的響應(yīng)的一組變換動(dòng)作。在這些實(shí)施例的多個(gè)方面,通過(guò)if-then-else(如果-則-否則)塊和路由表的任何組合來(lái)使得路由選擇是有條件的。
當(dāng)配置一個(gè)路由時(shí),也有被稱為跳躍(skip)的用于指定特殊路由的選擇。它僅僅是不做任何事情的路由——有效的一個(gè)非路由。跳躍在下述方面上表現(xiàn)得像一個(gè)路由它可以被選擇并且可以防止任何隨后的路由被考慮或選擇。但是,不可以使用跳躍路由來(lái)發(fā)送任何消息,并且不可以期望任何響應(yīng)。跳躍路由沒(méi)有進(jìn)一步的配置。跳躍的目的是允許用戶執(zhí)行清楚地定義當(dāng)用戶不要路由時(shí)的情況的選項(xiàng)。
在一個(gè)實(shí)施例中,出站的變換用于定制可以被發(fā)送到目標(biāo)服務(wù)的消息的形狀。這潛在包含修改消息本身(例如有效負(fù)荷、SOAP報(bào)頭)以及傳輸特定細(xì)節(jié),諸如傳輸報(bào)頭、重試計(jì)數(shù)、替代的URI等。這可以使用當(dāng)前在變換級(jí)中曝光的所述一組標(biāo)準(zhǔn)的變換動(dòng)作完成。除了分配、更新和刪除之外,出站和響應(yīng)變換也可以使用條件、WS呼出和提供錯(cuò)誤。在一個(gè)實(shí)施例中,響應(yīng)變換用于在將消息交給響應(yīng)路徑處理的流水線之前定制響應(yīng)消息的形狀。在此的意圖是出站和響應(yīng)變換可以一起用于有效地在由服務(wù)代理使用的請(qǐng)求/響應(yīng)格式和由目標(biāo)服務(wù)使用的請(qǐng)求/響應(yīng)格式之間的解譯。響應(yīng)變換也可以用于查看消息級(jí)的故障,諸如SOAP或商務(wù)故障。如果檢測(cè)到消息故障,則它可以提供錯(cuò)誤條件,就像正規(guī)的變換級(jí)那樣。
在一個(gè)實(shí)施例中,為了執(zhí)行條件路由,可以在if-then-else(如果-則-否則)塊中包裝路由。條件可以是布爾值的XQuery表達(dá)式,并且可以任意地嵌套塊。在另一個(gè)實(shí)施例中,最終的動(dòng)作是路由表的路由。在一個(gè)實(shí)施例中,路由表包括在轉(zhuǎn)換形式的條件表中包裝的一組路由。它是短手(short hand)的構(gòu)造,該短手的構(gòu)造允許根據(jù)單個(gè)XQuery表達(dá)式的結(jié)果來(lái)選擇不同的路由。
在一個(gè)實(shí)施例中,路由表包括單個(gè)where(哪里)子句和一組一個(gè)或多個(gè)case(情況)。所述where子句包含XQuery表達(dá)式,并且可以引用消息環(huán)境的任何部分。每個(gè)情況由比較運(yùn)算符、值表達(dá)式和作為case-action(情況-動(dòng)作)的至少一個(gè)路由構(gòu)成。因?yàn)檎麄€(gè)路由節(jié)點(diǎn)會(huì)導(dǎo)致選擇一個(gè)路由,因此不支持每個(gè)情況多個(gè)路由。如果未滿足任何在前的情況,則在其所選擇的路由的結(jié)尾增加一個(gè)默認(rèn)情況。
下面示出了示例路由表,雖然它不必然表示如何在配置控制臺(tái)中提供所述表。為了清楚,也省略路由細(xì)節(jié)。
where(哪里)數(shù)據(jù)($message/order-amount)比較器值路由>= 100000GoldService(金服務(wù))路由>= 10000 SilverService(銀服務(wù))路由否則 StandardService(標(biāo)準(zhǔn)服務(wù))路由路由表除了等式之外還支持幾個(gè)不同的比較運(yùn)算符。而且,在路由表中的值表達(dá)式是XQuey表達(dá)式,并且不是簡(jiǎn)單的恒定值。在這些實(shí)施例的多個(gè)方面中,通過(guò)首先評(píng)價(jià)在where子句中的XQuery表達(dá)式來(lái)評(píng)價(jià)路由表。然后,以通過(guò)下述方式而列出的順序來(lái)檢驗(yàn)每種情況通過(guò)使用所選擇的比較運(yùn)算符來(lái)將where子句與所述情況的值表達(dá)式相比較。如果滿足所述比較,則可以選擇對(duì)應(yīng)的路由。
在一個(gè)實(shí)施例中,作為路由節(jié)點(diǎn)的運(yùn)行時(shí)的一部分而執(zhí)行消息分派?;緢?zhí)行流是首先評(píng)價(jià)條件和路由表以查看是否選擇了一個(gè)路由。如果未選擇路由,則將所述路由節(jié)點(diǎn)考慮為完整,并且響應(yīng)處理立即以消息環(huán)境的當(dāng)前狀態(tài)開(kāi)始。如果選擇了路由,則向環(huán)境應(yīng)用任何對(duì)應(yīng)的出站變換。所述消息然后通過(guò)綁定和傳輸層而被發(fā)送到服務(wù)。如果不預(yù)期任何響應(yīng)消息,則認(rèn)為所述路由節(jié)點(diǎn)結(jié)束,并且響應(yīng)處理開(kāi)始。否則,路由注冊(cè)仍然被當(dāng)作活動(dòng)的,直到響應(yīng)到達(dá)。一旦出現(xiàn)這種情況,則應(yīng)用響應(yīng)變換,并且路由節(jié)點(diǎn)被認(rèn)為結(jié)束。在一個(gè)實(shí)施例中,批更新特征允許在服務(wù)總線組件被累積和可以被一起應(yīng)用的“會(huì)話”中對(duì)它們進(jìn)行改變。舉例來(lái)說(shuō),用戶(經(jīng)由控制臺(tái))或處理創(chuàng)建特殊的“批會(huì)話”,其中要累積所述改變。在所述批會(huì)話中進(jìn)行的改變不被存儲(chǔ)到“核心狀態(tài)”,而是它們被保存在會(huì)話中??梢栽凇疤峤弧彼鼈兏淖冎安榭锤淖?。在一個(gè)實(shí)施例中,不可能立即提交改變。例如,如果提交將導(dǎo)致無(wú)效的“核心狀態(tài)”(例如如果它產(chǎn)生循環(huán),引起未解決的引用等),則不允許提交。假定可以承諾批會(huì)話,則所累積的改變被反映到核心狀態(tài)。
在一個(gè)實(shí)施例中,批會(huì)話跟蹤在會(huì)話數(shù)據(jù)中什么組件被刪除、創(chuàng)建或更新。這個(gè)數(shù)據(jù)被保持,以便它在服務(wù)總線重啟和崩潰時(shí)繼續(xù)存在。核心狀態(tài)是服務(wù)器總線正在運(yùn)行的主配置。當(dāng)提交會(huì)話時(shí),在會(huì)話中進(jìn)行的改變被反映到核心狀態(tài)。核心狀態(tài)最終定義了服務(wù)總線的行為。會(huì)話視圖是由某人在會(huì)話中觀察的配置的狀態(tài)。會(huì)話視圖不是物理數(shù)據(jù)條目。其通過(guò)獲取核心狀態(tài)并且向其應(yīng)用會(huì)話數(shù)據(jù)獲得。批更新是有關(guān)在會(huì)話中修改服務(wù)總線配置,然后提交這些更新之類(lèi)的活動(dòng)。
在一個(gè)實(shí)施例中,批會(huì)話(或僅僅是會(huì)話)是在服務(wù)總線中的批更新支持的中心(centerpiece)。由用戶和/或處理創(chuàng)建會(huì)話??梢酝瑫r(shí)創(chuàng)建任何數(shù)量的會(huì)話。每個(gè)會(huì)話可以具有由在那個(gè)會(huì)話中執(zhí)行的修改確定的系統(tǒng)的不同視圖。會(huì)話數(shù)據(jù)是永久的,并且可以在崩潰或重啟的情況下繼續(xù)存在。會(huì)話跟蹤用戶更新、創(chuàng)建和刪除了什么組件。這被稱為會(huì)話數(shù)據(jù)。會(huì)話數(shù)據(jù)與核心狀態(tài)一起定義了在那個(gè)會(huì)話中的會(huì)話視圖,例如什么組件是可視的以及它們包含什么值。
在一個(gè)實(shí)施例中,通過(guò)經(jīng)由SessionMBean而調(diào)用在會(huì)話管理器上的方法來(lái)創(chuàng)建會(huì)話??梢允褂肧essionMBean的任何處理來(lái)創(chuàng)建會(huì)話,或者可以在控制臺(tái)上創(chuàng)建它。可以在會(huì)話中執(zhí)行配置改變(更新、刪除、創(chuàng)建)??梢孕薷母屡渲玫姆?wù)總線MBean方法以接受會(huì)話名稱,例如public void createService(String session,Ref serviceref,ServiceDefdefinition);使用MBeans的外部客戶僅僅需要提供會(huì)話名稱,并且可以在那個(gè)會(huì)話中累積由那個(gè)方法執(zhí)行的更新。有可能客戶在不同的會(huì)話中執(zhí)行所有的多個(gè)更新。在下面的示例中,Java代碼更新在會(huì)話1中的服務(wù),并且刪除在會(huì)話2中的服務(wù)提供者。這兩個(gè)會(huì)話可以具有關(guān)于配置看起來(lái)像什么的不同思路。會(huì)話1可以認(rèn)為服務(wù)提供者仍然存在,并且會(huì)話2可以認(rèn)為服務(wù)具有舊配置。
servicembean.updateService(“session1”,service1,newServiceData);sericeprovidermbean.deleteProvider(“session2”,serviceprovider2);
在一個(gè)實(shí)施例中,控制臺(tái)用戶當(dāng)它創(chuàng)建新的會(huì)話時(shí)、或當(dāng)選擇要進(jìn)去工作的一個(gè)現(xiàn)有的會(huì)話時(shí)進(jìn)入會(huì)話。同一用戶可以在不同的會(huì)話之間切換,并且不同的用戶可以同時(shí)工作在不同的會(huì)話上。由會(huì)話看見(jiàn)的配置的視圖與其他的視圖以及核心狀態(tài)不同。如果用戶創(chuàng)建了服務(wù)A、刪除了服務(wù)B并且隨后請(qǐng)求服務(wù)列表,則他應(yīng)當(dāng)看見(jiàn)A在列表中而B(niǎo)不在。但是,實(shí)際配置(核心狀態(tài))不可具有A,而是可以具有B,直到提交了所述會(huì)話。在一個(gè)實(shí)施例中,MBean讀取方法(諸如獲取器(getter)、列表方法、搜索方法)可以接受可選用的會(huì)話參數(shù)。如果會(huì)話參數(shù)是空的,則可以從核心狀態(tài)獲得所述數(shù)據(jù)。如果會(huì)話參數(shù)不是空的,則返回由所述會(huì)話看見(jiàn)的配置的視圖。例如,假定核心狀態(tài)包含服務(wù)B和C。進(jìn)一步假設(shè)用戶創(chuàng)建會(huì)話S1,并且在這個(gè)會(huì)話中創(chuàng)建服務(wù)A,然后刪除服務(wù)B,但是不就在此刻提交這些改變。listService(串會(huì)話)方法可以返回取決于會(huì)話的不同結(jié)果listServices(null)return B and ClistServices(“S1”)return A and C控制臺(tái)用戶如果不在任何會(huì)話中則看見(jiàn)核心狀態(tài)。一旦用戶滿意他的改變,則他可以提交所述改變、進(jìn)行確認(rèn)。提交將他已經(jīng)進(jìn)行的改變應(yīng)用到核心狀態(tài)。一旦提交了一個(gè)會(huì)話,則將其刪除,因?yàn)樗辉倏捎谩S脩粢部梢詠G棄會(huì)話,這僅僅刪除了會(huì)話數(shù)據(jù)狀態(tài),并不對(duì)于核心狀態(tài)有任何影響。用戶可以離開(kāi)他當(dāng)前所在的會(huì)話,而不同提交或丟棄它。這么做允許他看見(jiàn)核心狀態(tài),或切換到另一個(gè)會(huì)話。
圖11a-11b圖解了按照一個(gè)實(shí)施例的、在會(huì)話中和在核心中執(zhí)行了各種修改后的核心狀態(tài)、會(huì)話數(shù)據(jù)和會(huì)話視圖。使用不同的幾何形狀來(lái)加亮由所述組件采用的不同值。在會(huì)話視圖中具有粗線的形狀指示,所述會(huì)話修改了那個(gè)組件,因此其存在和值與在核心狀態(tài)中的同一組件不同。在會(huì)話視圖中的具有正規(guī)線條的形狀指示在會(huì)話中從未修改過(guò)那個(gè)組件,因此從核心狀態(tài)獲得其存在和值。
圖11a圖解了包含組件A、B和C的初始核心狀態(tài)。在會(huì)話中沒(méi)有任何更新,因此會(huì)話視圖精確地反映在核心狀態(tài)中包含什么。圖11b圖解了在會(huì)話數(shù)據(jù)中的更新。在所述會(huì)話中更新組件B。這個(gè)事實(shí)被記錄在所述會(huì)話數(shù)據(jù)中,并且所述會(huì)話數(shù)據(jù)繼而與核心狀態(tài)一起用于計(jì)算會(huì)話視圖。
圖12a-c圖解了按照一個(gè)實(shí)施例的另外的會(huì)話情況。在圖12a中,在會(huì)話中創(chuàng)建組件D。注意雖然D在會(huì)話視圖中是可視的,但是它在核心狀態(tài)中是不可視的。在圖12b中,在會(huì)話中刪除組件A,因此所述會(huì)話視圖不再包含組件A。但是,不在任何會(huì)話中的用戶看見(jiàn)核心狀態(tài),并且觀察到在核心狀態(tài)中存在組件A。最后,圖12c圖解了在核心狀態(tài)中進(jìn)行了兩個(gè)修改(可能由于提交另一個(gè)會(huì)話)——?jiǎng)h除組件B并且更新C——后的核心狀態(tài)和會(huì)話視圖。這兩個(gè)改變?cè)跁?huì)話視圖中不同地表明它們本身。對(duì)于C的更新在會(huì)話視圖中是可視的,因?yàn)镃從不被所述會(huì)話修改。但是,B的刪除在會(huì)話中是不可視的,因?yàn)锽被所述會(huì)話修改,因此其值是從所述會(huì)話數(shù)據(jù)直接地獲得的。這個(gè)情況是在會(huì)話的數(shù)據(jù)/視圖和核心狀態(tài)之間的“沖突”的示例。如果由兩個(gè)會(huì)話不兼容地修改了同一項(xiàng)目,則出現(xiàn)這樣的情況。除了會(huì)話之一被丟棄,否則當(dāng)提交第二會(huì)話時(shí)可以解決沖突。
在一個(gè)實(shí)施例中,會(huì)話數(shù)據(jù)實(shí)質(zhì)上是對(duì)于在那個(gè)會(huì)話中修改(創(chuàng)建、更新或刪除)的所有組件的記錄(信息)的列表。每個(gè)這樣的組件精確地具有一個(gè)記錄,即使它在那個(gè)會(huì)話中被修改多次(例如它被創(chuàng)建、然后刪除,然后再次被創(chuàng)建)。當(dāng)?shù)谝淮斡蓵?huì)話更新一個(gè)組件時(shí)創(chuàng)建這個(gè)記錄。當(dāng)對(duì)于同一組件執(zhí)行進(jìn)一步的修改時(shí)將所述記錄更新。如果取消由會(huì)話對(duì)于那個(gè)組件執(zhí)行的所有更新,則所述記錄被去除。會(huì)話數(shù)據(jù)被保存在文件系統(tǒng)上。還要注意到,會(huì)話數(shù)據(jù)不是自從創(chuàng)建會(huì)話時(shí)起的配置數(shù)據(jù)的快照(服務(wù)器使用基于快照的數(shù)據(jù))在一個(gè)實(shí)施例中,下面提供用于創(chuàng)建、更新和刪除操作的邏輯。
1)在會(huì)話S中創(chuàng)建Aa)如果在會(huì)話中刪除A,則創(chuàng)建(更新A的現(xiàn)有會(huì)話數(shù)據(jù))b)否則,如果在會(huì)話數(shù)據(jù)中存在A,則錯(cuò)誤(不能創(chuàng)建)c)否則,如果A存在于核心狀態(tài)中,則錯(cuò)誤(不能重建)d)否則,創(chuàng)建(在會(huì)話數(shù)據(jù)中創(chuàng)建A的新記錄)2)在會(huì)話S中更新Aa)如果在會(huì)話中刪除A,則錯(cuò)誤(A不存在于會(huì)話中)b)否則,如果A存在于會(huì)話數(shù)據(jù)中,則更新(更新A的現(xiàn)有會(huì)話數(shù)據(jù))c)否則,如果A存在于核心中,則更新(在會(huì)話數(shù)據(jù)中創(chuàng)建A的新記錄)d)否則,錯(cuò)誤(A不存在于核心狀態(tài)中)
3)在會(huì)話S中刪除Aa)如果在會(huì)話中刪除A,則錯(cuò)誤(A不存在于會(huì)話中)b)否則,如果A存在于會(huì)話數(shù)據(jù)中,則在正確的引用完整性檢查后刪除。
c)否則,如果A存在于核心狀態(tài)中,則在正確的參考完整性查看后刪除。
d)否則,錯(cuò)誤(不存在于核心狀態(tài)中)在一個(gè)實(shí)施例中,讀取操作給出用戶正看見(jiàn)會(huì)話視圖(而不是核心狀態(tài))的錯(cuò)覺(jué)(illusion)。他們通過(guò)使用會(huì)話數(shù)據(jù)和核心狀態(tài)做這些。下面的邏輯描述了在一個(gè)實(shí)施例中的讀取(獲得)操作的實(shí)現(xiàn)1)在會(huì)話S中讀取Aa)如果在會(huì)話中刪除A,則返回空b)否則,如果A存在于會(huì)話中,則返回在其這個(gè)會(huì)話中的值c)否則,如果A存在于核心狀態(tài)中,則返回其在核心狀態(tài)中的值d)否則返回空在一個(gè)實(shí)施例中,批會(huì)話允許用戶以嚴(yán)格的逆時(shí)間順序來(lái)取消它們已經(jīng)在那個(gè)會(huì)話中進(jìn)行的操作。
在一個(gè)實(shí)施例中,當(dāng)正在提交會(huì)話時(shí),系統(tǒng)可以適當(dāng)?shù)胤从硨?duì)于核心狀態(tài)的改變。所述提交實(shí)質(zhì)上導(dǎo)致對(duì)于由所述會(huì)話修改的各種組件進(jìn)行的更新、刪除或創(chuàng)建。在一個(gè)實(shí)施例中,會(huì)話的提交可以是原子的(atomic)。換句話說(shuō),如果它在中途失敗或如果服務(wù)總線崩潰,則至此所做的改變可以被退回(rollback)。
在一個(gè)實(shí)施例中,如果會(huì)話的提交不導(dǎo)致不一致的核心狀態(tài),則可以提交所述會(huì)話。在一個(gè)實(shí)施例中,如果下面的任何一個(gè)為真,則不允許提交1)在核心狀態(tài)中刪除在會(huì)話中由一個(gè)組件引用的一些組件。這被圖解在圖13a中。組件被創(chuàng)建和引用已經(jīng)在核心狀態(tài)中的組件B。然后,從核心狀態(tài)刪除B。雖然核心狀態(tài)是有效的,但是所述會(huì)話包含從A到B的無(wú)效引用。
2)對(duì)于核心狀態(tài)的改變可以產(chǎn)生在會(huì)話視圖中的引用循環(huán)。這被圖解在圖13b中。提交這樣的會(huì)話將向核心狀態(tài)引入所述循環(huán),因此不允許提交。通過(guò)首先更新A在下面的附圖中引入A循環(huán),使得它引用B。然后在核心狀態(tài)中修改B以引用A。雖然正在觀看核心狀態(tài)的某人會(huì)看見(jiàn)從B到A的引用,但是在會(huì)話中的用戶可以看見(jiàn)引用A的B和引用B的A。
3)圖13c圖解了由于可以被刪除的組件而導(dǎo)致的參考完整性侵害。當(dāng)在會(huì)話中刪除組件時(shí),會(huì)話管理器檢查以保證沒(méi)有對(duì)于那個(gè)組件的任何引用。在所述刪除后,所述組件不再位于會(huì)話視圖中。但是,因?yàn)橛捎谶€沒(méi)有提交所述會(huì)話而導(dǎo)致這個(gè)組件是在會(huì)話之外的用戶可視的,因此有可能在核心狀態(tài)中的組件被修改以指向由所述會(huì)話刪除的組件。這樣的情況意味著,不能進(jìn)行所述提交,因?yàn)檫@么做將導(dǎo)致無(wú)效的引用。
4)在會(huì)話和核心狀態(tài)中的沖突修改。有可能同一組件在會(huì)話中被修改,并且也在核心狀態(tài)中被修改(由于另一個(gè)會(huì)話的提交)。例如,會(huì)話可以刪除組件,而可以使用新值來(lái)更新同一組件。用戶可以明確地解決這樣的沖突更新。在本文中隨后更詳細(xì)地探究這個(gè)問(wèn)題。
5)與在進(jìn)行中的服務(wù)器改變列表沖突。在會(huì)話中執(zhí)行的特定操作導(dǎo)致對(duì)于服務(wù)器的修改。例如,創(chuàng)建服務(wù)通常部署小服務(wù)程序(servlet)或Mdatabase。但是。這些改變需要服務(wù)器鎖定,并且需要在改變列表中被提交(服務(wù)器調(diào)用它們的會(huì)話改變列表)。不幸的是,服務(wù)器不允許多個(gè)改變列表。如果已經(jīng)有在進(jìn)行中的服務(wù)器改變列表,則服務(wù)總線不能向服務(wù)器提交其自己的改變。
表2列出了按照一個(gè)實(shí)施例的沖突情況和系統(tǒng)如何可以自動(dòng)地解決這樣的沖突。注意到,所述表還列出了不導(dǎo)致沖突的三種并發(fā)修改的情況,因?yàn)樵跁?huì)話和核心狀態(tài)中進(jìn)行了精確地相同的修改。所述表具有四列。第一列表示在修改一個(gè)組件之前所述組件的原始值。在此列中的空值表示所述組件原始不存在。第二和第三列分別表示在核心狀態(tài)和會(huì)話中的組件的值。在這些列中的空值指示刪除(或根本未創(chuàng)建)所述組件。第四列說(shuō)明了沖突,并且描述了可以如何解決沖突。在一個(gè)實(shí)施例中并且參照表2,存在可以由系統(tǒng)解決的三種方式的沖突,它們被定義為ACCEPT SESSION(接受會(huì)話)、ACCEPTCORE(接受核心),以及在沖突更新的情況下的MERGE(合并)。



表2按照一個(gè)實(shí)施例的沖突解決方法1我不知道是否我們可以如此。
2在這種情況下,所述組件還在會(huì)話中創(chuàng)建,但是接著將其刪除。
在一個(gè)實(shí)施例中,更新計(jì)劃是用于描述要由服務(wù)器執(zhí)行什么動(dòng)作的對(duì)象。在每個(gè)服務(wù)器上存在的改變管理器負(fù)責(zé)執(zhí)行在更新計(jì)劃中描述的動(dòng)作。在管理服務(wù)器上執(zhí)行的更新計(jì)劃可以與在被管理的服務(wù)器上執(zhí)行的不同。
這個(gè)部分給出了如何執(zhí)行更新的很高級(jí)的概觀。這不意味著是更新和恢復(fù)的完整畫(huà)面。
在一個(gè)實(shí)施例中,在下面的情況下啟動(dòng)更新·用戶更新用戶提交批更新。在管理和被管理的服務(wù)器上產(chǎn)生和執(zhí)行更新計(jì)劃。這些更新通常發(fā)生在管理服務(wù)器和被管理的服務(wù)器上。
·被管理的服務(wù)器的恢復(fù)被管理的服務(wù)器在長(zhǎng)時(shí)間的與管理服務(wù)斷開(kāi)后發(fā)現(xiàn)其配置數(shù)據(jù)不在數(shù)據(jù)中。它因此從管理服務(wù)器請(qǐng)求更新計(jì)劃,所述更新計(jì)劃可以在被管理的服務(wù)器上被執(zhí)行并且可以使被管理的服務(wù)器配置成為最新。所述更新大致上是“增量(delta)”。
在用戶更新的情況下,首先在管理服務(wù)器上執(zhí)行更新計(jì)劃,并且如果它成功,則將其同時(shí)(或異步地)發(fā)送到被管理的服務(wù)器,以在那里執(zhí)行。在被管理的服務(wù)器恢復(fù)的情況下,被管理的服務(wù)器首先發(fā)送它所知道的所有資源和它們的版本號(hào)的摘要。管理服務(wù)器然后將此與其自己的數(shù)據(jù)相比較,并且如果存在任何差異,則它準(zhǔn)備和更新可以在被管理的服務(wù)器上執(zhí)行的計(jì)劃。
在一個(gè)實(shí)施例中,使用對(duì)于服務(wù)總線特殊配置的公知JMS主題來(lái)向被管理的服務(wù)器發(fā)送所述更新計(jì)劃。每個(gè)服務(wù)器(包括管理)具有改變管理器組件,它負(fù)責(zé)接收計(jì)劃,執(zhí)行它,并且將結(jié)果報(bào)告回管理服務(wù)器。每個(gè)服務(wù)器負(fù)責(zé)執(zhí)行它接收的更新計(jì)劃。如果計(jì)劃執(zhí)行由于應(yīng)用失敗而失敗(例如異常,而不是服務(wù)器崩潰),則服務(wù)器負(fù)責(zé)將由更新計(jì)劃執(zhí)行的所有改變退回到在執(zhí)行更新計(jì)劃之前存在的配置的狀態(tài)。換句話說(shuō),在服務(wù)器上的計(jì)劃的執(zhí)行是原子的。它或者成功或者失敗。在任何一種情況下,將結(jié)果報(bào)告到管理服務(wù)器。
有可能更新在一些服務(wù)器上成功,而在其他的服務(wù)器上失敗。當(dāng)此發(fā)生時(shí),在成功的服務(wù)器上的更新可以被退回或取消。服務(wù)器可能在更新的執(zhí)行期間崩潰。當(dāng)此發(fā)生時(shí),它需要在啟動(dòng)期間執(zhí)行恢復(fù)。在一個(gè)實(shí)施例中并且舉例來(lái)說(shuō),恢復(fù)包含下面的步驟1)退回已經(jīng)執(zhí)行但是未提交的任何本地工作。因?yàn)榇嬖诜?wù)器崩潰,因此需要恢復(fù)被保持的數(shù)據(jù)(文件)并且將其退回到它們的先前圖像。
2)而且,如果在被管理的服務(wù)器上a)則向管理服務(wù)器發(fā)送配置的當(dāng)前內(nèi)容的摘要,并且接收增量(delta)。
b)本地應(yīng)用這些增量以使得被管理的服務(wù)器的配置相對(duì)于管理服務(wù)器保持最新。
在一個(gè)實(shí)施例中,更新計(jì)劃描述了需要被應(yīng)用到服務(wù)總線配置的改變。在管理服務(wù)器和被管理的服務(wù)器上執(zhí)行更新計(jì)劃,并且所述更新計(jì)劃包含用于描述獨(dú)立的改變的“任務(wù)”的列表。在一個(gè)實(shí)施例中,存在5種任務(wù)創(chuàng)建組件任務(wù);更新組件任務(wù);刪除組件任務(wù);創(chuàng)建文件夾或項(xiàng)目任務(wù);并且刪除文件夾或項(xiàng)目任務(wù)。一般來(lái)說(shuō),所述更新計(jì)劃首先執(zhí)行用于創(chuàng)建文件夾或項(xiàng)目的任務(wù),隨后是任何數(shù)量的組件任務(wù),并且以刪除文件夾和項(xiàng)目的任務(wù)結(jié)束。
在一個(gè)實(shí)施例中,在更新計(jì)劃中的每個(gè)任務(wù)提供的下面的功能·確認(rèn)確認(rèn)被影響而不在系統(tǒng)中進(jìn)行任何修改的數(shù)據(jù)。
·執(zhí)行一旦確認(rèn)完成,則僅僅進(jìn)行執(zhí)行配置改變。即,它創(chuàng)建、更新和刪除填充(stuff)。
圖14是按照一個(gè)實(shí)施例的更新計(jì)劃執(zhí)行的圖示。此圖描述了如何執(zhí)行更新計(jì)劃1402和影響什么模塊/子系統(tǒng)。此圖示出了可以在更新中參與的三種主播放器專(zhuān)用于特定事物的配置框架中的各種管理器(1400,1404,1406,1408);數(shù)據(jù)結(jié)構(gòu),諸如更新計(jì)劃、任務(wù)等;以及各種全狀態(tài)(stateful)實(shí)體(1410,1414,1416,1418)這些是保持某個(gè)狀態(tài)的各種片段(piece)。這些是運(yùn)行時(shí)高速緩沖存儲(chǔ)器、被保持的數(shù)據(jù)和在系統(tǒng)中由其他模塊保持的其他數(shù)據(jù)(諸如用于保持被編譯的XQuery計(jì)劃的XQuery管理器)。
在一個(gè)實(shí)施例中,更新在改變管理器1400獲得更新計(jì)劃1402并且執(zhí)行它時(shí)開(kāi)始。在本實(shí)施例的各方面,更新計(jì)劃僅僅是可以依序被執(zhí)行的任務(wù)1412的列表。這些任務(wù)調(diào)用項(xiàng)目管理器1404或組件管理器1406的方法以便更新/創(chuàng)建/刪除/重新命名組件1420、文件夾或項(xiàng)目1418。項(xiàng)目管理器和組件管理器繼而更新相關(guān)聯(lián)的全狀態(tài)實(shí)體,諸如運(yùn)行時(shí)高速緩沖存儲(chǔ)器1414、引用圖和文件1416。在另一個(gè)實(shí)施例中,經(jīng)由文件管理器來(lái)處理文件更新。
在一個(gè)實(shí)施例中,收聽(tīng)的各種模塊對(duì)組件(例如服務(wù)管理器)1410更新。這些模塊注冊(cè)在特定組件類(lèi)型上發(fā)生的改變,并且當(dāng)創(chuàng)建、刪除、更新或重新命名組件類(lèi)型的實(shí)例時(shí)通知這些模塊。收聽(tīng)者一般響應(yīng)于這些通知而更新它們自己的內(nèi)部狀態(tài)。例如,傳輸管理器根據(jù)對(duì)于服務(wù)的定義所做的改變來(lái)部署/解除部署/中止/恢復(fù)傳輸端點(diǎn)。這些收聽(tīng)者保存當(dāng)發(fā)生錯(cuò)誤時(shí)可以被退回的狀態(tài)。
在一個(gè)實(shí)施例中,為了便利正確的恢復(fù),改變管理器可以永久地記錄關(guān)于計(jì)劃執(zhí)行的下面的事實(shí)1)在計(jì)劃執(zhí)行的開(kāi)始,在盤(pán)上寫(xiě)入記錄,所述記錄用于指示已經(jīng)開(kāi)始了執(zhí)行。諸如“STARTED(已經(jīng)開(kāi)始)”之類(lèi)的簡(jiǎn)單字符串值就足夠。
2)在成功執(zhí)行后,在盤(pán)上寫(xiě)入記錄,所述記錄用于指示所述執(zhí)行已經(jīng)成功地結(jié)束。諸如“SUCCESS(成功)”之類(lèi)的簡(jiǎn)單字符串值就足夠。
3)在應(yīng)用失敗后,在盤(pán)上寫(xiě)入記錄,所述記錄用于指示所述執(zhí)行已經(jīng)失敗,并且正在進(jìn)行恢復(fù)。諸如“FAILED(已經(jīng)失敗)”之類(lèi)的簡(jiǎn)單字符串值就足夠。
在一個(gè)實(shí)施例中,在應(yīng)用失敗或服務(wù)器崩潰后啟動(dòng)恢復(fù)。在第一種情況下,在應(yīng)用失敗后停止更新,并且立即開(kāi)始恢復(fù)。在第二種情況下,當(dāng)服務(wù)器在崩潰后重啟時(shí)執(zhí)行所述恢復(fù)。退回意味著對(duì)(一組)操作沒(méi)有影響。但是,恢復(fù)暗示更一般的活動(dòng),其可能包含許多退回,并且潛在地包括許多其他種類(lèi)的活動(dòng),諸如在分布環(huán)境中的不同實(shí)體之間的數(shù)據(jù)的交換,或者潛在地包括重新進(jìn)行操作。盡管如此,這兩個(gè)術(shù)語(yǔ)可以可交換地被使用。
假定一些操作OP將數(shù)據(jù)的片段(piece)的值(例如狀態(tài))從V1改變到V2。這個(gè)操作可以以兩種方式來(lái)退回1)基于值的方法(物理退回);將V1保存為這個(gè)操作的先前圖像,然后當(dāng)退回時(shí)回復(fù)到那個(gè)值;以及2)操作方法(邏輯退回)在當(dāng)前值V2上應(yīng)用操作OP的逆(稱為OPR)以獲得V1。
在一個(gè)實(shí)施例中,可以根據(jù)那哪個(gè)全狀態(tài)實(shí)體正在被退回來(lái)使用兩種方法。例如,使用用于文件更新的先前圖像(基于值的方法)有意義。這允許崩潰恢復(fù)以僅僅將所有被影響的文件替換為它們的先前圖像。另一方面,為了響應(yīng)通知而退回由各種管理器執(zhí)行的狀態(tài)改變,我們使用操作方法。
圖15a是按照一個(gè)實(shí)施例的成功更新的圖示。一般,有可能服務(wù)器可能在應(yīng)用異常后的退回期間崩潰,或者,服務(wù)器可能在服務(wù)器啟動(dòng)后的恢復(fù)期間崩潰。被填充的圓圈表示系統(tǒng)可能崩潰的位置。
在圖15b中,由于應(yīng)用異常而導(dǎo)致執(zhí)行失敗,并且在一個(gè)實(shí)施例,恢復(fù)立即開(kāi)始。退回計(jì)劃的執(zhí)行主要依賴于操作退回方法。
在一個(gè)實(shí)施例中,當(dāng)執(zhí)行一個(gè)計(jì)劃時(shí),它僅僅執(zhí)行在一個(gè)序列中的其每個(gè)任務(wù)。在執(zhí)行一個(gè)任務(wù)之前,對(duì)于那個(gè)任務(wù)創(chuàng)建取消任務(wù)。注意這個(gè)取消任務(wù)基本上是可以用于退回任務(wù)的影響的逆操作。在這些實(shí)施例的各方面,這些取消任務(wù)被保存在存儲(chǔ)器中。當(dāng)一個(gè)任務(wù)失敗時(shí),計(jì)劃執(zhí)行停止,并且以逆序來(lái)執(zhí)行所保存的取消任務(wù)。例如,假定所述計(jì)劃具有三個(gè)任務(wù)、即更新策略P、創(chuàng)建服務(wù)S和刪除XQuery X,并且XQuery的刪除失敗。下面的列表枚舉了所執(zhí)行的內(nèi)容1)獲得更新策略P的取消任務(wù)。將其稱為取消任務(wù)1。
2)執(zhí)行“更新策略P”。這成功了。
3)獲得創(chuàng)建服務(wù)S的取消任務(wù)。將此稱為取消任務(wù)2。
4)執(zhí)行“創(chuàng)建服務(wù)S”。這成功了。
5)獲得刪除XQuery X的取消任務(wù)。將此稱為取消任務(wù)3。
6)執(zhí)行“刪除XQueryX”。這失敗了。
7)開(kāi)始退回。
8)執(zhí)行取消任務(wù)3。
9)執(zhí)行取消任務(wù)2。
10)執(zhí)行取消任務(wù)1。
在一個(gè)實(shí)施例中,創(chuàng)建和刪除的取消任務(wù)是刪除和創(chuàng)建任務(wù)。對(duì)于更新任務(wù),取消任務(wù)可以是用于以其原始值來(lái)更新組件的另一個(gè)更新任務(wù)。類(lèi)似地,對(duì)于重新命名任務(wù),取消任務(wù)可以是將所述組件重新命名為其原始名稱的另一個(gè)重新命名任務(wù)。所述任務(wù)框架也允許程序員定制取消任務(wù)。
在一個(gè)實(shí)施例中,文件的更新不像任務(wù)的執(zhí)行那樣以執(zhí)行/取消形式進(jìn)行。任務(wù)被執(zhí)行,并且在退回的情況下,其取消任務(wù)被執(zhí)行。對(duì)于文件,首先“準(zhǔn)備”文件更新,在整個(gè)計(jì)劃執(zhí)行的結(jié)尾,根據(jù)是否計(jì)劃執(zhí)行已經(jīng)成功,“提交”或者“退回”更新。例如,假定作為對(duì)于組件C1和C2的一些配置改變的結(jié)果,要更新/創(chuàng)建/刪除配置文件F1和F2。下列情況會(huì)發(fā)生1)改變組件C1。這使得使用相關(guān)聯(lián)的數(shù)據(jù)來(lái)準(zhǔn)備文件F1。
2)改變組件C2。這使得使用相關(guān)聯(lián)的數(shù)據(jù)來(lái)準(zhǔn)備文件F2。
3)如果整個(gè)計(jì)劃執(zhí)行成功(例如提交),則作為最后的步驟,我們進(jìn)行a)提交對(duì)于文件F1的更新b)提交對(duì)于文件F2的更新4)...否則作為退回的一部分,我們進(jìn)行a)退回對(duì)于F1的更新b)退回對(duì)于F2的更新下面的表格給出了在一個(gè)實(shí)施例中如何進(jìn)行文件的創(chuàng)建、更新和刪除。被命名為準(zhǔn)備、提交和退回的列描述在那些階段發(fā)生了什么。(這些動(dòng)作也應(yīng)用到文件夾的創(chuàng)建或刪除)

表3按照實(shí)施例的文件操作在成功或失敗的記錄被保持到LAST_TRANSACTION_INFO文件中后執(zhí)行文件的提交和退回操作。這是允許在正常執(zhí)行或退回執(zhí)行期間在服務(wù)器崩潰后的恢復(fù)的設(shè)計(jì)決定(當(dāng)你研究下一個(gè)部分的細(xì)節(jié)時(shí),這可能或可能不對(duì)你是顯然的)。
圖15c圖解了由于服務(wù)器的崩潰而導(dǎo)致的執(zhí)行故障以及在服務(wù)器重啟后的恢復(fù)開(kāi)始。在服務(wù)器崩潰后,需要恢復(fù)對(duì)于被保持的數(shù)據(jù)(例如文件)的改變。在一個(gè)實(shí)施例中,這可以由系統(tǒng)按如下來(lái)完成1)使用LAST_TRANSACTION_INFO文件來(lái)確定是否最后的更新是成功的。
2)如果最后的更新失敗或在進(jìn)行(LAST_TRANSACTION_INFO包含故障或開(kāi)始),則我們需要退回文件更新,如在前一個(gè)部分中所述?;旧?,我們搜索被命名為“X.new”的任何文件,并且刪除它們,并且將所有被命名為“X.old”的文件重新命名為“X”。
3)如果最后的更新是成功的,則我們可能仍然需要進(jìn)行一些工作。有可能在寫(xiě)入“成功”記錄后更新失敗,同時(shí)仍然提交文件更新。因此,我們僅僅搜索名稱為“X.old”的任何文件,并且刪除它們,并且將所有的文件名稱“X.new”重新命名為“X”。這類(lèi)似于“重新進(jìn)行”操作。
4)一旦恢復(fù)了所有的文件,則僅僅去除LAST_TRANSACTION_INFO文件(或?qū)⒁恍┛兆址萌肫渲?。
這種機(jī)制允許所述系統(tǒng)恢復(fù)文件,即使服務(wù)器在恢復(fù)期間崩潰多次。
在一個(gè)實(shí)施例中,以下面的方式來(lái)處理被管理的服務(wù)器的恢復(fù)1)在啟動(dòng)期間,被管理的服務(wù)器執(zhí)行本地恢復(fù),如在前一個(gè)部分中所述。
2)然后,它聯(lián)系管理服務(wù)器,并且發(fā)送關(guān)于它知道的配置信息的摘要信息。這個(gè)摘要包含它知道的所有組件的ID和它們的版本號(hào)。
3)管理服務(wù)器將這個(gè)摘要與它具有的配置相比較,并且確定被管理的服務(wù)器丟失了、已經(jīng)過(guò)期了或僅僅不應(yīng)當(dāng)具有什么組件。然后,管理服務(wù)器準(zhǔn)備僅僅用于那個(gè)被管理的服務(wù)器的更新計(jì)劃,所述更新計(jì)劃當(dāng)被執(zhí)行時(shí)可以使得所述被管理的服務(wù)器相對(duì)于在管理服務(wù)器上的主配置最新。
在一個(gè)實(shí)施例中并且舉例來(lái)說(shuō),在松散聯(lián)合的系統(tǒng)中的執(zhí)行操作需要兩個(gè)階段的提交(2PC)1)每個(gè)參與者(資源管理器)準(zhǔn)備操作,但是還不提交。如果所述準(zhǔn)備成功,則它向所述2PC協(xié)調(diào)者發(fā)送OK消息。
2)如果2PC協(xié)調(diào)者從所有的參與者獲得OK,則它發(fā)送提交信號(hào)。否則,它發(fā)送取消(退回)信號(hào)。
3)每個(gè)參與者從協(xié)調(diào)者獲得決定是提交所準(zhǔn)備的改變,還是將它們退回。
雖然一個(gè)圖可以將組件描述為邏輯上分離,但是這樣的描述僅僅是用于說(shuō)明性目的。本領(lǐng)域內(nèi)的技術(shù)人員可以顯然明白,所描述的組件可以被組合或劃分為獨(dú)立的軟件、固件和/或硬件組件。而且,本領(lǐng)域內(nèi)的技術(shù)人員還會(huì)顯然明白,這樣的組件——不論它們?nèi)绾伪唤M合或劃分——可以對(duì)于同一計(jì)算器件執(zhí)行,或者可以被分布在通過(guò)一個(gè)或多個(gè)網(wǎng)絡(luò)而連接的不同的計(jì)算器件上或其他適當(dāng)?shù)耐ㄐ沤M件上。
可以使用按照本公開(kāi)的教導(dǎo)而編程的傳統(tǒng)的通用或?qū)S脭?shù)字計(jì)算機(jī)和/或處理器來(lái)實(shí)現(xiàn)各種實(shí)施例,這對(duì)于在計(jì)算機(jī)領(lǐng)域內(nèi)的技術(shù)人員會(huì)是顯然的。熟練的程序員可以根據(jù)本公開(kāi)的教導(dǎo)來(lái)容易地準(zhǔn)備適當(dāng)?shù)能浖幋a,這對(duì)于在軟件領(lǐng)域的技術(shù)人員會(huì)是顯然的。也可以通過(guò)準(zhǔn)備集成電路并且/或者通過(guò)互連傳統(tǒng)的組件電路的適當(dāng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)本發(fā)明,這對(duì)于本領(lǐng)域內(nèi)的技術(shù)人員是顯然的。各種實(shí)施例包括計(jì)算機(jī)程序產(chǎn)品,它是其中/其上存儲(chǔ)了指令的存儲(chǔ)介質(zhì)(媒體),所述指令可以用于編程通用或?qū)S糜?jì)算處理器/器件以執(zhí)行在此給出的任何特征。所述存儲(chǔ)介質(zhì)可以包括,但是不限于下列的一個(gè)或多個(gè)任何類(lèi)型的物理媒體,包括軟盤(pán)、光盤(pán)、DVD、CD-ROM、微驅(qū)動(dòng)器、磁光盤(pán)、全息照相存儲(chǔ)器、ROM、RAM、PRAM、EPROM、EEPROM、DRAM、VRAM、快閃存儲(chǔ)器、磁卡或光卡、納米系統(tǒng)(包括分子存儲(chǔ)器IC);紙張或基于紙張的介質(zhì);以及適合于存儲(chǔ)指令和/或信息的任何類(lèi)型的介質(zhì)或器件。各種實(shí)施例包括可以整體或部分地在一個(gè)或多個(gè)公共和/或私用網(wǎng)絡(luò)上傳輸?shù)挠?jì)算機(jī)程序產(chǎn)品,其中,所述傳輸包括可以由一個(gè)或多個(gè)處理器使用來(lái)執(zhí)行在此給出的任何特征的指令。在各種實(shí)施例中,所述傳輸可以包括多個(gè)獨(dú)立的傳輸。
本公開(kāi)包括被存儲(chǔ)在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)(媒體)中的軟件,用于控制通用/專(zhuān)用計(jì)算機(jī)和/或處理器的硬件,并且用于使得計(jì)算機(jī)和/或處理器能夠使用本發(fā)明的結(jié)果來(lái)與用戶或其他機(jī)制交互。這樣的軟件可以包括但是不限于器件驅(qū)動(dòng)器、操作系統(tǒng)、執(zhí)行環(huán)境/容器、用戶界面和應(yīng)用。
本發(fā)明的優(yōu)選實(shí)施例的上述說(shuō)明已經(jīng)被提供來(lái)用于解釋和說(shuō)明的目的。它不意欲是窮盡性的或?qū)⒈景l(fā)明限定到所公開(kāi)的精確形式。許多修改和改變對(duì)于本領(lǐng)域內(nèi)的熟練實(shí)踐者是顯然的。實(shí)施例被選擇和描述以便最佳地說(shuō)明本發(fā)明的原理及其實(shí)際應(yīng)用,由此使得本領(lǐng)域內(nèi)的其他技術(shù)人員能夠明白本發(fā)明。旨在通過(guò)權(quán)利要求及其等效來(lái)限定本發(fā)明的范圍。
權(quán)利要求
1.一種處理服務(wù)代理的消息的方法,包括沿著在消息處理圖中的第一路徑的第一方向來(lái)傳送消息,其中,第一路徑包括至少一個(gè)消息處理節(jié)點(diǎn);向所述至少一個(gè)消息處理節(jié)點(diǎn)的每個(gè)提供處理所述消息的機(jī)會(huì),其中,所述至少一個(gè)消息處理節(jié)點(diǎn)之一根據(jù)所述消息的至少一部分來(lái)執(zhí)行安全功能;以及其中,所述至少一個(gè)消息處理節(jié)點(diǎn)實(shí)現(xiàn)與服務(wù)代理兼容的接口和/或協(xié)議。
2.按照權(quán)利要求1的方法,其中所述安全功能能夠進(jìn)行下面的至少之一加密、解密、數(shù)字簽字、數(shù)字簽名驗(yàn)證、鑒別、評(píng)價(jià)策略并且確定訪問(wèn)權(quán)。
3.一種用于向過(guò)程傳送消息的方法,包括暴露第二接口,其中,第二接口是第一接口的外觀;經(jīng)由第二接口來(lái)接受消息;選擇處理;經(jīng)由第一接口來(lái)向所述過(guò)程提供消息;并且其中,對(duì)于第一接口的改變不需要對(duì)第二接口的改變。
4.按照權(quán)利要求3的方法,其中接口包括下面的至少之一消息格式、傳輸協(xié)議、地址、服務(wù)定義和安全方案。
5.一種用于處理服務(wù)代理的消息的方法,包括沿著消息處理圖中的第一路徑來(lái)傳送消息,其中,所述第一路徑包括至少一個(gè)消息處理節(jié)點(diǎn);選擇到目的地的路由,其中,所述目的地是另一個(gè)服務(wù)代理和服務(wù)之一;并且向所述目的地傳送所述消息。
6.按照權(quán)利要求5的方法,其中所述選擇是基于在所述消息中的內(nèi)容。
7.按照權(quán)利要求5的方法,其中在所述至少一個(gè)消息處理節(jié)點(diǎn)中的一個(gè)消息處理節(jié)點(diǎn)可以引用在所述至少一個(gè)消息處理節(jié)點(diǎn)中的一個(gè)或多個(gè)其他的消息處理節(jié)點(diǎn)。
8.一種用于監(jiān)控多個(gè)服務(wù)代理的方法,包括從下面的至少之一收集數(shù)據(jù)服務(wù)代理、服務(wù)代理組件、能夠監(jiān)控服務(wù)代理的過(guò)程;隨著時(shí)間來(lái)匯集數(shù)據(jù);并且觸發(fā)規(guī)則的評(píng)價(jià)。
9.按照權(quán)利要求8的方法,其中,所述匯集的步驟包括保留比較不近期地收集的數(shù)據(jù)而更近期地收集的數(shù)據(jù)。
10.按照權(quán)利要求8的方法,其中所述觸發(fā)基于以指定粒度在被匯集的數(shù)據(jù)中的改變。
11.按照權(quán)利要求8的方法,其中所述觸發(fā)基于事件的發(fā)生。
12.一種用于處理服務(wù)代理的消息的方法,包括沿著在消息處理圖中的第一路徑來(lái)傳送消息,其中,所述第一路徑包括至少一個(gè)消息處理節(jié)點(diǎn);向至少一個(gè)接收方發(fā)布所述消息;并且向目的地傳送所述消息,其中,所述目的地是另一個(gè)服務(wù)代理或服務(wù)中的一個(gè)。
13.按照權(quán)利要求12的方法,還包括根據(jù)在所述消息中的內(nèi)容來(lái)選擇至少一個(gè)接收方。
14.一種用于監(jiān)控服務(wù)代理的方法,包括通過(guò)下面之一來(lái)觸發(fā)規(guī)則評(píng)價(jià)服務(wù)代理、服務(wù)代理組件和能夠監(jiān)控服務(wù)代理的過(guò)程;產(chǎn)生被使用來(lái)評(píng)價(jià)規(guī)則的環(huán)境;根據(jù)環(huán)境并響應(yīng)于觸發(fā)來(lái)評(píng)價(jià)規(guī)則;以及響應(yīng)于評(píng)價(jià)而執(zhí)行動(dòng)作。
15.按照權(quán)利要求14的方法,其中規(guī)則包括評(píng)價(jià)為真或假的一個(gè)或多個(gè)表達(dá)式;并且其中,表達(dá)式可以包括嵌套的表達(dá)式。
16.按照權(quán)利要求14的方法,其中所述環(huán)境包括至少一個(gè)值,其中,所述至少一個(gè)值被用于所述評(píng)價(jià)中。
17.按照權(quán)利要求14的方法,其中服務(wù)代理是在客戶和下面之一之間的中介服務(wù)和另一個(gè)服務(wù)代理。
18.一種用于處理在服務(wù)代理中的消息的方法,包括在沿著多個(gè)消息處理節(jié)點(diǎn)的網(wǎng)絡(luò)中的第一路徑的第一方向上傳送消息,其中,所述第一路徑包括至少一個(gè)所述消息處理節(jié)點(diǎn);向在第一路徑中的每個(gè)節(jié)點(diǎn)提供處理所述消息的機(jī)會(huì);獲取與由所述消息識(shí)別的資源和/或服務(wù)相關(guān)的證書(shū);并且其中,消息處理節(jié)點(diǎn)實(shí)現(xiàn)與服務(wù)代理兼容的協(xié)議和/或接口。
19.按照權(quán)利要求18的方法,還包括向下面之一提供所述消息服務(wù)和服務(wù)代理。
20.一種用于動(dòng)態(tài)地重新規(guī)劃具有第一接口的應(yīng)用的方法,包括暴露第二接口,其中,所述第二接口是第一接口的外觀;從所述第二接口接受請(qǐng)求;向第一接口提供所述請(qǐng)求;并且其中,對(duì)第一接口的改變不要求對(duì)第二接口的改變。
21.按照權(quán)利要求20的方法,其中接口包括至少下面之一消息格式、傳輸協(xié)議、地址、服務(wù)定義和安全方案。
22.按照權(quán)利要求20的方法,其中第二接口是萬(wàn)維網(wǎng)服務(wù)接口。
23.按照權(quán)利要求20的方法,其中,所述提供包括動(dòng)態(tài)地向第一接口映射所述請(qǐng)求。
24.按照權(quán)利要求20的方法,其中,所述提供包括執(zhí)行下面的至少一個(gè)將所述消息格式轉(zhuǎn)換為與第一接口兼容的格式,使用與第一接口兼容的安全方案、使用與第一接口兼容的傳輸協(xié)議來(lái)向所述應(yīng)用發(fā)送所述請(qǐng)求。
25.一種經(jīng)由具有第一接口的應(yīng)用來(lái)訪問(wèn)信息的方法,包括暴露第二接口,其中,第二接口是第一接口的外觀;從第二接口接受請(qǐng)求;向第一接口提供所述請(qǐng)求;從第一接口獲得信息;向第二接口提供所述信息;并且其中,對(duì)于第一接口的改變不需要對(duì)第二接口的改變。
26.按照權(quán)利要求25的方法,其中接口包括至少下面之一消息格式、傳輸協(xié)議、地址、服務(wù)定義和安全方案。
27.按照權(quán)利要求25的方法,其中第二接口是萬(wàn)維網(wǎng)服務(wù)接口。
28.按照權(quán)利要求25的方法,其中,所述向第一接口提供所述請(qǐng)求包括執(zhí)行下面的至少之一將所述請(qǐng)求格式轉(zhuǎn)換為與第一接口兼容的格式,使用與第一接口兼容的安全方案、使用與第一接口兼容的傳輸協(xié)議來(lái)向所述應(yīng)用發(fā)送所述請(qǐng)求。
29.一種處理服務(wù)代理的消息的方法,包括在沿著在消息處理圖中的第一路徑的第一方向上傳送消息,其中,第一路徑包括至少一個(gè)消息處理節(jié)點(diǎn);允許至少一個(gè)消息處理節(jié)點(diǎn)的每個(gè)來(lái)處理消息;其中,所述至少一個(gè)消息處理節(jié)點(diǎn)實(shí)現(xiàn)與所述服務(wù)代理兼容的協(xié)議和/或接口。
30.按照權(quán)利要求29的方法,其中根據(jù)消息內(nèi)容來(lái)動(dòng)態(tài)地確定第一路徑。
31.按照權(quán)利要求29的方法,其中所述至少一個(gè)消息處理節(jié)點(diǎn)中的消息處理節(jié)點(diǎn)可以動(dòng)態(tài)地被增加到所述消息處理圖或從所述消息處理圖去除。
32.按照權(quán)利要求29的方法,其中在所述至少一個(gè)消息處理節(jié)點(diǎn)中的一個(gè)消息處理節(jié)點(diǎn)能夠執(zhí)行下面的至少之一消息鑒別、消息授權(quán)、消息確認(rèn)、消息變換、消息路由、性能監(jiān)控、消息跟蹤、消息歸檔、消息記錄、消息發(fā)布、錯(cuò)誤報(bào)告和用戶定義的過(guò)程。
全文摘要
面向服務(wù)的架構(gòu)。本發(fā)明不旨在作為本發(fā)明的完整說(shuō)明或限定本發(fā)明的范圍。可以通過(guò)查看說(shuō)明書(shū)、附圖和權(quán)利要求來(lái)獲得本發(fā)明的其他特征、方面和目的。
文檔編號(hào)G06F9/00GK1997983SQ200580001072
公開(kāi)日2007年7月11日 申請(qǐng)日期2005年5月23日 優(yōu)先權(quán)日2004年5月21日
發(fā)明者保羅·B·帕特里克, 阿肖克·阿萊蒂, 賈亞拉姆·卡西, 切特·卡普爾, 托爾加·尤漢, 馬修·米???申請(qǐng)人:Bea系統(tǒng)公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1