專利名稱:在分布式網(wǎng)絡(luò)體系結(jié)構(gòu)中建模和動態(tài)部署服務(wù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式網(wǎng)絡(luò)體系結(jié)構(gòu)的領(lǐng)域,更具體地說,涉及一種用于在分布式網(wǎng)絡(luò)體系結(jié)構(gòu),特別是在作為面向服務(wù)的體系結(jié)構(gòu)的一部分的服務(wù)容器中,建模和動態(tài)部署服務(wù)的系統(tǒng)和方法,其中,所述面向服務(wù)的體系結(jié)構(gòu)由以下部分構(gòu)成資源提供者、服務(wù)消費(fèi)者、和向服務(wù)消費(fèi)者提供服務(wù)的服務(wù)容器(即,主機(jī)環(huán)境)。
背景技術(shù):
當(dāng)今IT環(huán)境的形成是由于需要提供在各種系統(tǒng)和應(yīng)用之間的互操作性的手段。大多數(shù)所述系統(tǒng)和應(yīng)用潛在地保持狀態(tài)信息。由于系統(tǒng)和應(yīng)用的狀態(tài)化(stateful)特性,可將系統(tǒng)和應(yīng)用等看作資源。為了提供對這種資源的狀態(tài)的同種(homogeneous)訪問,在面向服務(wù)的體系結(jié)構(gòu)資源中,可通過與單獨(dú)的資源的狀態(tài)有關(guān)的功能接口將它們的狀態(tài)分別暴露為服務(wù)(例如,Web服務(wù))。
如果通過將資源的狀態(tài)和功能性暴露為服務(wù)(即,通過功能接口)來提供對任意資源(即,物理或邏輯系統(tǒng)或應(yīng)用)的訪問,則必須使用任意編程語言(例如,Java,Net等)來開發(fā)封裝各個資源的服務(wù)接口和實(shí)現(xiàn)(例如,Web服務(wù)、網(wǎng)格服務(wù)、CORBA等)。
當(dāng)今隨著新服務(wù)的開發(fā)和部署所遇到的問題在于現(xiàn)有技術(shù)應(yīng)用開發(fā)和部署的靜態(tài)特性。當(dāng)前的開發(fā)和部署處理非常剛性,不允許在運(yùn)行時期間修改現(xiàn)有的服務(wù)。如果要開發(fā)新的服務(wù)或者要修改現(xiàn)有的服務(wù),則整個應(yīng)用生存周期不得不重新開始,并且必須將新的特征添加到應(yīng)用的源代碼中,隨后該源代碼通常必須被編譯、進(jìn)一步描述、封裝并傳送到目標(biāo)主機(jī)環(huán)境中,目標(biāo)主機(jī)環(huán)境隨后提供服務(wù)的功能性以供使用(取決于使用的編程語言或方法,在可使用服務(wù)之前可能要執(zhí)行更多步驟。以下將更詳細(xì)描述。)此外,如果將現(xiàn)有的服務(wù)組合為較高層的復(fù)合服務(wù),則開發(fā)者必須提供組合兩個現(xiàn)有服務(wù)的功能性的代碼。總是在建立時期間(應(yīng)用或服務(wù)沒有激活或執(zhí)行),而不是在運(yùn)行時期間來完成所述開發(fā)和組合現(xiàn)有的服務(wù)。
現(xiàn)有技術(shù)為了更詳細(xì)地解釋當(dāng)前如何在主機(jī)環(huán)境中開發(fā)并部署新的服務(wù),
圖1示出在J2EE(即,Java 2企業(yè)版平臺)的情況下如何完成開發(fā)和部署的示意性表示的示例。所示內(nèi)容在建立時(以靜態(tài)方式開發(fā)應(yīng)用或服務(wù))和運(yùn)行時(完成的服務(wù)在主機(jī)環(huán)境中可用并可由服務(wù)消費(fèi)者訪問)之間進(jìn)行區(qū)分。如果將開發(fā)和部署新的服務(wù),則服務(wù)或應(yīng)用開發(fā)者必須執(zhí)行多個預(yù)定的活動。首先,必須開發(fā)服務(wù)(這包括服務(wù)的功能接口的規(guī)定以及服務(wù)邏輯的功能實(shí)現(xiàn))。其次,必須將完成的服務(wù)編譯為Java字節(jié)碼。然后,必須通過以所謂的部署描述符的格式添加附加的信息來進(jìn)一步描述新的代碼,所述部署描述符規(guī)定應(yīng)用服務(wù)的附加行為特性(例如,事務(wù)行為或安全設(shè)置)。在用一個或許多部署描述符描述了代碼之后,必須將描述符和代碼封裝在一起,成為例如.jar或.ear文件(表示J2EE可執(zhí)行)。接著,必須將所述可執(zhí)行內(nèi)容傳送到將來的主機(jī)環(huán)境內(nèi)的預(yù)定位置(這通常通過例如FTP的各種文件傳送來完成)。下面,開發(fā)者或部署者將必須創(chuàng)建需要的數(shù)據(jù)庫表,并將應(yīng)用的狀態(tài)化部分映射到各個表。最后,可使用各種方式將可執(zhí)行內(nèi)容安裝到主機(jī)環(huán)境(將其裝入目錄并重新啟動服務(wù)器,或調(diào)用安裝客戶機(jī)或管理接口)。通常,這意味著將必須停止主機(jī)環(huán)境(即,J2EE應(yīng)用服務(wù)器),必須安裝可執(zhí)行內(nèi)容,并且必須隨后重新啟動服務(wù)器。只有在成功重新啟動之后,才最終可由服務(wù)消費(fèi)者使用新的服務(wù)(即,可創(chuàng)建新的狀態(tài)化服務(wù)實(shí)例,并可調(diào)用對于這些實(shí)例的操作)。順便說明,所描述的靜態(tài)處理不僅對狀態(tài)化服務(wù)有效,而且對普通的服務(wù)和應(yīng)用開發(fā)及部署也是有效的。
如果將幾個服務(wù)組合為較高層的復(fù)合服務(wù),則必須以與單個服務(wù)完全相同的方式來開發(fā)新的復(fù)合服務(wù)。對于每個新的服務(wù),需要所有的開發(fā)步驟(在建立時期間),這同樣使得現(xiàn)有服務(wù)的組合非常剛性和難以處理。
現(xiàn)有技術(shù)方法的問題如下靜態(tài)開發(fā)和部署處理使得動態(tài)服務(wù)開發(fā)以及將現(xiàn)有服務(wù)復(fù)合為更加復(fù)雜的復(fù)合服務(wù)非常剛性和難以處理。此外,不能在運(yùn)行時期間動態(tài)配置服務(wù)(即,它們之后的應(yīng)用實(shí)現(xiàn))(例如,不能在運(yùn)行時期間調(diào)整事務(wù)行為或安全特征,但是需要在建立時期間完成所述調(diào)整,并且需要隨后重新配置所述服務(wù))。同樣地,對于服務(wù)的各種修改強(qiáng)制重新開發(fā)已修改的代碼。此外,如果將任何種類的資源表示為服務(wù),則它們需要實(shí)現(xiàn)另外的協(xié)議層,以便將它們的狀態(tài)信息和功能性暴露到面向服務(wù)的領(lǐng)域。
發(fā)明目的本發(fā)明的目的是提供一種用于在網(wǎng)絡(luò)體系結(jié)構(gòu)中開發(fā)和部署服務(wù)的系統(tǒng)和方法,其避免現(xiàn)有技術(shù)的缺點(diǎn)。
發(fā)明內(nèi)容
本發(fā)明描述一種用于在分布式網(wǎng)絡(luò)體系結(jié)構(gòu)、特別是在面向服務(wù)的體系結(jié)構(gòu)內(nèi)建模和動態(tài)部署服務(wù)的新的系統(tǒng)和方法。作為分布式網(wǎng)絡(luò)體系結(jié)構(gòu)的一部分的服務(wù)容器暴露它的功能性作為服務(wù)。它提供用于部署服務(wù)描述的注冊服務(wù)。在以任何聲明性描述語言(即,(狀態(tài)化)服務(wù),例如,狀態(tài)化Web服務(wù)的描述)創(chuàng)建新的服務(wù)描述之后,描述提供者在服務(wù)容器調(diào)用注冊服務(wù),所述服務(wù)容器允許在運(yùn)行時期間注冊(即,部署)所述新的服務(wù)描述,而不需要重新啟動服務(wù)容器。服務(wù)容器負(fù)責(zé)分析并檢查提交的新的服務(wù)描述的有效性,存儲所述服務(wù)描述,并使得它對于感興趣的服務(wù)消費(fèi)者可用,以進(jìn)行實(shí)例化。如果新的服務(wù)已成功注冊,則由服務(wù)容器自動創(chuàng)建用于訪問所述新服務(wù)的新的服務(wù)接口。感興趣的服務(wù)消費(fèi)者可以就被主機(jī)管理的可用服務(wù)查詢主機(jī)環(huán)境,并隨后實(shí)例化一個新的服務(wù)。服務(wù)消費(fèi)者隨后可以對給定的服務(wù)實(shí)例調(diào)用任何暴露的服務(wù)操作,其通常遵循請求響應(yīng)模式。
附圖的簡要說明在以下的詳細(xì)書面描述中,本發(fā)明的上述以及另外的目的、特征和優(yōu)點(diǎn)將變得清楚。在所附權(quán)利要求中闡述本發(fā)明的新穎特征。然而,通過參照下面的附圖閱讀示例性實(shí)施例的詳細(xì)描述,將最佳地理解本發(fā)明本身,以及本發(fā)明的使用的優(yōu)選模式、另外的目的以及優(yōu)點(diǎn),在附圖中圖1示出現(xiàn)有技術(shù)中的Web服務(wù)開發(fā)和部署處理;圖2示出根據(jù)本發(fā)明的新的部署方法;圖3示出在實(shí)現(xiàn)根據(jù)圖2的本發(fā)明的部署方法所需的分布式網(wǎng)絡(luò)體系結(jié)構(gòu)中涉及的當(dāng)事方;圖4示出根據(jù)圖3的用于實(shí)現(xiàn)本發(fā)明的部署方法的分布式網(wǎng)絡(luò)體系結(jié)構(gòu)的涉及的當(dāng)事方的組件;圖5示出根據(jù)權(quán)利要求3的涉及的當(dāng)事方的組件的相互作用示圖;圖6A到圖6G示出根據(jù)本發(fā)明,當(dāng)向服務(wù)容器注冊任何種類的服務(wù)的資源的新的表示時的活動;圖7A到圖7L示出在使用Web服務(wù)容器的Web服務(wù)體系結(jié)構(gòu)中用于服務(wù)的動態(tài)部署的本發(fā)明的系統(tǒng)和方法的優(yōu)選實(shí)施例。
關(guān)于圖2,示出了在面向服務(wù)的體系結(jié)構(gòu)中的服務(wù)的開發(fā)和動態(tài)部署的本發(fā)明的方法的示意性表示,所述面向服務(wù)的體系結(jié)構(gòu)至少包括描述提供者3、主機(jī)環(huán)境4(服務(wù)容器)、以及服務(wù)消費(fèi)者2。在創(chuàng)建了任何聲明性描述語言的服務(wù)描述8(即,以狀態(tài)化Web服務(wù)為例的(狀態(tài)化)服務(wù)的描述)之后,描述提供者3調(diào)用對主機(jī)環(huán)境4的操作,其允許注冊10(即,部署)可表示任何種類的資源(例如,狀態(tài)化資源)的新的服務(wù)描述。向主機(jī)環(huán)境4注冊新的服務(wù)描述,這一操作可在運(yùn)行時期間發(fā)生,而不需要重新啟動主機(jī)環(huán)境以便注冊或?qū)嵗碌姆?wù),其后,主機(jī)環(huán)境4(例如,應(yīng)用服務(wù)器或服務(wù)容器等)負(fù)責(zé)分析和檢查提交的服務(wù)描述的有效性,以存儲描述的服務(wù)并且使得它可用于感興趣的服務(wù)消費(fèi)者2來進(jìn)行實(shí)例化。感興趣的服務(wù)消費(fèi)者2可向主機(jī)環(huán)境4查詢被主機(jī)處理的可用服務(wù),并隨后實(shí)例化任何現(xiàn)有的服務(wù)的新的服務(wù)實(shí)例。如果已創(chuàng)建服務(wù)實(shí)例,則可通過與基礎(chǔ)服務(wù)相應(yīng)的服務(wù)接口12(例如,Web服務(wù)接口)對其進(jìn)行訪問,通過主機(jī)環(huán)境4自動暴露基礎(chǔ)服務(wù)(由于主機(jī)環(huán)境也暴露其操作作為服務(wù),所以也可將其稱為主機(jī)服務(wù))。服務(wù)消費(fèi)者2隨后可調(diào)用對于給定的服務(wù)實(shí)例(在得自描述的服務(wù)類型的服務(wù)接口之后)的任何暴露的服務(wù)操作,其通常遵循請求響應(yīng)模式。
圖3示出在實(shí)現(xiàn)根據(jù)圖2的本發(fā)明的部署方法所需的分布式網(wǎng)絡(luò)體系結(jié)構(gòu)中涉及的當(dāng)事方。
服務(wù)容器4(即,主機(jī)環(huán)境)優(yōu)選的是狀態(tài)化服務(wù)容器,其提供受管理的運(yùn)行時環(huán)境并提供透明事務(wù)處理、持久保存、消息傳送子系統(tǒng)和工作流引擎,其控制服務(wù)實(shí)例的工作流驅(qū)動的操作的執(zhí)行。所述服務(wù)容器可在任何種類的數(shù)據(jù)處理單元上運(yùn)行,所述數(shù)據(jù)處理單元諸如具有處理器、工作存儲器、輔助存儲器、以及在理想狀況下具有網(wǎng)絡(luò)(有線或無線)接入的普通PC、專用服務(wù)器等。
資源提供者13提供物理或邏輯資源,它們應(yīng)該經(jīng)由服務(wù)容器4提供給潛在服務(wù)消費(fèi)者2。
描述提供者3向服務(wù)容器4提供專用服務(wù)(可能表示狀態(tài)化物理資源)的描述。
服務(wù)消費(fèi)者2對使用由服務(wù)容器4提供并位于其中的一個或多個服務(wù)感興趣。
所有這些涉及的當(dāng)事方可經(jīng)由網(wǎng)絡(luò)連接,并且在這一基礎(chǔ)結(jié)構(gòu)之內(nèi)通信并交換信息。
本發(fā)明詳細(xì)描述資源提供者13可以如何將任何種類的(狀態(tài)化)資源提供給服務(wù)消費(fèi)者2。為了完成這一目的,描述提供者5(可以是資源提供者本身)必須創(chuàng)建表示其選擇的資源的服務(wù)描述。在描述其資源(源代碼)的這種表示之后,他能夠向服務(wù)容器4注冊所述描述。其中,感興趣的服務(wù)消費(fèi)者2會創(chuàng)建服務(wù)描述(=資源的類型)的單獨(dú)的實(shí)例并經(jīng)由選擇的協(xié)議(通過服務(wù)容器的供應(yīng)而定義,至少應(yīng)提供通過SOAP的Web服務(wù))與它相互作用。
圖4示出所涉及的當(dāng)事方的組件。
服務(wù)容器4至少具有下述組件服務(wù)描述數(shù)據(jù)存儲器22,包含已經(jīng)向服務(wù)容器4注冊的服務(wù)描述。
服務(wù)實(shí)例數(shù)據(jù)存儲器23,包含屬于服務(wù)存儲器22中的服務(wù)描述的所有實(shí)例。
接口80,包括下面一組子接口40、43,需要它們來實(shí)現(xiàn)本發(fā)明注冊服務(wù)接口40,其允許描述提供者注冊表示任何種類的資源的新服務(wù)的服務(wù)描述,以及服務(wù)接口43,當(dāng)服務(wù)描述的注冊已經(jīng)成功時其被自動創(chuàng)建。
優(yōu)選的是,將下述進(jìn)一步的子接口包括在服務(wù)容器中信息檢索接口41,其可用于對所述容器進(jìn)行查詢,以查詢部署的服務(wù)和服務(wù)實(shí)例,以及實(shí)例化服務(wù)接口42,其允許服務(wù)消費(fèi)者對由所述容器提供的服務(wù)描述進(jìn)行實(shí)例化。
可另外將下述進(jìn)一步的接口包括在服務(wù)容器中刪除服務(wù)實(shí)例接口,其允許服務(wù)消費(fèi)者明確地刪除不再使用的實(shí)例,用于每個先前向容器注冊的服務(wù)的接口。使用這一接口以及指向符合這一接口的單獨(dú)的實(shí)例的唯一句柄(handle),服務(wù)消費(fèi)者可訪問并操作實(shí)例,以及撤銷(Deregister)描述接口,其用于撤銷不再使用的服務(wù)描述。
資源提供者13提供對物理和邏輯資源14的訪問,所述資源14例如CPU(計(jì)算周期)、存儲器(用于數(shù)據(jù)存儲的物理裝置)、網(wǎng)絡(luò)(具有各種質(zhì)量的服務(wù),即,關(guān)于帶寬、吞吐量等的網(wǎng)絡(luò)資源)、軟件服務(wù)(即,數(shù)據(jù)庫或Web服務(wù)器)、計(jì)費(fèi)服務(wù)、計(jì)量服務(wù)(這種服務(wù)以時間級、負(fù)載級、吞吐量級等為任何服務(wù)消費(fèi)者計(jì)量資源的使用,并將這一計(jì)量信息提供給實(shí)體服務(wù)消費(fèi)者)、記帳服務(wù)(這種服務(wù)使用經(jīng)由計(jì)費(fèi)和計(jì)量而收集的數(shù)據(jù)來創(chuàng)建用于資源的使用即付費(fèi)的帳單)。資源提供者13可提供通過諸如CIM、SNMP、SSH、遠(yuǎn)程登陸等各種方式對它的資源的訪問。
可以由同一個當(dāng)事方充當(dāng)資源提供者13的角色和描述提供者3的角色。描述提供者以及資源提供者這兩者也可在服務(wù)消費(fèi)者角色方面起到作用。
描述提供者3負(fù)責(zé)創(chuàng)建服務(wù)的描述并向服務(wù)容器注冊創(chuàng)建的描述,所述服務(wù)容器可優(yōu)選的是狀態(tài)化服務(wù)容器。為了創(chuàng)建服務(wù)描述,服務(wù)提供者3遵守規(guī)定某種聲明性描述語言(即,基于XML)的句法和語義的語法。使用所述語法,以便規(guī)定反映資源的服務(wù)的描述。為了向服務(wù)容器4注冊所述描述,需要指向容器的注冊器接口的端點(diǎn)引用。此外,描述提供者需要具有由將被描述的服務(wù)表示的資源的某種信息或某些概念。這也可包括協(xié)議專用信息(以便在后臺直接訪問物理資源)。
服務(wù)消費(fèi)者2僅需要知道如何尋址服務(wù)容器接口43(即,需要指向容器接口的端點(diǎn)的端點(diǎn)引用/URL)??赏ㄟ^查詢狀態(tài)化服務(wù)提供者的接口動態(tài)地獲得服務(wù)消費(fèi)者所需的所有其它信息。
服務(wù)消費(fèi)者2可具有高速緩存或存儲器,以便持久地保存引用服務(wù)和服務(wù)實(shí)例等的句柄。然而,這僅是優(yōu)選的情況,所述高速緩存或存儲器并不是必須強(qiáng)制設(shè)置的。還可使用狀態(tài)化服務(wù)容器的信息檢索接口動態(tài)地獲得所有所述信息。
圖5示出根據(jù)權(quán)利要求4的涉及的當(dāng)事方的組件的相互作用示圖。
圖5給出所有的組件如何相互作用的概述,示出新的服務(wù)描述的動態(tài)部署或注冊,并演示例如狀態(tài)化服務(wù)實(shí)例的服務(wù)實(shí)例的后續(xù)實(shí)例化,以及與它們的相互作用。
首先,必須由資源提供者提供某種資源(0)??梢愿鞣N方式(即,經(jīng)由SNMP、CIM、SSH、遠(yuǎn)程訪問等)提供對這些資源的實(shí)際訪問。
此后,描述提供者創(chuàng)建并注冊反映實(shí)際資源的服務(wù)描述(1)。
一旦在服務(wù)容器(優(yōu)選的是狀態(tài)化Web服務(wù)容器)中存在可用的服務(wù),則服務(wù)消費(fèi)者可檢索關(guān)于注冊的服務(wù)和實(shí)例的信息(2;如果有的話)。
在服務(wù)描述已經(jīng)被注冊之后,可由感興趣的服務(wù)消費(fèi)者對它們進(jìn)行實(shí)例化(3)。
經(jīng)由分別注冊的服務(wù)描述的自動暴露的服務(wù)接口,服務(wù)消費(fèi)者可隨后與服務(wù)實(shí)例相互作用。因此,服務(wù)消費(fèi)者可調(diào)用對服務(wù)實(shí)例的操作,并因此改變服務(wù)實(shí)例的狀態(tài)(4)。
如果不再使用服務(wù)實(shí)例,則服務(wù)消費(fèi)者可選擇刪除所述實(shí)例(5)。
可從狀態(tài)化服務(wù)容器撤銷不具有相應(yīng)服務(wù)實(shí)例并且不再使用的服務(wù)描述(6)。
圖6A至圖6G示出根據(jù)本發(fā)明當(dāng)向服務(wù)容器注冊任何種類服務(wù)的資源的新的表示時的相互作用。
當(dāng)向服務(wù)容器注冊任何種類服務(wù)的資源的新的表示時發(fā)生以下活動(見圖6A)描述提供者3使用某種聲明性描述語言的方式定義并聲明它的選擇的服務(wù)描述(即,符合某種將被虛擬化的物理或邏輯資源)??勺詣?使用模板)或手動完成新的服務(wù)的描述。
描述提供者3調(diào)用服務(wù)容器4的某種注冊(服務(wù)描述)操作,并由此注冊服務(wù)描述。服務(wù)容器4利用服務(wù)存儲器分析、驗(yàn)證并注冊表示新的類型的資源(例如,狀態(tài)化資源)的服務(wù)描述。在成功注冊之后,提供服務(wù)描述以便進(jìn)行實(shí)例化。
如果注冊操作成功,則服務(wù)容器4將唯一ID,描述句柄(引用注冊的服務(wù))返回到描述提供者3。
為了檢索關(guān)于注冊的服務(wù)、它們的描述和接口以及現(xiàn)有的服務(wù)實(shí)例的信息,提供以下方法檢索服務(wù)信息(見圖6B)
在第一步驟10,服務(wù)消費(fèi)者2可檢索描述句柄(對已經(jīng)向服務(wù)容器4注冊的服務(wù)描述的唯一引用)的列表。
具有這種描述句柄,服務(wù)消費(fèi)者2可檢索與描述句柄相應(yīng)的服務(wù)描述20。
此外,服務(wù)消費(fèi)者2還可通過提交描述句柄作為參數(shù)來獲得由注冊的服務(wù)自動暴露的服務(wù)接口(即,Web服務(wù)器情況下的WSDL)30。
此外,服務(wù)消費(fèi)者2還可檢索實(shí)例句柄的列表,所述實(shí)例句柄引用屬于由提交的描述句柄描述的服務(wù)的所有服務(wù)實(shí)例40。
在一個服務(wù)可由服務(wù)消費(fèi)者2使用之前,其需要被實(shí)例化。
實(shí)例化服務(wù)(見圖6C)為了實(shí)例化注冊的服務(wù),服務(wù)消費(fèi)者2調(diào)用實(shí)例化服務(wù)(...)操作,并傳遞描述句柄(其將成為服務(wù)示例的類型)以及可選數(shù)據(jù)(用于實(shí)例化)作為參數(shù)10??蛇x數(shù)據(jù)可包括用于服務(wù)實(shí)例初始化的狀態(tài)信息,對于相應(yīng)實(shí)體的所需服務(wù)質(zhì)量要求等。
服務(wù)容器2創(chuàng)建新的服務(wù)實(shí)例并向服務(wù)實(shí)例存儲器注冊所述新的實(shí)例。服務(wù)實(shí)例符合由服務(wù)規(guī)定的接口。
可選擇性地提交的數(shù)據(jù)也持久地存在于服務(wù)實(shí)例存儲器中。
如果實(shí)例化成功,則服務(wù)消費(fèi)者2獲得唯一實(shí)例句柄,所述實(shí)例句柄引用新創(chuàng)建的服務(wù)實(shí)例。
可經(jīng)由基礎(chǔ)服務(wù)的服務(wù)接口訪問現(xiàn)有的服務(wù)實(shí)例??梢灶A(yù)見服務(wù)消費(fèi)者2和服務(wù)實(shí)例之間的各種相互作用,即,操作調(diào)用、通知產(chǎn)生和接收、對外部工作流活動的調(diào)用、以及服務(wù)質(zhì)量特性的動態(tài)變更或設(shè)置。以下描述典型相互作用的方案使用服務(wù)實(shí)例1(見圖6D)如果服務(wù)消費(fèi)者2已經(jīng)保留對于期望的服務(wù)實(shí)例的引用,則他可向服務(wù)容器4提交這一實(shí)例句柄。
作為提交的實(shí)例句柄的結(jié)果,服務(wù)消費(fèi)者2接收相應(yīng)的描述句柄,其引用服務(wù)實(shí)例的服務(wù)10。
在服務(wù)消費(fèi)者2可與服務(wù)實(shí)例相互作用之前,必須通過提交服務(wù)實(shí)例所符合的服務(wù)的描述句柄來獲得服務(wù)接口(20;服務(wù)接口例如可以用WSDL描述)。
在服務(wù)消費(fèi)者2獲得服務(wù)接口之后,可使用經(jīng)由接口暴露的任何操作來與服務(wù)實(shí)例30相互作用。當(dāng)操作被調(diào)用時,必須傳遞實(shí)例句柄連同可能的其它參數(shù)。
服務(wù)容器4在服務(wù)接口截取操作調(diào)用,并將其路由到正確的服務(wù)實(shí)例(由提交的實(shí)例句柄指示)40。
如果所調(diào)用的操作是復(fù)雜的工作流驅(qū)動的操作(通過工作流執(zhí)行引擎截取和管理),則外部活動提供者可提供一個或多個包含在工作流操作中的活動60。按照由工作流操作定義規(guī)定的順序調(diào)用這些活動。
該操作潛在地更新服務(wù)實(shí)例的狀態(tài)。
經(jīng)由服務(wù)容器將潛在返回值返回到服務(wù)消費(fèi)者2。
修改服務(wù)描述(見圖6E)為了修改現(xiàn)有服務(wù),描述提供者調(diào)用修改操作并提交描述句柄連同期望的對描述的修改作為參數(shù)10。
服務(wù)容器4隨后修改服務(wù)并更新服務(wù)數(shù)據(jù)存儲器20。
此外,向主題注冊處(topic registry)添加可能的主題,或?qū)⒖赡艿闹黝}從主題注冊處中去除,因此,修改可持久地存在于主題存儲器中。
可刪除不使用的服務(wù)實(shí)例刪除服務(wù)實(shí)例(見圖6F)如果不再需要一個現(xiàn)有的服務(wù)實(shí)例,則服務(wù)消費(fèi)者2可調(diào)用刪除操作,并傳遞指向?qū)⒈粍h除的服務(wù)實(shí)例的期望的實(shí)例句柄10。
容器隨后從服務(wù)實(shí)例數(shù)據(jù)存儲器刪除所述實(shí)例20。
下面,服務(wù)消費(fèi)者2接收指示刪除操作是否成功的狀態(tài)碼。
在符合這一類型的所有服務(wù)實(shí)例被禁止存在之后,可動態(tài)撤銷不再需要的服務(wù)描述。
撤銷服務(wù)描述(見圖6G)
如果不再需要現(xiàn)有的服務(wù),則服務(wù)消費(fèi)者2可調(diào)用撤銷操作,并傳遞指向?qū)⒈怀蜂N的服務(wù)描述的期望的描述句柄10。
服務(wù)容器4隨后從服務(wù)存儲器撤銷所述描述20。
下面,服務(wù)消費(fèi)者2接收指示撤銷操作是否成功的狀態(tài)碼30。
圖7A至圖7L示出用于在使用Web服務(wù)容器的Web服務(wù)體系結(jié)構(gòu)中的服務(wù)的動態(tài)部署的本發(fā)明的系統(tǒng)和方法的優(yōu)選實(shí)施例。
Web服務(wù)容器表示W(wǎng)eb服務(wù)的主機(jī)環(huán)境,用于服務(wù)實(shí)現(xiàn)的生存周期管理、方法調(diào)用的并發(fā)管理、持久保存和事務(wù)服務(wù)。完成這些服務(wù),其還可支持基于主題的管理和安全性。
在該優(yōu)選的實(shí)現(xiàn)中,以聲明性描述語言在Web服務(wù)容器中部署服務(wù),其中,所述聲明性描述語言通過使用實(shí)體類型描述來建立模型。
通過聲明性描述語言來描述實(shí)體類型,并且實(shí)體類型提出任何可以構(gòu)想的資源類型的面向服務(wù)的表示。當(dāng)以抽象方式完成資源的面向服務(wù)的表示時,可將實(shí)體類型映射到面向服務(wù)的體系結(jié)構(gòu)(即,狀態(tài)化Web服務(wù))的任何可構(gòu)想的實(shí)現(xiàn)。
圖7A示出資源類型、相應(yīng)的實(shí)體類型和一種向潛在服務(wù)客戶暴露實(shí)體類型的可能性之間的關(guān)系。實(shí)體類型提供資源類型的抽象的面向服務(wù)的表示,并定義在面向服務(wù)的領(lǐng)域如何暴露特定資源類型。這種資源和實(shí)體的分離允許對于哪個資源類型的屬性以及哪個狀態(tài)信息將可用的精細(xì)級別進(jìn)行定義。主機(jī)環(huán)境,例如,狀態(tài)化Web服務(wù)容器隨后將使用Web服務(wù)標(biāo)準(zhǔn)自動地暴露抽象的服務(wù)表示。
這種資源建模的方法兼?zhèn)鋷讉€優(yōu)點(diǎn)。第一,所述方法將實(shí)際資源類型從用于產(chǎn)生資源的抽象的服務(wù)表示的實(shí)體和它們的狀態(tài)分離。第二,所述方法使得可以使用除Web服務(wù)之外的服務(wù)實(shí)現(xiàn)來暴露資源的狀態(tài)。第三,由于可使用自動暴露的服務(wù)接口訪問全部的各種資源,所述方法提供各種資源的統(tǒng)一視圖。
可以以使用聲明性描述語言語法的聲明性方式描述邏輯或物理資源。產(chǎn)生的實(shí)體類型描述以抽象和面向服務(wù)的方式表示資源類型(見圖7B中這種描述的示例)。由于實(shí)體類型描述僅定義資源類型的抽象的面向服務(wù)的表示,所以必須將它傳送到Web服務(wù)容器,其自動將實(shí)體類型綁定到相應(yīng)的Web服務(wù)接口,并提供生存時間管理操作,以便注冊新的實(shí)體類型描述和撤銷現(xiàn)有的實(shí)體類型描述。遵循此推理思路,任何實(shí)體類型描述具有單獨(dú)的生命。
首先,在可通過Web服務(wù)接口表示或暴露資源類型之前,必須規(guī)定各個資源類型的實(shí)體類型描述。這通過使用<entity-type>元素、它的子元素和屬性來完成。通常,實(shí)體類型描述包括名稱、組、幾個操作以及與其它實(shí)體類型的關(guān)系。當(dāng)從將被表示的資源類型得到這種實(shí)體類型描述,并且決定暴露哪個狀態(tài)信息之后,可向Web服務(wù)容器注冊創(chuàng)建的實(shí)體類型描述。作為注冊的結(jié)果,Web服務(wù)容器將使得實(shí)體類型的服務(wù)接口對于潛在的服務(wù)消費(fèi)者可用,并暴露每個注冊的新的實(shí)體類型的單獨(dú)的Web服務(wù)接口。此外,每個注冊的實(shí)體類型描述被分配通用的唯一標(biāo)識符,其允許用于進(jìn)一步的引用和實(shí)例化。這種關(guān)于每個部署的資源的服務(wù)視角利用SOA的優(yōu)點(diǎn),即,跨邊界并獨(dú)立于平臺的互操作性,因此,以標(biāo)準(zhǔn)化的方式提供表示的資源類型的統(tǒng)一服務(wù)視圖。
一旦實(shí)體類型被注冊到Web服務(wù)容器,所述實(shí)體類型就經(jīng)由Web服務(wù)容器的生存時間相應(yīng)管理操作被提供以進(jìn)行實(shí)例化。
在最簡單的情況下,Web服務(wù)容器僅實(shí)例化期望的實(shí)體類型,而沒有進(jìn)一步的參數(shù)或隱含的假設(shè)。這產(chǎn)生經(jīng)由正被主機(jī)環(huán)境創(chuàng)建的實(shí)體類型的Web服務(wù)接口訪問的新的實(shí)體實(shí)例。如果不再需要這種實(shí)體實(shí)例,則必須使用所述容器的銷毀接口明確地刪除所述實(shí)體實(shí)例。在明確的實(shí)體實(shí)例刪除不適合的情況下(例如,因?yàn)樗囊壮霾铄e、不可靠的網(wǎng)絡(luò)連接或僅是因?yàn)樗缓雎粤?,Web服務(wù)容器也向?qū)嵗峁┤鏞GSA中公知的軟狀態(tài)管理語義。因此,可要求容器以給定的生存時間來實(shí)例化實(shí)體類型。這可通過以下操作來完成規(guī)定實(shí)例必須存活到的將來的日期和時間,或者簡單地聲明允許實(shí)例生存的持續(xù)期的毫秒數(shù)量。在需要實(shí)例的時間期限長于當(dāng)它被實(shí)例化時規(guī)定的時間期限的情況下,Web服務(wù)容器還提供保持存活(keepAlive)操作,其允許對于專用的實(shí)體示例定義新的生存時間。這樣做的優(yōu)點(diǎn)在于容器掌管實(shí)例銷毀,服務(wù)消費(fèi)者可簡單地不考慮不再使用的實(shí)例。
當(dāng)已經(jīng)創(chuàng)建實(shí)體實(shí)例并且還向其分配了通用唯一身份之后,可經(jīng)由實(shí)體實(shí)例的基礎(chǔ)實(shí)體類型的Web服務(wù)接口訪問所述實(shí)體實(shí)例。這使得可以與實(shí)體實(shí)例相互作用,并由此檢索狀態(tài)信息,執(zhí)行作用于實(shí)體實(shí)例的內(nèi)部狀態(tài)的操作或調(diào)用其它外部服務(wù)操作。
圖7C示出實(shí)際資源、實(shí)體實(shí)例和相應(yīng)的Web服務(wù)接口的可行設(shè)置。Web服務(wù)容器4管理兩種Web服務(wù)(例如,狀態(tài)化的),其中的每一個符合一種不同的實(shí)體類型,并且通過它們各自的Web服務(wù)接口被暴露。作為Web服務(wù)接口1的基礎(chǔ)的實(shí)體類型提供資源類型RT1的面向服務(wù)的表示。定義Web服務(wù)接口2的實(shí)體類型2表示資源類型RT2。RT1表示現(xiàn)有的物理或邏輯資源類型,可使用某種特定資源協(xié)議(由虛線箭頭指示)遠(yuǎn)程管理所述資源類型的資源實(shí)例(R1a、R1b、R1c和R1d),與之相比,RT2表示純概念上的資源類型,直接在Web服務(wù)容器內(nèi)管理所述資源類型的資源實(shí)例(R2a和R2b),并使得它們持久保存。已經(jīng)由狀態(tài)化Web服務(wù)容器的廠商接口(未示出)創(chuàng)建了幾個實(shí)體實(shí)例。在實(shí)體類型1的情況下,這些實(shí)例(實(shí)體實(shí)例1a、實(shí)體實(shí)例1b和實(shí)體實(shí)例1c)充當(dāng)對于位于外部的資源的代理。在這一點(diǎn)上意識到以下內(nèi)容很重要實(shí)體實(shí)例不能必然地與表示由實(shí)體類型表示的資源類型的實(shí)例的單個的實(shí)際資源關(guān)聯(lián)。所謂的虛擬化的技術(shù)允許聚集幾個實(shí)際資源,以便滿足需求多的服務(wù)實(shí)例的需要(由包括R1a、R1b和R1c的合成資源服務(wù)于實(shí)體實(shí)例1a)或允許由同一個實(shí)際資源來處理幾個實(shí)體實(shí)例(實(shí)體實(shí)例1b和實(shí)體實(shí)例1c均作用于R1d)。關(guān)于實(shí)體類型2和它的實(shí)體實(shí)例,可以看出,由于實(shí)際資源與實(shí)體實(shí)例相配合,所以可在沒有任何特定資源協(xié)議的情況下直接管理資源狀態(tài)。在這種情況下,當(dāng)創(chuàng)建新的實(shí)體實(shí)例時,實(shí)際資源的供應(yīng)僅涉及數(shù)據(jù)庫表的創(chuàng)建或類似處理,以便使得所述資源狀態(tài)持久保存。每當(dāng)表示外部邏輯或物理資源時,各個資源的實(shí)際供應(yīng)就會復(fù)雜得多,并涉及諸如安裝、硬件重新引導(dǎo)或改變網(wǎng)絡(luò)設(shè)置的處理。
實(shí)體操作會以雙重方式出現(xiàn)并被描述。一方面,它可定義如傳統(tǒng)編程方式中公知的簡單的程序操作。
這些簡單的普通操作可通過普遍的編程構(gòu)成、操作符、參數(shù)和返回語句來定義。另一方面,也可對于每個實(shí)體類型規(guī)定所謂的工作流驅(qū)動的操作。與簡單操作不同,這些更加復(fù)雜的聲明性編程構(gòu)成遵循如從各種工作流方法中可知的更加綜合的語義。它們特別適合定義、管理和監(jiān)控任何類型的控制流,所述控制流掌管如何對一組給定的單個活動進(jìn)行串行、并行或同步。關(guān)于這些不同種類的實(shí)體類型操作的暴露,外部Web服務(wù)消費(fèi)者無法在兩種操作類型之間進(jìn)行區(qū)分。雖然Web服務(wù)接口不能暴露它們之間的差別并使得它們的固有區(qū)別對于它的客戶而言透明,但是這些操作的實(shí)現(xiàn)很好地實(shí)現(xiàn)了所述差別。因此,語言處理器將以兩種不同的操作模式來執(zhí)行帶有不同語義的操作。
圖7D描述Web服務(wù)體系結(jié)構(gòu)的組件。
第一個并且是最突出的組件表示W(wǎng)eb服務(wù)容器4,其優(yōu)選的是狀態(tài)化Web服務(wù)容器。盡管如此,初看起來,人們不會把主機(jī)環(huán)境本身看作是代表單獨(dú)角色,會這樣認(rèn)為是由于容器與多個責(zé)任關(guān)聯(lián)。具體說來,其負(fù)責(zé)向外部提供一組Web服務(wù)接口,這允許潛在描述提供者注冊或撤銷新的實(shí)體類型的描述。此外,它必須暴露使得服務(wù)消費(fèi)者2能夠以各種方式創(chuàng)建、管理、組合和銷毀實(shí)體實(shí)例的接口。為了允許服務(wù)消費(fèi)者2實(shí)例化并使用注冊的實(shí)體類型,容器必須還提供查詢接口,其允許檢索關(guān)于注冊的描述和現(xiàn)有的實(shí)體實(shí)例(例如,用于引用的唯一句柄)的信息。此外,Web服務(wù)容器4必須提供實(shí)體實(shí)例的受管理的運(yùn)行時環(huán)境,并負(fù)責(zé)它們的Web服務(wù)接口的自動暴露,所述Web服務(wù)接口符合相應(yīng)的實(shí)體類型描述。此外,容器4負(fù)責(zé)持久地存儲注冊的實(shí)體類型以及實(shí)例狀態(tài)。在實(shí)體實(shí)例表示外部資源的情況下,容器額外需要確保資源的狀態(tài)在實(shí)體實(shí)例內(nèi)得到反映,并且可以被感興趣的服務(wù)消費(fèi)者訪問。
資源提供者13資源提供者組件13的責(zé)任在于提供稍后可由實(shí)體類型描述進(jìn)行描述的任何種類的資源。由資源提供者13提供的資源需要可通過特定資源協(xié)議被訪問。
描述提供者3描述提供者3負(fù)責(zé)通過用聲明性語言描述新的實(shí)體類型來創(chuàng)建所述新的實(shí)體類型。此外,描述提供者3還負(fù)責(zé)經(jīng)由它的專用注冊接口向Web服務(wù)容器注冊新規(guī)定的描述。作為所述體系結(jié)構(gòu)的結(jié)果,將實(shí)體類型的提供者從如傳統(tǒng)方法中可知的單調(diào)和易出差錯的部署處理中解脫出來。
描述提供者不必執(zhí)行編碼、編譯、描述、打包和最終將可執(zhí)行內(nèi)容傳送到主機(jī)環(huán)境中的預(yù)定義位置,描述提供者僅需要調(diào)用對Web服務(wù)容器自身的接口的專用注冊操作,并傳遞描述作為調(diào)用參數(shù)。
服務(wù)消費(fèi)者2一旦描述提供者3注冊了新的實(shí)體類型描述,基于所述實(shí)體類型的新的實(shí)體實(shí)例就可被實(shí)例化。這種新的實(shí)體實(shí)例的創(chuàng)建是服務(wù)消費(fèi)者2的責(zé)任。為了實(shí)例化實(shí)體類型,服務(wù)消費(fèi)者2必須首先查詢Web服務(wù)容器的信息檢索接口并獲得引用期望的實(shí)體類型描述的句柄。在實(shí)例化之后,服務(wù)消費(fèi)者2獲得唯一實(shí)例標(biāo)識符并可隨后經(jīng)由它的Web服務(wù)接口與實(shí)體實(shí)例相互作用,所述Web服務(wù)接口從實(shí)體類型獲得并符合所述實(shí)體類型。使用基礎(chǔ)實(shí)體類型的Web服務(wù)接口,服務(wù)消費(fèi)者可調(diào)用任何暴露的實(shí)例操作,并因此改變實(shí)體類型的固有狀態(tài)。除非已使用容器的軟狀態(tài)管理接口創(chuàng)建實(shí)體實(shí)例,否則服務(wù)消費(fèi)者2最終也將必須刪除不再使用的現(xiàn)有實(shí)體實(shí)例。
外部消息傳送源和歸宿(sink)15由于狀態(tài)化Web服務(wù)容器不僅支持在生存于主機(jī)環(huán)境之內(nèi)的實(shí)體實(shí)例間發(fā)送和接收異步消息,而且支持在Web服務(wù)容器4和外部當(dāng)事方之間發(fā)送和接收異步消息,所以分別存在外部消息傳送源和外部消息傳送歸宿的角色。在外部消息傳送源的情況下,任意組件能夠通過容器的消息傳送協(xié)調(diào)(broker)接口創(chuàng)建新的消息傳送目的地。作為現(xiàn)有消息傳送目的地的結(jié)果,允許外部消息傳送源為了公開向任何現(xiàn)有的消息傳送主題或隊(duì)列進(jìn)行注冊。每當(dāng)在這種注冊的消息傳送源的一部分上發(fā)生特定事件時,將經(jīng)由容器的消息傳送協(xié)調(diào)接口向各個目的地公開指示發(fā)生的事件的新的消息。關(guān)于外部消息傳送歸宿角色,允許外部系統(tǒng)組件創(chuàng)建新的目的地,或預(yù)定感興趣的任何現(xiàn)有目的地。這將導(dǎo)致每當(dāng)向相應(yīng)的消息傳送目的地公開消息時,外部消息傳送歸宿將得到通知。
外部服務(wù)提供者16正如狀態(tài)化Web服務(wù)主機(jī)所暗示的,Web服務(wù)容器4遵循面向服務(wù)的體系結(jié)構(gòu)的要求提供其服務(wù)。因?yàn)樯嬗谥鳈C(jī)環(huán)境內(nèi)的實(shí)體實(shí)例也可如同生存于SOA內(nèi)的服務(wù)那樣作用,所以它們可包括在實(shí)體本身內(nèi)不能實(shí)現(xiàn)但是可由另一服務(wù)提供的功能性。這種封裝的功能性可由生存于相同容器中的另一實(shí)體實(shí)例提供,或者可由實(shí)現(xiàn)期望的功能的外部服務(wù)提供者提供。這兩種方法中的前者僅關(guān)注由生存于相同容器內(nèi)的實(shí)體實(shí)例提供的功能性,并且可使用先前建立的關(guān)系進(jìn)行尋址,后者包括外部服務(wù)的調(diào)用??赏ㄟ^實(shí)體實(shí)例的簡單操作以及工作流驅(qū)動操作兩者來發(fā)起由外部服務(wù)提供者提供的這些服務(wù)。
Web服務(wù)容器組件4在已經(jīng)描述涉及可動態(tài)部署的狀態(tài)化Web服務(wù)容器的一般體系結(jié)構(gòu)的各個組件之后,現(xiàn)在,這一部分將更近地關(guān)注負(fù)責(zé)實(shí)現(xiàn)實(shí)體的主機(jī)環(huán)境的性能的各個組件。順便說明,很重要的一點(diǎn)在于注意以下的將狀態(tài)化Web服務(wù)容器分解為單個的組件必須被看作既不是規(guī)定性的也不是特定的實(shí)現(xiàn)。這樣,如下所述的組件表示在應(yīng)用的體系結(jié)構(gòu)中如何反映容器的責(zé)任的一種可行方式。這并不意味著任何所述部分(除了容器的接口)需要由狀態(tài)化Web服務(wù)容器的實(shí)際實(shí)現(xiàn)中的具體對應(yīng)部分來表示,而僅是用于更詳細(xì)地說明主機(jī)環(huán)境的責(zé)任,以使得這些解釋更加確實(shí)。
圖7E示出所述各個部分以及它們之間的關(guān)系的示意性示例。
容器接口20(20a-20d)如先前所述,通過良好定義的Web服務(wù)接口20以面向服務(wù)的方式暴露容器的功能性。將所述接口組成多個端口類型(20a-20d),其向服務(wù)消費(fèi)者提供具體操作的集合。在圖7E中示出容器的Web服務(wù)接口的端口類型和各個操作的概述。應(yīng)注意到,在這里,僅是簡要描述了所述操作。將在對圖7F至圖7L的描述中給出如何與這些操作相互作用,將傳遞哪些參數(shù)和期待什么返回值的深入說明。
當(dāng)然,由狀態(tài)化Web服務(wù)容器的端口類型暴露的功能性必須通過所提供的服務(wù)的內(nèi)部實(shí)現(xiàn)來實(shí)現(xiàn)。在圖7E中,由各個管理器組件示意性地表示了這一點(diǎn)。它們表示體系結(jié)構(gòu)內(nèi)的部分,這些部分等同地負(fù)責(zé)與持久保存層(即,數(shù)據(jù)存儲器)以及服務(wù)運(yùn)行時環(huán)境相互作用。
服務(wù)接口21(21a/b)任意實(shí)體類型的Web服務(wù)接口21很大程度上依賴于基礎(chǔ)實(shí)體類型描述。如先前所示,實(shí)體類型描述允許定義是否將具體操作暴露為Web服務(wù)操作。只要存在至少一個屬于給定實(shí)體類型的實(shí)體實(shí)例,就可通過實(shí)體類型的Web服務(wù)接口21訪問聲明將暴露的所有操作的集合。然而,除了聲明的實(shí)體實(shí)例操作之外,還將缺省地暴露另兩個實(shí)例操作。一方面,將暴露獲取實(shí)體類型(getEntityType)操作,其將返回查詢的實(shí)體實(shí)例的基礎(chǔ)實(shí)體類型;另一方面,將暴露獲取關(guān)系(getRelationships)操作,其將通知服務(wù)消費(fèi)者關(guān)于相應(yīng)的實(shí)體實(shí)例參與的所有關(guān)系。
可在圖7A中找到實(shí)體類型描述以及它的相應(yīng)外部Web服務(wù)接口的具體示例。
運(yùn)行時環(huán)境60在已注冊并實(shí)例化新的實(shí)體類型描述之后,實(shí)體實(shí)例將生存于Web服務(wù)容器的服務(wù)運(yùn)行時環(huán)境60。實(shí)體實(shí)例存在于運(yùn)行時環(huán)境內(nèi),并且直到它被刪除,可通過與基礎(chǔ)實(shí)體類型相應(yīng)的Web服務(wù)接口21使用所述實(shí)體實(shí)例。因?yàn)閷?shí)體實(shí)例以依賴內(nèi)容的角色在包含關(guān)系中起作用,或者因?yàn)閷?shí)體實(shí)例以給定的生存時間進(jìn)行實(shí)例化,而所述時間已經(jīng)過去,所以可通過調(diào)用對容器的Web服務(wù)接口的刪除實(shí)例(deleteInstance)操作的外部服務(wù)消費(fèi)者、通過使用專用操作符的實(shí)體實(shí)例、通過運(yùn)行時環(huán)境60本身來啟動實(shí)體實(shí)例的刪除。因?yàn)閷?shí)體實(shí)例潛在是狀態(tài)化的,所以運(yùn)行時環(huán)境60也負(fù)責(zé)確定與實(shí)體實(shí)例或它們之間的關(guān)系有關(guān)的所有數(shù)據(jù)自動成為對于各個數(shù)據(jù)存儲器而言是持久保存的。此外,運(yùn)行時環(huán)境60緊密地與事務(wù)管理器相互操作,以便保證在必要的情況下,調(diào)用的操作在正確的事務(wù)上下文中被執(zhí)行。此外,運(yùn)行時環(huán)境60負(fù)責(zé)將新的實(shí)體實(shí)例和關(guān)系與通用的唯一引用關(guān)聯(lián),并且負(fù)責(zé)在創(chuàng)建所述實(shí)例之后立即調(diào)用對實(shí)體實(shí)例的正確的回調(diào)(call-back)操作(其被聲明并映射到on-init元素)。與此類似,運(yùn)行時環(huán)境60也確保發(fā)起各個如在實(shí)體類型描述中聲明的on-delete回調(diào)操作。同樣,聲明和啟動的定時器的超時也將導(dǎo)致正確的實(shí)體實(shí)例操作的調(diào)用。此外,運(yùn)行時環(huán)境60與容器的消息傳送子系統(tǒng)相互操作,并由此負(fù)責(zé)將異步通知傳送到已經(jīng)預(yù)訂各個目的地的所有消耗消息的實(shí)體實(shí)例,并負(fù)責(zé)調(diào)用對它們的正確操作。
語言處理器25和工作流引擎26由于在任何聲明性語言中規(guī)定了通過注冊操作提交到Web服務(wù)容器的聲明性服務(wù)描述,所以容器需要具有語言處理單元,其能夠解釋提交的實(shí)體類型描述。首先,語言處理器負(fù)責(zé)分析、檢驗(yàn)并驗(yàn)證提交的描述。在示例之后,語言處理器25執(zhí)行并管理對各個實(shí)體實(shí)例的操作調(diào)用。這種實(shí)體實(shí)例操作的調(diào)用必須在簡單操作模式或工組流驅(qū)動的操作模式下執(zhí)行。在工作流驅(qū)動的操作的情況下,將由工作流引擎26執(zhí)行所述操作,所述工作引擎是語言處理器25的子系統(tǒng)。
工作流引擎26保證與事務(wù)管理器的無縫互操作,以處理長時間運(yùn)行的事務(wù),并且通過允許和管理補(bǔ)償活動,使得能夠消除先前終止的子任務(wù)的效果。
事務(wù)管理器27事務(wù)管理器27負(fù)責(zé)處理和管理協(xié)調(diào)以及事務(wù)上下文的創(chuàng)建、執(zhí)行和銷毀。這涉及當(dāng)調(diào)用事務(wù)操作時新的事務(wù)上下文的創(chuàng)建,以及運(yùn)行事務(wù)和現(xiàn)有的上下文的管理。在簡單操作的情況下,總是認(rèn)為在ACID特性下執(zhí)行事務(wù)。
然而,在工作流驅(qū)動的操作的情況下,假設(shè)使用如在Web服務(wù)商業(yè)事務(wù)構(gòu)架26中定義的狀態(tài)模型來執(zhí)行事務(wù)。因?yàn)樵谕ǔ.?dāng)各個Web服務(wù)相互作用時發(fā)生的長時間運(yùn)行的事務(wù)中,分布式事務(wù)的原子性和隔離不能有效地滿足,所以這一模型弱化了嚴(yán)格的ACID要求,而僅要求如在工作流驅(qū)動的操作的情況下使用的長時間運(yùn)行的事務(wù)必須保證一致性和持續(xù)性。此外,這些事務(wù)考慮到工作流可定義補(bǔ)償活動,在決定最終結(jié)果的總的工作流的某些其它任務(wù)失敗的情況下,則其可反轉(zhuǎn)先前成功終止的活動的效果。
訪問控制器28訪問控制器負(fù)責(zé)保證只有在訪問控制列表中規(guī)定了其實(shí)體類型的實(shí)體實(shí)例被實(shí)際上授予對于對目標(biāo)實(shí)體實(shí)例的各個操作的訪問。除此之外,訪問控制器還負(fù)責(zé)管理實(shí)體類型的組,其共同訪問對特定實(shí)體類型的給定實(shí)例的一組預(yù)定操作。
消息傳送子系統(tǒng)29為了能夠?qū)崿F(xiàn)實(shí)體實(shí)例和外部消息傳送客戶間的容器協(xié)調(diào)的異步通知,Web服務(wù)容器還提供作為它的相應(yīng)消息傳送子系統(tǒng)29的一部分的消息協(xié)調(diào)器(未示出),所述消息傳送子系統(tǒng)29以傳統(tǒng)消息傳送子系統(tǒng)的特征為基礎(chǔ),并經(jīng)由消息傳送端口類型而暴露它的外部協(xié)調(diào)器接口。通過其內(nèi)部消息協(xié)調(diào)器,消息傳送子系統(tǒng)29充當(dāng)外部和內(nèi)部消息傳送客戶(消息提供者和消費(fèi)者等)之間的橋,并保證當(dāng)與它有關(guān)的消息被公開時,如果存在消息傳送消費(fèi)者,則持久地存儲目的地、預(yù)訂、注冊以及公開的消息。為了保證與新近的Web服務(wù)標(biāo)準(zhǔn)兼容,可擴(kuò)展消息協(xié)調(diào)器的Web服務(wù)接口,以符合最近公布的Web服務(wù)通知規(guī)范17。然而,這帶來的缺點(diǎn)在于類型隊(duì)列的消息傳送目的地不再被支持。
數(shù)據(jù)存儲器30為了尋址Web服務(wù)容器的狀態(tài)化屬性,容器必須提供一組數(shù)據(jù)存儲器30,其負(fù)責(zé)使得所有各種信息能夠持久保存。以下給出各個數(shù)據(jù)存儲器的簡要描述實(shí)體類型數(shù)據(jù)存儲器30a實(shí)體類型數(shù)據(jù)存儲器負(fù)責(zé)保留所有先前注冊的實(shí)體類型描述,直到它們被撤銷或修改。必須在實(shí)體類型數(shù)據(jù)存儲器30a以及與各個實(shí)體類型相應(yīng)的實(shí)體實(shí)例之內(nèi)均反映出對實(shí)體類型的修改。如果修改了帶有生存實(shí)體實(shí)例的實(shí)體類型,則必須也在實(shí)體實(shí)例存儲器或基礎(chǔ)具體資源中反映出所述改變(在實(shí)際資源被建模的情況下)。將已經(jīng)向容器成功注冊并在實(shí)體類型存儲器內(nèi)持久保存的實(shí)體類型處理成可用于隨后的實(shí)例化。
實(shí)體實(shí)例存儲器30b如果從先前注冊的實(shí)體類型創(chuàng)建了新的實(shí)體實(shí)例,則實(shí)體實(shí)例數(shù)據(jù)存儲器30b負(fù)責(zé)保存與這一單獨(dú)的實(shí)體實(shí)例有關(guān)的所有狀態(tài)數(shù)據(jù)。
目的地?cái)?shù)據(jù)存儲器30c目的地?cái)?shù)據(jù)存儲30c包括與異步容器協(xié)調(diào)的消息傳送有關(guān)的所有信息。其包括消息傳送目的地(即,主題和隊(duì)列)、對現(xiàn)有的消息傳送目的地的預(yù)訂以及注冊。在預(yù)訂的消息消費(fèi)者暫時不在的情況下,目的地存儲器還負(fù)責(zé)將消息存儲到這種消息傳送歸宿,以便允許消息協(xié)調(diào)器在相應(yīng)的客戶再次出現(xiàn)之后發(fā)送所錯過的消息。
協(xié)議注冊處30d由于Web服務(wù)容器關(guān)于特定資源協(xié)議必須盡可能地靈活和可擴(kuò)展,因此所述體系結(jié)構(gòu)提供向主機(jī)環(huán)境動態(tài)地注冊對新的特定資源協(xié)議的支持的可能性。這使得語言處理器也可處理先前不知道的新的協(xié)議。為了存儲新注冊的協(xié)議,容器提供協(xié)議注冊處,其連同專用協(xié)議注冊接口操作2一起使用。
圖7F示出注冊實(shí)體類型描述的相互作用。
為了注冊新的實(shí)體類型描述,首先,描述提供者規(guī)定新的實(shí)體類型描述,其描述他選擇的任何種類的資源的行為(即,符合某種物理或邏輯資源)。通過從頭指定新的描述,可自動(通過使用來自模板或部分存儲庫的模板)或手動完成新的實(shí)體類型的描述。在聲明新的實(shí)體類型之后,描述提供者可調(diào)用Web服務(wù)容器的注冊端口類型的注冊實(shí)體類型(registerEntityType)操作,由此要求主機(jī)環(huán)境注冊發(fā)送的實(shí)體類型描述。接著,容器分析、驗(yàn)證并向?qū)嶓w類型存儲器注冊表示狀態(tài)化資源的新的類型的描述。在成功注冊之后,提供新的實(shí)體類型以進(jìn)行實(shí)例化。如果描述還包括新的目的地的聲明,則將它們存儲到容器的協(xié)調(diào)器的目的地存儲器。作為成功注冊的結(jié)果,Web服務(wù)容器將通用的唯一描述句柄(引用注冊的實(shí)體類型)返回到描述提供者。在失敗的情況下,容器就將返回錯誤碼。
圖7G示出用于修改現(xiàn)有的實(shí)體類型的相互作用。
如圖7E所示,Web服務(wù)容器的注冊端口類型還允許在運(yùn)行時期間修改現(xiàn)有的實(shí)體類型。為了擴(kuò)展或最小化實(shí)體類型的接口,描述提供者可選擇調(diào)用修改實(shí)體類型(modifyEntityType)操作,傳遞指向各個實(shí)體類型描述的描述句柄和修改的實(shí)體類型描述作為參數(shù)。結(jié)果,Web服務(wù)容器修改現(xiàn)有的實(shí)體類型和相應(yīng)的實(shí)體實(shí)例以適宜于提交的修改,并將所述改變存儲到有關(guān)的數(shù)據(jù)存儲器。結(jié)果,容器將返回指示修改是否已成功采用的狀態(tài)碼。
圖7H示出用于現(xiàn)有的實(shí)體類型的撤銷的相互作用。
如果不再需要一個現(xiàn)有的實(shí)體類型(即,沒有留有屬于所述實(shí)體類型的實(shí)體實(shí)例),則描述提供者可選擇調(diào)用撤銷實(shí)體類型(deregieterEntityType)操作,并傳遞指向?qū)⒊蜂N的期望的實(shí)體類型描述的描述句柄。Web服務(wù)容器隨后將從實(shí)體類型存儲器撤銷所述描述。接著,描述提供者將接收指示撤銷操作是否成功的狀態(tài)碼。
實(shí)例化和銷毀在向容器注冊實(shí)體類型之后,可實(shí)例化并使用它們??山?jīng)由Web服務(wù)容器的實(shí)例化端口類型來完成新的實(shí)例的實(shí)例化和修改。將在下面的部分描述屬于所述端口類型的操作。
圖7I示出用于實(shí)例化實(shí)體類型的相互作用。
為了實(shí)例化注冊的實(shí)體類型,服務(wù)消費(fèi)者可調(diào)用Web服務(wù)容器的實(shí)例化實(shí)體類型(instantiateEntityType)操作之一,并傳遞引用將被實(shí)例化的實(shí)體類型的描述句柄作為參數(shù)。如果以給定的生存時間創(chuàng)建實(shí)例,則Web服務(wù)容器還應(yīng)負(fù)責(zé)在指出的時間過去之后銷毀實(shí)體實(shí)例。為了上述原因和管理每個單獨(dú)的實(shí)例的生存時間,生存時間數(shù)據(jù)必須連同實(shí)體實(shí)例的初始化數(shù)據(jù)(如在基礎(chǔ)實(shí)體類型描述中聲明的)被持久保存。如果實(shí)例化處理成功,則Web服務(wù)容器將所述新的實(shí)體實(shí)例與將被返回到服務(wù)消費(fèi)者的通用的唯一實(shí)例句柄關(guān)聯(lián)。如果實(shí)例化失敗,則將通過將錯誤碼返回到服務(wù)消費(fèi)者來指示這一情況。在以給定的生存時間創(chuàng)建新的實(shí)體實(shí)例,而需要相應(yīng)實(shí)例的時間長于先前設(shè)置的時間的情況下,服務(wù)消費(fèi)者可選擇(重復(fù)地)調(diào)用保持存活操作,并指示其生存時間將被延長的目標(biāo)實(shí)例??蛇x地,服務(wù)消費(fèi)者還可規(guī)定新的生存時間,在所述生存時間之后將去除所述實(shí)體。
圖7J示出用于刪除實(shí)體實(shí)例的相互作用。
如果在某個時間點(diǎn),不再需要一個現(xiàn)有的實(shí)體實(shí)例,則可使用實(shí)例化端口類型的刪除實(shí)體類型操作明確地將其刪除。當(dāng)由服務(wù)消費(fèi)者調(diào)用所述操作時,必須傳遞引用將被刪除的實(shí)體實(shí)例的實(shí)例句柄作為參數(shù)。如果服務(wù)消費(fèi)者被授權(quán)執(zhí)行所述操作,則Web服務(wù)容器將調(diào)用實(shí)體實(shí)例的on-delete回調(diào)操作,并隨后從主機(jī)環(huán)境的實(shí)體實(shí)例存儲器去除相應(yīng)實(shí)例。結(jié)果,服務(wù)消費(fèi)者將接收指示刪除操作是否成功的狀態(tài)碼。
服務(wù)使用和相互作用一旦注冊的實(shí)體類型已被實(shí)例化過第一次,并且只要存在至少一個與給定的實(shí)體類型相應(yīng)的實(shí)體實(shí)例,就可通過各個實(shí)體實(shí)例的基礎(chǔ)實(shí)體類型的Web服務(wù)接口訪問所述各個實(shí)體實(shí)例。在主機(jī)環(huán)境內(nèi)的服務(wù)特定接口的單獨(dú)的端點(diǎn)上可訪問所述服務(wù)特定接口。除了服務(wù)特定操作之外,每個單獨(dú)的Web服務(wù)接口提供至少兩個另外的操作。第一、返回給定的實(shí)體實(shí)例的實(shí)體類型的操作;第二、返回相應(yīng)實(shí)體實(shí)例參與的所有關(guān)系(隱含的以及明確的)的操作。
圖7K示出簡單實(shí)例操作的調(diào)用。
為了說明專用實(shí)體實(shí)例如何與服務(wù)消費(fèi)者相互作用,這一部分提供服務(wù)消費(fèi)者調(diào)用對實(shí)體實(shí)例的簡單操作的示例。在服務(wù)消費(fèi)者可與給定的實(shí)例相互作用之前,首先,消費(fèi)者必須獲得引用期望的實(shí)體實(shí)例的實(shí)例句柄和在其中可訪問基礎(chǔ)實(shí)體類型的Web服務(wù)接口的端點(diǎn)引用。如將在下一部分所述的,為了這一目的,容器提供專門的自省端口類型,其允許感興趣的服務(wù)消費(fèi)者收集需要的信息。一旦服務(wù)消費(fèi)者獲得了需要的信息,它就可自由地通過相應(yīng)Web服務(wù)接口訪問任何一個暴露的實(shí)體實(shí)例的操作。通過尋址Web服務(wù)端點(diǎn)和發(fā)起期望的操作并提供實(shí)例句柄以及另外的必需參數(shù),可完成上述處理。結(jié)果,容器管理的Web服務(wù)端點(diǎn)將截取調(diào)用,并將操作調(diào)用路由到期望的實(shí)體實(shí)例。作為調(diào)用的操作的結(jié)果,相應(yīng)實(shí)體實(shí)例可改變它的內(nèi)部狀態(tài),并將調(diào)用的結(jié)果返回到實(shí)體消費(fèi)者。
圖7L示出工作流驅(qū)動的操作調(diào)用。與發(fā)起簡單實(shí)例操作類似,服務(wù)消費(fèi)者也可選擇調(diào)用在給定的實(shí)體實(shí)例上定義的工作流驅(qū)動的操作。如同在簡單操作的情況下一樣,當(dāng)調(diào)用所述操作時,服務(wù)消費(fèi)者也必須提供實(shí)例句柄以及可能的參數(shù)。當(dāng)最終對目標(biāo)實(shí)體實(shí)例執(zhí)行操作時,所述操作執(zhí)行如在相應(yīng)實(shí)體類型描述中規(guī)定的活動。這也可包括在長時間運(yùn)行的事務(wù)上下文下執(zhí)行的外部工作流。如同簡單操作一樣,工作流驅(qū)動的操作最終也可將結(jié)果返回到服務(wù)消費(fèi)者。不過在大多數(shù)情況下,由于使用異步通知來通知服務(wù)消費(fèi)者關(guān)于結(jié)果的信息不需要阻止服務(wù)消費(fèi)者的一部分,所以這種處理更加切合實(shí)際。
可以按硬件、軟件或者硬件及軟件的組合來實(shí)現(xiàn)本發(fā)明??梢园丛谝粋€計(jì)算機(jī)系統(tǒng)中的集中式方式或不同的部件遍布在幾個互相連接的計(jì)算機(jī)系統(tǒng)中的分布式方式來實(shí)現(xiàn)根據(jù)本發(fā)明的工具。適于實(shí)現(xiàn)這里描述的方法的任何種類的計(jì)算機(jī)系統(tǒng)或其它裝置都是適合的。典型的硬件和軟件的組合可以是帶有計(jì)算機(jī)程序的通用計(jì)算機(jī)系統(tǒng),當(dāng)加載并執(zhí)行所述計(jì)算機(jī)程序時,其控制計(jì)算機(jī)系統(tǒng),從而可實(shí)現(xiàn)這里描述的方法。
本發(fā)明還可被嵌入計(jì)算機(jī)程序產(chǎn)品中,其包括能夠?qū)崿F(xiàn)這里描述的方法的所有特點(diǎn),當(dāng)將所述產(chǎn)品加載到計(jì)算機(jī)系統(tǒng)中時,其能夠?qū)崿F(xiàn)這些方法。
此上下文中的計(jì)算機(jī)程序裝置或計(jì)算機(jī)程序表示以任何語言、代碼或符號的一組指令的表示,所述指令是用來使具有信息處理能力的系統(tǒng)直接執(zhí)行特定功能,或在以下操作中的任一個或兩者之后執(zhí)行特定功能a)轉(zhuǎn)換為另一語言、代碼或符號;以不同的材料形式來再現(xiàn)定義服務(wù)的動態(tài)部署支持動態(tài)部署的系統(tǒng)提供這樣一種機(jī)制其獲得由開發(fā)者或應(yīng)用提供的源代碼,并動態(tài)地將其安裝在目標(biāo)服務(wù)容器(即,主機(jī)環(huán)境)中,而不需要進(jìn)一步的用戶交互,也不需要重新啟動應(yīng)用服務(wù)器。因此,應(yīng)用對它的用戶或服務(wù)消費(fèi)者可用。
實(shí)體類型實(shí)體類型通過聲明性描述語言來描述,并提供任何可以構(gòu)想的資源類型的面向服務(wù)的表示。當(dāng)以抽象方式完成資源的面向服務(wù)的表示時,可將實(shí)體類型映射到面向服務(wù)的體系結(jié)構(gòu)(即,狀態(tài)化Web服務(wù))的任何可以構(gòu)想的實(shí)現(xiàn)。
實(shí)體實(shí)例實(shí)體實(shí)例表示抽象的面向服務(wù)的實(shí)例,并且可與給定的具體資源實(shí)例關(guān)聯(lián)。任何實(shí)體實(shí)例具有基礎(chǔ)實(shí)體類型,具有身份(由主機(jī)環(huán)境分配給實(shí)例),遵循生存周期,并且將具體值分配給由實(shí)體類型定義的屬性。
資源類型任何實(shí)際的資源實(shí)例(物理的或邏輯的)具有基礎(chǔ)資源類型,其捕獲相應(yīng)資源的重要特性,即,它提供的功能性(例如,文檔的文本處理、復(fù)制、剪切、粘貼),它包括的屬性(即,處理的文檔的名稱,當(dāng)文檔已經(jīng)存儲之后,剪貼板的內(nèi)容),以及它允許這些屬性的可能狀態(tài)。
資源實(shí)例必須將具體的資源實(shí)例看作符合資源類型的實(shí)例。其具有良好定義的身份并保存狀態(tài)信息,即,其為資源的每一個屬性定義一個值。
服務(wù)容器服務(wù)容器(即,主機(jī)環(huán)境)優(yōu)選的是狀態(tài)化服務(wù)容器,其提供受管理的運(yùn)行時環(huán)境并提供透明的事務(wù)處理、持久保存、信息接發(fā)子系統(tǒng)和工作流引擎,所述工作流引擎控制服務(wù)實(shí)例的工作流驅(qū)動的操作的執(zhí)行。這種服務(wù)容器可在例如普通PC、專門服務(wù)器等任何種類的數(shù)據(jù)處理單元上運(yùn)行,所述處理單元具有處理器、工作存儲器、輔助存儲器并在理想狀況下具有網(wǎng)絡(luò)(有線或無線)接入。
Web服務(wù)Web服務(wù)是被設(shè)計(jì)用來支持網(wǎng)絡(luò)上的可互相操作的機(jī)器到機(jī)器的相互作用的軟件系統(tǒng)。其具有以機(jī)器可處理的格式(例如,使用WSDL)描述的接口,并允許其它系統(tǒng)以預(yù)定的方式(例如,使用所謂SOAP消息)與它相互作用。
狀態(tài)化Web服務(wù)狀態(tài)化Web服務(wù)包括表示服務(wù)的類型(通過WSDL描述)的接口,以及零到多個服務(wù)實(shí)例,其可通過接口進(jìn)行訪問,具有身份并遵循良好定義的生存周期。服務(wù)實(shí)例保存內(nèi)部狀態(tài),并表示有限的狀態(tài)自動操作,因?yàn)榉?wù)操作的結(jié)果會依賴于服務(wù)實(shí)例的內(nèi)部狀態(tài)。與網(wǎng)格服務(wù)相似,狀態(tài)化Web服務(wù)定義用于發(fā)現(xiàn)、動態(tài)服務(wù)創(chuàng)建、生存時間管理、通知和一般管理的接口。
面向服務(wù)的體系結(jié)構(gòu)面向服務(wù)的體系結(jié)構(gòu)包括至少一個服務(wù)容器、服務(wù)消費(fèi)者、資源提供者和描述提供者。所有這些參與者經(jīng)由網(wǎng)絡(luò)連接,并且在所述體系結(jié)構(gòu)內(nèi)通信或交換信息。
權(quán)利要求
1.一種在作為面向服務(wù)的體系結(jié)構(gòu)的一部分的服務(wù)容器中部署服務(wù)的方法,其中,所述服務(wù)容器的特征在于提供自身的注冊服務(wù)(40),以便將運(yùn)行時期間的服務(wù)部署到所述服務(wù)容器中,其中,所述注冊服務(wù)(40)至少包括以下步驟從描述提供者(3)接收服務(wù)描述,其中,所述服務(wù)描述表示資源的服務(wù),并且以聲明性描述語言來建模,如果所述服務(wù)描述已成功注冊,則在所述服務(wù)容器(4)自動創(chuàng)建并提供用于所述服務(wù)描述的服務(wù)接口(43),其中,所述服務(wù)接口允許訪問由所述服務(wù)描述表示的服務(wù)。
2.如權(quán)利要求1所述的方法,其中,所述注冊服務(wù)(40)還包括步驟在暴露新的服務(wù)接口之前,分析并驗(yàn)證所述服務(wù)描述。
3.如權(quán)利要求1所述的方法,其中,所述注冊服務(wù)(40)還包括步驟如果所述服務(wù)描述已成功注冊,則將引用所述服務(wù)描述的唯一描述句柄(ID)返回到描述提供者。
4.如權(quán)利要求1所述的方法,其中,所述服務(wù)容器(4)的特征還在于提供用于檢索關(guān)于注冊的服務(wù)的信息的檢索服務(wù)(41),其中,所述檢索服務(wù)包括以下步驟響應(yīng)于服務(wù)消費(fèi)者(2)檢索請求,提供引用已注冊的服務(wù)的描述句柄的列表;響應(yīng)于包括描述句柄的服務(wù)消費(fèi)者請求,將服務(wù)描述提供給所述服務(wù)消費(fèi)者。
5.如權(quán)利要求4所述的方法,其中,所述檢索服務(wù)還包括以下步驟響應(yīng)于消費(fèi)者請求,將服務(wù)接口信息提供給所述服務(wù)消費(fèi)者。
6.如權(quán)利要求1所述的方法,其中,所述服務(wù)容器的特征還在于提供用于啟動注冊的服務(wù)的實(shí)例化服務(wù)(42),其中,所述實(shí)例化服務(wù)包括以下步驟響應(yīng)于至少包含引用注冊的服務(wù)的描述句柄的服務(wù)消費(fèi)者的實(shí)例化請求,創(chuàng)建新的服務(wù)實(shí)例并注冊所述新的實(shí)例;如果所述實(shí)例化已成功,則將唯一實(shí)例句柄提供給服務(wù)消費(fèi)者。
7.如權(quán)利要求6所述的方法,還包括以下步驟從所述服務(wù)消費(fèi)者接收實(shí)例句柄;將描述句柄提供給引用所述服務(wù)實(shí)例的服務(wù)的所述服務(wù)消費(fèi)者;響應(yīng)于包含所述描述句柄的服務(wù)消費(fèi)者請求,將服務(wù)接口提供給所述服務(wù)消費(fèi)者,在所述服務(wù)接口截取由所述服務(wù)消費(fèi)者調(diào)用的操作,并將它路由到正確的服務(wù)實(shí)例;由容器運(yùn)行時環(huán)境根據(jù)服務(wù)描述截取調(diào)用的操作。
8.如權(quán)利要求1所述的方法,其中,所述服務(wù)容器的特征還在于提供允許服務(wù)消費(fèi)者刪除不再使用的實(shí)例的實(shí)例刪除服務(wù)。
9.如權(quán)利要求1所述的方法,其中,所述服務(wù)容器的特征還在于提供用于撤銷不再使用的服務(wù)描述的撤銷服務(wù)描述服務(wù)。
10.如權(quán)利要求1所述的方法,其中,所述服務(wù)容器是狀態(tài)化Web服務(wù)容器。
11.如權(quán)利要求1所述的方法,其中,通過使用實(shí)體類型描述來建模所述服務(wù)描述。
12.一種在面向服務(wù)的環(huán)境中的服務(wù)容器,包括注冊服務(wù)接口(40),其允許描述提供者(3)注冊服務(wù)描述,其中,所述服務(wù)描述以聲明性描述語言表示資源的服務(wù);以及服務(wù)接口(43),其被分配給所述服務(wù)描述并且當(dāng)經(jīng)由所述注冊服務(wù)接口(40)成功地注冊所述分配的服務(wù)描述時自動地創(chuàng)建。
13.如權(quán)利要求12所述的服務(wù)容器,還包括用于在自動創(chuàng)建服務(wù)接口(43)并將其分配給服務(wù)描述之前,分析并驗(yàn)證所述服務(wù)描述的組件。
14.根據(jù)權(quán)利要求13所述的服務(wù)容器,還包括信息檢索服務(wù)接口(41),其用于查詢所述服務(wù)容器關(guān)于部署的服務(wù)或服務(wù)實(shí)例;以及實(shí)例化服務(wù)接口(42),其允許服務(wù)消費(fèi)者實(shí)例化由所述服務(wù)容器(4)提供的服務(wù)描述。
15.根據(jù)權(quán)利要求13所述的服務(wù)容器,還包括服務(wù)描述數(shù)據(jù)存儲器(22),包含已經(jīng)向所述服務(wù)容器注冊的服務(wù)描述;服務(wù)實(shí)例數(shù)據(jù)存儲器(23),包含屬于所述服務(wù)描述數(shù)據(jù)存儲器中的服務(wù)的所有實(shí)例。
16.根據(jù)權(quán)利要求13所述的服務(wù)容器,還包括撤銷描述服務(wù)接口,其用于撤銷不再使用的服務(wù)描述;刪除服務(wù)實(shí)例接口,允許服務(wù)消費(fèi)者刪除不再使用的實(shí)例。
17.如權(quán)利要求13所述的服務(wù)容器,還包括工作流引擎,其管理由所述服務(wù)實(shí)例提供的工作流驅(qū)動的操作的執(zhí)行;協(xié)議專用接口,用于在所述服務(wù)容器和建模的資源之間通信。
18.如權(quán)利要求13所述的服務(wù)容器,其中,所述面向服務(wù)的環(huán)境還包括資源提供者(13)、服務(wù)消費(fèi)者(2)、描述提供者(3),其中,所述面向服務(wù)的環(huán)境使用Web服務(wù)協(xié)議。
19.一種存儲在計(jì)算機(jī)可用介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)可讀程序裝置,用于當(dāng)在計(jì)算機(jī)上執(zhí)行所述計(jì)算機(jī)程序產(chǎn)品時,使計(jì)算機(jī)執(zhí)行權(quán)利要求1到權(quán)利要求11的任何一個的方法。
全文摘要
本發(fā)明描述一種新的用于在分布式網(wǎng)絡(luò)體系結(jié)構(gòu),特別是在面向服務(wù)的網(wǎng)絡(luò)結(jié)構(gòu)中建模和動態(tài)部署服務(wù)的系統(tǒng)和方法。作為分布式網(wǎng)絡(luò)體系結(jié)構(gòu)的一部分的服務(wù)容器暴露它的功能性作為服務(wù)。它提供用于部署服務(wù)描述的注冊服務(wù)。在以任何聲明性描述語言(即,(狀態(tài)化)服務(wù),例如,狀態(tài)化Web服務(wù)的描述)創(chuàng)建新的服務(wù)描述之后,描述提供者在服務(wù)容器調(diào)用注冊服務(wù),其允許在運(yùn)行時期間注冊(即,部署)所述新的服務(wù)描述,而不需要重新啟動服務(wù)容器。服務(wù)容器負(fù)責(zé)分析并檢查提交的新的服務(wù)描述的有效性,存儲所述服務(wù)描述,并使得它對于感興趣的服務(wù)消費(fèi)者可用,以進(jìn)行實(shí)例化。如果新的服務(wù)已成功注冊,則由服務(wù)容器自動創(chuàng)建用于訪問所述新的服務(wù)的新的服務(wù)接口。感興趣的服務(wù)消費(fèi)者可就被主機(jī)管理的可用服務(wù)查詢主機(jī)環(huán)境,并隨后實(shí)例化新的服務(wù)。服務(wù)消費(fèi)者于是可以調(diào)用任何暴露的對給定服務(wù)實(shí)例的服務(wù)操作,其通常遵循請求響應(yīng)模式。
文檔編號G06F9/54GK1942860SQ200580011177
公開日2007年4月4日 申請日期2005年2月17日 優(yōu)先權(quán)日2004年4月29日
發(fā)明者尤秦·布雷赫, 格德·布雷特, 薩姆埃爾·穆勒, 亨德里克·瓦格納 申請人:國際商業(yè)機(jī)器公司