專利名稱:基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)傳輸領(lǐng)域,特別涉及一種基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)及方法。
背景技術(shù):
計(jì)算機(jī)作為人類歷史上最偉大的發(fā)明之一,代替人工處理了大量的重復(fù)性的工作,特別是在企業(yè)應(yīng)用當(dāng)中,扮演著決策、生產(chǎn)、銷售、售后服務(wù)等過程中的諸多角色,降低了成本,大大提高了生產(chǎn)效率。為此,各個(gè)企業(yè)機(jī)構(gòu)進(jìn)行了大量的投資,針對各自的關(guān)注領(lǐng)域開發(fā)了各種類型的信息系統(tǒng),以幫助企業(yè)進(jìn)行內(nèi)部或外部業(yè)務(wù)的處理和管理。正是由于關(guān)注領(lǐng)域的不同,導(dǎo)致各類系統(tǒng)之間沒有統(tǒng)一的接口標(biāo)準(zhǔn)和規(guī)范,即使是在同一個(gè)企業(yè)內(nèi)部,各職能部門之間也會(huì)各自為政,眾多關(guān)鍵的信息被封閉在相互獨(dú)立的系統(tǒng)中,形成一個(gè)個(gè)所謂的“信息孤島”。使得企業(yè)的工作效率降低,運(yùn)營成本提高。隨著企業(yè)規(guī)模的擴(kuò)大,以及市場規(guī)則作用下企業(yè)的兼并破產(chǎn)行為,原有的信息系統(tǒng)也不可避免地會(huì)發(fā)生變化,如何適應(yīng)這種變化,如何將眾多的“信息孤島”聯(lián)系起來,以便讓不同的系統(tǒng)之間交互信息,成為亟待解決的問題。用于解決這一問題的異構(gòu)服務(wù)集成技術(shù)開始廣受關(guān)注。傳統(tǒng)的異構(gòu)服務(wù)集成技術(shù)往往使用具體的組件化和分布式技術(shù),如CORBA (Common Object Request Broker Architecture,公用對象請求代理體系結(jié)構(gòu))、C0M/DC0M、RMI 等, 這樣做雖然在一定程度上解決了集成問題,但一方面會(huì)使得系統(tǒng)結(jié)構(gòu)變復(fù)雜,對原有系統(tǒng)侵入性較大,另一方面,不同的技術(shù)體系之間相對獨(dú)立,雖然有這樣那樣的橋接技術(shù),但這些技術(shù)自身僅是針對某些特定的技術(shù)體系,這樣依然產(chǎn)生了更高層面上的針對不同技術(shù)體系的應(yīng)用集成問題。鑒于傳統(tǒng)異構(gòu)服務(wù)集成技術(shù)所具有的上述缺陷,本領(lǐng)域技術(shù)人員提出了 SOA(Service Oriented Architecture,面向服務(wù)的體系結(jié)構(gòu)),這類系統(tǒng)將異構(gòu)平臺(tái)上應(yīng)用程序的不同功能部件(也被稱為服務(wù))之間定義良好的接口和規(guī)范按松耦合方式整合在一起?;赟OA的相關(guān)思想,本領(lǐng)域技術(shù)人員又為Java進(jìn)一步提出了動(dòng)態(tài)、模塊化的體系模型 OSGi (Open Services Gateway initiative,開放服務(wù)網(wǎng)關(guān)協(xié)議)。OSGi中的運(yùn)行于OSGi內(nèi)核上的模塊被稱作bundle,bundle是由普通的JAR文件加上額外的元信息描述構(gòu)成的。bundle模塊之間通過元信息描述顯式地聲明包的導(dǎo)入、導(dǎo)出以實(shí)現(xiàn)代碼和資源的共享,而OSGi內(nèi)核自動(dòng)地處理bundle模塊之間的依賴解析。同時(shí), OSGi也提供了一個(gè)面向服務(wù)的編程模型,在OSGi中服務(wù)就是普通的Java對象,bundle模塊可以通過集中的服務(wù)中心來注冊其所提供的服務(wù),而其他bundle模塊可以通過注冊中心查詢、監(jiān)聽、獲取服務(wù)來實(shí)現(xiàn)bundle模塊之間松耦合的協(xié)作,服務(wù)的契約用Java接口和一系列服務(wù)屬性描述。近年來,隨著越來越多的大型應(yīng)用采用OSGi技術(shù),特別是EclipSe3. 0版本采用 OSGi來重構(gòu)其體系結(jié)構(gòu)以后,OSGi在企業(yè)計(jì)算領(lǐng)域也得到了越來越廣泛的應(yīng)用,如IBM的 WebSphere和Oracle/ΒΕΑ的WebLogic等都使用了 OSGi技術(shù)。雖然在OSGi中也定義了跨虛擬機(jī)的實(shí)現(xiàn)方式,但在具體實(shí)現(xiàn)上同樣采用某種具體的互操作機(jī)制,破壞了基于不同的遠(yuǎn)程訪問方式的OSGi容器之間進(jìn)行互操作的可能。
發(fā)明內(nèi)容
本發(fā)明的目的是克服基于現(xiàn)有技術(shù)的異構(gòu)服務(wù)集成系統(tǒng)采用某一種具體的互操作機(jī)制所帶來的局限性,從而提供一種適用范圍廣的異構(gòu)服務(wù)集成系統(tǒng)。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),包括Java 虛擬機(jī)、OSGi容器,還包括在所述OSGi容器上運(yùn)行的服務(wù)管理模塊、處理器管理模塊、監(jiān)視模塊、服務(wù)發(fā)現(xiàn)模塊以及處理器模塊;其中,所述的服務(wù)管理模塊負(fù)責(zé)監(jiān)聽遠(yuǎn)程服務(wù)注冊和使用請求,對不同類型的服務(wù)進(jìn)行管理,針對不同的服務(wù)配置類型,通知所述的處理器管理模塊進(jìn)行發(fā)布和調(diào)用;所述的處理器管理模塊用于對所述的處理器模塊進(jìn)行管理,并向遠(yuǎn)程端點(diǎn)發(fā)布和調(diào)用服務(wù),還根據(jù)所述服務(wù)管理模塊所傳遞的信息調(diào)用相應(yīng)的處理器模塊,維護(hù)當(dāng)前發(fā)布的服務(wù)以及使用的遠(yuǎn)程服務(wù)的信息;所述的監(jiān)視模塊負(fù)責(zé)監(jiān)視所述OSGi容器中的本地注冊中心,并從所述服務(wù)管理模塊得到要監(jiān)控的信息;所述的服務(wù)發(fā)現(xiàn)模塊用于實(shí)現(xiàn)遠(yuǎn)程的服務(wù)發(fā)現(xiàn);所述的處理器模塊用于實(shí)現(xiàn)所述OSGi容器內(nèi)的模塊向OSGi容器外的服務(wù)的訪問。 上述技術(shù)方案中,所述的處理器模塊包括web服務(wù)處理器模塊、CORBA處理器模塊以及SCA處理器模塊。上述技術(shù)方案中,所述的web服務(wù)處理器模塊采用Axis作為底層互操作組件。上述技術(shù)方案中,所述的CORBA處理器模塊采用JacORB作為底層互操作組件。上述技術(shù)方案中,SCA處理器模塊采用Apache Tuscany作為底層互操作組件。上述技術(shù)方案中,所述服務(wù)發(fā)現(xiàn)模塊包含用于發(fā)現(xiàn)某一種遠(yuǎn)程服務(wù)的服務(wù)發(fā)現(xiàn)方式;所述服務(wù)發(fā)現(xiàn)方式的種類與系統(tǒng)所能集成的異構(gòu)服務(wù)的種類有關(guān)。上述技術(shù)方案中,所述服務(wù)發(fā)現(xiàn)方式的種類包括UDDI、CORBA的名字服務(wù)機(jī)制、 SLP的服務(wù)發(fā)現(xiàn)機(jī)制以及本地配置文件。上述技術(shù)方案中,所述的處理器管理模塊將所述處理器模塊底層的遠(yuǎn)程互操作功能抽象出來,用統(tǒng)一的接口實(shí)現(xiàn)所述的向遠(yuǎn)程端點(diǎn)發(fā)布和調(diào)用服務(wù)。上述技術(shù)方案中,所述的要監(jiān)控的信息包括使用的遠(yuǎn)程服務(wù)、對外暴露的服務(wù)、 包的依賴關(guān)系以及本地的線程數(shù)和堆棧使用情況。本發(fā)明還提供了一種用于所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)的方法,包括步驟1)、允許遠(yuǎn)程訪問的服務(wù)在其所在節(jié)點(diǎn)的本地注冊中心上注冊;步驟2、、根據(jù)配置的類型將所述允許遠(yuǎn)程訪問的服務(wù)發(fā)布到遠(yuǎn)程;步驟幻、遠(yuǎn)程節(jié)點(diǎn)上的服務(wù)使用者向該節(jié)點(diǎn)上的服務(wù)注冊中心查詢所要訪問的服務(wù);步驟4)、當(dāng)所要訪問的服務(wù)在遠(yuǎn)程節(jié)點(diǎn)本地不存在時(shí),所述遠(yuǎn)程節(jié)點(diǎn)通過服務(wù)發(fā)現(xiàn)模塊進(jìn)行遠(yuǎn)程服務(wù)發(fā)現(xiàn),并根據(jù)配置的類型啟動(dòng)相應(yīng)的處理器模塊,完成服務(wù)調(diào)用。上述技術(shù)方案中,所述的步驟2、包括步驟2-1)、服務(wù)所在節(jié)點(diǎn)上的服務(wù)管理模塊監(jiān)控到注冊事件后,獲取該服務(wù)的描述信息,通知服務(wù)發(fā)現(xiàn)模塊創(chuàng)建服務(wù)描述實(shí)例;
步驟2- 、所述的服務(wù)發(fā)現(xiàn)模塊將服務(wù)注冊到遠(yuǎn)程服務(wù)注冊中心;步驟2- 、所述的處理器管理模塊根據(jù)配置的類型創(chuàng)建相應(yīng)的處理器模塊;步驟2-4)、處理器模塊根據(jù)服務(wù)描述實(shí)例發(fā)布該服務(wù)。上述技術(shù)方案中,所述的步驟4)包括步驟4-1)、遠(yuǎn)程節(jié)點(diǎn)上的服務(wù)管理模塊通過該節(jié)點(diǎn)上的服務(wù)發(fā)現(xiàn)模塊查詢哪個(gè)節(jié)點(diǎn)上存在所需要的服務(wù);步驟4- 、遠(yuǎn)程節(jié)點(diǎn)上的服務(wù)發(fā)現(xiàn)模塊根據(jù)查詢結(jié)果生成服務(wù)描述實(shí)例;步驟4- 、遠(yuǎn)程節(jié)點(diǎn)上的處理器管理模塊根據(jù)配置的類型創(chuàng)建對應(yīng)的處理器模塊;步驟4-4)、處理器模塊使用服務(wù)描述實(shí)例完成服務(wù)調(diào)用。本發(fā)明的優(yōu)點(diǎn)在于本發(fā)明具有廣泛的適用性和靈活性。
圖1為本發(fā)明的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)整體結(jié)構(gòu)圖;圖2為本發(fā)明的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)典型應(yīng)用場景圖;圖3為本發(fā)明的基于OSGi的異構(gòu)服務(wù)集成方法服務(wù)發(fā)布過程示意圖;圖4為本發(fā)明的基于OSGi的異構(gòu)服務(wù)集成方法服務(wù)查找和調(diào)用過程示意圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明加以說明。在圖1中給出了本發(fā)明的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)的整體結(jié)構(gòu),從圖中可以看出,該系統(tǒng)包括有JVM(Java Virtual Machine,Java虛擬機(jī))、OSGi容器、服務(wù)管理模塊、 處理器管理模塊、監(jiān)視模塊、服務(wù)發(fā)現(xiàn)模塊以及處理器模塊。下面對上述各個(gè)模塊的功能分別予以說明。所述的JVM為編程語言Java的運(yùn)行環(huán)境,所述的OSGi容器在本質(zhì)上是一個(gè)為 Java提供的動(dòng)態(tài)、模塊化的系統(tǒng),能夠?qū)\(yùn)行于其中的模塊(即Bundle)進(jìn)行管理。上述 JVM和OSGi容器的實(shí)現(xiàn)都為本領(lǐng)域的公知常識(shí),因此不在此做詳細(xì)說明。所述的服務(wù)管理模塊、處理器管理模塊、監(jiān)視模塊、服務(wù)發(fā)現(xiàn)模塊以及處理器模塊都在OSGi容器的基礎(chǔ)上予以運(yùn)行。所述的服務(wù)管理模塊負(fù)責(zé)監(jiān)聽遠(yuǎn)程服務(wù)注冊和使用請求,在本系統(tǒng)加載時(shí),該模塊需要向OSGi容器中的本地注冊中心注冊監(jiān)聽服務(wù),所注冊的監(jiān)聽服務(wù)針對遠(yuǎn)程服務(wù)注冊和使用請求有不同的實(shí)現(xiàn)方式,下面分別加以說明。對于遠(yuǎn)程服務(wù)的注冊而言,在執(zhí)行這一注冊過程時(shí),OSGi內(nèi)核會(huì)產(chǎn)生一個(gè)服務(wù)注冊的事件,而服務(wù)管理模塊使用OSGi內(nèi)核所提供WkrviceListener類接收到OSGi內(nèi)核發(fā)出的服務(wù)注冊事件,并通過OSGi內(nèi)核提供的上下文獲取到注冊服務(wù)的屬性信息。該屬性信息以字符串的形式表示,并在服務(wù)注冊的時(shí)候被寫入到本地注冊中心。例如,屬性信息中包含“Remote”字段,表示具有該屬性的服務(wù)希望發(fā)布給遠(yuǎn)程使用;屬性信息中包含“Type” 字段,則指明了具有該屬性的服務(wù)的發(fā)布類型信息,如“0)1^”、“1吐”、“504”等都表明了服務(wù)發(fā)布時(shí)采用的方式,如采用“#,,則表明要使用所支持的所有類型進(jìn)行發(fā)布;如屬性信息中包含“Method”字段表明需要發(fā)布的服務(wù)對象內(nèi)的方法名,默認(rèn)為“*”,即全部方法。在完成上述的遠(yuǎn)程服務(wù)注冊后,服務(wù)管理模塊就會(huì)通知處理器管理模塊進(jìn)行服務(wù)發(fā)布。對于服務(wù)使用請求,服務(wù)管理模塊使用OSGi內(nèi)核提供的LiStenerHOOK類。該類包含三個(gè)回調(diào)函數(shù)分別用于處理以下三種情況(1)當(dāng)所需的服務(wù)到來時(shí)該怎么處理;⑵ 當(dāng)所需的服務(wù)被注銷時(shí)該怎么處理;(3)當(dāng)所需的服務(wù)發(fā)生改變(如服務(wù)屬性的改變)時(shí)怎么處理。同時(shí),ListenerHOOK類還包含一個(gè)ListeneHnfo類型的私有類,當(dāng)有服務(wù)使用請求時(shí),Listenerlnfo類型會(huì)實(shí)例化為具體的請求信息(包括服務(wù)接口名,調(diào)用的函數(shù)名, 使用的通信方式等),服務(wù)管理模塊得到這些請求信息,通過一個(gè)字符串來描述所要使用的服務(wù),通知服務(wù)發(fā)現(xiàn)模塊進(jìn)行服務(wù)發(fā)現(xiàn)。另外,在服務(wù)管理模塊內(nèi)包含一個(gè)鏈表的數(shù)據(jù)結(jié)構(gòu),記錄了當(dāng)前已經(jīng)發(fā)布的和正在調(diào)用的遠(yuǎn)程服務(wù)的信息,進(jìn)而可以對不同類型的服務(wù)進(jìn)行管理。服務(wù)管理模塊以及下文中所提到的模塊都可由OSGi中的Bundle模塊實(shí)現(xiàn)。處理器管理模塊用于對不同的處理器模塊進(jìn)行管理,包括不同處理器模塊的創(chuàng)建、初始化、注銷等。該模塊內(nèi)定義了一個(gè)名為Handler的接口類,該接口中定義了一個(gè) Endpointdescription類型(端點(diǎn)描述實(shí)例,包含了諸如服務(wù)ID、框架UUID、接口名、服務(wù)發(fā)布方式等服務(wù)描述信息)的私有屬性以及ExportO和ImportO兩個(gè)抽象的方法,由本模塊派生出來的處理器模塊都需要實(shí)現(xiàn)上述接口類及其屬性和方法,這樣就將處理器模塊的底層的遠(yuǎn)程互操作功能抽象出來,使得處理器模塊能夠用統(tǒng)一的接口向遠(yuǎn)程端點(diǎn)發(fā)布服務(wù),及從遠(yuǎn)程端點(diǎn)調(diào)用服務(wù)。在本實(shí)施例中,處理器管理模塊可采用軟件工程中的工廠模式實(shí)現(xiàn),這一模式的應(yīng)用有利于提高處理器管理模塊的擴(kuò)展性。處理器管理模塊與服務(wù)管理模塊之間通過OSGi規(guī)范提供的RSAListener類所提供的方法進(jìn)行通信,使得處理器管理模塊可以得到從服務(wù)管理模塊傳遞來的配置類型和服務(wù)描述信息,從而調(diào)用對應(yīng)的處理器模塊進(jìn)行處理。處理器管理模塊還能維護(hù)當(dāng)前發(fā)布的服務(wù)和使用的遠(yuǎn)程服務(wù),以及服務(wù)的創(chuàng)建、刪除、調(diào)用的失敗等信息,并通知給服務(wù)管理模塊,這樣服務(wù)管理模塊就可以了解當(dāng)前狀態(tài),并對前述的鏈表進(jìn)行維護(hù)。監(jiān)視模塊負(fù)責(zé)使用前述的監(jiān)聽服務(wù)監(jiān)視OSGi容器內(nèi)的本地注冊中心,同時(shí)還會(huì)使用OSGi規(guī)范提供的EndpointListener類(該類包含一個(gè)服務(wù)引用類型的屬性和 EndpointAdded ()、EndpointRemoved ()、Export ()、Import ()、getEndpoint ()等方法,分另■」 對服務(wù)發(fā)布和服務(wù)調(diào)用過程中端點(diǎn)描述實(shí)例的增減等進(jìn)行控制),所述由服務(wù)管理模塊處得到遠(yuǎn)程服務(wù)的相關(guān)信息。這些信息主要包括使用的遠(yuǎn)程服務(wù)、對外暴露的服務(wù)、包的依賴關(guān)系等;另外還會(huì)基于JAVA語言提供的Thread. currentThread ()、getThreadGroup () 方法得至Ij本地的線程數(shù),使用 java. lang. Runtime. totalMemory ()禾口 java. lang. Runtime. freeMemoryO等方法并使用自定義的算法獲得本地堆棧使用情況。上述的信息和運(yùn)行情況都會(huì)以可視化的形式展現(xiàn);此外,該模塊還要根據(jù)監(jiān)控信息對系統(tǒng)的運(yùn)行狀態(tài)做出評估, 進(jìn)而能夠基于JAVA語言提供的java. lang. Runtime, gc ()函數(shù)以及OSGi內(nèi)核提供的針對 Bundle生命周期進(jìn)行管理的一系列控制臺(tái)命令等相關(guān)機(jī)制主動(dòng)地改變系統(tǒng)運(yùn)行行為,使得在盡可能少的人為干預(yù)下,系統(tǒng)能夠長時(shí)間運(yùn)行在良好狀態(tài)。服務(wù)發(fā)現(xiàn)模塊負(fù)責(zé)遠(yuǎn)程的服務(wù)發(fā)現(xiàn)。跟處理器管理模塊類似,該模塊包括有一個(gè)Discovery的接口類,該類包含一個(gè)krviceReference類型(服務(wù)引用,可以理解成一個(gè)具體的服務(wù)對象的對象名)的私有屬性,用來記錄由服務(wù)管理模塊傳遞來的服務(wù)描述信息, 還包含Export ()、Search ()以及GenerateEndpoint ()三個(gè)抽象方法,分別對應(yīng)于服務(wù)發(fā)布、服務(wù)查詢過程以及產(chǎn)生EndpointDescription實(shí)例的方法。在本實(shí)施例中,在該模塊內(nèi)創(chuàng)建了 UDDI、CORBA的名字服務(wù)機(jī)制、SLP的服務(wù)發(fā)現(xiàn)機(jī)制以及本地配置文件等多種服務(wù)發(fā)現(xiàn)方式。每種方式都實(shí)現(xiàn)了上述的Discovery接口,同時(shí),系統(tǒng)運(yùn)行前可以配置需要加載的服務(wù)發(fā)現(xiàn)類型。服務(wù)發(fā)現(xiàn)模塊使用EndpointListener類跟服務(wù)管理模塊進(jìn)行交互。服務(wù)發(fā)現(xiàn)模塊對于服務(wù)發(fā)布過程與服務(wù)調(diào)用過程有不同的處理,下面分別予以說明。對于服務(wù)發(fā)布過程,當(dāng)所述的服務(wù)管理模塊監(jiān)聽到服務(wù)發(fā)布事件后,服務(wù)發(fā)現(xiàn)模塊就會(huì)接收到服務(wù)管理模塊傳遞來krviceReference類型的參數(shù),然后調(diào)用 GenerateEndpointO方法產(chǎn)生EndpointDescription實(shí)例,并傳遞給服務(wù)管理模塊。根據(jù)前述的配置的加載的服務(wù)發(fā)現(xiàn)類型,寫入本地文件或者向遠(yuǎn)程的服務(wù)注冊中心注冊。對于服務(wù)調(diào)用過程,當(dāng)所述的服務(wù)管理模塊監(jiān)聽到遠(yuǎn)程服務(wù)調(diào)用請求后,如果請求的服務(wù)屬性中包含“configfile”字段,服務(wù)發(fā)現(xiàn)模塊從本地的默認(rèn)位置讀取配置文件的信息,配置文件通常是一個(gè)*. xml文件,里面用標(biāo)準(zhǔn)的xml語法描述了遠(yuǎn)程服務(wù)的信息,包括地址、暴露的類名、方法名等等,如果不含上述“configfile”字段,則啟動(dòng)配置的服務(wù)發(fā)現(xiàn)方式到遠(yuǎn)程注冊中心查找,最后調(diào)用GenerateEndpointO方法產(chǎn)生 EndpointDescription實(shí)例,并傳遞給服務(wù)管理模塊。處理器模塊基于現(xiàn)有的遠(yuǎn)程互操作實(shí)現(xiàn)機(jī)制(如C0RBA、WebService等等)完成 OSGi容器內(nèi)的模塊對OSGi容器外的服務(wù)的訪問過程。處理器模塊根據(jù)服務(wù)的類型有多種類型,在本實(shí)施例中包括有web服務(wù)處理器模塊、CORBA處理器模塊以及SCA處理器模決。 處理器模塊的類型也可根據(jù)需要靈活地增加或減少。所有類型的處理器模塊都由處理器管理模塊產(chǎn)生,由于每種處理器都實(shí)現(xiàn)了前面所述的Handler接口類,因此,都會(huì)擁有一些共同的屬性和方法。使用這些共同的方法可以分別對不同配置類型的服務(wù)發(fā)布和服務(wù)調(diào)用進(jìn)行處理。每種處理器模塊中都建立了相應(yīng)的運(yùn)行時(shí)組件,如C0RBA處理器模塊使用JacORB ( 一個(gè)開放源碼的CORBA產(chǎn)品,設(shè)計(jì)支持 Java語言映射,滿足C0RBA2. 3標(biāo)準(zhǔn)并提供廣泛的平臺(tái)支持)作為CORBA配置類型服務(wù)的底層互操作組件。類似的,Web服務(wù)處理器模塊和SCA處理器模塊分別使用Axis (全稱Apache extensible Interaction System, ^ apache ^RT"白勺—f Jf ^1 g,lit webservice 開發(fā)的)和Apache Tuscany (—個(gè)開源項(xiàng)目,提供一個(gè)SOA基礎(chǔ)設(shè)施和SCA運(yùn)行時(shí)環(huán)境, Tuscany項(xiàng)目本身并不提供SOA開發(fā)和管理IDE插件)作為相應(yīng)的配置類型服務(wù)的底層互操作組件。在某種具體的處理器創(chuàng)建階段,前述的EndpointDescription類型的私有屬性會(huì)使用服務(wù)管理模塊從服務(wù)發(fā)現(xiàn)模塊得來的EndpointDescription實(shí)例初始化,同時(shí),該處理器所采用的運(yùn)行時(shí)組件,會(huì)針對其特有的編程模型進(jìn)行一些初始化工作,如類庫的加載、 通信協(xié)議的建立。在CORBA中,對應(yīng)于初始化0RB、初始化POA等,對于W^ebService,對應(yīng)于初始化Axis引擎等,對于SCA,對應(yīng)于初始化Tuscany,實(shí)例化SCADomain等;在運(yùn)行階段, 某種具體的處理器的export ()和import ()方法會(huì)被調(diào)用,進(jìn)行服務(wù)的發(fā)布和調(diào)用;在注銷階段,各處理器的析構(gòu)函數(shù)會(huì)被調(diào)用,完成資源釋放等工作。需要說明的是上述初始化過程、運(yùn)行期以及注銷時(shí)的操作,針對某種具體的處理器都需要遵循各自的編程模型,而這些編程模型都是公知的,因此沒有贅述。以上是對本發(fā)明的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)中各個(gè)功能模塊的說明。下面結(jié)合這些模塊,對本發(fā)明如何進(jìn)行遠(yuǎn)程服務(wù)的注冊,遠(yuǎn)程服務(wù)的查找和使用分別予以說明。為了便于理解,如圖2,給出了一個(gè)使用本發(fā)明的典型應(yīng)用場景,該場景中共有A、 B、C、D、E五個(gè)節(jié)點(diǎn),節(jié)點(diǎn)A提供CORBA服務(wù),節(jié)點(diǎn)B提供SCA服務(wù),節(jié)點(diǎn)C提供Web服務(wù),節(jié)點(diǎn)D提供運(yùn)行于OSGi容器的OSGi服務(wù),而節(jié)點(diǎn)E則是服務(wù)的使用者,該使用者運(yùn)行于OSGi 容器內(nèi)。結(jié)合圖3對遠(yuǎn)程服務(wù)的注冊過程加以說明。節(jié)點(diǎn)D內(nèi)的OSGi本地服務(wù)需要發(fā)布給遠(yuǎn)程的節(jié)點(diǎn)A、B、C、E。在將本地服務(wù)發(fā)布到遠(yuǎn)程節(jié)點(diǎn)之前,首先需要做基本的注冊操作。 這一注冊操作包括由節(jié)點(diǎn)D上的監(jiān)視模塊向位于本節(jié)點(diǎn)的OSGi容器內(nèi)的本地注冊中心注冊監(jiān)聽服務(wù),并由該監(jiān)視模塊監(jiān)視OSGi容器的運(yùn)行情況;然后,由服務(wù)管理模塊向本地注冊中心注冊監(jiān)聽服務(wù)(服務(wù)管理模塊所注冊的監(jiān)聽服務(wù)與監(jiān)視模塊所注冊的監(jiān)聽服務(wù)的內(nèi)容不同),監(jiān)視服務(wù)注冊事件。上述注冊操作不僅僅是遠(yuǎn)程服務(wù)的注冊過程所要完成的, 在遠(yuǎn)程服務(wù)的查找與使用之前,同樣要完成類似的注冊操作。在完成上述注冊操作后,服務(wù)提供者(即節(jié)點(diǎn)D內(nèi)的OSGi本地服務(wù))向所述的本地注冊中心注冊,由于該服務(wù)要向遠(yuǎn)程節(jié)點(diǎn)A、B、C、E發(fā)布,因此該服務(wù)具有遠(yuǎn)程屬性。接著,服務(wù)管理模塊從本地注冊中心獲取所要發(fā)布服務(wù)的遠(yuǎn)程屬性,將所得到的所述遠(yuǎn)程屬性發(fā)送到服務(wù)發(fā)現(xiàn)模塊,由服務(wù)發(fā)現(xiàn)模塊根據(jù)服務(wù)的遠(yuǎn)程屬性信息創(chuàng)建端點(diǎn)描述實(shí)例,所述端點(diǎn)描述實(shí)例中包括服務(wù)的屬性,服務(wù)ID,框架ID等服務(wù)描述信息。所述服務(wù)發(fā)現(xiàn)模塊根據(jù)端點(diǎn)描述實(shí)例中的信息將所要發(fā)布的服務(wù)注冊到諸如CORBA的名字服務(wù)器或者UDDI 的遠(yuǎn)程注冊中心等。最后,所述處理器管理模塊還要根據(jù)所述遠(yuǎn)程屬性以及服務(wù)提供者向本地注冊中心注冊服務(wù)時(shí)所標(biāo)識(shí)的配置類型信息(如C0RBA、Web、SCA中的一種或幾種的組合),創(chuàng)建對應(yīng)的處理器模塊,由所述的處理器模塊根據(jù)服務(wù)描述實(shí)例發(fā)布服務(wù)。以上是對遠(yuǎn)程服務(wù)注冊過程的說明,下面結(jié)合圖4對遠(yuǎn)程服務(wù)的查找和使用過程加以說明。在完成基本的注冊操作后,節(jié)點(diǎn)E本地的OSGi Bundle (即服務(wù)使用者)調(diào)用遠(yuǎn)程服務(wù)時(shí),首先在節(jié)點(diǎn)E上的本地注冊中心查找,該本地注冊中心發(fā)現(xiàn)需要的服務(wù)帶有遠(yuǎn)程屬性,會(huì)通知服務(wù)管理模塊,啟動(dòng)節(jié)點(diǎn)E上的服務(wù)發(fā)現(xiàn)模塊。該服務(wù)發(fā)現(xiàn)模塊使用對應(yīng)的服務(wù)發(fā)現(xiàn)方式到遠(yuǎn)程中心查找,根據(jù)查找的結(jié)果生成服務(wù)描述實(shí)例。在得到服務(wù)描述實(shí)例后,服務(wù)管理模塊通知處理器管理模塊根據(jù)服務(wù)描述實(shí)例中的服務(wù)描述信息和配置類型信息(如CORBA、Web、SCA中的一種或幾種的組合)派生出對應(yīng)的處理器模塊,為遠(yuǎn)程的服務(wù)創(chuàng)建本地代理并將該代理注冊為本地服務(wù),這樣服務(wù)消費(fèi)者就可以像使用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù)。以上是對本發(fā)明的異構(gòu)服務(wù)集成系統(tǒng)以及相關(guān)集成過程的說明。由于本發(fā)明將不同類型的處理器模塊的共有的底層的遠(yuǎn)程互操作功能抽象出來形成獨(dú)立的處理器管理模塊,使得不同的處理器模塊都能用統(tǒng)一的接口向遠(yuǎn)程端點(diǎn)發(fā)布服務(wù),及從遠(yuǎn)程端點(diǎn)調(diào)用服務(wù),從而克服了現(xiàn)有的異構(gòu)服務(wù)系統(tǒng)由于基于特定互操作機(jī)制所帶來的適用范圍較窄的缺陷,具有廣泛的適用性和靈活性。
最后所應(yīng)說明的是,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制。盡管參照實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),包括Java虛擬機(jī)、OSGi容器,其特征在于,還包括在所述OSGi容器上運(yùn)行的服務(wù)管理模塊、處理器管理模塊、監(jiān)視模塊、服務(wù)發(fā)現(xiàn)模塊以及處理器模塊;其中,所述的服務(wù)管理模塊負(fù)責(zé)監(jiān)聽遠(yuǎn)程服務(wù)注冊和使用請求,對不同類型的服務(wù)進(jìn)行管理,針對不同的服務(wù)配置類型,通知所述的處理器管理模塊進(jìn)行發(fā)布和調(diào)用;所述的處理器管理模塊用于對所述的處理器模塊進(jìn)行管理,并向遠(yuǎn)程端點(diǎn)發(fā)布和調(diào)用服務(wù),還根據(jù)所述服務(wù)管理模塊所傳遞的信息調(diào)用相應(yīng)的處理器模塊,維護(hù)當(dāng)前發(fā)布的服務(wù)以及使用的遠(yuǎn)程服務(wù)的信息;所述的監(jiān)視模塊負(fù)責(zé)監(jiān)視所述OSGi容器中的本地注冊中心,并從所述服務(wù)管理模塊得到要監(jiān)控的信息;所述的服務(wù)發(fā)現(xiàn)模塊用于實(shí)現(xiàn)遠(yuǎn)程的服務(wù)發(fā)現(xiàn);所述的處理器模塊用于實(shí)現(xiàn)所述OSGi容器內(nèi)的模塊向OSGi容器外的服務(wù)的訪問。
2.根據(jù)權(quán)利要求1所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述的處理器模塊包括web服務(wù)處理器模塊、CORBA處理器模塊以及SCA處理器模塊。
3.根據(jù)權(quán)利要求2所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述的web服務(wù)處理器模塊采用Axis作為底層互操作組件。
4.根據(jù)權(quán)利要求2所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述的CORBA 處理器模塊采用JacORB作為底層互操作組件。
5.根據(jù)權(quán)利要求2所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,SCA處理器模塊采用Apache Tuscany作為底層互操作組件。
6.根據(jù)權(quán)利要求2所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述服務(wù)發(fā)現(xiàn)模塊包含用于發(fā)現(xiàn)某一種遠(yuǎn)程服務(wù)的服務(wù)發(fā)現(xiàn)方式;所述服務(wù)發(fā)現(xiàn)方式的種類與系統(tǒng)所能集成的異構(gòu)服務(wù)的種類有關(guān)。
7.根據(jù)權(quán)利要求6所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述服務(wù)發(fā)現(xiàn)方式的種類包括UDDI、CORBA的名字服務(wù)機(jī)制、SLP的服務(wù)發(fā)現(xiàn)機(jī)制以及本地配置文件。
8.根據(jù)權(quán)利要求1或2所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述的處理器管理模塊將所述處理器模塊底層的遠(yuǎn)程互操作功能抽象出來,用統(tǒng)一的接口實(shí)現(xiàn)所述的向遠(yuǎn)程端點(diǎn)發(fā)布和調(diào)用服務(wù)。
9.根據(jù)權(quán)利要求1或2所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),其特征在于,所述的要監(jiān)控的信息包括使用的遠(yuǎn)程服務(wù)、對外暴露的服務(wù)、包的依賴關(guān)系以及本地的線程數(shù)和堆棧使用情況。
10.一種用于權(quán)利要求1-9之一所述的基于OSGi的異構(gòu)服務(wù)集成系統(tǒng)的方法,包括步驟1)、允許遠(yuǎn)程訪問的服務(wù)在其所在節(jié)點(diǎn)的本地注冊中心上注冊;步驟2、、根據(jù)配置的類型將所述允許遠(yuǎn)程訪問的服務(wù)發(fā)布到遠(yuǎn)程;步驟幻、遠(yuǎn)程節(jié)點(diǎn)上的服務(wù)使用者向該節(jié)點(diǎn)上的服務(wù)注冊中心查詢所要訪問的服務(wù);步驟4)、當(dāng)所要訪問的服務(wù)在遠(yuǎn)程節(jié)點(diǎn)本地不存在時(shí),所述遠(yuǎn)程節(jié)點(diǎn)通過服務(wù)發(fā)現(xiàn)模塊進(jìn)行遠(yuǎn)程服務(wù)發(fā)現(xiàn),并根據(jù)配置的類型啟動(dòng)相應(yīng)的處理器模塊,完成服務(wù)調(diào)用。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述的步驟2、包括步驟2-1)、服務(wù)所在節(jié)點(diǎn)上的服務(wù)管理模塊監(jiān)控到注冊事件后,獲取該服務(wù)的描述信息,通知服務(wù)發(fā)現(xiàn)模塊創(chuàng)建服務(wù)描述實(shí)例;步驟2-2~)、所述的服務(wù)發(fā)現(xiàn)模塊將服務(wù)注冊到遠(yuǎn)程服務(wù)注冊中心;步驟2- 、所述的處理器管理模塊根據(jù)配置的類型創(chuàng)建相應(yīng)的處理器模塊; 步驟2-4)、處理器模塊根據(jù)服務(wù)描述實(shí)例發(fā)布該服務(wù)。
12.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述的步驟4)包括 步驟4-1)、遠(yuǎn)程節(jié)點(diǎn)上的服務(wù)管理模塊通過該節(jié)點(diǎn)上的服務(wù)發(fā)現(xiàn)模塊查詢哪個(gè)節(jié)點(diǎn)上存在所需要的服務(wù);步驟4- 、遠(yuǎn)程節(jié)點(diǎn)上的服務(wù)發(fā)現(xiàn)模塊根據(jù)查詢結(jié)果生成服務(wù)描述實(shí)例; 步驟4- 、遠(yuǎn)程節(jié)點(diǎn)上的處理器管理模塊根據(jù)配置的類型創(chuàng)建對應(yīng)的處理器模塊; 步驟4-4)、處理器模塊使用服務(wù)描述實(shí)例完成服務(wù)調(diào)用。
全文摘要
本發(fā)明提供一種基于OSGi的異構(gòu)服務(wù)集成系統(tǒng),包括Java虛擬機(jī)、OSGi容器,還包括服務(wù)管理模塊、處理器管理模塊、監(jiān)視模塊、服務(wù)發(fā)現(xiàn)模塊以及處理器模塊;其中,服務(wù)管理模塊負(fù)責(zé)監(jiān)聽遠(yuǎn)程服務(wù)注冊和使用請求,對不同類型的服務(wù)進(jìn)行管理,針對不同的服務(wù)配置類型,通知處理器管理模塊進(jìn)行發(fā)布和調(diào)用;處理器管理模塊用于對處理器模塊進(jìn)行管理,并向遠(yuǎn)程端點(diǎn)發(fā)布和調(diào)用服務(wù),還根據(jù)服務(wù)管理模塊所傳遞的信息調(diào)用處理器模塊,維護(hù)當(dāng)前發(fā)布的服務(wù)以及使用的遠(yuǎn)程服務(wù)的信息;監(jiān)視模塊負(fù)責(zé)監(jiān)視本地注冊中心,并從服務(wù)管理模塊得到要監(jiān)控的信息;服務(wù)發(fā)現(xiàn)模塊用于實(shí)現(xiàn)遠(yuǎn)程的服務(wù)發(fā)現(xiàn);處理器模塊用于實(shí)現(xiàn)OSGi容器內(nèi)的模塊向OSGi容器外的服務(wù)的訪問。
文檔編號(hào)H04L29/06GK102377796SQ20101025192
公開日2012年3月14日 申請日期2010年8月5日 優(yōu)先權(quán)日2010年8月5日
發(fā)明者丁博, 劉惠, 史殿習(xí), 尹剛, 張威, 楊永志, 滕猛, 王懷民, 饒翔 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)