專利名稱::對基于組件的軟件系統(tǒng)中的組件進(jìn)行重用的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及基于組件的軟件系統(tǒng),尤其涉及對基于組件的軟件系統(tǒng)中的組件重用的方法和裝置。
背景技術(shù):
:在傳統(tǒng)的基于組件的軟件系統(tǒng)中,例如在由Java企業(yè)柄(EnterpriseJavaBean,EJB)、組件對象模型(ComponentObjectModel,COM)、公共對象請求代理架構(gòu)(CommonObjectRequestBrokerArchitecture,CORBA)等實(shí)現(xiàn)的軟件系統(tǒng)中,組件的功能是通過接口來體現(xiàn)的,同時(shí)組件間的調(diào)用依賴關(guān)系包含在組件代碼的實(shí)現(xiàn)中。例如,組件A可能在表1中示出的如下代碼實(shí)現(xiàn)中包含對于組件B和組件C的調(diào)用依賴關(guān)系。表1__<table>tableseeoriginaldocumentpage6</column></row><table>新興的面向服務(wù)組件模型,例如服務(wù)組件架構(gòu)(ServiceComponentArchitecture,SCA),將面向服務(wù)的概念引入了組件模型和執(zhí)行環(huán)境。例如,在SCA組合模型中包括一系列在實(shí)現(xiàn)和/或使用服務(wù)的服務(wù)組件方面定義SCA系統(tǒng)的配置的工件(artifact)以及描述它們?nèi)绾捂溄釉谝黄鸬倪B接(連線)和相關(guān)工件。此外,SCA旨在包括用于服務(wù)組件的和用于連接它們的訪問方法的廣泛的技術(shù)。而服務(wù)組件本身可能也需要調(diào)用別的服務(wù),這個(gè)調(diào)用出口稱為"引用,,。與傳統(tǒng)的基于組件的軟件系統(tǒng)相比較,基于SCA的軟件系統(tǒng)將組件間的調(diào)用依賴關(guān)系進(jìn)行了外部化,屬于依賴關(guān)系外部化軟件系統(tǒng)。換句話說,在依賴關(guān)系外部化軟件系統(tǒng)中,組件之間的調(diào)用依賴關(guān)系(例如,SCA的"接口"和"引用")是獨(dú)立于組件的具體代碼實(shí)現(xiàn)的(例如通過可擴(kuò)展標(biāo)記語言(XML)文檔的形式)。因此,例如在基于SCA的軟件系統(tǒng)中,組件A所需要的服務(wù)可以由暴露其服務(wù)的任何組件B來提供。因此,組件A的代碼實(shí)現(xiàn)中可以不用附加代碼而與組件B鏈接在一起。從一個(gè)角度而言,如果可以將由傳統(tǒng)組件技術(shù)實(shí)現(xiàn)的組件"SCA化,,,那么可以不使用附加代碼而將這些"SCA化"的組件與其他SCA組件組合在一起,由此實(shí)現(xiàn)對由傳統(tǒng)組件技術(shù)實(shí)現(xiàn)的組件的重用。而且,通過"SCA化"這些組件也可以受益于基于SCA的軟件系統(tǒng)的管理能力,例如監(jiān)控、日志管理等。因此,廣義而言,存在這樣的需求使得現(xiàn)有基于組件的系統(tǒng)能夠被高級的基于面向服務(wù)組件模型的應(yīng)用所包含,即使得現(xiàn)有遺存系統(tǒng)適于與新技術(shù)和平臺進(jìn)行集成。一種解決方案是根據(jù)由將被集成的應(yīng)用所遵循的高級規(guī)范或標(biāo)準(zhǔn),用明確定義的接口包裝現(xiàn)有遺存系統(tǒng)。公開號為US2003/0055921的美國專利申請是這種解決方案的一個(gè)示例。在該發(fā)明中,將整個(gè)面向?qū)ο蟮膽?yīng)用包裝為對象facade,通過可以為任何標(biāo)準(zhǔn)中間件的連通總線與相對集成的基于組件的應(yīng)用中的新組件進(jìn)行通信。另一種解決方案是在遺存系統(tǒng)與利用高級技術(shù)的應(yīng)用之間添加輕量代理。代理在不同協(xié)議之間起調(diào)解作用,其不強(qiáng)制任何一個(gè)對等方服從任何其它方。作為示例,美國專利申請公開號為US2006/0041862的美國專利申請開發(fā)了一種API庫,用于允許遺存系統(tǒng)與Web服務(wù)之間的通信,遺存系統(tǒng)需要使用這些API以便與新系統(tǒng)進(jìn)行集成;公開號為US2004/0054812的美國專利申請集中于遺存系統(tǒng)與其它高級應(yīng)用之間的數(shù)據(jù)集成。但是,上述這兩種集成方案不能避免修改傳統(tǒng)系統(tǒng)的原始源代碼。期望將遺存系統(tǒng)移植到新平臺上(例如從Windows操作系統(tǒng)到Linux操作系統(tǒng);從獨(dú)立Web服務(wù)器到J2EE應(yīng)用服務(wù)器)或利用更高級的技術(shù)(例如,從過程化范例到面向?qū)ο蠓独?。理解和轉(zhuǎn)換原始遺存系統(tǒng)以及重新部署新移植的系統(tǒng)不僅是消耗時(shí)間的,而且是易出錯(cuò)的,這主要是因?yàn)閳?zhí)行移植工作的軟件工程師并不一定是原始開發(fā)者。為了便于遺存系統(tǒng)的轉(zhuǎn)換,投入了大量文獻(xiàn)努力并進(jìn)行了大量實(shí)踐,用來分析和發(fā)現(xiàn)其相應(yīng)高級設(shè)計(jì)來指導(dǎo)源代碼轉(zhuǎn)換。針對這個(gè)問題,一種解決方案集中于源代碼和文件編制本身并采用靜態(tài)分析技術(shù)來概括目標(biāo)系統(tǒng)的高級設(shè)計(jì)。在公開號為US6,847,981的美國專利申請中,分析Servlet代碼以提取WebUI信息、商業(yè)邏輯/Java類信息和SQL信息。對該提取的信息進(jìn)行合成通過EJB組件生成器來生成EJB代碼,以將純Web應(yīng)用轉(zhuǎn)換為J2EE基于組件的應(yīng)用。在公開號為US2005/0144226的美國專利申請中從現(xiàn)有客戶端/服務(wù)器應(yīng)用通過將它們分解成單獨(dú)的用戶接口、商業(yè)邏輯和事件管理層來生成用于面向服務(wù)的架構(gòu)的開放可重用、商業(yè)組件。不同層被包裝為服務(wù)并被重組為基于開放標(biāo)準(zhǔn)的應(yīng)用。公開號為US2005/0138603的美國專利申請?zhí)岢鲇糜趯⑦z存系統(tǒng)移植到基于組件的應(yīng)用的移植過程和對于每個(gè)步驟的工作產(chǎn)品,但該發(fā)明的關(guān)鍵步驟仍然涉及分析源代碼、對組件進(jìn)行挖掘以及將原始源代碼轉(zhuǎn)換為組件程序。另一種解決方案涉及各種用于輪廓化、測試和觀察系統(tǒng)的行為的方法,包括實(shí)際執(zhí)行和檢驗(yàn)執(zhí)行跟蹤。盡管這種方案提高了對遺存系統(tǒng)轉(zhuǎn)換的效率,但是難以避免對源代碼轉(zhuǎn)換的集中手動(dòng)工作。可見,以現(xiàn)有技術(shù)實(shí)現(xiàn)基于組件的軟件系統(tǒng)中的組件重用的方案均需要改變組件內(nèi)部代碼實(shí)現(xiàn)。
發(fā)明內(nèi)容為了克服現(xiàn)有技術(shù)中存在的局限性,本發(fā)明提供了一種無需修改組件實(shí)現(xiàn),而是利用組件依賴關(guān)系外部化的方式實(shí)現(xiàn)基于組件的軟件系統(tǒng)中組件的重用的技術(shù)方案。根據(jù)本發(fā)明的一方面,提供一種組件重用的方法,用于將第一軟件系統(tǒng)中的所選第一組件重用于第二軟件系統(tǒng),其中第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),并且第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴外化的軟件系統(tǒng)。該方法包括以下步驟分析第一軟件系統(tǒng),確定在第一軟件系統(tǒng)中第一組件的依賴關(guān)系并且獲取相關(guān)接口信息;利用依賴關(guān)系和接口信息生成將分別部署在第一運(yùn)行環(huán)境和第二軟件系統(tǒng)中的代理器,其中代理器允許第二軟件系統(tǒng)調(diào)用第一運(yùn)行環(huán)境中的第一組件所提供的服務(wù),并且允許第一組件調(diào)用第二軟件系統(tǒng)中的相關(guān)服務(wù)。根據(jù)本發(fā)明的另一方面,提供一種支持組件重用的系統(tǒng)。該系統(tǒng)包括組件選擇裝置,用于從第一軟件系統(tǒng)中選擇需要在第二軟件系統(tǒng)中重用的第一組件,第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),并且第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴外化的軟件系統(tǒng);分析裝置,用于對第一軟件系統(tǒng)進(jìn)行分析,確定在第一軟件系統(tǒng)中第一組件的依賴關(guān)系并且獲取相關(guān)接口信息;生成裝置,用于利用依賴關(guān)系和接口信息生成將分別部署在第一運(yùn)行環(huán)境和第二軟件系統(tǒng)中的代理器,代理器允許第二軟件系統(tǒng)調(diào)用第一運(yùn)行環(huán)境中的第一組件所提供的服務(wù),并且允許第一組件調(diào)用第二軟件系統(tǒng)中的相關(guān)服務(wù)。根據(jù)本發(fā)明的另一方面,提供一種計(jì)算機(jī)程序產(chǎn)品,用于將第一軟件系統(tǒng)中的所選第一組件重用于第二軟件系統(tǒng),其中第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),并且第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴外化的軟件系統(tǒng)。該計(jì)算機(jī)程序產(chǎn)品被配置于執(zhí)行根據(jù)本發(fā)明的方法。因此,根據(jù)本發(fā)明的技術(shù)方案無需關(guān)心組件化過程,為最終用戶帶來充分的靈活性以便選擇任何可能的候選組件來提供服務(wù)。通過確定組件引用接口和并且將對這些接口的調(diào)用重新定向到相應(yīng)代理器,將需要重用的組件的依賴關(guān)系外部化,從而可為諸如基于SCA系統(tǒng)的依賴關(guān)系外部化系統(tǒng)進(jìn)行重用。而且,更加有利地是根據(jù)本發(fā)明的技術(shù)方案避免了對傳統(tǒng)基于組件軟件系統(tǒng)中原始源代碼的修改。結(jié)合附圖閱讀本發(fā)明實(shí)施方式的詳細(xì)描述后,本發(fā)明的其他特點(diǎn)和優(yōu)點(diǎn)將變得更加清楚。為了對本發(fā)明實(shí)施例的特征和優(yōu)點(diǎn)進(jìn)行詳細(xì)說明,將參照以下附圖。如果可能的話,在附圖和描述中使用相同或者類似的參考標(biāo)號以指代相同或者類似的部分。附圖中件重用的方法的處理流程圖2示意性示出了根據(jù)本發(fā)明一個(gè)實(shí)施方式的用于對基于組件的軟件系統(tǒng)中的組件重用的系統(tǒng)架構(gòu)圖3a-圖3c示出了根據(jù)本發(fā)明實(shí)施方式在第一軟件系統(tǒng)中選擇一個(gè)第一組件以便在第二軟件系統(tǒng)中進(jìn)行重用的示例;圖4a-圖4c示出了根據(jù)本發(fā)明實(shí)施方式在第一軟件系統(tǒng)中選擇多個(gè)第一組件以便在第二軟件系統(tǒng)中進(jìn)行重用的示例;圖5示意性的示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的四種適配器;以及圖6示意性示出了可以實(shí)現(xiàn)根據(jù)本發(fā)明的實(shí)施例的計(jì)算設(shè)備。具體實(shí)施例方式以下根據(jù)附圖對本發(fā)明進(jìn)行說明。圖1示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的對基于組件的軟件系統(tǒng)中的組件重用的方法的處理流程圖,其中將第一軟件系統(tǒng)的組件重用于第二軟件系統(tǒng)。如圖1所示,在步驟S100中,該處理開始。在步驟S102中,在第一軟件系統(tǒng)中選擇需要在第二軟件系統(tǒng)中進(jìn)行重用的第一組件。在一個(gè)示例中,第一軟件系統(tǒng)例如前所述的傳統(tǒng)基于組件的軟件系統(tǒng),并且其運(yùn)行環(huán)境為第一運(yùn)行環(huán)境;第二軟件系統(tǒng)是例如基于SCA的軟件系統(tǒng)的依賴關(guān)系外化的軟件系統(tǒng),并且其運(yùn)行環(huán)境為第二運(yùn)行環(huán)境。用戶可以根據(jù)需要來選擇需要在第二軟件系統(tǒng)進(jìn)行重用的組件作為第一組件,可以選擇單個(gè)組件,可以選4奪多個(gè)組件。在步驟S104中,分析第一軟件系統(tǒng)中第一組件的依賴關(guān)系,確定第一組件中各個(gè)組件所依賴的組件,將這些依賴的組件記為第二組件。并且,至少獲取以下接口信息用于調(diào)用第一組件的接口的信息、第一組件所引用的接口的信息。在步驟S106中,依據(jù)所獲得的信息生成與第一組件相關(guān)聯(lián)的用于第二運(yùn)行環(huán)境的第一代理器,生成與第一組件相關(guān)聯(lián)的用于第一運(yùn)行環(huán)境的第二代理器,并且生成與第二組件相關(guān)聯(lián)的用于第一運(yùn)行環(huán)境的第三代理器。第一代理器是在第二軟件系統(tǒng)中重用組件(第一組件)的代理器。在第二軟件系統(tǒng)中對該重用組件進(jìn)行調(diào)用時(shí),第一代理器能夠接收調(diào)用請求,并且將該調(diào)用請求進(jìn)行協(xié)議轉(zhuǎn)換后重新定向到第一運(yùn)行環(huán)境中的第二代理器。第二代理器是重用組件(即第一組件)在第一運(yùn)行環(huán)境中的代理器。第二代理器通過協(xié)議轉(zhuǎn)換將接收到的調(diào)用請求轉(zhuǎn)發(fā)給第一組件中的相應(yīng)組件,以便在第二運(yùn)行環(huán)境中執(zhí)行該組件。第三代理器是重用組件所依賴的組件,即第二組件在第一運(yùn)行環(huán)境中的代理器。在第一組件執(zhí)行期間,如果該第一組件需要調(diào)用其它的組件,也即該第一組件依賴于第二組件,則由對應(yīng)的第三代理器接收該調(diào)用的請求,并通過協(xié)議轉(zhuǎn)換將該請求轉(zhuǎn)發(fā)給第二軟件系統(tǒng)中的第一代理器。第一代理器通過協(xié)議轉(zhuǎn)換將該調(diào)用請求轉(zhuǎn)發(fā)給在第二軟件系統(tǒng)中對應(yīng)于第二組件的相應(yīng)組件。在步驟S108中,分別在第一運(yùn)行環(huán)境中和第二運(yùn)行環(huán)境中相應(yīng)地部署需要重用的第一組件和各個(gè)代理器。例如,可以對第一組件和生成的各個(gè)代理器進(jìn)行打包封裝,然后在第一運(yùn)行環(huán)境中和第二運(yùn)行環(huán)境中對封裝包進(jìn)行相應(yīng)的部署,從而實(shí)現(xiàn)對所選的第一組件的重用。在步驟S110中,該處理結(jié)束??梢岳斫?,圖1中各個(gè)步驟的執(zhí)行順序可以與上述描述有所不同,例如可以先針對第一軟件系統(tǒng)內(nèi)的組件進(jìn)行分析,分析出其中部分或全部組件的依賴性和接口(步驟S104),然后再選擇需要進(jìn)行重用的第一組件(S102)。優(yōu)選地,可以將分析出的依賴關(guān)系以圖形化的方式可視地呈現(xiàn)給用戶,以便用戶直觀地選擇第一組件,并且了解所選第一組件所依賴的第二組件。圖2示意性示出了根據(jù)本發(fā)明一個(gè)實(shí)施方式的用于對基于組件的軟件系統(tǒng)中的組件重用的系統(tǒng)架構(gòu)圖。其中,參考標(biāo)號200表示根據(jù)本發(fā)明一個(gè)實(shí)施例的系統(tǒng),用于實(shí)現(xiàn)對基于組件的軟件系統(tǒng)中的組件重用;參考標(biāo)號202表示組件選擇裝置,用于對第一軟件系統(tǒng)中需要進(jìn)行重用的組件進(jìn)行選擇;參考標(biāo)號204表示分析裝置,用于對第一軟件系統(tǒng)中的組件進(jìn)行分析以獲得相關(guān)信息;參考標(biāo)號206表示代理器生成裝置,用于生成在第二軟件系統(tǒng)中重用第一軟件系統(tǒng)的組件所需的各個(gè)代理器;以及參考標(biāo)號208表示包封裝裝置,用于對重用組件和生成代理器進(jìn)行包封裝以便后續(xù)將其在相應(yīng)的第一、第二運(yùn)行環(huán)境中進(jìn)行部署。如圖2所示,用戶可以通過組件選擇裝置202從諸如傳統(tǒng)基于組件的系統(tǒng)的第一軟件系統(tǒng)中選擇需要進(jìn)行重用的組件作為第一組件。本領(lǐng)域技術(shù)人員應(yīng)該理解,可以選擇一個(gè)或多個(gè)組件作為第一組件。組件選擇裝置202例如可以具有友好的用戶接口,向用戶可視化地提供第一軟件系統(tǒng)中組件的信息,并且用戶可以使用該用戶接口來選擇第一軟件系統(tǒng)中需要重用的組件,即第一組件。組件分析裝置204用于對第一軟件系統(tǒng)中的組件進(jìn)行分析以獲得相關(guān)信息。組件分析裝置204可以分析組件間的依賴關(guān)系以便確定所選的第一組件所依賴的組件,即第二組件。作為組件分析裝置204所需的信息輸入,可以通過多種方式獲取第一軟件系統(tǒng)的組件間的依賴關(guān)系和組件的接口。例如,一種可能方式是跟蹤方法。其中輸入用于使用第一軟件系統(tǒng)的多個(gè)場景;由場景執(zhí)行引擎在第一軟件系統(tǒng)對這些場景進(jìn)行解析和執(zhí)行;通過執(zhí)行,交互跟蹤器(可以基于現(xiàn)有產(chǎn)品建立,例如Tivoli)將負(fù)責(zé)捕獲第一軟件系統(tǒng)組件間的所有交互數(shù)據(jù);依賴性分析器接著對交互數(shù)據(jù)進(jìn)行分析并生成指示第一軟件系統(tǒng)組件間依賴關(guān)系的數(shù)據(jù),該數(shù)據(jù)至少表示a)—組具有組件接口定義的組件;以及b)—組主要表示組件間調(diào)用關(guān)系的依賴關(guān)系。當(dāng)然,可以理解另一種更為直接的方式就是直接獲得有關(guān)第一軟件系統(tǒng)的設(shè)計(jì)文檔,這樣無需執(zhí)行復(fù)雜的分析步驟即可獲得有關(guān)第一軟件系統(tǒng)中各個(gè)組件的接口以及組件間依賴關(guān)系的信息。代理器生成裝置206依據(jù)組件選擇裝置202所提供的關(guān)于第一組件的信息以及組件分析裝置204所提供的關(guān)于第二組件的信息自動(dòng)生成在第二軟件系統(tǒng)中重用第一組件所需的各個(gè)代理器。這些代理器將與第一軟件系統(tǒng)的第一運(yùn)行環(huán)境的中的各個(gè)組件以及第二軟件系統(tǒng)的第二運(yùn)行環(huán)境中的各個(gè)組件相結(jié)合,從而實(shí)現(xiàn)在第二軟件系統(tǒng)中對第一組件的重用。更具體地,代理器生成裝置206生成與第一組件相關(guān)聯(lián)的用于第二運(yùn)行環(huán)境的第一代理器,生成與第一組件集合相關(guān)聯(lián)的用于第一運(yùn)行環(huán)境的第二代理器,并且生成與第二組件相關(guān)聯(lián)的用于第一運(yùn)行環(huán)境的第三代理器。其中,第二代理器允許對重用的第一組件進(jìn)行調(diào)用,其名稱可以與第一組件的名稱相同或不同;以及第三代理器是代表各個(gè)第二組件的代理器,其名稱需要與相應(yīng)的第二組件的名稱相同;第一代理器具有與第一組件的相同接口,該接口能夠?qū)⑺袑τ诘谝唤M件的調(diào)用重新定向到第一組件的第二代理器,而且第一代理器具有可以由第三代理器(如果存在的話)調(diào)用的接口,該接口可以將第三代理器的調(diào)用重新定向到其他第二軟件系統(tǒng)的組件,以將其作為引用的服務(wù)??蛇x地,包封裝裝置208例如將原始組件、所生成的各個(gè)代理器作為輸入,并生成兩個(gè)輸出組合包,包括將被部署到第二運(yùn)行環(huán)境的第一代理器,其可用于第二軟件系統(tǒng)中的各個(gè)組件進(jìn)行配合;以及將被部署到第一運(yùn)行環(huán)境的部署包,包括第一組件和第二、第三代理器。下面結(jié)合具體的示例描述根據(jù)本發(fā)明如何在第二軟件系統(tǒng)中對第一軟件系統(tǒng)中的所選組件進(jìn)行重用。圖3a-圖3c示出了根據(jù)本發(fā)明實(shí)施方式在第一軟件系統(tǒng)中選擇一個(gè)第一組件以便在第二軟件系統(tǒng)中進(jìn)行重用的示例。其中,圖3a示意性示出第一軟件系統(tǒng)的示例;圖3b標(biāo)識出所選第一組件以及其所依賴的第二組件;圖3c示意性示出第二軟件系統(tǒng)對第一組件進(jìn)行重用的過程。如圖3a所示,例如傳統(tǒng)基于組件的系統(tǒng)的第一軟件系統(tǒng)包括四個(gè)組件組件A、組件B、組件C、組件D。其中,組件D調(diào)用組件A,并且組件A調(diào)用組件B和C。若選擇將要在諸如依賴外化的基于SCA的軟件系統(tǒng)的第二軟件系統(tǒng)中對圖3a所示第一軟件系統(tǒng)中的組件A進(jìn)行重用,即組件A為第一組件,則需要分析組件A的依賴關(guān)系。如圖3b中箭頭所示,組件D依賴于組件A,組件A依賴于組件B和組件C,所以可以確定針對組件A的所依賴組件為組件B和組件C,即組件B和C為第二組件。根據(jù)上文說述,為組件A生成第一代理器A,和第二代理器A(圖3c左側(cè)虛框表示在第一運(yùn)行環(huán)境中的代理器),并且分別為組件B和組件C生成第三代理器B和第三代理器C,如圖3c所示,將各個(gè)生成的代理器部署在諸如EJB的第一運(yùn)行環(huán)境和諸如SCA運(yùn)行時(shí)間的第二運(yùn)行環(huán)境中。在第一運(yùn)行環(huán)境中,第二代理器A提供第二軟件系統(tǒng)可訪問協(xié)議接口,并代理對第一運(yùn)行環(huán)境中的組件A的調(diào)用。具體地,第二代理器A將第二軟件系統(tǒng)可訪問協(xié)議調(diào)用通過協(xié)議轉(zhuǎn)換轉(zhuǎn)換為第一運(yùn)行環(huán)境中的調(diào)用并轉(zhuǎn)發(fā)至組件A的接口,從而調(diào)用實(shí)現(xiàn)所需功能的組件A。第三代理器B和第三代理器C的接口和名稱分別與在原第一軟件系統(tǒng)中的組件B和組件C相同。第三代理器B和第三代理器C所提供的接口用以接收來自組件A的調(diào)用,并將該調(diào)用通過協(xié)議轉(zhuǎn)換轉(zhuǎn)換為第二軟件系統(tǒng)可訪問協(xié)議調(diào)用,以便轉(zhuǎn)發(fā)至部署在第二軟件系統(tǒng)中的第一代理器A,。第一代理器A,實(shí)際上可以認(rèn)為是第二軟件系統(tǒng)的組件,例如SCA組件。第一代理器A,一方面作為第二軟件系統(tǒng)中對所選第一組件進(jìn)行調(diào)用的接口來提供服務(wù),另一方面還作為第一運(yùn)行環(huán)境中與第二組件對應(yīng)的第三代理器的接口來要求服務(wù)。具體地,在第二軟件系統(tǒng)中,第一代理器A,從其他第二軟件系統(tǒng)組件,例如組件E接收第二^:件系統(tǒng)可訪問協(xié)議調(diào)用并將該調(diào)用重新定向至第一運(yùn)行環(huán)境中的第二代理器A,并且當(dāng)組件A在執(zhí)行中需要對組件B和組件C進(jìn)行調(diào)用時(shí),其還從分別代替組件B和組件C的第三代理器B和第三代理器C接收所轉(zhuǎn)換的第二軟件系統(tǒng)可訪問協(xié)議調(diào)用并將它們重新定向至第二軟件系統(tǒng)的組件,例如在該示例中為組件F和組件G。通常地,第二軟件系統(tǒng)的組件F和組件G的功能分別和第一軟件系統(tǒng)的組件B和組件C類似,其能夠?yàn)榻M件A提供所依賴的服務(wù)。由此,包括組件A、第一代理器A,,第二代理器A以及第三代理器B和第三代理器C的組可以實(shí)現(xiàn)在第二軟件系統(tǒng)中對組件A的重用而無需附加代碼或者修改組件A的代碼實(shí)現(xiàn)。圖4a-圖4c示出了根據(jù)本發(fā)明實(shí)施方式在第一軟件系統(tǒng)中選擇多個(gè)第一組件以便在第二軟件系統(tǒng)中進(jìn)行重用的示例。其中,圖4a示意性示出第一軟件系統(tǒng)的示例;圖4b標(biāo)識出所選多個(gè)第一組件以及其所依賴的第二組件;圖4c示意性示出第二軟件系統(tǒng)對多個(gè)第一組件進(jìn)行重用的過程。如圖4a所示,例如為傳統(tǒng)基于組件的系統(tǒng)的第一軟件系統(tǒng)包括五個(gè)組件組件A、組件B、組件C、組件D和組件E。其中.,組件E調(diào)用組件A和組件B,并且組件A調(diào)用組件C,組件B調(diào)用組件D。若選擇將要在諸如依賴外化的基于SCA的軟件系統(tǒng)的第二軟件系統(tǒng)中對圖4a所示第一軟件系統(tǒng)中的組件A和組件B進(jìn)行重用,即組件A和組件B為第一組件,則需要分析組件A和組件B的依賴關(guān)系。如圖4b中箭頭所示,組件E依賴于組件A和組件B,組件A依賴于組件C,組件B依賴于組件D,所以可以確定4j"對組件A和組件B的所依賴組件為組件C和組件D,即組件C和D為第二組件。根據(jù)上文所述,為組件A和B生成第一代理器A&B,和第二代理器A&B,并且分別為組件C和組件D生成第三代理器C和第三代理器D(圖4c左側(cè)虛框表示在第一運(yùn)行環(huán)境中的代理器)。如圖4c所示,將各個(gè)生成的代理器部署在諸如EJB的第一運(yùn)行環(huán)境和諸如SCA運(yùn)行時(shí)間的第二運(yùn)行環(huán)境中。在第一運(yùn)行環(huán)境中,第二代理器A&B提供第二軟件系統(tǒng)可訪問協(xié)議接口,并代理對第一運(yùn)行環(huán)境中的組件A和組件B的調(diào)用。具體地,第二代理器A&B將第二軟件系統(tǒng)可訪問協(xié)議調(diào)用通過協(xié)議轉(zhuǎn)換為第一運(yùn)行環(huán)境中的調(diào)用并分別轉(zhuǎn)發(fā)至組件A和組件B的接口,從而調(diào)用實(shí)現(xiàn)所需功能的組件A和組件B。第三代理器C和第三代理器D的接口和名稱分別與在原第一軟件系統(tǒng)中的組件C和組件D相同。第三代理器C和第三代理器D所提供的接口用以接收來自組件A的調(diào)用,并將該調(diào)用通過協(xié)議轉(zhuǎn)換為第二軟件系統(tǒng)可訪問協(xié)議調(diào)用,以便轉(zhuǎn)發(fā)至部署在第二軟件系統(tǒng)中的第一代理器A&B,。第一代理器A&B,實(shí)際上可以認(rèn)為是第二軟件系統(tǒng)的組件,例如SCA組件。第一代理器A&B,一方面作為第二軟件系統(tǒng)中對所選第一組件進(jìn)行調(diào)用的接口來提供服務(wù),另一方面還作為第一運(yùn)行環(huán)境中與第二組件對應(yīng)的第三代理器的接口來要求服務(wù)。具體地,在第二軟件系統(tǒng)中,第一代理器A&B,從其他第二軟件系統(tǒng)組件,例如組件E接收對于組件A和組件B的第二軟件系統(tǒng)可訪問協(xié)議調(diào)用并將該調(diào)用重新定向至第一運(yùn)行環(huán)境中的第二代理器A&B,并且當(dāng)組件A和組件B在執(zhí)行中需要分別對組件C和組件D進(jìn)行調(diào)用時(shí),其還從分別代替組件B和組件C的第三代理器C和第三代理器D接收所轉(zhuǎn)換的第二軟件系統(tǒng)可訪問協(xié)議調(diào)用并將它們重新定向至第二軟件系統(tǒng)的組件,例如在該示例中為組件F和組件G。通常地,第二軟件系統(tǒng)的組件F和組件G的功能分別和第一軟件系統(tǒng)的組件C和組件D類似,其能夠分別為組件A和組件B提供所依賴的服務(wù)。由此,包括組件A和組件B、第一代理器A&B,、第二代理器A&B以及第三代理器C和第三代理器D的組可以實(shí)現(xiàn)在第二軟件系統(tǒng)中對組件A和組件B的重用而無需附加代碼或者修改組件A或者組件B的代碼實(shí)現(xiàn)。通過上述的具體示例可以理解,當(dāng)選擇了多個(gè)第一組件時(shí)僅需要在第一代理器和第二代理器中增加與之相關(guān)聯(lián)的接口即可實(shí)現(xiàn)。實(shí)際上,根據(jù)本發(fā)明,如何選擇第一軟件系統(tǒng)中的第一組件不對本發(fā)明構(gòu)成限制。在上述所描述的各種示例,所選擇的第一軟件系統(tǒng)中的第一組件均存在其所依賴的第二組件。實(shí)際上更為簡單的情況是,在第一軟'件系統(tǒng)中所選的第一組件不存在所依賴的第二組件。本領(lǐng)域的技術(shù)人員可以理解,針對這種情況,上述第三代理器僅提供重新定向到所述第二軟件系統(tǒng)的第一代理器的接口,并且代理器和組件間的調(diào)用過程與上文所描述的過程類似。為了實(shí)現(xiàn)本發(fā)明的解決方案,需要調(diào)用第一組件的接口的信息以及第一組件所引用的接口的信息。這些接口信息可以通過上述分析步驟獲得。并且還需要在第一代理器與相關(guān)代理器(第二和第三代理器)之間的通用調(diào)用機(jī)制。例如在第一軟件系統(tǒng)為EJB系統(tǒng)而第二軟件系統(tǒng)為基于SCA的軟件系統(tǒng),則可以利用Webservice來實(shí)現(xiàn)上述通用調(diào)用機(jī)制,也即作為第一軟件系統(tǒng)和第二軟件系統(tǒng)協(xié)議轉(zhuǎn)換的中介。根據(jù)這些接口和通用調(diào)用機(jī)制,可以生成相關(guān)代理器。通過上面的描述,根據(jù)本發(fā)明的各種代理器均包括調(diào)用轉(zhuǎn)換的適配器,正如在圖3c和圖4c中各個(gè)代理器中圓形標(biāo)記所示。各個(gè)適配器用于接收一種類型的調(diào)用并且通過協(xié)議轉(zhuǎn)換將其轉(zhuǎn)換為至另一種類型的調(diào)用,然后進(jìn)行轉(zhuǎn)發(fā)。根據(jù)本發(fā)明一個(gè)實(shí)施方式,在第一軟件系統(tǒng)為EJB系統(tǒng)而第二軟件系統(tǒng)為基于SCA的軟件系統(tǒng)的情況下,可能需要應(yīng)用到四種類型的適配器,如圖5所示。根據(jù)該實(shí)施方式,第二代理器包括將Webservice調(diào)用轉(zhuǎn)換為EJB調(diào)用的適配器(適配器a);第三代理器包括將EJB調(diào)用轉(zhuǎn)換為Webservice的適配器(適配器b);以及第一代理器一方面包括將SCA支持的調(diào)用轉(zhuǎn)換為Webservice調(diào)用的適配器(適配器c),另一方面包括將Webservice調(diào)用轉(zhuǎn)化到SCA支持的調(diào)用的適配器(適配器d)。生成適配器所需的輸入如下接口定義;左側(cè)調(diào)用才幾制;右側(cè)調(diào)用機(jī)制。利用第二代理器所包括的適配器a(Webservice->EJB)作為示例來說明如何實(shí)現(xiàn)適配器。根據(jù)所獲得的接口定義信息并遵循左側(cè)調(diào)用機(jī)制生成代碼框架。在本實(shí)例中,需要生成Webservice框架。有許多現(xiàn)有工具可以運(yùn)用。PublicclassorderSci.vice{PublicStringcreateOrder(Stringorder_in){在每個(gè)操作中,遵循在右側(cè)的調(diào)用機(jī)制來定位組件并調(diào)用相應(yīng)方法。在本實(shí)例中,使用EJB的JNDI名稱來定位EJB,然后調(diào)用相應(yīng)方法。PublicclassorderService{PublicStringcreateOrder(Stringorder—in){Stringconfirm—out;InitialContextic=newlnitialContext();orderLocaIHomeoih二(OrderLocalHome)ic.lookup("java:comp/env/EJB/order");OrderLocalorder二oih.create();confirm_out二order.createOrder(order—in)returnconfinnout;圖6示意性示出了可以實(shí)現(xiàn)根據(jù)本發(fā)明的實(shí)施例的計(jì)算設(shè)備。圖6中所示的計(jì)算機(jī)系統(tǒng)包括CPU(中央處理單元)601、RAM(隨機(jī)存取存儲器)602、ROM(只讀存儲器)603、系統(tǒng)總線604,硬盤控制器605、鍵盤控制器606、串行接口控制器607、并行接口控制器608、顯示器控制器609、硬盤610、鍵盤611、串行外部設(shè)備612、并行外部設(shè)備613和顯示器614。在這些部件中,與系統(tǒng)總線604相連的有CPU601、RAM602、ROM603、硬盤控制器605、鍵盤控制器606,串行接口控制器607,并行接口控制器608和顯示器控制器609。硬盤610與硬盤控制器605相連,鍵盤611與^t盤控制器606相連,串行外部設(shè)備612與串行接口控制器607相連,并行外部設(shè)備613與并行接口控制器608相連,以及顯示器614與顯示器控制器609相連。圖6中每個(gè)部件的功能在本
技術(shù)領(lǐng)域:
內(nèi)都是眾所周知的,并且圖6所示的結(jié)構(gòu)也是常規(guī)的。這種結(jié)構(gòu)不僅用于個(gè)人計(jì)算機(jī),而且用于手持設(shè)備,如PalmPC、PDA(個(gè)人數(shù)據(jù)助理)、移動(dòng)電話等等。在不同的應(yīng)用中,例如用于實(shí)現(xiàn)包含有根據(jù)本發(fā)明的客戶端模塊的用戶終端或者包含有根據(jù)本發(fā)明的網(wǎng)絡(luò)應(yīng)用服務(wù)器的服務(wù)器主機(jī)時(shí),可以向圖6中所示的結(jié)構(gòu)添加某些部件,或者圖6中的某些部件可以被省略。圖6中所示的整個(gè)系統(tǒng)由通常作為軟件存儲在硬盤610中、或者存儲在EPROM或者其它非易失性存儲器中的計(jì)算機(jī)可讀指令控制。軟件也可從網(wǎng)絡(luò)(圖中未示出)下載?;蛘叽鎯υ谟脖P610中,或者從網(wǎng)絡(luò)下載的軟件可一皮加載到RAM602中,并由CPU601執(zhí)行,以便完成由軟件確定的功能。盡管圖6中描述的計(jì)算機(jī)系統(tǒng)能夠支持根據(jù)本發(fā)明的提供網(wǎng)絡(luò)內(nèi)容以供脫機(jī)使用的方案,但是該計(jì)算機(jī)系統(tǒng)只是計(jì)算機(jī)系統(tǒng)的一個(gè)例子。本領(lǐng)域的熟練技術(shù)人員可以理解,許多其它計(jì)算機(jī)系統(tǒng)設(shè)計(jì)也能實(shí)現(xiàn)本發(fā)明的實(shí)施例。本發(fā)明還可以實(shí)現(xiàn)為例如由圖6所示計(jì)算機(jī)系統(tǒng)所使用的計(jì)算機(jī)程序產(chǎn)品,其可以包含有用于實(shí)現(xiàn)根據(jù)本發(fā)明的提供網(wǎng)絡(luò)內(nèi)容以供脫機(jī)使用的網(wǎng)絡(luò)應(yīng)用服務(wù)器的代碼;其還可以包含有用于實(shí)現(xiàn)根據(jù)本發(fā)明的用于獲取網(wǎng)絡(luò)內(nèi)容以供脫機(jī)使用的客戶端模塊的代碼。在使用之前,可以把代碼存儲在其它計(jì)算機(jī)系統(tǒng)的存儲器中,例如,存儲在硬盤或諸如光盤或軟盤的可移動(dòng)的存儲器中,或者經(jīng)由因特網(wǎng)或其它計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行下載。雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域技術(shù)人員可以在所附權(quán)利要求的范圍內(nèi)做出各種變形或修改。權(quán)利要求1.一種組件重用的方法,用于將第一軟件系統(tǒng)中的所選第一組件重用于第二軟件系統(tǒng),其中所述第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),并且所述第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴夕卜化的軟件系統(tǒng),該方法包括以下步驟分析所述第一軟件系統(tǒng),確定在所述第一軟件系統(tǒng)中所述第一組件的依賴關(guān)系并且獲取相關(guān)接口信息;利用所述依賴關(guān)系和接口信息生成將分別部署在所述第一運(yùn)行環(huán)境和所述第二軟件系統(tǒng)中的代理器,其中所述代理器允許所述第二軟件系統(tǒng)調(diào)用所述第一運(yùn)行環(huán)境中的所述第一組件所提供的服務(wù),并且允許所述第一組件調(diào)用所述第二軟件系統(tǒng)中的相關(guān)服務(wù)。2.根據(jù)權(quán)利要求1所述的方法,還包括以下步驟確定在所述第一軟件系統(tǒng)中所述第一組件依賴的第二組件,并且獲取調(diào)用所迷第一組件的接口的信息、以及所述第一組件所引用的接口的信息。3.根據(jù)權(quán)利要求2所述的方法,還包括以下步驟生成與所述第一組件相關(guān)聯(lián)的將部署于所述第二運(yùn)行環(huán)境的第一代理器、與所述第一組件相關(guān)聯(lián)的將部署于所述第一運(yùn)行環(huán)境的第二代理器、以及與所述第二組件相關(guān)聯(lián)的用于所述第一運(yùn)行環(huán)境的第三代理器,其中,所述第一代理器允許將來自所述第二軟件系統(tǒng)中對所述第一組件的調(diào)用重新定向到所述第二代理器,所述第二代理器允許對所述第一組件進(jìn)行調(diào)用,并且所述第三代理允許將來自所述第一組件的調(diào)用重新定向到所述第一代理器,以便由所述第一代理器重新定向到所述第二軟件系統(tǒng)的相應(yīng)組件。4.根據(jù)權(quán)利要求3所述的方法,還包括以下步驟對所述第一組件、所述第一代理器、第二代理器以及第三代理器進(jìn)行包封裝生成用于部署的封裝包。5.根據(jù)權(quán)利要求1-4中任何權(quán)利要求所述的方法,其中所述第二軟件系統(tǒng)為基于服務(wù)組件架構(gòu)的軟件系統(tǒng)。6.根據(jù)權(quán)利要求1-5中任何權(quán)利要求所述的方法,其中所述第一運(yùn)行環(huán)境為Java企業(yè)柄運(yùn)行環(huán)境,并且所述第二運(yùn)行環(huán)境為服務(wù)組件架構(gòu)運(yùn)行時(shí)間的運(yùn)行環(huán)境。7.根據(jù)權(quán)利要求6所述的方法,包括以下步驟生成所述第一代理器所包括的將服務(wù)組件架構(gòu)支持的調(diào)用轉(zhuǎn)換為Webservice調(diào)用的適配器,以及將Webservice調(diào)用轉(zhuǎn)換為服務(wù)組件架構(gòu)支持的調(diào)用的適配器;生成所述第二代理器所包括的將Webservice調(diào)用轉(zhuǎn)換為Java企業(yè)柄調(diào)用的適配器;以及生成所述第三代理器所包括的將Java企業(yè)柄調(diào)用轉(zhuǎn)換為Webservice調(diào)用的適配器。8.根據(jù)權(quán)利要求1-7中任一權(quán)利要求所述的方法,其中所述第一組件包括所述第一軟件系統(tǒng)中組件的任何所選組件的集合。9.一種支持組件重用的系統(tǒng),包括組件選擇裝置,用于從第一軟件系統(tǒng)中選擇需要在第二軟件系統(tǒng)中重用的第一組件,所述第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),并且所述第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴外化的軟件系統(tǒng);分析裝置,用于對所述第一軟件系統(tǒng)進(jìn)行分析,確定在所述第一軟件系統(tǒng)中所述第一組件的依賴關(guān)系并且獲取相關(guān)接口信息;生成裝置,用于利用所述依賴關(guān)系和接口信息生成將分別部署在所述第一運(yùn)行環(huán)境和所述第二軟件系統(tǒng)中的代理器,所述代理器允許所述第二軟件系統(tǒng)調(diào)用所述第一運(yùn)行環(huán)境中的所述第一組件所提供的服務(wù),并且允許所述第一組件調(diào)用所述第二軟件系統(tǒng)中的相關(guān)服務(wù)。10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中所述分析裝置還用于確定在所述第一軟件系統(tǒng)中所述第一組件依賴的第二組件,并且獲取調(diào)用所述第一組件的接口的信息、以及所述第一組件所引用的接口的信息。11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述生成裝置還用于生成與所述第一組件相關(guān)聯(lián)的將部署于所述第二運(yùn)行環(huán)境的第一代理器、與所述第一組件相關(guān)聯(lián)的將部署于所述第一運(yùn)行環(huán)境的第二代理器、以及與所述第二組件相關(guān)聯(lián)的用于所述第一運(yùn)行環(huán)境的第三代理器,其中,所述第一代理器允許將來自所述第二軟件系統(tǒng)中對所述第一組件的調(diào)用重新定向到所述第二代理器,所述第二代理器允許對所述第一組件進(jìn)行調(diào)用,并且所述第三代理允許將來自所述第一組件的調(diào)用重新定向到所述第一代理器,以便由所述第一代理器重新定向到所述第二軟件系統(tǒng)的相應(yīng)組件。12.根據(jù)權(quán)利要求11所述的系統(tǒng),還包括包封裝裝置,用于對所述第一組件、所述第一代理器、第二代理器以及第三代理器進(jìn)行包封裝生成用于部署的封裝包。13.根據(jù)權(quán)利要求9-12中任一權(quán)利要求所述的系統(tǒng),其中所述第二軟件系統(tǒng)為基于服務(wù)組件架構(gòu)的軟件系統(tǒng)。14.根據(jù)權(quán)利要求9-13中任一權(quán)利要求所述的系統(tǒng),其中所述第一運(yùn)行環(huán)境為Java企業(yè)柄運(yùn)行環(huán)境,并且所述第二運(yùn)行環(huán)境為服務(wù)組件架構(gòu)運(yùn)行時(shí)間的運(yùn)行環(huán)境。15.根據(jù)權(quán)利要求14所述的系統(tǒng),其中所述生成裝置還用于生成所述第一代理器所包括的將服務(wù)組件架構(gòu)支持的調(diào)用轉(zhuǎn)換為Webservice調(diào)用的適配器,以及將Webservice調(diào)用轉(zhuǎn)換為服務(wù)組件架構(gòu)支持的調(diào)用的適配器;生成所述第二代理器所包括的將Webservice調(diào)用轉(zhuǎn)換為Java企業(yè)柄調(diào)用的適配器;以及生成所述第三代理器所包括的將Java企業(yè)柄調(diào)用轉(zhuǎn)換為Webservice調(diào)用的適酉己16.根據(jù)權(quán)利要求9-15中任一權(quán)利要求所述的系統(tǒng),其中所述第一組件包括所述第一軟件系統(tǒng)中組件的任何所選集合。17.—種計(jì)算機(jī)程序產(chǎn)品,用于將第一軟件系統(tǒng)中的所選第一組件重用于第二軟件系統(tǒng),其中所述第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),并且所述第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴外化的軟件系統(tǒng),所述計(jì)算機(jī)程序產(chǎn)品被配置于執(zhí)行根據(jù)權(quán)利要求1-8中任一權(quán)利要求所述的方法。全文摘要本發(fā)明提供一種組件重用的方法,用于將第一軟件系統(tǒng)中的第一組件重用于第二軟件系統(tǒng),其中第一軟件系統(tǒng)為運(yùn)行于第一運(yùn)行環(huán)境的基于組件的軟件系統(tǒng),且第二軟件系統(tǒng)為運(yùn)行于第二運(yùn)行環(huán)境的依賴外化的軟件系統(tǒng)。該方法包括分析第一軟件系統(tǒng),確定在第一軟件系統(tǒng)中第一組件的依賴關(guān)系并且獲取相關(guān)接口信息;利用依賴關(guān)系和接口信息生成將分別部署在第一運(yùn)行環(huán)境和第二軟件系統(tǒng)中的代理器,其中代理器允許第二軟件系統(tǒng)調(diào)用第一運(yùn)行環(huán)境中的第一組件所提供的服務(wù),并且允許第一組件調(diào)用第二軟件系統(tǒng)中的相關(guān)服務(wù)。本發(fā)明還提供相應(yīng)的系統(tǒng)和程序產(chǎn)品。通過本發(fā)明無需修改組件實(shí)現(xiàn)或者附加代碼即可實(shí)現(xiàn)基于組件的軟件系統(tǒng)中組件的重用。文檔編號H04L29/06GK101311903SQ20071010485公開日2008年11月26日申請日期2007年5月22日優(yōu)先權(quán)日2007年5月22日發(fā)明者俊朱,李實(shí)恭,談華芳,偉趙,黃鶴遠(yuǎn)申請人:國際商業(yè)機(jī)器公司