專利名稱:用于由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時的裝置、系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及web服務(wù)的創(chuàng)建和管理。更具體地,本發(fā)明涉及由 數(shù)據(jù)庫管理系統(tǒng)所定義且管理的web服務(wù)的創(chuàng)建。
背景技術(shù):
計算機世界種類繁多;各種平臺、語言和操作系統(tǒng)在全世界范 圍內(nèi)可用并且正在使用。此外,相同組織或者網(wǎng)絡(luò)中的計算機通常 在不同的平臺上運行。鑒于這些實體不"說相同的語言",因此允 許這些實體彼此通信通常較困難。在需要為了提供兼容性而簡單替 換運轉(zhuǎn)的舊有系統(tǒng),或者在程序員為了在不同機器上提供相同功能 而必須將代碼從一種計算機語言翻譯或"移植"到另一種計算機語 言時,計算機不能跨越平臺通信會增加開支。
web服務(wù)通過提供用于在網(wǎng)絡(luò)中跨越不同平臺和框架進行通信 的標(biāo)準(zhǔn)手段而為該問題提供了方案。web服務(wù)是使用開放通信協(xié)議 自描述和自包含的應(yīng)用組件。只要服務(wù)提供者和客戶端都參加到遵 守了所接受的web服務(wù)協(xié)議的事務(wù)中,則不論服務(wù)提供者和客戶端 的底層平臺是什么,這些服務(wù)都可以由客戶端調(diào)用。典型地,在web 服務(wù)環(huán)境中,客戶端和服務(wù)器按照HTTP協(xié)議并使用SOAP標(biāo)準(zhǔn)來 傳達XML消息。web服務(wù)可以使用不同服務(wù)調(diào)用(invocation)語言 (諸如,XML-RPC)和其他傳輸協(xié)議,但是SOAP和HTTP是現(xiàn)在 最流4于的選擇。
通常,web服務(wù)意在由客戶端應(yīng)用進行調(diào)用,而不是直接由人類 使用。web服務(wù)可以允許實體在維持對信息源的控制的同時對信息 進行共享。例如,公司可以使用web服務(wù)來向客戶端提供針對特定信息的訪問權(quán),而不暴露整個數(shù)據(jù)庫,也不會產(chǎn)生弱點。例如,可
以開發(fā)web服務(wù),以允許客戶端取回存儲在公司數(shù)據(jù)庫中的用戶地 址,并且在需要的時候?qū)υ摰刂愤M行更新。只要兩端都使用同一協(xié) 商一致的協(xié)議,web服務(wù)就允許客戶端應(yīng)用訪問這個信息,而不論 正在使用的平臺是什么。此外,該公司不需要為了提供信息而將數(shù) 據(jù)庫開放給客戶端,這使得其成為更安全的信息共享方法。
典型地,創(chuàng)建web服務(wù)來暴露數(shù)據(jù)會涉及服務(wù)提供者創(chuàng)建應(yīng)用 并將代碼放置到應(yīng)用服務(wù)器上。對web服務(wù)及其生命周期的管理都 將在應(yīng)用服務(wù)器(通常稱為應(yīng)用服務(wù)器側(cè)或?qū)?上完成。盡管通過 web服務(wù)暴露數(shù)據(jù)的方法對于熟悉應(yīng)用服務(wù)器的來說是簡單易用的, 但是這種方法還是存在很多難點。
首先,對于數(shù)據(jù)庫管理員和工作在數(shù)據(jù)庫環(huán)境以外具有有限經(jīng) 驗的其他人而言,在應(yīng)用服務(wù)器上創(chuàng)建和管理web服務(wù)可能是困難 的。對于在數(shù)據(jù)庫、創(chuàng)建、設(shè)計和管理上具有專業(yè)知識的個人而言, 編寫web服務(wù)、在應(yīng)用服務(wù)器上部署該web服務(wù)和隨后從那時起對 其進行管理的過程可能是麻煩的。如果數(shù)據(jù)庫管理員讓諸如應(yīng)用服 務(wù)器管理員的另外的個人創(chuàng)建并管理用于數(shù)據(jù)庫的web服務(wù),則數(shù) 據(jù)庫管理員就放棄了數(shù)據(jù)庫的某些控制;現(xiàn)在,通過另外的個人在 另外服務(wù)器上管理的web服務(wù)對數(shù)據(jù)進行訪問是可能的。所開發(fā)的 web服務(wù)可能允許數(shù)據(jù)庫管理員本來并不允許的數(shù)據(jù)改變,以及當(dāng) 系統(tǒng)管理員需要在應(yīng)用服務(wù)器處停止并重啟web服務(wù)時,為允許維 護數(shù)據(jù)庫而關(guān)閉web服務(wù)將增加一層復(fù)雜性。
甚至對于那些熟悉應(yīng)用服務(wù)器的人,開發(fā)和部署web服務(wù)(諸 如用來在數(shù)據(jù)庫中訪問信息那些)也經(jīng)常是耗費時間的過程。為了 開發(fā)web服務(wù),應(yīng)用開發(fā)者使用支持的編程語言(諸如Java (Java 和所有基于Java的商標(biāo)是Sun微系統(tǒng)有限公司在美國、其他國家或 者世界范圍內(nèi)的商標(biāo))或者C+十)來為該服務(wù)編寫代碼;編寫SQL、 XQuery或其他數(shù)據(jù)訪問語句以便在數(shù)據(jù)庫中訪問信息;提供命名空 間、操作名稱和消息樣式;以及隨后將該代碼打包到可部署的組件中。為了部署web服務(wù),web應(yīng)用管理員為數(shù)據(jù)服務(wù)器設(shè)立并配置 數(shù)據(jù)源、將該web服務(wù)作為應(yīng)用來部署,以及為web服務(wù)配置諸如 安全和資源引用的設(shè)定。web應(yīng)用管理員也管理web服務(wù)的生命周 期,這可能要求重復(fù)上述很多步驟。
此外,如果web服務(wù)為了提供高可用性而分布在多個應(yīng)用服務(wù) 器或節(jié)點上,則用于該web服務(wù)的代碼必須手動復(fù)制、維護,并在 該代碼所在的所有服務(wù)器上保持同步。這些應(yīng)用服務(wù)器本身可能不 是統(tǒng) 一 類型的,這便要求用戶根據(jù)每個系統(tǒng)的需求來處理部署和管 理的每個個體案例。前文的結(jié)論是,創(chuàng)建、開發(fā)和維護web服務(wù)會 對在web服務(wù)生命周期中在所有點進行管理施加高成本,特別是在 異類環(huán)境中更是如此。
根據(jù)前述的討論,顯然需要一種用于由數(shù)據(jù)服務(wù)器管理的web 服務(wù)工具,該工具允許數(shù)據(jù)庫管理員或其他熟悉數(shù)據(jù)庫層或側(cè)的用 戶在數(shù)據(jù)庫側(cè)簡單并且高效地在數(shù)據(jù)庫側(cè)而不是在應(yīng)用服務(wù)器側(cè)創(chuàng)
建、控制和部署web服務(wù)。該工具應(yīng)該理想地隔離在應(yīng)用服務(wù)器上 運行和管理web服務(wù)的細節(jié),以使得數(shù)據(jù)庫管理員可以從數(shù)據(jù)庫管 理系統(tǒng)(DBMS)高效地對該web月l務(wù)進行監(jiān)件見和管理。該工具還 應(yīng)該使得web服務(wù)的管理集中起來,而不論web服務(wù)在其上部署的 應(yīng)用服務(wù)器的數(shù)量和類型。
發(fā)明內(nèi)容
響應(yīng)于本領(lǐng)域現(xiàn)狀,以及更具體地響應(yīng)于本領(lǐng)域中尚未完全解 決的問題和需要,而開發(fā)出本發(fā)明。因此,開發(fā)本發(fā)明來提供用于 創(chuàng)建和管理由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時的裝置、系統(tǒng)和方 法,其克服了上文所述本領(lǐng)域技術(shù)的很多不足。
本發(fā)明包括計算機程序產(chǎn)品,該計算機程序產(chǎn)品的操作包括 訪問web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)元數(shù)據(jù);確定web服務(wù) 管理元數(shù)據(jù)倉庫中的web服務(wù)元數(shù)據(jù)發(fā)生改變;以及響應(yīng)于web服 務(wù)管理元數(shù)據(jù)倉庫中web服務(wù)元數(shù)據(jù)的改變,而自動化地管理基于數(shù)據(jù)訪問的web服務(wù),其中該基于數(shù)據(jù)訪問的web服務(wù)被配置用于與部署在應(yīng)用服務(wù)器上的通用web服務(wù)運行時模塊協(xié)作來執(zhí)行,所述應(yīng)用服務(wù)器被配置用于支持web服務(wù)的動態(tài)部署。
在web服務(wù)元數(shù)據(jù)的改變包括向web服務(wù)管理元數(shù)據(jù)倉庫中添加的web服務(wù)元數(shù)據(jù)的情況下,自動化地管理基于數(shù)據(jù)訪問的web服務(wù)還包括從web服務(wù)管理元數(shù)據(jù)倉庫取回web服務(wù)配置文檔,根據(jù)該web服務(wù)配置文檔創(chuàng)建web服務(wù)產(chǎn)品(其中該web服務(wù)配置文檔滿足web服務(wù)配置方案),以及啟動web服務(wù)產(chǎn)品,以使得與通用web服務(wù)運行時模塊相關(guān)的請求處理器接受與該web服務(wù)產(chǎn)品相關(guān)的請求。啟動web服務(wù)產(chǎn)品還包括web服務(wù)產(chǎn)品執(zhí)行web服務(wù)請求,而無需重啟通用web服務(wù)運行時模塊。
在web服務(wù)元數(shù)據(jù)的改變包括從web服務(wù)管理元數(shù)據(jù)倉庫中移除的web服務(wù)元數(shù)據(jù)的情況下,自動化地管理基于數(shù)據(jù)訪問的web服務(wù)包括去激活與基于數(shù)據(jù)訪問的web服務(wù)相關(guān)的web服務(wù)運行時產(chǎn)品,其中該基于數(shù)據(jù)訪問的web服務(wù)由所移除的web服務(wù)元數(shù)據(jù)標(biāo)識。
在某些實施方式中,web服務(wù)元數(shù)據(jù)的改變是通過評估與定義在web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)相關(guān)的時間戳而確定的。此外,計算機程序產(chǎn)品還可以包括用戶定義web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)元數(shù)據(jù)。web服務(wù)元數(shù)據(jù)還包括web服務(wù)名稱、web服務(wù)配置文檔、web服務(wù)描述語言文檔、web服務(wù)狀態(tài)和時間戳。
在某些實施方式中,web服務(wù)配置文檔是XML文件,web服務(wù)配置方案是XML方案文檔,以及web服務(wù)配置文檔指定在數(shù)據(jù)倉庫上的結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)操作。計算機程序產(chǎn)品還可以包括發(fā)布與基于數(shù)據(jù)訪問的web服務(wù)相關(guān)的web服務(wù)描述語言文檔(WSDL)。
還公開了一種用于操作由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時的系統(tǒng),該系統(tǒng)包括應(yīng)用服務(wù)器,其被配置用于支持web服務(wù)的動態(tài)部署和主控多個web服務(wù)運行時模塊,該應(yīng)用服務(wù)器包括存儲器器件和至少一個處理器。該系統(tǒng)還包括web服務(wù)管理元數(shù)據(jù)倉庫,其包括web服務(wù)名稱、web服務(wù)配置文檔、web服務(wù)描述語言(WSDL )文檔、web月l務(wù)狀態(tài)和時間戳;基于^t據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫,其包括web服務(wù)可訪問的數(shù)據(jù)和已存儲過程。該系統(tǒng)還包括運行時控制器,其被配置用于在應(yīng)用服務(wù)器上操作以及管理單個唯一通用web服務(wù)運行時;以及通用web服務(wù)運行時模塊,其被配置用于在應(yīng)用服務(wù)器上操作以及基于web服務(wù)配置文檔來為一個或者多個web服務(wù)創(chuàng)建一個或者多個web服務(wù)產(chǎn)品。
在某些實施方式中,該系統(tǒng)還包括web服務(wù)元數(shù)據(jù)工具,其被配置用于與web服務(wù)管理元數(shù)據(jù)倉庫通信,該web服務(wù)元數(shù)據(jù)工具被配置用于向用戶暴露可用于被部署為基于數(shù)據(jù)訪問的web服務(wù)的已存儲過程和基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù),以及用于接收來自用戶的元數(shù)據(jù),該元數(shù)據(jù)定義了新的基于數(shù)據(jù)訪問的web服務(wù)。web服務(wù)元數(shù)據(jù)工具還根據(jù)用戶元數(shù)據(jù)生成web服務(wù)配置文檔和WSDL文檔,以及在web服務(wù)管理元數(shù)據(jù)倉庫中存卡者webl艮務(wù)名稱、web服務(wù)配置文檔、WSDL文件、狀態(tài)和時間戳。
運行時控制器還包括同步模塊,其被配置用于確定web服務(wù)管理元數(shù)據(jù)倉庫中的改變以及向通用web服務(wù)運行時才莫塊通知該改變;端點接口同步模塊,其被配置用于維護web服務(wù)引擎中的web服務(wù)端點接口定義;以及管理模塊,其被配置用于在通用web服務(wù)運行時模塊上啟用web服務(wù)產(chǎn)品的啟動操作和停止操作。
本發(fā)明還公開了 一種用于操作由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時的系統(tǒng),其中該系統(tǒng)包括多個應(yīng)用服務(wù)器,其被配置用于支持web服務(wù)的動態(tài)部署和主控多個web服務(wù)運行時模塊和運行時控制器;多個數(shù)據(jù)庫,這些數(shù)據(jù)庫還包括公共web服務(wù)管理元數(shù)據(jù)倉庫和公共基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫;多個web服務(wù)運行時模塊,其被配置用于在多個應(yīng)用服務(wù)器中的一個上操作以及基于web服務(wù)配置文檔為一個或者多個web服務(wù)創(chuàng)建一個或者多個web服務(wù)產(chǎn)品;以及多個通用web服務(wù)運行時模塊,其被配置用于在多個應(yīng)用服務(wù)器中的一個上進行操作以及基于web服務(wù)配置文檔來為一個或者多個web服務(wù)創(chuàng)建一個或者多個web服務(wù)產(chǎn)品。
在多個應(yīng)用服務(wù)器上的通用web服務(wù)運行時模塊還包括定義基于數(shù)據(jù)訪問的web服務(wù)的冗余web服務(wù)產(chǎn)品,這些冗余web服務(wù)產(chǎn)品能夠從存儲在公共web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)元數(shù)據(jù)導(dǎo)出。在某些實施方式中,多個應(yīng)用服務(wù)器包括異類平臺。應(yīng)用服務(wù)器還可以包括多個運行時控制器和通用web服務(wù)運行時模塊,其中運行時控制器擁有相關(guān)的唯一通用web服務(wù)運行時模塊。
貫穿于本說明書中對特征、有益效果或類似語言的參考并非暗示那些可以利用本發(fā)明中實現(xiàn)的所有特征和有益效果應(yīng)該或已經(jīng)存在于本發(fā)明的任何單個實施方式中。相反,涉及特征和有益效果的語言應(yīng)理解為結(jié)合實施方式所描述的特定特征、有益效果或特點包括在本發(fā)明的至少一種實施方式中。因此,貫穿于本說明書的特征和有益效果的討論以及類似語言可以但不必需涉及相同的實施方式。
此外,所討論的本發(fā)明特征、有益效果和特點可以以任何適當(dāng)?shù)姆绞胶喜⒌?一 種或者多種實施方式中。本領(lǐng)域技術(shù)人員將認(rèn)識到可以在沒有具體實施方式
的一個或者多個特定特征或有益效果的情況下實施本發(fā)明。另外,可以認(rèn)識到某些實施方式中的額外的特征和有益效果,其可能并未在本發(fā)明的所有實施方式中給出。
這些本發(fā)明的特征和有益效果將通過隨后的描述和所附權(quán)利要求來更全面地呈現(xiàn),或者通過如下文所述實施本發(fā)明來了解這些特征和有益效果。
為了容易理解本發(fā)明的有益效果,將通過引用示出在附圖中的特定實施方式來呈現(xiàn)上文簡短描述的本發(fā)明的更具體說明。應(yīng)當(dāng)理解的是,這些附圖僅僅描述了本發(fā)明的典型實施方式,但不能因此認(rèn)為附圖限制了本發(fā)明的范圍,而是,本發(fā)明將通過使用附圖、利用附加的特性和細節(jié)得以描述和解譯,其中
圖1是示出了根據(jù)本發(fā)明的web服務(wù)系統(tǒng)一種實施方式的示意性框圖2是示出了根據(jù)本發(fā)明的數(shù)據(jù)庫和web服務(wù)元數(shù)據(jù)工具一種實施方式的示意性框圖3是示出了根據(jù)本發(fā)明的應(yīng)用服務(wù)器一種實施方式的示意性框圖4是示出了根據(jù)本發(fā)明的、包括多個應(yīng)用服務(wù)器和多個數(shù)據(jù)庫的web服務(wù)系統(tǒng)一種實施方式的示意性框圖5是示出了根據(jù)本發(fā)明的、用于部署通用web服務(wù)運行時模塊的方法的 一 種實施方式的示意性流程圖6是示出了根據(jù)本發(fā)明的、用于創(chuàng)建web服務(wù)的方法的一種實施方式的示意性流程圖;以及
圖7是示出了根據(jù)本發(fā)明的、用于處理web服務(wù)請求的一種實施方式的示意性流程圖。
具體實施例方式
很多在本說明書中描述的功能單元被標(biāo)記為模塊,以便特別強調(diào)它們的實現(xiàn)獨立性。例如,才莫塊可以由>^更件電^各來實現(xiàn),包4舌定制VLSI電路或門陣列、成品半導(dǎo)體(諸如,邏輯芯片)、晶體管或其他離散組件。模塊還可以由可編程硬件器件來實現(xiàn),諸如處理器和存儲器器件、現(xiàn)場可編程門陣列、可編程陣列邏輯、可編程邏輯器件等等。
模塊還可以由供各種類型處理器執(zhí)行的軟件來實現(xiàn)??蓤?zhí)行代碼的已標(biāo)識模塊例如可以包括一個或者多個計算機指令物理塊或計算機指令邏輯塊,其例如可以作為對象、過程或函數(shù)進行組織。然而,已標(biāo)識模塊的可執(zhí)行性并不需要物理地放在一起,而是可以包括存儲在不同位置的全異指令,當(dāng)在邏輯上連接在一起時,這些指令會包括該模塊,并且實現(xiàn)該模塊被宣稱的用途。事實上,可執(zhí)行代碼的模塊可以是單個指令,或者很多指令, 甚至可以分布于若干不同代碼行、在不同程序中以及跨越若干存儲 器器件。類似地,可以在此處的模塊中標(biāo)識和示出操作數(shù)據(jù),并且 這些操作數(shù)據(jù)可具體化為任何適當(dāng)?shù)男问?,以及組織在任何適當(dāng)類 型的數(shù)據(jù)結(jié)構(gòu)中。操作數(shù)據(jù)可收集成單個數(shù)據(jù)集合,或者可分布于 不同位置(包括分布于不同存儲設(shè)備)。
貫穿于本說明書的針對"一種實施方式"、"實施方式"或類
似語言的引用意思是結(jié)合實施方式描述的具體功能、結(jié)構(gòu)或者特 征包含在本發(fā)明的至少一種實施方式中。因此,貫穿本于本說明書 的詞組"在一種實施方式中"、"在實施方式中,,以及類似語言的 出現(xiàn)可以但不必須都涉及同一實施方式。
此外,在一個或者多個實施方式中,所描述的本發(fā)明功能、結(jié) 構(gòu)或特征可以以任何適當(dāng)?shù)姆绞竭M行組合。在隨后的描述中,將提 供很多特定細節(jié)來徹底理解本發(fā)明的實施方式,諸如編程、軟件模 塊、用戶選擇、網(wǎng)絡(luò)事務(wù)、數(shù)據(jù)庫查詢、數(shù)據(jù)庫結(jié)構(gòu)、硬件模塊、 硬件電路、硬件處理器和存儲器、硬件芯片等等的例子。然而,相 關(guān)領(lǐng)域技術(shù)人員將認(rèn)識到在不具有一個或者多個特定細節(jié),或者 具有其他方法、組件、材料等的情況下,本發(fā)明仍可以實施。在其 他實例中,沒有詳細顯示或描述公知結(jié)構(gòu)、材料或操作,以避免使 本發(fā)明的方面變得模糊。
圖1是示出了根據(jù)本發(fā)明的web服務(wù)系統(tǒng)100 —種實施方式的 示意性框圖。盡管在本申請中描述的實施方式具體地參考了 web服 務(wù)和web服務(wù)系統(tǒng),但是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)認(rèn)識到本發(fā)明與所有 網(wǎng)絡(luò)協(xié)議相關(guān)。web服務(wù)系統(tǒng)100包括客戶端160、應(yīng)用服務(wù)器102 和數(shù)據(jù)庫130。 web服務(wù)系統(tǒng)100允許客戶端160訪問與應(yīng)用服務(wù)器 102和數(shù)據(jù)庫130相關(guān)的服務(wù)和資源,而不論每一方底層平臺的固有 兼容性。web服務(wù)系統(tǒng)100支持分布式計算,其中客戶端160可以 訪問與數(shù)據(jù)庫130相關(guān)的資源,如可用的web服務(wù)所定義的,而不 用直接在數(shù)據(jù)庫130上執(zhí)行那些操作;相反,客戶端160從應(yīng)用服務(wù)器102請求可用操作,該應(yīng)用服務(wù)器102執(zhí)行與該請求相關(guān)的操 作,并且將結(jié)果返回給客戶端160。
盡管web服務(wù)系統(tǒng)100能夠提供任意數(shù)量的web服務(wù),但是本 發(fā)明的重點在于基于數(shù)據(jù)訪問的web服務(wù)?;跀?shù)據(jù)訪問的web服 務(wù)是其主要功能是用來在數(shù)據(jù)庫130上執(zhí)行數(shù)據(jù)庫操作的web服務(wù)。 這些操作可以包括添加、移除或編輯數(shù)據(jù)庫130中的表和記錄,以 及訪問已存儲的過程。基于數(shù)據(jù)訪問的web服務(wù)還可包括作為web 服務(wù)一部分的其他操作。例如,基于數(shù)據(jù)訪問的web服務(wù)可以對取 回自數(shù)據(jù)庫130的數(shù)據(jù)執(zhí)行額外的操作,諸如,在返回結(jié)果以前, 將一種貨幣形式轉(zhuǎn)換為另 一種貨幣形式。
應(yīng)用服務(wù)器102是軟件程序,其被配置用于執(zhí)行和管理多個應(yīng) 用。應(yīng)用向客戶端計算機或設(shè)備遞送應(yīng)用服務(wù)。應(yīng)用服務(wù)器102通 常包括用以提供web服務(wù)的公知模塊和中間件。在一種實施方式中, 應(yīng)用服務(wù)器102是IBM WebSphere應(yīng)用服務(wù)器(IBM和WebSphere 是國際商業(yè)機器公司的注冊商標(biāo))。應(yīng)用服務(wù)器102可以作為用以 提供數(shù)據(jù)訪問服務(wù)的面向服務(wù)的架構(gòu)的 一 部分。
應(yīng)用服務(wù)器102還支持web服務(wù)的動態(tài)部署。動態(tài)部署或"熱 部署,,和"動態(tài)重加載,,允許向應(yīng)用服務(wù)器102添加組件或者編輯 組件,而無需在這些改變生效以前停止和/或重啟應(yīng)用服務(wù)器102。 動態(tài)部署也允許在不重啟應(yīng)用服務(wù)器102的情況下移除組件。在支 持動態(tài)部署的應(yīng)用服務(wù)器102中,web服務(wù)部署信息可添加到web 服務(wù)引擎104 (通常也稱為SOAP引擎),或者從該引擎上移除web 服務(wù)部署信息,而web服務(wù)引擎104將接受這些改變并且針對這些 改變作出響應(yīng),而無需重啟應(yīng)用服務(wù)器102。
應(yīng)用服務(wù)器102還包括web服務(wù)引擎104。 web服務(wù)引擎104接 收、解譯并處理來自客戶端160的web服務(wù)請求。web服務(wù)引擎104 還打包web服務(wù)響應(yīng)并將其發(fā)送至客戶端160。存在各種各樣的商 業(yè)且開源的web服務(wù)引擎。在一種實施方式中,web服務(wù)引擎IO4 是Apache Axis引擎。在 一 種優(yōu)選實施方式中,w e b服務(wù)引擎10 4是簡單對象訪問協(xié)議 (SOAP)引擎,其能夠接收和生成SOAP消息。W3C規(guī)范將SOAP 定義為用于在分散的分布式環(huán)境中交換結(jié)構(gòu)化信息的輕量級協(xié)議。 SOAP消息包括三部分封套,其定義用于描述消息內(nèi)容以及如何處 理消息的框架;編碼規(guī)則,其給出應(yīng)用定義的數(shù)據(jù)類型;以及約定, 其代表遠程過程調(diào)用和響應(yīng)。web服務(wù)引擎104接收和翻譯SOAP 消息,并且還編制和發(fā)送SOAP消息。
根據(jù)本發(fā)明,應(yīng)用服務(wù)器102還包括運行時控制器110。運行時 控制器110管理通用web服務(wù)運行時模塊120。運行時控制器110 跟蹤并且監(jiān)視web服務(wù)管理元數(shù)據(jù)倉庫140中的web服務(wù)元數(shù)據(jù), 并且確保web服務(wù)引擎104中的服務(wù)端點保持最新。運行時控制器 110的此具體特征將結(jié)合圖3和圖6做出進一步討論。
每個通用web服務(wù)運行時模塊120具有相關(guān)的運行時控制器 110。另外,運行時控制器110被配置用于同數(shù)據(jù)庫130和web服務(wù) 管理元數(shù)據(jù)倉庫140通信。用戶可以在應(yīng)用服務(wù)器102上部署多個 運行時控制器110和多個通用web服務(wù)運行時模塊120,只要每個 通用web服務(wù)運行時模塊120擁有唯一的運行時控制器110即可。
根據(jù)本發(fā)明,應(yīng)用服務(wù)器102還包括通用web服務(wù)運行時模塊 120。通用web服務(wù)運行時模塊120用作基于數(shù)據(jù)訪問的web服務(wù)的 操作環(huán)境。通用web服務(wù)運行時模塊120根據(jù)存儲在web服務(wù)管理 元數(shù)據(jù)倉庫140中的web服務(wù)元數(shù)據(jù)來創(chuàng)建基于數(shù)據(jù)訪問的web服 務(wù)。響應(yīng)于web服務(wù)請求,這些基于數(shù)據(jù)訪問的web服務(wù)從基于數(shù) 據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150取回數(shù)據(jù)。通用web服務(wù)運行時模 塊120提供一個或者多個可執(zhí)行的計算機指令,這些指令將使得每 個基于數(shù)據(jù)訪問的web服務(wù)能夠滿足web服務(wù)請求并且生成適當(dāng)?shù)?web服務(wù)響應(yīng)。如上文所提到的,基于數(shù)據(jù)訪問的web服務(wù)是主要 功能用來在數(shù)據(jù)庫130上執(zhí)行數(shù)據(jù)庫操作的web服務(wù)。這些操作可 以包括添加、移除或編輯數(shù)據(jù)庫130中的表和記錄,以及訪問已存 儲的過程?;跀?shù)據(jù)訪問的web服務(wù)也可以結(jié)合這些數(shù)據(jù)庫操作來進行額外的操作或動作。
通用web服務(wù)運行時模塊120使用web服務(wù)引擎104來接收web 服務(wù)請求并針對該web服務(wù)請求作出響應(yīng)。在一種實施方式中,通 用web服務(wù)運行時模塊120還發(fā)布web服務(wù)語言描述文檔(WSDL ), 其包含了 web服務(wù)的描述,包括相關(guān)web服務(wù)的方法、參數(shù)和輸出, 供客戶端160中的調(diào)用者使用以執(zhí)行該web服務(wù)。WSDL是服務(wù)請 求者與服務(wù)提供者之間的契約。通用web服務(wù)運行時模塊120的功 能將結(jié)合圖3和圖6做出詳細討論。
web服務(wù)系統(tǒng)IOO還包括客戶端160??蛻舳?60代表向應(yīng)用服 務(wù)器102請求web服務(wù)的實體。客戶端160按照SOAP協(xié)議并根據(jù) WSDL文件給出的的描述來發(fā)送請求。
web服務(wù)系統(tǒng)IOO還包括數(shù)據(jù)庫130。數(shù)據(jù)庫130包括結(jié)構(gòu)化的 數(shù)據(jù)集合和數(shù)據(jù)庫管理系統(tǒng)(DBMS )(諸如,DB2 ( DB2是國際商 業(yè)機器公司的注冊商標(biāo))系統(tǒng)或本領(lǐng)域技術(shù)人員所公知的其他系 統(tǒng))。數(shù)據(jù)庫130包括web服務(wù)管理元數(shù)據(jù)倉庫140和基于數(shù)據(jù)訪 問的web服務(wù)數(shù)據(jù)倉庫150。
在一種實施方式中,web服務(wù)管理元數(shù)據(jù)倉庫M0包括包含了 web服務(wù)元數(shù)據(jù)的記錄的表,該web服務(wù)元數(shù)據(jù)指定了 web服務(wù)的 行為和結(jié)構(gòu)。盡管在本申請中使用術(shù)語"元數(shù)據(jù)",但是本領(lǐng)域技 術(shù)人員將認(rèn)識到,元數(shù)據(jù)僅是用于提供所需控制數(shù)據(jù)的 一種方式, 其中這些控制數(shù)據(jù)是指定本發(fā)明的操作所必需的。web服務(wù)元數(shù)據(jù) 的內(nèi)容以及創(chuàng)建web服務(wù)元數(shù)據(jù)將結(jié)合圖2做出更詳細討論。而web 服務(wù)管理元數(shù)據(jù)倉庫140的配置將結(jié)合圖5做出更詳細討論。通用 web服務(wù)運行時模塊120基于存儲在web服務(wù)管理元數(shù)據(jù)倉庫 中的web服務(wù)元數(shù)據(jù)來定義基于數(shù)據(jù)訪問的web服務(wù)。
數(shù)據(jù)庫130還包括基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150?;?數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150包括作為基于數(shù)據(jù)訪問的web服 務(wù)的主題并且對于該基于數(shù)據(jù)訪問的web服務(wù)可用的數(shù)據(jù)。例如, 公司員工記錄可以包括基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150的一部分。這樣,該信息可以用作適當(dāng)web服務(wù)的主題。
本領(lǐng)域技術(shù)人員將認(rèn)識到,web服務(wù)系統(tǒng)100僅僅是很多可能配 置中的一種。例如,web服務(wù)管理元數(shù)據(jù)倉庫140和基于數(shù)據(jù)訪問 的web服務(wù)數(shù)據(jù)倉庫150不需要位于同一數(shù)據(jù)庫130,只要去往存 儲的連接信息被適當(dāng)?shù)靥峁┙o運行時控制器110和通用web服務(wù)運 行時模塊120即可。此外,web服務(wù)系統(tǒng)100可以包括多個應(yīng)用服 務(wù)器102。這些服務(wù)器可以類似地包括運行時控制器110和通用web 服務(wù)運行時模塊120,它們也同數(shù)據(jù)庫130連接。對于運行時控制器 110和通用web服務(wù)運行時模塊120沒有數(shù)量上的限制,這可以與 數(shù)據(jù)庫130和相關(guān)數(shù)據(jù)倉庫有關(guān)。web服務(wù)系統(tǒng)100的備選配置將 結(jié)合圖4做出更詳細討論。
圖2是示出了根據(jù)本發(fā)明的、數(shù)據(jù)庫130和web服務(wù)元數(shù)據(jù)工 具210的一種實施方式的示意性框圖。數(shù)據(jù)庫130包括web服務(wù)管 理元數(shù)據(jù)倉庫140和基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150。如上 文所討論的,web服務(wù)管理元數(shù)據(jù)倉庫140包括web服務(wù)元數(shù)據(jù)220, 其以通用服務(wù)運行時模塊120和運行時控制器110可訪問的格式來 描述web服務(wù)。web服務(wù)元數(shù)據(jù)220描述由用戶200定義的基于數(shù) 據(jù)訪問的web服務(wù)。通用web服務(wù)運行時模塊120使用web服務(wù)元 數(shù)據(jù)220來創(chuàng)建符合用戶200的定義的web服務(wù)。web服務(wù)元數(shù)據(jù) 220的內(nèi)容將在下文進一步詳細描述。
基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150包含web服務(wù)將要對其 進行訪問并在其上執(zhí)行操作的"原始"數(shù)據(jù)。這個基于數(shù)據(jù)訪問的 web服務(wù)數(shù)據(jù)倉庫150包括在關(guān)系型數(shù)據(jù)庫的表和行中組織的數(shù)據(jù) 或者分層級數(shù)據(jù)庫中的數(shù)據(jù)。另外,基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù) 倉庫150可以包括已存儲的過程。在一種實施方式中,基于數(shù)據(jù)訪 問的web服務(wù)數(shù)據(jù)倉庫150包括存儲在數(shù)據(jù)庫130中的記錄。如上 文所提到的,基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150可以包括任何 可由通用web服務(wù)運行時模塊120訪問的已存儲信息。
web服務(wù)元數(shù)據(jù)工具210是用戶200用來向web服務(wù)管理元數(shù)據(jù)倉庫140輸入web服務(wù)元數(shù)據(jù)220的一種方法。雖然用戶200可 以手動地將web服務(wù)元數(shù)據(jù)220插入web服務(wù)管理元數(shù)據(jù)倉庫140, 但是在優(yōu)選實施方式中,web服務(wù)元數(shù)據(jù)工具210將提供此功能。 web服務(wù)元數(shù)據(jù)工具210提供了這樣的工具其允許用戶200容易 地指定基于數(shù)據(jù)訪問的web服務(wù)的操作,以及根據(jù)該用戶指定,生 成以通用web服務(wù)運行時模塊120能夠理解的方式對服務(wù)進行描述 的web服務(wù)元數(shù)據(jù)220。 web服務(wù)元數(shù)據(jù)工具210還向用戶200 ^是供 數(shù)據(jù)庫側(cè)的4妾口,用戶200通過該4妾口可以啟動、停止或以其他方 式管理已定義的基于數(shù)據(jù)訪問的web服務(wù)的日常操作。為了使得這 些功能易于使用,web服務(wù)元數(shù)據(jù)工具210還包括編輯器模塊212 和管理模塊214。根據(jù)本發(fā)明,編輯器模塊212允許用戶200創(chuàng)建新 的基于數(shù)據(jù)訪問的web服務(wù)、編輯已有的基于數(shù)據(jù)訪問的web服務(wù) 或者移除可用的基于數(shù)據(jù)訪問的web服務(wù)。
管理模塊214允許用戶200 4丸行與基于數(shù)據(jù)訪問的web服務(wù)相 關(guān)的管理功能。例如,管理模塊214可以允許用戶200禁用特定的 基于數(shù)據(jù)訪問的web服務(wù),而不影響通過通用web服務(wù)運行時模塊 120可用的其他基于數(shù)據(jù)訪問的web服務(wù)。另外,管理模塊214可 以允許用戶200創(chuàng)建時間表,其指定基于數(shù)據(jù)訪問的web服務(wù)可用 的時間或者離線的時間,從而使得針對在其執(zhí)行期間對基于數(shù)據(jù)訪 問的web服務(wù)數(shù)據(jù)倉庫150進行的訪問要被中止的其他數(shù)據(jù)管理任 務(wù)(諸如,備份過程),對基于數(shù)據(jù)訪問的web服務(wù)的訪問進行協(xié) 調(diào)更加容易。
在所述實施方式中,用戶200是數(shù)據(jù)庫管理員或者根據(jù)數(shù)據(jù)庫 130開發(fā)基于數(shù)據(jù)訪問的web服務(wù)的其他個人。用戶200通過操作 web服務(wù)元數(shù)據(jù)工具210來創(chuàng)建基于數(shù)據(jù)訪問的web服務(wù)。web服 務(wù)元數(shù)據(jù)工具210可以包括軟件,其是諸如IBM DB2的DBMS的一 部分、插件,或者允許與數(shù)據(jù)庫130中的數(shù)據(jù)進行通信并對其進行 操作的其他配置。
在一種實施方式中,web服務(wù)元數(shù)據(jù)工具210首先在數(shù)據(jù)庫130上執(zhí)行資源發(fā)現(xiàn)功能。該資源發(fā)現(xiàn)功能確定數(shù)據(jù)庫130中的什么數(shù) 據(jù)可以由諸如SQL語句的數(shù)據(jù)庫操作來訪問。web服務(wù)元數(shù)據(jù)工具 210將此發(fā)現(xiàn)的可訪問數(shù)據(jù)作為可用作web服務(wù)一部分的數(shù)據(jù)暴露 給用戶200。
盡管本說明書頻繁參考作為相關(guān)數(shù)據(jù)庫操作的SQL語句,但是 本領(lǐng)域技術(shù)人員將認(rèn)識到,SQL并非用于執(zhí)行數(shù)據(jù)庫操作的唯一語 言或方法。用戶可以使用諸如XQuery的其他語言來進行特定操作。 貫穿于本說明書中所有針對SQL語句的引用都可以被替換為對 XQuery語句的引用或?qū)τ糜趫?zhí)行數(shù)據(jù)庫操作的其他方法的引用。 SQL語句的使用僅僅是很多可能實施方式中的一種。
用戶200提供web服務(wù)名稱,并且可以從作為基于數(shù)據(jù)訪問的 web服務(wù)數(shù)據(jù)倉庫150 —部分的所發(fā)現(xiàn)數(shù)據(jù)中選擇將什么并入所命 名的基于數(shù)據(jù)訪問的web服務(wù)中。用戶200還可以指定該基于數(shù)據(jù) 訪問的web服務(wù)將期望接收什么參數(shù),以及在所選數(shù)據(jù)上進行所期 待的操作時,什么SQL代碼是必需的。另外,用戶200可以指定執(zhí) 行SQL語句以前或者以后必須進行的其他操作。用戶200也可以指 定在未找到所請求的數(shù)據(jù)或在執(zhí)行web服務(wù)的過程中發(fā)生了某些其 他錯誤的情況下,基于數(shù)據(jù)訪問的web服務(wù)將向該用戶返回什么。
例如,用戶200可以創(chuàng)建稱為"getFiveYearAverage (取得五年 平均值)"的基于數(shù)據(jù)訪問的web服務(wù),其將員工ID號作為參數(shù), 并且將返回該員工在過去五年間的平均薪水。在這個具體示例中, 基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150中沒有平均薪水域;然而, 由web服務(wù)元數(shù)據(jù)工具210進行的資源發(fā)現(xiàn)功能指示域"EmplSalary
(員工薪水)"是可用的。用戶200使用web服務(wù)元數(shù)據(jù)工具210 選擇用于基于數(shù)據(jù)訪問的web服務(wù)的 "EmplID (員工ID )" 域和
"EmplSalary" 域,以及生成提取到現(xiàn)在日期為止過去五年中與該 員工ID相關(guān)的薪水值所必需的SQL代碼。然后,用戶200還可以 編寫基于所提取的五個薪水值來計算平均薪水并編寫返回計算結(jié)果 的額外代碼。用戶200還可以指定如果五年的薪水中的任何一個無法提取的話,則返回負1。
web服務(wù)元數(shù)據(jù)工具210可以通過本領(lǐng)域技術(shù)人員熟知的很多 方法來提供上述功能性;web服務(wù)元數(shù)據(jù)工具210可以包括圖形用 戶界面(GUI),用戶200可以通過該界面選擇web服務(wù)的域和操 作,或者以其他方式提供用于從用戶接收相關(guān)數(shù)據(jù)和操作的標(biāo)識的 方法。
web服務(wù)元數(shù)據(jù)工具210從用戶200取得輸入并創(chuàng)建web服務(wù) 元數(shù)據(jù)220。 web服務(wù)元數(shù)據(jù)220描述web服務(wù)的操作,并提供通用 web服務(wù)運行時模塊120創(chuàng)建web服務(wù)所必需的信息。然而,web 服務(wù)元數(shù)據(jù)220本身并不是可單獨作為web服務(wù)的程序;相反地, web服務(wù)元數(shù)據(jù)220是針對web服務(wù)的行為和操作的描述。web服 務(wù)元數(shù)據(jù)220存儲在數(shù)據(jù)庫130中的web服務(wù)管理元數(shù)據(jù)倉庫140 中。web服務(wù)元數(shù)據(jù)工具210所創(chuàng)建的web服務(wù)元數(shù)據(jù)220的一種 實施方式在圖2中示出。web服務(wù)元數(shù)據(jù)220包括web服務(wù)名稱(WS 名稱)240、 web服務(wù)配置文檔250、 web服務(wù)描述語言文檔(WSDL ) 260、狀態(tài)270和時間戳280。
web服務(wù)名稱240包括web服務(wù)管理元數(shù)據(jù)倉庫140中的web 服務(wù)記錄的標(biāo)識符。在一種實施方式中,web服務(wù)名稱240構(gòu)成用 于表的鍵。web服務(wù)名稱240可以由用戶200通過web服務(wù)元數(shù)據(jù) 工具210提供,以作為web服務(wù)創(chuàng)建過程的一部分,或者web服務(wù) 名稱240可以由web服務(wù)元數(shù)據(jù)工具210生成。
web服務(wù)配置文檔250是以通用web服務(wù)運行時模塊120可以 解譯的格式對web服務(wù)的方法、操作和主題進行描述的文檔。對根 據(jù)本發(fā)明的web服務(wù)配置文檔250的解譯將結(jié)合圖3和圖6更詳細 地給出。
web服務(wù)配置文檔250包括與以下有關(guān)的信息web服務(wù)名稱、 操作,以及數(shù)據(jù)庫130中與該web服務(wù)相關(guān)的域。web服務(wù)配置文 檔250還包括作為web服務(wù)的一部分進行的可執(zhí)行數(shù)據(jù)庫操作。在一種實施方式中,web服務(wù)配置文檔250是XML文檔,并且 SQL語句被指定為數(shù)據(jù)庫操作。例如,提供添加員工記錄、移除員 工記錄、取得員工記錄和更新員工記錄的操作的web服務(wù)可以具有 相應(yīng)web服務(wù)配置文檔,如下
《?xml 、''efsbn:;*'1.0" encoding;'"'UTF-8" >
《一dsc:corifig , ! s:d ::"."Wtp:〃ibim-Com/datatool&'dsws/cojifig" buiidNki'mb.a'""2007Z04Z23' 09:49:53:109 PDT" dbT沖e-"JDBC" rcs飾dln接豕"true" &CfviceNarae="E:mpk>>'<5cMaiiagenier!tServ'iee" ,soapBindwg="true"
<dsc :up扭e operatkiinNOTie=1'ad.dEmployeew>
<![CDATA[ INSERT INTO EMPLOYEE values (:en13m0, :firstname' :midin", :lajitoame, :workd鄰t. :phoneno, :hiredate, job, :edlcvel, :scx, :birthdate, :salary, :bonus, comm'》 〗]>
<dsc:u{KlateoperaUcmN:anie="removeEmp:lo;yee"> <dsc:st'*numt>
<![CDATA[ DELETE f誦EMPLOYEE where em, =:e,o ]〉
</dsc :statcmeRt> </dsc:U]xtefe> <(!sc:qtrcry opc.radon:Name:,gct£mployee">
《CDATA〖SELECT * f醒Empio拜W〉
<'dsc:update i>peratk>nM',e="updateEinp'oyeew>
《教.:沐iteim參'<!f CDATAupdate employee set (empno, firet誦e, midinit, Jas加ame, workdept, phoneno, .hired汰t:e, job, edlevel, sex, birthdate' salary, bonus, comm) = (:empno, :firet加me,:加誠:nit, iastoa勤,wo似ept, :phoneno, :hircdate, :job, :edl'evd, sex, :birthtktc,:幼'ary, :bo歸,comm> where empn() = :cmpno !]>
《Zdsc :stfrfcr e:nl> 《:/dsc:u|Kiate>
</dsc
WSDL 260是提供了用于描述web服務(wù)的模型的web服務(wù)描述 語言文檔。WSDL提供了 web服務(wù)的基于XML的描述,以及通過定 義針對web服務(wù)的公共接口 、向客戶端通知這些功能可用以及向客 戶端通知與該web服務(wù)相關(guān)的特定數(shù)據(jù)類型來提供如何與web服務(wù) 通信的描述。WSDL 260提供了客戶端與所描述web服務(wù)交互所需 的信息。
在一種實施方式中,還可以響應(yīng)于用戶200 4是供了對基于數(shù)據(jù) 訪問的web服務(wù)進行定義的參數(shù),而由web服務(wù)元數(shù)據(jù)工具210來 創(chuàng)建WSDL 260。 WSDL文檔的結(jié)構(gòu)和功能是本領(lǐng)域技術(shù)人員公知 的。本領(lǐng)域技術(shù)人員可以創(chuàng)建工具模塊,以使得根據(jù)WSDL文件得 以根據(jù)用戶指定的、用于web服務(wù)的操作和參數(shù)的集合被創(chuàng)建。作 為示例,結(jié)合上文的示例配置文件生成的WSDL將在附錄A中給出。 本領(lǐng)域技術(shù)人員將認(rèn)識到,附錄A中的WSDL提供了 web服務(wù)可能 的客戶端,其中的web服務(wù)是由具有使用web服務(wù)所需信息的上述 配置文件定義的,該信息包括所提供操作的名稱和參數(shù)。
在一種實施方式中,web服務(wù)元數(shù)據(jù)220還包括狀態(tài)270。狀態(tài) 270域存儲了與web服務(wù)名稱240相關(guān)的web服務(wù)的操作狀態(tài)。在 一種實施方式中,狀態(tài)270可以在相應(yīng)的基于li據(jù)訪問的web服務(wù) 可用時設(shè)定為"活躍",而在該基于數(shù)據(jù)訪問的web服務(wù)被禁用或 以其他方式不可用時設(shè)定為"不活躍"。備選地,web服務(wù)元數(shù)據(jù) 220的表中行的存在可以表示基于數(shù)據(jù)訪問的web服務(wù)是活躍的;而行的移除可以表示基于數(shù)據(jù)訪問的web服務(wù)是不活躍的。
在一種實施方式中,web服務(wù)管理元數(shù)據(jù)倉庫140還包括與基于 數(shù)據(jù)訪問的web服務(wù)相關(guān)的時間戳280。時間戳提供了可以用于確 定是否改變了基于數(shù)據(jù)訪問的web服務(wù)或者何時改變了基于數(shù)據(jù)訪 問的web服務(wù)的記號。創(chuàng)建新的基于數(shù)據(jù)訪問的web服務(wù)、編輯已 有基于數(shù)據(jù)訪問的web服務(wù),或者移除或去激活基于數(shù)據(jù)訪問的web 服務(wù),以及改變web服務(wù)元數(shù)據(jù)220的狀態(tài)或其他組件會引起web 服務(wù)元數(shù)據(jù)工具210創(chuàng)建新的時間戳280。優(yōu)選地,這些改變由與 DBMS進行排他性交互的用戶做出的。
web服務(wù)元數(shù)據(jù)工具210還可以包括編輯器模塊212,用于在 web服務(wù)管理元數(shù)據(jù)倉庫140中對基于數(shù)據(jù)訪問的web服務(wù)做出改 變。用戶200操作編輯器模塊212來編輯或者移除基于數(shù)據(jù)訪問的 web服務(wù)。在一種實施方式中,當(dāng)用戶200編輯已有的基于數(shù)據(jù)訪 問的web服務(wù)時,web服務(wù)元數(shù)據(jù)工具210將在web服務(wù)管理元數(shù) 據(jù)倉庫140中重寫受到編輯影響的條目。web服務(wù)元數(shù)據(jù)工具210 還為web服務(wù)創(chuàng)建新的時間戳280。如果用戶200移除基于數(shù)據(jù)訪 問的web服務(wù),則web服務(wù)元數(shù)據(jù)工具210可以從web服務(wù)管理元 數(shù)據(jù)倉庫140中完全移除對基于數(shù)據(jù)訪問的web服務(wù)進行定義的元 數(shù)據(jù)。
web服務(wù)元數(shù)據(jù)工具210還包括管理模塊214,其允許用戶200 對來自數(shù)據(jù)庫130的基于數(shù)據(jù)訪問的web服務(wù)的操作進行管理,而 不是由應(yīng)用服務(wù)器102來管理。用戶200使用管理模塊214來啟動 或停止基于數(shù)據(jù)訪問的web服務(wù)。在一種實施方式中,管理模塊214 通過將web服務(wù)的狀態(tài)270改變?yōu)?活躍,,或者"不活躍"來啟動 或停止服務(wù)。備選地,添加或移除對基于數(shù)據(jù)訪問的web服務(wù)進行 定義的元數(shù)據(jù)會影響該基于數(shù)據(jù)訪問的web服務(wù)是被激活還是被去 激活。運行時控制器IIO將檢測此改變,并按照所指示的來動態(tài)地 啟動或者停止基于數(shù)據(jù)訪問的web服務(wù)。
這允許用戶200容易地控制通過基于數(shù)據(jù)訪問的web服務(wù)對數(shù)據(jù)庫130進行的訪問。用戶200可以容易地中止基于數(shù)據(jù)訪問的web 服務(wù)針對數(shù)據(jù)庫的訪問,以便進行數(shù)據(jù)庫維護或者其他任務(wù)。在一 種實施方式中,web服務(wù)元凄t據(jù)工具210還可以允許用戶200創(chuàng)建 對基于數(shù)據(jù)訪問的web服務(wù)的可用性進行定義的時間表。
本領(lǐng)域技術(shù)人員將認(rèn)識到,web服務(wù)元數(shù)據(jù)220可以更復(fù)雜,以 及為了向用戶200提供額外的工具和功能,可以包括比在此示出的 域更多的域。額外的工具和域可以支持更高級的功能,諸如針對基 于數(shù)據(jù)訪問的web服務(wù)進行版本控制。
此外,本領(lǐng)域的技術(shù)人員將認(rèn)識到,實施本發(fā)明并非必需使用 web服務(wù)元數(shù)據(jù)工具210;用戶200例如可以使用SQL語句,將用 于定義和操作基于數(shù)據(jù)訪問的web服務(wù)所必需的信息直接存儲到 web服務(wù)管理元數(shù)據(jù)倉庫140中。
在這樣的實施方式中,用戶200將需要適當(dāng)?shù)貏?chuàng)建和定義有關(guān) 的web服務(wù)元數(shù)據(jù)220,諸如web服務(wù)名稱240、 web服務(wù)配置文檔 250、 WSDL 260、狀態(tài)270以及時間戳280,以便使本發(fā)明正確地起 作用。這樣,web服務(wù)元數(shù)據(jù)工具210創(chuàng)建了一種抽象,其將用戶 200和根據(jù)本發(fā)明的用于創(chuàng)建適當(dāng)定義的元數(shù)據(jù)的機制隔離開,從而 簡化了創(chuàng)建所需web服務(wù)元數(shù)據(jù)220的過程。
圖3是示出了根據(jù)本發(fā)明的應(yīng)用服務(wù)器102 —種實施方式的示 意性框圖。在所描述的實施方式中,應(yīng)用服務(wù)器102包括web服務(wù) 引擎104、運行時控制器IIO和通用web服務(wù)運行時模塊120。圖3 還示出了包括web服務(wù)管理元數(shù)據(jù)倉庫140和基于數(shù)據(jù)訪問的web 服務(wù)數(shù)據(jù)倉庫150的數(shù)據(jù)庫130。
如上文結(jié)合圖1所討論的,運行時控制器IIO還包括管理模塊 310、同步模塊312和端點接口同步模塊314。管理模塊310為應(yīng)用 服務(wù)器102上的用戶提供了用于通用web服務(wù)運行時模塊120的管 理工具。
例如,應(yīng)用服務(wù)器用戶可以使用管理模塊310以在應(yīng)用服務(wù)器 102上啟動或者停止通用web服務(wù)運行時模塊120的纟喿作。此外,管理模塊310允許用戶部署并配置通用web服務(wù)運行時模塊120。 管理模塊310還利用由應(yīng)用服務(wù)器102上的工具所提供的web服務(wù) 功能,從而允許用戶為通用web服務(wù)運行時模塊120配置連接和安 全設(shè)定。例如,管理模塊310可以使用應(yīng)用服務(wù)器工具來允許用戶 設(shè)立與通用web服務(wù)運行時模塊120相關(guān)的ID和密碼。
同步模塊312確保由通用web服務(wù)運行時模塊120暴露的、基 于數(shù)據(jù)訪問的web服務(wù)與定義在web服務(wù)管理元數(shù)據(jù)倉庫140中的 那些基于數(shù)據(jù)訪問的web服務(wù)相一致。在一種實施方式中,同步模 塊312以定期時間間隔4侖詢web服務(wù)管理元數(shù)據(jù)倉庫140,以確定 正在使用的基于數(shù)據(jù)訪問的web服務(wù)定義是否是最新的。在這樣的 實施方式中,同步模塊312可以包括包含有web服務(wù)名稱240和時 間戳280的數(shù)據(jù)結(jié)構(gòu),其未在圖3中示出。在定期時間間隔處,同 步模塊312輪詢web服務(wù)管理元數(shù)據(jù)倉庫140,并且為所列出的web 服務(wù)名稱240提取時間戳280。同步模塊312然后將所提取的信息與 保留在同步模塊數(shù)據(jù)結(jié)構(gòu)中的信息進行比較。如果針對特定web服 務(wù)名稱240時間戳280不匹配,則web服務(wù)管理元數(shù)據(jù)倉庫140將 具有改變的定義,而同步模塊312將指示通用web服務(wù)運行時模塊 120對操作于應(yīng)用服務(wù)器102上的相關(guān)基于數(shù)據(jù)訪問的web服務(wù)進 行更新。
如果web服務(wù)名稱240和時間戳280存在于web服務(wù)管理元數(shù) 據(jù)倉庫140中,而不存在數(shù)據(jù)結(jié)構(gòu)中,則同步模塊312指示通用web 服務(wù)運行時模塊120對操作于應(yīng)用服務(wù)器102上的基于數(shù)據(jù)訪問的 web服務(wù)進行創(chuàng)建和啟動。如果數(shù)據(jù)結(jié)構(gòu)包括web服務(wù)名稱240但 是在web服務(wù)管理元數(shù)據(jù)倉庫140中沒有找到相同的web服務(wù)名稱 240,則同步模塊312指示通用web服務(wù)運行時模塊120中斷操作于 應(yīng)用服務(wù)器102上的基于數(shù)據(jù)訪問的web服務(wù)。
在一種備選實施方式中,同步模塊312可以基于輪詢間隔來確 定web服務(wù)管理元數(shù)據(jù)倉庫140是否發(fā)生改變。例如,如果輪詢時 間間隔設(shè)定為五分鐘,則同步模塊312可以通過確定在過去的五分鐘中內(nèi)是否有時間戳280改變了,來確定通用web服務(wù)運行時模塊 120是否需要更新基于數(shù)據(jù)訪問的web服務(wù)。因此,在這樣的實施 方式中,可以不需要狀態(tài)域270。本領(lǐng)域技術(shù)人員將認(rèn)識到,存在用 于同步數(shù)據(jù)和保證一致性的很多方法,包括通知配置。本發(fā)明的實
端點接口同步模塊314確保web服務(wù)引擎104具有允許對基于 數(shù)據(jù)訪問的web服務(wù)進行訪問所需的最新端點接口定義。web服務(wù) 端點接口指定了應(yīng)用服務(wù)器上、與該特定web服務(wù)端點接口相關(guān)的 web服務(wù)產(chǎn)品338在其處進行定義的位置。當(dāng)產(chǎn)品模塊336為基于 數(shù)據(jù)訪問的web服務(wù)創(chuàng)建端點接口時,產(chǎn)品模塊336會通知端點接 口同步模塊314,其將該端點接口和相關(guān)的基于數(shù)據(jù)訪問的web服 務(wù)的標(biāo)識符提供給web服務(wù)引擎104。
通用web服務(wù)運行時模塊120還包括定義模塊334、驗證模塊 332、 WSDL發(fā)布模塊330、產(chǎn)品模塊336和web服務(wù)產(chǎn)品338a-b。 當(dāng)運行時控制器110確定需要對操作于應(yīng)用服務(wù)器102上的基于數(shù) 據(jù)訪問的web服務(wù)進行更新時,將調(diào)用定義模塊334。如果已經(jīng)添 加或編輯了基于數(shù)據(jù)訪問的web服務(wù),那么定義模塊334將從web 服務(wù)管理元數(shù)據(jù)倉庫140取回與基于數(shù)據(jù)訪問的web服務(wù)相關(guān)的 web服務(wù)配置文檔250。如果已經(jīng)移除了基于數(shù)據(jù)訪問的web服務(wù), 那么定義模塊334將銷毀與所移除web服務(wù)相對應(yīng)的web服務(wù)產(chǎn)品 338,并且向端點接口同步模塊314表明該web服務(wù)端點接口不再有 效以及應(yīng)當(dāng)將其從web服務(wù)引擎104中移除。
驗證模塊332接收來自定義模塊334的web服務(wù)配置文檔250。 驗證模塊332還包括web服務(wù)配置方案(schema) 333。 web服務(wù)配 置方案333將布置web服務(wù)配置文檔250的可接受的結(jié)構(gòu),從而指 定通用web服務(wù)運行時模塊120可以處理的web服務(wù)配置文檔250 的結(jié)構(gòu)。在一種實施方式中,web服務(wù)配置方案333是XML方案文 件。
驗證模塊332使用web服務(wù)配置方案333來確定web服務(wù)配置文檔250是否是相容的文件?;诜桨竵眚炞C文檔的方法和工具對 于本領(lǐng)域技術(shù)人員而言是公知的。在一種實施方式中,如果web服 務(wù)配置文檔250不遵守web服務(wù)配置方案333,則驗證模塊332將 向創(chuàng)建并管理基于數(shù)據(jù)訪問的web服務(wù)的數(shù)據(jù)庫用戶200提供消息, 該消息指示特定的web服務(wù)不能創(chuàng)建以及指示遇到了什么問題。
WSDL發(fā)布模塊330使得WSDL對于基于數(shù)據(jù)訪問的web服務(wù) 客戶端而言可用。WSDL發(fā)布模塊330從web服務(wù)管理元數(shù)據(jù)倉庫 140取回與已驗證的web服務(wù)相關(guān)的WSDL 260。在一種實施方式中, WSDL發(fā)布模塊330通過諸如通用發(fā)現(xiàn)與發(fā)布規(guī)范(UDDI)注冊的 服務(wù)代理使得WSDL 260可用。WSDL發(fā)布模塊330使得協(xié)議綁定 和與web服務(wù)交互所需的消息格式(如WSDL 260所描述的那樣) 可祐 使用。
如果web服務(wù)配置文檔250遵守了 web服務(wù)配置方案333,則 產(chǎn)品模塊336將從驗證模塊332接收web服務(wù)配置文檔250。產(chǎn)品 模塊336對web服務(wù)配置文檔250進行解譯,并根據(jù)web服務(wù)配置 文檔250所給出的規(guī)范來創(chuàng)建web服務(wù)產(chǎn)品338。產(chǎn)品模塊336還 創(chuàng)建用于web服務(wù)產(chǎn)品338的合適端點接口,以及向端點接口同步 模塊314提供用于基于數(shù)據(jù)訪問的web服務(wù)的端點接口 。
web服務(wù)產(chǎn)品338,也稱為web服務(wù)運行時產(chǎn)品,包括響應(yīng)于來 自基于數(shù)據(jù)訪問的web服務(wù)的請求來進行數(shù)據(jù)庫操作(由web服務(wù) 配置文檔250規(guī)定)的可執(zhí)行代碼。web服務(wù)產(chǎn)品338還可以包括 在執(zhí)行數(shù)據(jù)庫操作以前或者以后進行的額外操作。web服務(wù)產(chǎn)品338 執(zhí)行必需的數(shù)據(jù)庫操作,以及其他的相關(guān)操作,它們組成了基于數(shù) 據(jù)訪問的web服務(wù)。在一種實施方式中,這些數(shù)據(jù)庫操作是SQL塊 339表示的SQL語句。本領(lǐng)域技術(shù)人員將認(rèn)識到,其他語言或語句 也可以用來執(zhí)行在web服務(wù)配置文檔250中定義的數(shù)據(jù)庫操作。web 服務(wù)產(chǎn)品338從web服務(wù)引擎104中的請求處理器模塊320接收服 務(wù)請求和與該請求相關(guān)的參數(shù)。web服務(wù)產(chǎn)品338為了響應(yīng)該請求 而使用所提供的參數(shù)來執(zhí)行代碼,并將操作的結(jié)果返回給請求處理器模塊320。
例如,如上文示例web服務(wù)配置文檔250所示,web服務(wù)產(chǎn)品 338可以接收操作名稱為"addEmployee(添加員工)"的web服務(wù)請 求。有效請求還包括參數(shù)empno (員工號)、firstname (名)、midinit 和其他上文結(jié)合"addEmployee"操作示出的參數(shù)。然后,web服務(wù) 產(chǎn)品338a執(zhí)行與操作相關(guān)的SQL語句,以使得可將員工添加到數(shù)據(jù) 庫130中的基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150中。盡管此特定 操作沒有將來自于基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150的信息返 回給請求該web服務(wù)的客戶端,不過web服務(wù)產(chǎn)品338可以向請求 處理器模塊320返回成功更新的標(biāo)志或指示符。
如圖3中描述的,通用web服務(wù)運行時模塊120可以包括多個 web服務(wù)產(chǎn)品338a-b。通用web服務(wù)運行時模塊120中web服務(wù)產(chǎn) 品338的數(shù)量與定義在web服務(wù)管理元數(shù)據(jù)倉庫140中的基于數(shù)據(jù) 訪問的web服務(wù)的數(shù)量相對應(yīng)。例如,如果在web服務(wù)管理元數(shù)據(jù) 倉庫140中定義有十個不同的基于數(shù)據(jù)訪問的web服務(wù),則通用web 服務(wù)運行時模塊120中將具有十個不同的web服務(wù)產(chǎn)品338來表示 不同的可用web服務(wù)。然而,本領(lǐng)域:忮術(shù)人員將iU只到,可以配置 web服務(wù)產(chǎn)品338a-b,以使得其他基于數(shù)據(jù)訪問的web服務(wù)能夠使 用它們;例如,除其他操作以外,基于數(shù)據(jù)訪問的web服務(wù)還可以 要求由web服務(wù)產(chǎn)品338a-b來執(zhí)行數(shù)據(jù)庫操作;新的基于數(shù)據(jù)訪問 的web服務(wù)可以利用web服務(wù)產(chǎn)品338a-b來執(zhí)行他們提供的操作, 而不是復(fù)制那些相同的操作。這樣的配置可以用來減少web服務(wù)產(chǎn) 品 之間的冗余。
優(yōu)選實施方式向web月良務(wù)的熱部署中添加額外的元素;通常, 熱部署涉及在不需要組件(諸如,web服務(wù))生效之前對應(yīng)用服務(wù) 器102進行重啟的情況下,向應(yīng)用服務(wù)器102添加組件或?qū)ζ溥M行 編輯的能力。優(yōu)選實施方式通過允許用戶創(chuàng)建、改變和管理基于數(shù) 據(jù)訪問的web服務(wù)而無需重啟通用web服務(wù)運行時模塊120,對熱 部署的概念進行了擴展。用戶200因此可以定義、管理和部署基于數(shù)據(jù)訪問的web服務(wù),而無需在那些服務(wù)可用以前重啟應(yīng)用服務(wù)器 102或者通用web服務(wù)運行時模塊120。這樣,優(yōu)選實施方式允許用 戶200從數(shù)據(jù)庫側(cè)進行基于數(shù)據(jù)訪問的web服務(wù)任務(wù),而無需針對 主控了該基于數(shù)據(jù)訪問的web服務(wù)的應(yīng)用服務(wù)器102做出任何手動 改動。
web服務(wù)引擎104包括由應(yīng)用服務(wù)器102提供的、用于管理和處 理web服務(wù)請求的核心功能。web服務(wù)引擎104接收web服務(wù)請求 并且發(fā)送web服務(wù)響應(yīng)。web服務(wù)引擎104維護關(guān)于可用web服務(wù) 的配置數(shù)據(jù)集合(未示出),以使得web服務(wù)引擎104知曉如何處 理特定web服務(wù)請求。此配置數(shù)據(jù)包括與應(yīng)用服務(wù)器102上可用的 web服務(wù)產(chǎn)品相關(guān)的端點接口定義。運行時控制器110的端點接口 同步模塊314更新與web服務(wù)產(chǎn)品338相關(guān)的端點接口定義,以及 以其他方式確保配置數(shù)據(jù)與通用web服務(wù)運行時模塊120中基于數(shù) 據(jù)訪問的web服務(wù)的當(dāng)前狀態(tài)同步。
如圖1中所描述的,當(dāng)客戶端160向應(yīng)用服務(wù)器102發(fā)送web 服務(wù)請求時,web服務(wù)引擎104接收該請求。web服務(wù)引擎104中的 請求處理器模塊320將解包SOAP web服務(wù)請求,以及從該請求中 提取操作和參數(shù)。如果所請求的服務(wù)不存在,那么請求處理器模塊 320將利用指示服務(wù)未找到的錯誤進行響應(yīng)。否則,請求處理器模塊 確定應(yīng)用服務(wù)器102上的合適web服務(wù),以及向其提供參數(shù)以使得 該web服務(wù)能夠執(zhí)行。
如果所請求的web服務(wù)定義在web服務(wù)管理元數(shù)據(jù)倉庫140中 的基于數(shù)據(jù)訪問的web服務(wù),那么請求處理器模塊320使用其配置 數(shù)據(jù)中的端點接口信息來向與該web服務(wù)有關(guān)的web服務(wù)產(chǎn)品338 轉(zhuǎn)發(fā)參數(shù)。web服務(wù)產(chǎn)品338從請求處理器模塊320接收參數(shù)并且 在基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150上執(zhí)行SQL塊338中的 SQL語句。web服務(wù)產(chǎn)品338還執(zhí)行作為基于數(shù)據(jù)訪問的web服務(wù) 一部分的任何其他指令。web服務(wù)產(chǎn)品338向web服務(wù)引擎320中 的請求處理器模塊320返回操作結(jié)果。然后請求處理器模塊320構(gòu)造用于響應(yīng)的SOAP封套,以及可以進行額外的數(shù)據(jù)操作,諸如提 供用于安全目的的加密。 一旦請求處理器模塊320完成了預(yù)響應(yīng)處 理,那么請求處理器模塊320將向請求客戶端160返回SOAP響應(yīng)。
圖4是示出了包括多個應(yīng)用服務(wù)器402、 420和多個數(shù)據(jù)庫430、 432的web服務(wù)系統(tǒng)400的一種實施方式的示意性框圖。應(yīng)用服務(wù) 402包括web服務(wù)引擎404、運行時控制器406和通用web服務(wù)運行 時模塊408。圖4描述了與數(shù)據(jù)庫430和數(shù)據(jù)庫432電子通信的應(yīng)用 服務(wù)器402,其中的數(shù)據(jù)庫430包括web服務(wù)管理元數(shù)據(jù)倉庫440, 而數(shù)據(jù)庫432則包括了基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫450。
圖4示出了數(shù)據(jù)倉庫440和450可以是物理上分離的儲存庫。 在基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫450位于多個物理單元上時, 額外的配置是可能的。web服務(wù)管理元數(shù)據(jù)倉庫440還可以由基于 數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫450的子集實現(xiàn);對于創(chuàng)建允許通用 web服務(wù)運行時模塊408來"引導(dǎo)"的基于數(shù)據(jù)訪問的web服務(wù)而 言,這樣的配置例如是有用的;也就是說,用戶可以開發(fā)基于數(shù)據(jù) 訪問的web服務(wù)以管理和配置web服務(wù)管理元數(shù)據(jù)倉庫440本身, 其作為基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫450的一部分。在這樣一 種實施方式中,web服務(wù)元數(shù)據(jù)工具210本身可以是通用web服務(wù) 運行時模塊408所提供的web服務(wù)。
應(yīng)用服務(wù)器402和420與位于數(shù)據(jù)庫430和432上的數(shù)據(jù)倉庫 440和450之間的通信對于web服務(wù)系統(tǒng)400的適當(dāng)操作而言是至 關(guān)重要的。應(yīng)用服務(wù)器420包括web服務(wù)引擎422、運行時控制器 424a-b和通用web服務(wù)運行時模塊426a-b。每個通用web服務(wù)運行 時模塊426a-b具有一個相關(guān)的運行時控制器424a-b。對每個運行時 控制器424a-b和每個通用web服務(wù)運行時模塊426a-b進行配置來與 web服務(wù)管理元數(shù)據(jù)倉庫440和基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫 450進行通信。此外,每個運行時控制器424a-b在web服務(wù)引擎422 中幫助維護精確配置數(shù)據(jù)。運行時控制器424a-b管理與相關(guān)于其各 自通用web服務(wù)運行時模塊426a-b的基于數(shù)據(jù)訪問的web服務(wù)有關(guān)的配置數(shù)據(jù)。
其結(jié)果是,個人可以根據(jù)本發(fā)明的某些實施方式簡單地從數(shù)據(jù)
庫維護基于數(shù)據(jù)訪問的web服務(wù),甚至在應(yīng)用服務(wù)器和數(shù)據(jù)庫間存 在N對N的關(guān)系時也是如此。例如,如圖2中所描述的,數(shù)據(jù)庫管 理員可以在web服務(wù)管理元數(shù)據(jù)倉庫440中創(chuàng)建新的基于數(shù)據(jù)訪問 的web服務(wù)定義。如結(jié)合圖3所描述的,當(dāng)運行時控制器406、 424a 和424b檢測到新的web服務(wù)定義時,每個運行時控制器會指示各自 的通用web服務(wù)運行時模塊408、 426a和426b來創(chuàng)建基于數(shù)據(jù)訪問 的web服務(wù)。如圖3中所討論的,運行時控制器406、 424a和424b 還向web服務(wù)引擎422和404提供使能這些web服務(wù)的激活的信息。
用這種方式管理和創(chuàng)建基于數(shù)據(jù)訪問的web服務(wù)提供了很多 有益效果;可以通過提供該服務(wù)的多個實施方式來簡單地部署具有 高可用性的web服務(wù)。用戶可以通過數(shù)據(jù)庫側(cè)的單個操作來部署特 定基于數(shù)據(jù)訪問的web服務(wù)的多個復(fù)制。此外,本發(fā)明簡化了對分 布在多個應(yīng)用服務(wù)器上的基于數(shù)據(jù)訪問的web服務(wù)的維護;如上所 述,可以通過數(shù)據(jù)庫中的單個操作在各種應(yīng)用服務(wù)器上做出改變。 另外,本領(lǐng)域技術(shù)人員將認(rèn)識到,即使在應(yīng)用服務(wù)器不是相同類型 的情況下,這也是事實;因此,單個操作可以跨越WebLogic服務(wù)器、 WebSphere服務(wù)器和Oracle OC4J服務(wù)器來同時更新或部署基于數(shù)據(jù) 訪問的web服務(wù),而不要求用戶解決應(yīng)用服務(wù)器平臺中的差異。這 些不同在將本發(fā)明實施方式部署到不同平臺上時已得到處理; 一旦 運行時控制器406、 424a和424b和通用web服務(wù)運行時沖莫塊408、 426a和426b已經(jīng)就位,它們將使用web服務(wù)元數(shù)據(jù)來在它們的特定 應(yīng)用服務(wù)器402和420平臺上創(chuàng)建基于數(shù)據(jù)訪問的web服務(wù)。
遵從的示意性流程圖通常作為邏輯流程圖給出。這樣,所描述 的順序和標(biāo)記的步驟是所給出方法的 一個實施方式的指示。可以想 到其他的步驟和方法,其在所示出方法的功能、邏輯、 一個或多個 步驟的效果或者部分步驟的效果這方面是等價的。此外,提供所使 用的格式和符號是為了解譯方法的邏輯步驟,其不能理解為對方法范圍的限制。雖然流程圖中使用了各種箭頭類型和線類型,但不能 將它們理解為對對應(yīng)方法范圍的限制。事實上, 一些箭頭或其他連 接符可以用來僅指示方法的邏輯流程。例如,箭頭可以指示在所描 述方法的所列舉步驟之間等待或者監(jiān)視一段未指定長度的時間。此 外,具體方法發(fā)生的順序可以嚴(yán)格遵守所示出的對應(yīng)步驟的順序, 也可以不遵守。
圖5是示出了根據(jù)本發(fā)明的、用于部署通用web服務(wù)運行時模 塊的方法的一種實施方式的示意性流程圖。通用web服務(wù)運行時模 塊120的部署以及結(jié)合圖5描述的相關(guān)動作組成了在實施根據(jù)本發(fā) 明的對基于數(shù)據(jù)訪問的web服務(wù)進行管理以前所必需的一次性動 作。用戶200在數(shù)據(jù)庫130上設(shè)立502 web服務(wù)管理元數(shù)據(jù)倉庫140。 用戶200例如可以發(fā)出CREATE TABLE語句來設(shè)立web服務(wù)管理 元數(shù)據(jù)倉庫140,以及適當(dāng)?shù)囟x域和結(jié)構(gòu)。在一種實施方式中, CREATE TABLE (創(chuàng)建表)語句可以如下
CREATE TABLE services (name VARCHAR (50) NOT NULL, config XML NOT NULL, wsdl XML, lastModified TIMESTAMP, PRIMARY KEY (name))
CREATE TABLE servicesXSLTScripts (serviceName VARCHAR (50) NOT NULL, xsl XML NOT NULL, fileName VARCHAR (255) NOT NULL, CONSTRAINT FK SERVICES FOREIGN KEY (serviceName) REFERENCES services (name) ON DELETE CASCADE);
本領(lǐng)域技術(shù)人員將認(rèn)識到,所發(fā)出的精確語句可以變化,而且
其將依賴于該用戶希望保持在web服務(wù)管理元數(shù)據(jù)倉庫140中的信 自
可以訪問應(yīng)用服務(wù)器102并且在其上有適當(dāng)權(quán)限的用戶將配 置504針對數(shù)據(jù)130的連接信息,以使得應(yīng)用服務(wù)器102可以訪問 數(shù)據(jù)庫130上的信息,從而允許運行時控制器110和通用web服務(wù) 運行時才莫塊120訪問web服務(wù)管理元數(shù)據(jù)倉庫140和基于數(shù)據(jù)訪問的web服務(wù)數(shù)據(jù)倉庫150。如上文結(jié)合圖4所解譯的,在web服務(wù) 系統(tǒng)的某些實施方式中,用戶必須為多個數(shù)據(jù)庫配置連接信息。用 戶還在應(yīng)用服務(wù)器102上部署506通用web服務(wù)運行時模塊120和 運行時控制器110。如上所述,部署這些模塊還可以包括確保這些模 塊可以適當(dāng)?shù)卦L問來自web服務(wù)引擎104的呼叫,以及可以被來自 web服務(wù)引擎104的呼叫訪問,以實現(xiàn)本發(fā)明所需的協(xié)調(diào)。
應(yīng)用服務(wù)器用戶還設(shè)立508通用web服務(wù)運行時模塊120必需 的連接和安全設(shè)定。例如,應(yīng)用服務(wù)器用戶可以進行額外的微調(diào), 諸如,創(chuàng)建和設(shè)定用戶ID和密碼。 一旦適當(dāng)?shù)夭渴鸷团渲昧送ㄓ?web服務(wù)運行時才莫塊120,用戶200便可以根據(jù)本發(fā)明開始通過數(shù)據(jù) 庫130管理基于數(shù)據(jù)訪問的web服務(wù)。
圖6是示出了根據(jù)本發(fā)明的、用于創(chuàng)建web服務(wù)的方法的一種 實施方式的示意性流程圖。運行時控制器110使用同步模塊312來 檢查602 web服務(wù)管理元數(shù)據(jù)倉庫140中的web服務(wù)管理元數(shù)據(jù)改 變。同步模塊312確定604元數(shù)據(jù)中是否發(fā)生改變;如果沒有改變, 則同步模塊312將等待直到下一個輪詢時間間隔為止,然后重復(fù)其 確定604直到同步模塊312檢測到web服務(wù)管理元數(shù)據(jù)倉庫140中 發(fā)生改變?yōu)橹?。如果發(fā)生了改變,則同步模塊312還確定606該改 變是否是增加或修改基于數(shù)據(jù)訪問的web服務(wù),或者是移除。本領(lǐng) 域技術(shù)人員將認(rèn)識到,可能存在比列出的改變更多的改變;例如, 改變可以僅僅是web服務(wù)狀態(tài)270的改變,在這種情況下,所影響 的web服務(wù)將基于該命令被去激活或者激活。雖然沒有在示例中描 述額外的動作,但是本發(fā)明權(quán)利要求范圍不能限制于添加、修改或 移除web服務(wù)。
如果web服務(wù)管理元數(shù)據(jù)倉庫140中的改變指示應(yīng)該修改已有 web服務(wù)或者應(yīng)該創(chuàng)建新的web服務(wù),則定義模塊334將取回608 web服務(wù)配置文檔250。然后,驗證模塊332針對web服務(wù)配置方案 333驗證610 web服務(wù)配置文檔250。產(chǎn)品模塊336根據(jù)經(jīng)過驗證的 web服務(wù)配置文檔250來創(chuàng)建612 web服務(wù)產(chǎn)品338。產(chǎn)品模塊336還為web服務(wù)創(chuàng)建614 web服務(wù)端點接口,以及端點接口同步才莫塊 314向web服務(wù)引擎104注冊包括端點接口的更新過的配置信息。 然后,新創(chuàng)建的或被修改的基于數(shù)據(jù)訪問的web服務(wù)已準(zhǔn)備好對web
服務(wù)請求進行處理。
如果同步模塊312確定606操作為刪除操作,那么產(chǎn)品模塊 336將去激活616受影響的web服務(wù)產(chǎn)品338,以及還指示端點接口 同步模塊314來根據(jù)web服務(wù)引擎104中的配置信息去激活618 web 服務(wù)端點接口 。在一種實施方式中,去激活web服務(wù)產(chǎn)品338和web 服務(wù)端點接口僅僅等同于刪除產(chǎn)品和接口 。產(chǎn)品模塊336利用應(yīng)用 服務(wù)器102的web服務(wù)的動態(tài)部署來中止和/或移除web服務(wù)產(chǎn)品 338。有利的是,用戶不需要與應(yīng)用服務(wù)器102交互。
圖7是示出了用于處理web服務(wù)請求的方法的一種實施方式的 示意性流程圖??蛻舳?60向應(yīng)用服務(wù)器102發(fā)送web服務(wù)請求。 請求處理器模塊320接收702請求。請求處理器模塊320將請求解 析704為操作和相關(guān)參數(shù)。請求處理器模塊320確定706與web服 務(wù)請求相關(guān)的web服務(wù)產(chǎn)品338。
請求處理器模塊320向相關(guān)web服務(wù)產(chǎn)品338傳遞控制和任何 參數(shù),其中該web服務(wù)產(chǎn)品338以web服務(wù)的形式執(zhí)行708基于數(shù) 據(jù)訪問的web服務(wù)。在一種實施方式中,執(zhí)行數(shù)據(jù)操作可以包括執(zhí) 行SQL塊339中的語句。當(dāng)數(shù)據(jù)操作已經(jīng)成功執(zhí)行時,web服務(wù)產(chǎn) 品338向請求處理器模塊320傳遞任何結(jié)果。請求處理器模塊320 將返回710結(jié)果以作為web服務(wù)響應(yīng)。返回請求以作為web服務(wù)響 應(yīng)還可以包括將響應(yīng)編制在適當(dāng)?shù)腟OAP封套(或其他+〉耦合的網(wǎng) 絡(luò)格式)中,以及進行任何額外的必需數(shù)據(jù)處理,諸如加密。
本發(fā)明可以以其他特定形式實施,而不離開本發(fā)明的主旨或?qū)?質(zhì)特點。應(yīng)認(rèn)為所描述的實施方式在所有方面都僅是示意性的,而 不是限制性的。因此,本發(fā)明的范圍將由所附的權(quán)利要求指示,而 不是由上文描述指示。所有處于權(quán)利要求等價物的含義和范圍中的 改變都將包括在權(quán)利要求的范圍內(nèi)。附錄A
< xml version=" 1.0" encoding="UTF-8" >
<wsdl:definitions xmlns:wsdl="http:〃schemas.xmlsoap.org/wsdl/"
xmlns: dsc="http :〃ibm. com/datatoo ls/dsws/config"
xmlns:http="http:〃schemas.xmlsoap.org/wsdl/http/"
xmlns :mime="http :〃schemas .xmlsoap .org/wsdl/mime/"
xmlns: soap=" http :〃schemas.xmlsoap. org/wsdl/soap/"
xmlns:tns="urn:example" xmlns:xsd="http:〃www.w3 .org/2001/XMLSchema'
targetNamespace="um:example"〉
<wsdl:types>
<schema xmlns="http:〃www.w3.org/2001/XMLSchema"targetNamespace="urn:example"> 〈element name="addEmployee">
<complexType>
<sequence> <dement name="empno" nillable-"true" <element name="firstname" nillable="true" <element name="midinit" nillable="true" 〈element name="lastname" nillable="true" 〈element name="workdept" nillable="true" <element name="phoneno" nillable="true" <element name="hiredate" nillable="true" 〈element name="job" nillable="true" 〈element name一'edlevel" nillable="true" 〈element name="sex" nillable="true" <element name="birthdate" niUable="true" <element name="salary" nillable-"true" <element name-"bonus" nillable="true" 〈element name="comm" nillable-"true" </sequence>
</complexType> </element>
<element name="addEmployeeResponse"> <complexType>
<sequence>
〈element name="updateCount" type="xsd:int" /> </sequence〉 </complexType〉 </element>
<element name="removeEmployee"> <complexType> <sequence>
〈element name="empno" nillable="true" type="xsd:string" /〉
36
type="xsd:string" /> type="xsd:string" /〉 type="xsd:string" /〉 type="xsd:string" /> type="xsd:string" /〉 type="xsd:string" /> type="xsd:date" /> type="xsd:string" /> type-"xsd:short" /> type="xsd:string" /> type="xsd:date" /> type="xsd:decimal" /> type="xsd:decimal" /> type="xsd:decimal" /〉〈/sequence〉 </complexType> </element>
〈element name="removeEmployeeResponse"> <complexType> <sequence>
〈element name="updateCount" type="xsd:int" /> </sequence> </complexType> </element〉
<element name="getEmployee">
<complexType /〉 </element〉
<element name="getEmployeeResponse">
<complexType> <sequence>
<element maxOccurs="unbounded" minOccurs="0" name="row"> <complexType> <sequence>
<element name="EMPNO" <element name="FIRSTNME" <element name="MIDINIT"
type="xsd:string'V> <element name="LASTNAME" <eletnent name="WORKDEPT"
type="xsd:string" /> <element name="PHONENO"
type="xsd:string" />
type="xsd: string" /〉 type="xsd:string" /〉 nillable="true"
type="xsd: string" /> nillable="true"
mllable-"true"
nillable="true"
<element name="HIREDATE"
type="xsd:date" /> <element name="JOB" nillable="true" type="xsd:string" /><element name="EDLEVEL" type="xsd:short" /> <element name="SEX" nillable="true"type="xsd:string" /> <element name="BIRTHDATE" nillable="true"
type="xsd:date" /〉 〈element name="SALARY" nillable="true"
type="xsd:decimal" /〉 <element name="BONUS" nillable="true"
type="xsd:decimar /> <element name="COMM" nillable="true" type="xsd: decimal" /〉 </sequence〉 </complexType〉 </element> </sequence> </complexType> 〈/dsment〉
〈element name="updateEmployee">
<complexType〉
<sequence〉
<dementname-"empno" nillable-,,true" type=,,xsd:string" /〉<element"firstname" nillable="true,,type=:"xsd:string" />
<element"midinit" nillable="true"type::"xsd:string" />
<element"lastname" nillable-,,true"type二"xscl'-string'1 /〉
<element'Vorkdept" nillable="true"type=:"xsd:string" />
<elementname-"phoneno" nillable="true"type=:"xsd:string" />
<elementname:"hiredate" nillable="true"type=:"xsd:date" /〉
elementnams="job" niUable="true"type=:"xsd:string" /〉
<element"edlevel" nillable="true"type::"xsd:short" />
<element"sex" nillable="true"type=:"xsd:string" />
<elementname="birthdate" nillable="true"type=:"xsd:date" />
<demsntname:"salary" nillable="true"type=:"xsd:decimar /〉
<elementtiams="bonus" nillable="true"type:"xsd:decimal" /〉<element name="comm" nillable="true" type="xsd:decimal" />
</sequence> </complexType〉 </element〉
<element name-"updateEmployeeResponse"〉 <complexType〉 <S6qusncs>
<element name="updateCount" type="xsd:int" /> </s6qucnc6〉 </complexType> </element> </schema> </wsdl:types>
<wsdl :message name="addEmployeeSoapInput"〉
<wsdl:part element="tns:addEmployee" name="request" /> </wsdl:message>
<wsdl:message name="addEmployeeSoapOutput">
〈wsdl:part element="tns:addEmployeeResponse" name="response" /> </wsdl:message>
<wsdl:message name="addEmployeeGetPostUrlInput"〉 〈wsdl:part name="empno" type="xsd:string" /> 〈wsdl:part name="firstname" type="xsd:string" /〉 〈wsdl:part name="midinit" type="xsd:string" /> <wsdl:part name="lastname" type="xsd:string" /〉 〈wsdl:part name="workdept" type="xsd:string" /> <wsdl:part name="phoneno" type="xsd:string" /> <wsdl:partname="hiredate" type="xsd:date" /> <wsdl:part name="job" type="xsd:string" /> 〈wsdl:part name="edlever type="xsd:short" /〉 <wsdl:part name="sex" type="xsd:string" /〉 <wsdl:part name="birthdate" type="xsd:date" /〉 〈wsdl:part name="salary" type="xsd:decimal" />〈wsdl:part name="bonus" type="xsd:dedmal" /> <wsdl:part name="comm" type="xsd:decimal" /> </wsdl:message>
<wsdl :message name="addEmployeeGetPostOutput">
<wsdl:part element="tns:addEmployeeResponse" name="response" /> </wsdl:message>
<wsdl:message name="removeEmployeeSoapInput"〉
〈wsdl:part element="tns:removeEmployee" name="request" /〉 </wsdl:message>
〈wsdl:message name="removeEmployeeSoapOutput"〉
<wsdl:part element="tns:removeEmployeeResponse" name="response" /> </wsdl :message〉
<wsdl:message name="renioveEmployeeGetPostUrlInput">
<wsdl:part name="empno" type="xsd:string" /> </wsdl :message〉
<wsdl :message name="removeEmployeeGetPostOutput">
<wsdl:part element="tns:removeEmployeeResponse" name="response" /〉 </wsdl:message〉
<wsdl:message name="getEmployeeSoapInput">
<wsdl:part element-"tns:getEmployee" name="request" /> </wsdl:message〉
<wsdl:message name="getEmployeeSoapOutput">
<wsdl:part element-"tns:getEmployeeResponse" name="response" /> </wsdl:message>
<wsdl:message name="getEmployeeGetPostUrlInput" /> <wsdl:message name="getEmployeeGetPostOutput">
<wsdl:part element="tns:getEmployeeResponse" name="response" /〉 </wsdl:message>
<wsdl:message name="updateEmployeeSoapInput">
<wsdl:part element="tns:updateEmployee" name="request" /> </wsdl :message>
<wsdl :message name="updateEmployeeSoapOutput">〈wsdl:part element="tns:updateEmployeeResponse" name="response" /></wsdl:message>
〈wsdl:message name="updateEmployeeGetPostUrlInput">
<wsdl:part name="empno" type="xsd:string" /〉
〈wsdl:part name="firstname" type="xsd:string" />
〈wsdl:part name="midinit" type="xsd:string" />
<wsdl:part name="lastname" type="xsd:string" />
<wsdl:part name='Vorkdept" type-"xsd:string" />
〈wsdl:part name="phoneno" type="xsd:string" /〉
<wsdl:part name="hiredate" type="xsd:date" />
<wsdl:part name="job" type="xsd:string" /〉
<wsdl:part name="edlever type="xsd:short" /〉
<wsdl:part name="sex" type="xsd:string" />
<wsdl:part natne="birthdate" type="xsd:date" />
<wsdl:part name="salary" type="xsd:decimar />
<wsdl:part name="bonus" type="xsd:decimal" />
<wsdl:part name="comm" type="xsd:decimal" /〉</wsdl:message〉
<wsdl:message name="updateEmployeeGetPostOutput">
<wsdl:part element="tns:updateEmployeeResponse" name="response" /></wsdl:message>
<wsdl :portType name="EmployeeManagementService">
<wsdl: operation name="addEmployee">
<wsdl:input message="tns:addEmployeeSoapInput" />〈wsdl:output message="tns:addEmployeeSoapOutput" />
</wsdl:operation>
<wsdl:operation name-"removeEmployee"〉
<wsdl:input message="tns:removeEmployeeSoapInput" /><wsdl:output message="tns:removeEmployeeSoapOutput" />
</wsdl:operation〉
<wsdl: operation name="getEmployee">
<wsdl:input message="tos:getEmployeeSoapInput" /><wsdl:output message="tns:getEmployeeSoapOutput" /〉</wsdl :operation〉
<wsdl .'operation name="updateEmployee">
<wsdl:input message="tns:updateEmployeeSoapInput" /><wsdl:output message-"tns:updateEmployeeSoapOutput" />
</wsdl: operation></wsdl :portType>
<wsdl:portType name="EmployeeManagementServiceGetPostUrr>
<wsd.'operation name="addEmployee">
<wsdl:input message="tns:addEmployeeGetPostUrlInput" /><wsdl:output message="tns:addEmployeeGetPostOutput" /〉
</wsdl :operation>
<wsdl :operation name="removeEmployee"〉
<wsdl:input message="tns:removeEmployeeGetPostUrlInput" /〉<wsdl:output message="tns:removeEmployeeGetPostOutput" />
</wsdl: operation〉
<wsdl:operation name="getEraployee"〉
<wsdl:input message="tns:getEmployeeGetPostUrlInput" /><wsdl:output message="tns:getEmployeeGetPostOutput" />
</wsdl: operation〉
<wsdl'.operation name="updateEmployee">
<wsdl:input message="tns:updateEmpk>yeeGetPostUrlIiiput" /><wsdl:output message="tns:updateEmployeeGetPostOutput" /></wsdl: operation></wsdl:portType〉
<wsdl:binding name-"EmployeeManagementServiceSOAP"type="tns:EmployeeManagementService"><soap:binding style="document"
transport: "http :〃schemas. xmlsoap. org/soap/http " /><wsdl: operation name="addEmployee">
<soap:operation soapAction="ura:example/addEmployee" />
<wsdl:input><soap:body use="literal" />〈/wsdl:i叩ut〉<wsdl:output>
<soap:body use="literal" /></wsdl:output></wsdl :operation〉
<wsdl:operation name="removeEmployee">
<soap:operation soapAction="urn:example/removeEmployee" /〉<wsdl:input〉
<soap:body use-"literal" /〉</wsdl:input><wsdl:output>
<soap:body use-"literal" /></wsdl:output></wsdl:operation>
<wsdl:operation name="getEmployee">
<soap:operation soapAction="um:example/getEmployee" /><wsdl:input>
〈soap:body use="literal" /></wsdl:input〉<wsdl:output>
<soap:body use-"literal" /〉</wsdl:output></wsdl:operation>
〈wsdl:operation name="updateEmployee">
<soap:operation soapAction="urn:example/updateEmployee" /><wsdl:input>
<soap:body use="literal" /〉</wsdl:input><wsdl:output>
<soap:body use="literal" /〉</wsdl:output></wsdl:operation>〈/wsdl:binding〉
<wsdl :binding name-"EmployeeManagementServiceGetBinding'type="tns:EmployeeManagementServiceGetPostUrl"><http:binding verb="GET" /〉<wsdl:operation name="addEmployee"〉
<http:operation location="addEmployee" /><wsdl:input>
<http:urlEncoded /></wsdl:input〉
<wsdl:output〉
<mime:mimeXml part="response" /></wsdl:output〉</wsdl :operation〉
<wsdl :operation name="removeEmployee">
<http:operation location="removeEmployee" /〉<wsdl:input>
<http:urlEncoded /></wsdl:input〉<wsdl:output>
<mime:mimeXml part="response" /〉</wsdl:output></wsdl :operation〉
<wsdl :operation name=" getEmployee">
<http:operation iocation="getEmployee" /><wsdl:input>
<http:urlEncoded /></wsdl:input><wsdl:output〉
<mime:mimeXml part="response" /></wsdl:output></wsdl :operation〉<wsdl: operation name="updateEmployee">
<http:operation location="updateEmployee" /> <wsdl:input>
<http:urlEncoded /〉 </wsdl:input> <wsdl:output〉
<mime:mimeXml part="response" /> </wsdl:output> </wsdl:operation> </wsdl:bindi:ag>
<wsdl :binding name="EmployeeManagementServicePostBinding" type="tns:EmployeeManagementServiceGetPostUrr> <http:binding verb-"POST" /> <wsdl:operation name="addEmployee">
<http:operation location="addEmployee" /> <wsdl:input>
<mime: content part="empno"
type="application/x-www-form-encoded" /> <mime:content part="firstname"
type="application/x-www-form-encoded" /> <mime:content part="midinit"
type="application/x-www-form-encoded" /> <mime:content part="lastname"
type="application/x-www-form-encoded" /〉 <mime:content part="workdept"
type="application/x-www-form-encoded" /> <mime:content part="phoneno"
type="application/x-www-form-encoded" /> <mime:content part="hiredate"
type="application/x-www-form-encoded" /> <mime:content part="job"
type="application/x-www-form-encoded" />
45<mime:content part="edlevel"
type="application/x-www-form-encoded" /> <mime: content part="sex"
type="application/x-www-form-encoded" /> <mime: content part="birthdate"
type="application/x-www-form-encoded" /> <mime:content part="salary"
type="application/x-www-form-encoded" /> 〈mime:content part="bonus"
type=" application/x陽www-form-encoded" /> <mime:content part="comm"
type="application/x-www-form-encoded" /〉
</wsdl:input> <wsdl:output>
<mime:mimeXml part="response" /> </wsdl:output> </wsdl:operation〉
<wsdl:operation name="removeEmployee"〉
<http:operation location="removeEmployee" /> <wsdl:input>
<mime: content part="empno"
type="application/x-www-form-encoded" />
</wsdl:input> <wsdl:output>
<mime:mimeXml part="response" /> </wsdl:output> </wsdl: operation〉
<wsdl:operation name="getEmployee">
<http:operation location="getEmployee" />
<wsdl:input />
<wsdl:output>
<mime:mimeXml part="response" /></wsdl:output> </wsdl:operation>
<wsdl:operation name="updateEmployee">
<http:operation location-"updateEmployee" /〉 <wsdl:input>
<mime:content part-"empno"
type="application/x-www-form-encoded" /> <mime: content part="firstname"
type="application/x-www-form-encoded" /> <mime:content part="midinit"
type="application/x-www-form-encoded" /〉 <mime:content part="lastname"
type="application/x-www-form-encoded" /> <mime:content part="workdept"
type="application/x-www-form-encoded" /> <mime:content part="phoneno"
type="application/x-www-form-encoded" /> <mime:content part="hiredate"
type="application/x-www-form-encoded" /> <mime:content part="job"
type=" application/x-www- form-encoded" /〉 <mime:content part:"edlevel"
type="application/x-www-form-encoded" /〉 <mime:content part-"sex"
type="application/x-www-form-encoded" /> <mime: content part="birthdate"
type="application/x-www-form-encoded" /> <mim6:cont6nt part="sdary"
type="application/x-www-form-encoded" /> <mime: content part="bonus"
type="application/x-www-form-encoded" /> <mime:content part="comm"type="application/x-www-form-encoded" />
</wsdl:input> <wsdl:output>
<mime:mimeXml part=="response" /> </wsdl:output> </wsdl:operation〉 </wsdl:binding>
<wsdl:service natne="EmployeeManagementService">
<wsdl:port binding="tns:EmployeeManagementServiceSOAP" name="EmployeeManagementServiceSOAP"> 〈soap: address
location="http:〃$server$:$port$/$contextRoot$/services/EmployeeManagementServic e"/>
</wsdl:port〉
<wsdl:port binding-"tns:EmployeeManagementServiceGetBinding" name="EmployeeManagementServiceGetBindingPort"> <http:addresslocation="http:〃$server$:$port$/$contextRoot$/rest/EmployeeManagem entService/" /> </wsdl:port>
<wsdl:port binding="tns:EmployeeManagementServicePostBinding" name="EmployeeManagementServicePostBindingPort">
<http:addresslocation="http:〃$server$:$port$/$contextRoot$/rest/EmployeeManagem entService/" /> </wsdl:port> </wsdl:service> </wsdl: definitions^*
權(quán)利要求
1.一種用于操作由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時的方法,包括訪問web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)元數(shù)據(jù);確定所述web服務(wù)管理元數(shù)據(jù)倉庫中的所述web服務(wù)元數(shù)據(jù)發(fā)生改變;以及響應(yīng)于所述web服務(wù)管理元數(shù)據(jù)倉庫中的所述web服務(wù)元數(shù)據(jù)發(fā)生改變,來管理基于數(shù)據(jù)訪問的web服務(wù),其中所述基于數(shù)據(jù)訪問的web服務(wù)可配置用于與部署在應(yīng)用服務(wù)器上的通用web服務(wù)運行時模塊協(xié)作來執(zhí)行,所述應(yīng)用服務(wù)器可配置用于支持web服務(wù)的動態(tài)部署。
2. 如權(quán)利要求l所述的方法,其中所述web服務(wù)元數(shù)據(jù)的改變 包括向web服務(wù)管理元數(shù)據(jù)倉庫添加的web服務(wù)元數(shù)據(jù),所述管 理步驟還包括從所述web服務(wù)管理元數(shù)據(jù)倉庫中取回web服務(wù)配置文檔; 根據(jù)所述web服務(wù)配置文檔創(chuàng)建web服務(wù)產(chǎn)品,所述web服務(wù)配置文檔滿足web服務(wù)配置方案;以及啟動web服務(wù)產(chǎn)品,以使得與所述通用web服務(wù)運行時模塊相關(guān)的請求處理器接受與所述web服務(wù)產(chǎn)品相關(guān)的請求。
3. 如權(quán)利要求2所述的方法,還包括創(chuàng)建與所述web服務(wù)產(chǎn) 品相關(guān)的web服務(wù)端點接口 ,以及向web服務(wù)引擎提供所述web服 務(wù)端點接口 。
4. 如權(quán)利要求2所述的方法,其中啟動web服務(wù)產(chǎn)品還包括 web服務(wù)產(chǎn)品執(zhí)行web服務(wù)請求,而無需重啟通用web服務(wù)運行時 模塊。
5. 如權(quán)利要求l所述的方法,其中所述web服務(wù)元數(shù)據(jù)的改變 包括從所述web服務(wù)管理元數(shù)據(jù)倉庫移除的web服務(wù)元數(shù)據(jù),以及 其中管理基于數(shù)據(jù)訪問的web服務(wù)包括以下中的至少一個移除以及去激活與由所移除的web服務(wù)元數(shù)據(jù)標(biāo)識的所述基于數(shù)據(jù)訪問的 web服務(wù)相關(guān)的web服務(wù)運行時產(chǎn)品。
6. 如權(quán)利要求5所述的方法,還包括以下中的至少一個移除 以及去激活web服務(wù)引擎中的web服務(wù)端點接口 ,其中所述web服 務(wù)端點接口與所述web服務(wù)運行時產(chǎn)品相關(guān)。
7. 如權(quán)利要求l所述的方法,其中所述web服務(wù)元數(shù)據(jù)的改變 是通過對與定義在所述web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)相關(guān) 的時間戳進行評價而確定的。
8. 如權(quán)利要求7所述的方法,其中所述時間戳是針對輪詢時間 間隔進行評價的。
9. 如權(quán)利要求l所述的方法,還包括用戶定義所述web服務(wù)管 理元數(shù)據(jù)倉庫中的所述web服務(wù)元數(shù)據(jù)。
10. 如權(quán)利要求1所述的方法,其中所述web服務(wù)元數(shù)據(jù)還包括 web服務(wù)名稱、web服務(wù)配置文檔、web服務(wù)描述語言文件、web服 務(wù)狀態(tài)和時間戳。
11. 如權(quán)利要求1所述的方法,還包括發(fā)布與所述基于數(shù)據(jù)訪問 的web服務(wù)相關(guān)的web服務(wù)描述語言(WSDL )文檔。
12. 如權(quán)利要求1所述的方法,還包括將所述改變通知給所述通 用web服務(wù)運行時模塊。
13. 如權(quán)利要求1所述的方法,還包括由一個或者多個冗余 web服務(wù)產(chǎn)品定義基于數(shù)據(jù)訪問的web服務(wù),其中所述一個或者多 個冗余web服務(wù)產(chǎn)品能夠從存儲在公共web服務(wù)管理元數(shù)據(jù)倉庫中 的web服務(wù)元數(shù)據(jù)導(dǎo)出。
14. 一種用于操作由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時的設(shè)備, 包括用于訪問web服務(wù)管理元數(shù)據(jù)倉庫中的web服務(wù)元數(shù)據(jù)的裝置; 用于確定所述web服務(wù)管理元數(shù)據(jù)倉庫中的所述web服務(wù)元數(shù) 據(jù)發(fā)生改變的裝置;以及用于響應(yīng)于所述web服務(wù)管理元數(shù)據(jù)倉庫中的所述web服務(wù)元數(shù)據(jù)發(fā)生改變,來管理基于數(shù)據(jù)訪問的web服務(wù)的裝置,其中所述 基于數(shù)據(jù)訪問的web服務(wù)可配置用于與部署在應(yīng)用服務(wù)器上的通用 web服務(wù)運行時模塊協(xié)作來執(zhí)行,所述應(yīng)用服務(wù)器可配置用于支持 web服務(wù)的動態(tài)部署。
15. 如權(quán)利要求14所述的設(shè)備,其中所述web服務(wù)元數(shù)據(jù)的改 變包括向web服務(wù)管理元數(shù)據(jù)倉庫添加的web服務(wù)元數(shù)據(jù),所述管 理裝置還包括用于從所述web服務(wù)管理元數(shù)據(jù)倉庫取回web服務(wù)配置文檔的 裝置;用于根據(jù)所述web服務(wù)配置文檔創(chuàng)建web服務(wù)產(chǎn)品的裝置,所 述web服務(wù)配置文檔滿足web服務(wù)配置方案;以及用于啟動web服務(wù)產(chǎn)品以使得與所述通用web服務(wù)運行時模塊 相關(guān)的請求處理器接受與所述web服務(wù)產(chǎn)品相關(guān)的請求的裝置。
16. 如權(quán)利要求15所述的設(shè)備,還包括用于創(chuàng)建與所述web 服務(wù)產(chǎn)品相關(guān)的web服務(wù)端點接口的裝置,以及用于向web服務(wù)引 擎提供所述web服務(wù)端點接口的裝置。
17. 如權(quán)利要求15所述的設(shè)備,其中用于啟動web服務(wù)產(chǎn)品的 裝置還包括用于執(zhí)行web服務(wù)請求而無需重啟通用web服務(wù)運行 時模塊的裝置。
18. 如權(quán)利要求14所述的設(shè)備,其中所述web服務(wù)元數(shù)據(jù)的改 變包括從所述web服務(wù)管理元數(shù)據(jù)倉庫移除的web服務(wù)元數(shù)據(jù),以 及其中用于管理基于數(shù)據(jù)訪問的web服務(wù)的裝置包括以下中的至少 一個用于移除與由所移除的web服務(wù)元數(shù)據(jù)標(biāo)識的所述基于數(shù)據(jù) 訪問的web月良務(wù)相關(guān)的web月良務(wù)運4亍時產(chǎn)品的裝置,以及用于去激 活與由所移除的web服務(wù)元數(shù)據(jù)標(biāo)識的所述基于數(shù)據(jù)訪問的web服 務(wù)相關(guān)的web服務(wù)運行時產(chǎn)品的裝置。
19. 如權(quán)利要求18所述的設(shè)備,還包括以下中的至少一個用 于移除web服務(wù)引擎中的web服務(wù)端點接口的裝置,以及用于去激 活web服務(wù)引擎中的web服務(wù)端點接口的裝置,其中所述web服務(wù)端點接口與所述web服務(wù)運4于時產(chǎn)品相關(guān)。
20. 如權(quán)利要求14所述的設(shè)備,其中所述用于確定web服務(wù)元 數(shù)據(jù)的改變的裝置包括用于對與定義在所述web服務(wù)管理元數(shù)據(jù)倉 庫中的web服務(wù)相關(guān)的時間戳進行評價的裝置。
21. 如權(quán)利要求20所述的設(shè)備,其中所述時間戳是針對輪詢時 間間隔進行評價的。
22. 如權(quán)利要求14所述的設(shè)備,其中所述web月l務(wù)元數(shù)據(jù)還包 括web服務(wù)名稱、web服務(wù)配置文檔、web服務(wù)描述語言文件、web 服務(wù)狀態(tài)和時間戳。
23. 如權(quán)利要求14所述的設(shè)備,還包括用于發(fā)布與所述基于數(shù) 據(jù)訪問的web服務(wù)相關(guān)的web服務(wù)描述語言(WSDL )文檔的裝置。
24. 如權(quán)利要求14所述的設(shè)備,還包括用于將所述改變通知給 所述通用web服務(wù)運行時模塊的裝置。
25. 如權(quán)利要求14所述的設(shè)備,其中一個或者多個冗余web服 務(wù)產(chǎn)品包括用于定義基于數(shù)據(jù)訪問的web服務(wù)的裝置,其中所述一 個或者多個冗佘web服務(wù)產(chǎn)品能夠從存儲在公共web服務(wù)管理元數(shù) 據(jù)倉庫中的web服務(wù)元數(shù)據(jù)導(dǎo)出。
26. —種計算機程序,包括計算機程序代碼裝置,用于當(dāng)所述程 序在計算機上運行時執(zhí)行權(quán)利要求1至13中的任何一個的全部步 驟。
全文摘要
一種裝置、系統(tǒng)和方法,其用于創(chuàng)建和操作由數(shù)據(jù)服務(wù)器管理的web服務(wù)運行時。通用web服務(wù)運行時模塊和相關(guān)運行時控制器部署在應(yīng)用服務(wù)器上。運行時控制器為了定義在可用基于數(shù)據(jù)訪問的web服務(wù)中的web服務(wù)元數(shù)據(jù)的改變而監(jiān)視web服務(wù)管理元數(shù)據(jù)倉庫。如果檢測到改變,則通用web服務(wù)運行時將自動化更新web服務(wù)產(chǎn)品和與所影響的web服務(wù)相關(guān)的web服務(wù)端點接口,以使得web服務(wù)元數(shù)據(jù)中的改變反映到基于數(shù)據(jù)訪問的web服務(wù)中。用戶管理web服務(wù)管理元數(shù)據(jù)倉庫以及通過包括web服務(wù)管理元數(shù)據(jù)倉庫的數(shù)據(jù)庫定義和管理基于數(shù)據(jù)訪問的web服務(wù),而不需與應(yīng)用服務(wù)器交互。
文檔編號H04L29/08GK101690123SQ200880015941
公開日2010年3月31日 申請日期2008年4月30日 優(yōu)先權(quán)日2007年5月18日
發(fā)明者M·E·魏勞赫, M·申克爾, P·萬馳, S·A·布羅德斯基, S·A·德邁爾 申請人:國際商業(yè)機器公司