亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

Idl調(diào)用裝置及調(diào)用方法

文檔序號:6573307閱讀:579來源:國知局
專利名稱:Idl調(diào)用裝置及調(diào)用方法
技術(shù)領(lǐng)域
本發(fā)明涉及IDL調(diào)用技術(shù),尤其是一種IDL調(diào)用裝置及調(diào)用方法。
背景技術(shù)
目前,國際上較具影響力的分布式組件對象標準有以下三種微軟公司的分布式組件對象模型(Distributed Component Object Model,以下簡稱DCOM)、OMG組織的通用對象請求代理架構(gòu)(Common Object Request BrokerArchitecture,以下簡稱CORBA)與SUN公司的Java2平臺企業(yè)版(Java2Platform,Enterprise Edition,以下簡稱J2EE)。其中,DCOM作為微軟公司提出的分布式組件對象模型標準,支持在局域網(wǎng)、廣域網(wǎng)甚至Internet上不同計算機的對象之間的通訊,但其僅適用于Windows環(huán)境;J2EE作為SUN公司提出的分布式對象總線標準,只能用JAVA實現(xiàn),無法做到組件調(diào)用透明化;而CORBA是由OMG組織制訂的一種標準的面向?qū)ο髴?yīng)用程序體系規(guī)范,由對象請求代理(以下簡稱ORB)、對象服務(wù)、公共設(shè)施、域接口與應(yīng)用接口等幾個部分組成,其跨平臺性優(yōu)于其它的中間件,可以在各種語言環(huán)境下進行分布式系統(tǒng)網(wǎng)絡(luò)互操作,能在多層分布式系統(tǒng)中應(yīng)用得更廣泛、更靈活,使網(wǎng)絡(luò)互操作更容易。
如圖1所示,為現(xiàn)有技術(shù)CORBA的結(jié)構(gòu)示意圖,其由動態(tài)調(diào)用接口(以下簡稱DII)、接口定義語言(以下簡稱IDL)、對象請求代理(以下簡稱ORB)核心、接口庫(以下簡稱IR)、動態(tài)框架接口(以下簡稱DSI)與對象適配器(以下簡稱OA)構(gòu)成。
其中,ORB核心是使得客戶應(yīng)用程序能調(diào)用遠端對象方法的機制,是CORBA的核心組件,其提供了識別和定位對象、處理連接管理、傳送數(shù)據(jù)和請求通信所需的框架結(jié)構(gòu)。具體地,當(dāng)客戶應(yīng)用程序要調(diào)用遠程對象上的方法時,首先要得到這個遠程對象引用,然后就可以像調(diào)用本地對象一樣調(diào)用遠程對象。當(dāng)客戶應(yīng)用程序發(fā)出一個調(diào)用時,ORB核心會將調(diào)用的名字、參數(shù)等信息編碼成標準格式,通過網(wǎng)絡(luò)傳輸?shù)椒?wù)器上(同一臺機器上也如此);服務(wù)器將參數(shù)解碼后傳到正確的對象上,該過程即為重定向;對象處理完成后,ORB通過同樣的編碼/解碼方式將調(diào)用結(jié)果返回給客戶應(yīng)用程序。
IDL定義了CORBA對象之間的接口,用IDL描述的接口可以映射到任何編程語言,在確保CORBA的語言無關(guān)性方面起著重要的作用。一個IDL文件經(jīng)IDL編譯器編譯后自動生成IDL存根(Stub)與IDL框架(Skeleton),“Stub”放置在客戶端,“Skeleton”放在服務(wù)器端?!癝tub”在客戶激活調(diào)用時,同Client及ORB聯(lián)系,將IDL定義的對象類型的OMG IDL操作定義映射到客戶應(yīng)用程序激活調(diào)用時要調(diào)用的一套與編程語言有關(guān)的例程。它只實現(xiàn)本地代理并不負責(zé)對象的實現(xiàn),對象引用到ORB的傳遞由存根實現(xiàn)?!癝keleton”的功能在于接受由“Stub”對“Invoke”的調(diào)用而傳來的消息,當(dāng)它收到消息后,就調(diào)用真正的GetName方法,然后將結(jié)果包裝起來迅速傳給客戶應(yīng)用程序。通常包含將一個對象上的操作映射到合適的實現(xiàn)與方法上的必要信息,并且提供調(diào)度請求到適當(dāng)方法的必要代碼。
DII同客戶端(Client)、ORB核心、IR連接,客戶應(yīng)用程序使用這些標準的應(yīng)用程序接口(以下簡稱API)動態(tài)地發(fā)起一個CORBA調(diào)用,不需“Stub”起作用。
DSI是一組標準的API,服務(wù)器可以通過它決定一些問題,如調(diào)用哪個對象、調(diào)用對象的哪個操作、操作的參數(shù)是什么等。
IR包含有API與網(wǎng)絡(luò)上存在的數(shù)據(jù)對象的描述,其作用是為動態(tài)激發(fā)請求提供信息,即能夠在程序運行時刻提供被調(diào)用對象的一些信息如對象有哪些操作,每個對象的參數(shù)有哪些,參數(shù)的數(shù)據(jù)類型是哪些等。
OA提供了服務(wù)器端對象與ORB核心之間的適配層,實現(xiàn)請求到服務(wù)的調(diào)度,一個OA就是一個對象。具有以下功能創(chuàng)建對象引用;確保每個目標對象由一個伺服程序來具體化;獲取由一個服務(wù)器端ORB調(diào)度的請求,并進一步將該請求直接傳送給已具體化為目標對象的伺服程序。
在CORBA中,分布式調(diào)用有“oneway”與“twoway”兩種模式。其中,“oneway”是無應(yīng)答調(diào)用,在IDL聲明中表現(xiàn)為“oneway”前綴以及函數(shù)返回值必須是“void”,系統(tǒng)不保證調(diào)用請求的送達;“twoway”是有應(yīng)答調(diào)用,在IDL聲明中不帶前綴默認為“twoway”,系統(tǒng)保證回送應(yīng)答。
若要實現(xiàn)方法調(diào)用與異步消息之間的映射,“Stub”與“Skeleton”需要完成的關(guān)鍵的工作包括分別通過“Marshal”與“Unmarshal”將方法調(diào)用編碼為請求消息,以及將應(yīng)答消息解碼為返回值與輸出參數(shù);支持同步調(diào)用,同步調(diào)用會阻塞調(diào)用者線程,直到調(diào)用完成或超時才能處理后續(xù)的邏輯。
圖2所示為現(xiàn)有技術(shù)CORBA實現(xiàn)對象引用的原理圖,其具體操作如下客戶應(yīng)用程序通過注冊的服務(wù)名或分布式對象引用獲取被調(diào)用對象的對象引用;若該對象實現(xiàn)存在相應(yīng)的“Stub”,則進行后續(xù)調(diào)用,客戶應(yīng)用程序通過該“Stub”向ORB核心發(fā)送對象調(diào)用請求;ORB核心將該對象調(diào)用請求發(fā)送給相應(yīng)的OA;OA判斷該對象調(diào)用請求所請求的對象實現(xiàn)是否存在“Skeleton”,若存在,則OA通過該“Skeleton”調(diào)用對象中的操作;若不存在,則OA通過ORB向客戶應(yīng)用程序返回系統(tǒng)異常的通知消息,本次調(diào)用失敗。
對象實現(xiàn)的特定操作執(zhí)行完成后,對象執(zhí)行操作產(chǎn)生的結(jié)果,包括輸出參數(shù)、輸入輸出參數(shù)、返回值、異常信息等,由服務(wù)器端應(yīng)用程序按照對象調(diào)用請求傳遞與執(zhí)行路徑,將對象執(zhí)行操作產(chǎn)生的結(jié)果逆向返回給客戶應(yīng)用程序。
在CORBA平臺中,所有服務(wù)(Service)都是一個個相互獨立的進程,服務(wù)之間沒有關(guān)聯(lián),不易于管理;另外,這些服務(wù)之間進行IDL調(diào)用時,不管調(diào)用雙方是否在同一臺機器上,都必須進行IDL遠程調(diào)用,即必須將調(diào)用轉(zhuǎn)換為消息進行編/解碼與調(diào)度。當(dāng)調(diào)用服務(wù)雙方運行在同一臺機器上時,一方服務(wù)仍然需要對另一方服務(wù)進行IDL遠程調(diào)用,而通過將調(diào)用轉(zhuǎn)換為消息進行編/解碼與調(diào)度的過程占用了有限的CORBA平臺系統(tǒng)的資源,隨著網(wǎng)絡(luò)系統(tǒng)的日益龐大與復(fù)雜,對CORBA平臺系統(tǒng)的資源需求也日益提高,而不必要的資源占用可能會導(dǎo)致CORBA平臺系統(tǒng)的資源緊缺,從而無法處理運行在不同機器上的服務(wù)雙方調(diào)用的正常調(diào)用請求;并且,將調(diào)用轉(zhuǎn)換為消息進行編/解碼與調(diào)度的過程還需要一定的時間實現(xiàn),這就影響了IDL調(diào)用速度,進一步影響了CORBA平臺系統(tǒng)的調(diào)用性能,本發(fā)明人通過研究發(fā)現(xiàn),采用現(xiàn)有技術(shù)的該調(diào)用方法,調(diào)用服務(wù)雙方運行在同一臺機器上時的調(diào)用性能并不高于調(diào)用雙方運行在兩臺機器上的調(diào)用性能,這也進一步限制了CORBA平臺系統(tǒng)的工作效率。

發(fā)明內(nèi)容
本發(fā)明實施例所要解決的技術(shù)問題是當(dāng)調(diào)用服務(wù)對象雙方運行在同一臺機器上時,仍然需要進行IDL遠程調(diào)用,占用了不必要的系統(tǒng)資源,且影響了IDL調(diào)用速度與調(diào)用性能,限制了CORBA平臺系統(tǒng)的工作效率。
根據(jù)本發(fā)明的一個方面,提供一種IDL調(diào)用方法,其包括以下步驟接收服務(wù)對象調(diào)用請求,該服務(wù)對象調(diào)用請求中包含標識請求調(diào)用的服務(wù)對象的服務(wù)對象標識與標識客戶應(yīng)用程序的客戶應(yīng)用程序標識;根據(jù)所述服務(wù)對象標識與所述客戶應(yīng)用程序標識,判斷所述客戶應(yīng)用程序與所述服務(wù)對象是否存在于同一個用于加載服務(wù)對象的容器進程中;所述客戶應(yīng)用程序與所述服務(wù)對象存在于同一個容器進程中時,所述客戶應(yīng)用程序?qū)λ龇?wù)對象進行本地調(diào)用。
根據(jù)本發(fā)明的另一個方面,提供一種IDL調(diào)用裝置,包括服務(wù)對象的框架,還包括客戶應(yīng)用程序的存根,用于生成并發(fā)送服務(wù)對象調(diào)用請求,以及利用接收到的服務(wù)對象指針對所述服務(wù)對象進行本地調(diào)用,在接收到無法對所述服務(wù)對象進行本地調(diào)用的通知信息后,對所述服務(wù)對象標識與調(diào)用參數(shù)進行編碼并發(fā)送調(diào)用請求消息,接收到應(yīng)答消息后,對所述應(yīng)答消息中編碼的運行結(jié)果進行解碼,并將解碼得到的運行結(jié)果返回所述客戶應(yīng)用程序;容器進程,分別與所述存根及所述框架連接,用于加載服務(wù)對象,向加載的服務(wù)對象分配服務(wù)對象標識,并存儲服務(wù)對象名稱與該服務(wù)對象標識之間的對應(yīng)關(guān)系信息;接收并轉(zhuǎn)發(fā)服務(wù)對象調(diào)用請求消息與應(yīng)答消息,以及判斷所述客戶應(yīng)用程序與所述服務(wù)對象是否存在于同一個容器進程中,如是,則向所述存根發(fā)送服務(wù)對象指針,如否,則向所述存根發(fā)送無法對所述服務(wù)對象進行本地調(diào)用的通知信息。
本發(fā)明實施例IDL調(diào)用裝置中設(shè)置了用于加載服務(wù)對象的容器進程,每個容器進程可以加載一個或多個服務(wù)對象,并在加載服務(wù)對象時向其分配服務(wù)對象標識,當(dāng)客戶應(yīng)用程序發(fā)送服務(wù)對象調(diào)用請求時,根據(jù)服務(wù)對象標識與客戶應(yīng)用程序標識,判斷客戶應(yīng)用程序與服務(wù)對象是否存在于同一個容器進程中,當(dāng)二者在同一個容器進程中時,客戶應(yīng)用程序存根可以對服務(wù)對象直接進行本地調(diào)用,這就節(jié)省了因不必要的IDL遠程調(diào)用所占用的系統(tǒng)資源,實現(xiàn)了對系統(tǒng)資源的有效利用;并且,與IDL遠程調(diào)用相比,節(jié)省了將調(diào)用轉(zhuǎn)換為消息進行編/解碼與調(diào)度的過程所需的時間,提高了IDL調(diào)用速度與調(diào)用性能,提高了IDL調(diào)用裝置的工作效率;另外,將服務(wù)對象加載在容器進程中運行,便于通過容器進程對服務(wù)對象進行統(tǒng)一設(shè)置與管理。
下面通過附圖和實施例,對本發(fā)明實施例的技術(shù)方案做進一步的詳細描述。


圖1為現(xiàn)有技術(shù)CORBA的結(jié)構(gòu)示意圖。
圖2為現(xiàn)有技術(shù)CORBA實現(xiàn)對象引用的原理圖。
圖3為本發(fā)明IDL調(diào)用裝置實施例的結(jié)構(gòu)示意圖。
圖4為本發(fā)明IDL調(diào)用方法實施例的流程圖。
圖5為本發(fā)明實施例容器進程的分布原理圖。
圖6為本發(fā)明IDL調(diào)用方法另一實施例的流程圖。
具體實施例方式
本發(fā)明實施例預(yù)先設(shè)置可以加載一個或多個服務(wù)對象的容器進程,當(dāng)發(fā)起服務(wù)對象調(diào)用請求的客戶應(yīng)用程序與請求調(diào)用的服務(wù)對象存在于同一個容器進程中時,客戶應(yīng)用程序?qū)Ψ?wù)對象進行直接調(diào)用,否則,對服務(wù)對象進行IDL遠程調(diào)用。
如圖3所示,為本發(fā)明IDL調(diào)用裝置實施例的結(jié)構(gòu)示意圖,其包括依次連接的客戶應(yīng)用程序的存根1、容器進程2與服務(wù)對象的框架3。
其中,存根1用于根據(jù)客戶應(yīng)用程序輸入的服務(wù)對象標識與客戶應(yīng)用程序標識生成服務(wù)對象調(diào)用請求,并將該服務(wù)對象調(diào)用請求轉(zhuǎn)發(fā)給容器進程2,以及在接收容器進程2返回的服務(wù)對象指針時,利用該服務(wù)對象指針對服務(wù)對象進行本地調(diào)用;在接收到容器進程2返回的無法對服務(wù)對象進行本地調(diào)用的通知信息后,對服務(wù)對象標識與調(diào)用參數(shù)進行編碼并發(fā)送調(diào)用請求消息,在接收到容器進程2返回的應(yīng)答消息后,對應(yīng)答消息中編碼的運行結(jié)果進行解碼,并將解碼得到的運行結(jié)果返回客戶應(yīng)用程序。如下所示為存根1的一個IDL接口實例,該接口通過“interface”關(guān)鍵字定義,接口名為“Calculator”{long add(in long x,in long y);//接口中定義的twoway方法}通過該定義,當(dāng)服務(wù)端的一個服務(wù)對象實現(xiàn)了上述“Calculator”接口后,就可以發(fā)布該IDL接口文件,具體地,可以將該IDL接口文件存儲在磁盤主機磁盤上,通過介質(zhì)磁盤或網(wǎng)絡(luò)方式發(fā)布該IDL接口文件,通過該IDL接口文件,客戶端的客戶應(yīng)用程序便可以對該服務(wù)對象進行本地調(diào)用或者IDL遠程調(diào)用。
存根可以根據(jù)容器進程2返回的服務(wù)對象指針對服務(wù)對象進行本地調(diào)用,從而可以達到節(jié)省調(diào)用資源與提高調(diào)用速度及調(diào)用性能的效果。
容器進程2用于加載服務(wù)對象,向加載的服務(wù)分配并服務(wù)對象標識,并存儲服務(wù)對象名稱與該服務(wù)對象標識之間的對應(yīng)關(guān)系信息;接收到存根1發(fā)送的服務(wù)對象調(diào)用請求后,判斷客戶應(yīng)用程序與服務(wù)對象是否存在于同一個容器進程中,如是,則向存根1發(fā)送服務(wù)對象指針,如否,則向存根1發(fā)送無法對服務(wù)對象進行本地調(diào)用的通知信息;另外,還接收存根1發(fā)送的調(diào)用請求消息并將該服務(wù)對象調(diào)用請求消息轉(zhuǎn)發(fā)給框架3,以及接收框架3返回的應(yīng)答消息,并將該應(yīng)答消息轉(zhuǎn)發(fā)給存根1。
容器進程可以加載一個或多個服務(wù)對象,這樣,便可以對其中加載的服務(wù)對象進行統(tǒng)一設(shè)置與管理,非常方便;并且,在加載服務(wù)對象時向其分配服務(wù)對象標識,當(dāng)接收到服務(wù)對象調(diào)用請求時,可以根據(jù)服務(wù)對象標識與客戶應(yīng)用程序標識,判斷客戶應(yīng)用程序與服務(wù)對象是否存在于同一個容器進程中,當(dāng)二者在同一個容器進程中時,客戶應(yīng)用程序存根對服務(wù)對象直接進行本地調(diào)用,這就節(jié)省了因不必要的IDL遠程調(diào)用所占用的系統(tǒng)資源,實現(xiàn)了對系統(tǒng)資源的有效利用;并且,與IDL遠程調(diào)用相比,省了將調(diào)用轉(zhuǎn)換為消息進行編/解碼與調(diào)度的過程所需的時間,提高了IDL調(diào)用速度與調(diào)用性能,提高了IDL調(diào)用裝置的工作效率;另外,將服務(wù)對象加載在容器進程中運行,便于通過容器進程對服務(wù)對象進行統(tǒng)一設(shè)置與管理。
框架3的功能與CORBA中的相同,用于在接收到容器進程2轉(zhuǎn)發(fā)的調(diào)用請求消息后,對該調(diào)用請求消息進行解碼,得到服務(wù)對象標識與調(diào)用參數(shù),根據(jù)該服務(wù)對象標識中的服務(wù)標識與調(diào)用參數(shù)調(diào)用服務(wù)對象并運行,并對運行結(jié)果進行編碼,然后向容器進程2返回應(yīng)答消息,該應(yīng)答消息中攜帶有編碼的運行結(jié)果。
在上述IDL調(diào)用裝置的實施例中,容器進程2包括依次連接的緩存模塊21、加載模塊22、存儲模塊23、判斷模塊24與轉(zhuǎn)發(fā)模塊25,轉(zhuǎn)發(fā)模塊25還分別與存根1及框架3連接。其中,加載模塊22用于加載服務(wù)對象并向服務(wù)對象分配服務(wù)對象標識;緩存模塊21用于緩存加載的服務(wù)對象;存儲模塊23用于存儲服務(wù)對象的名稱與服務(wù)對象標識之間的對應(yīng)關(guān)系信息;判斷模塊24用于接收轉(zhuǎn)發(fā)模塊25轉(zhuǎn)發(fā)的服務(wù)對象調(diào)用請求,判斷客戶應(yīng)用程序標識與服務(wù)對象標識是否存在于同一個存儲模塊中;轉(zhuǎn)發(fā)模塊25用于接收存根1發(fā)送的服務(wù)對象調(diào)用請求,并轉(zhuǎn)發(fā)給判斷模塊24,在客戶應(yīng)用程序與服務(wù)對象存在于同一個容器進程中時,向存根1發(fā)送服務(wù)對象指針,否則,向存根1發(fā)送無法對所述服務(wù)對象進行本地調(diào)用的通知信息,接收存根1發(fā)送的調(diào)用請求消息并轉(zhuǎn)發(fā)給框架3,接收框架3發(fā)送的應(yīng)答消息并轉(zhuǎn)發(fā)給存根1。
另外,容器進程2還可以包括卸載模塊26,分別與緩存模塊21及存儲模塊23連接,用于卸載服務(wù)對象,并從存儲模塊23中刪除卸載的服務(wù)對象的對應(yīng)關(guān)系信息。
本發(fā)明實施例提供的上述IDL調(diào)用裝置可以存儲在一個計算機可讀取存儲介質(zhì)中。
圖4所示為本發(fā)明IDL調(diào)用方法實施例的流程圖,其包括以下步驟接收服務(wù)對象調(diào)用請求,該服務(wù)對象調(diào)用請求中包含標識請求調(diào)用的服務(wù)對象的服務(wù)對象標識與標識客戶應(yīng)用程序的客戶應(yīng)用程序標識(步驟1);根據(jù)服務(wù)對象標識與客戶應(yīng)用程序標識,判斷客戶應(yīng)用程序與服務(wù)對象是否存在于同一個容器進程中,該容器進程用于加載一個或多個服務(wù)對象(步驟2);如客戶應(yīng)用程序與服務(wù)對象存在于同一個容器進程中,則客戶應(yīng)用程序?qū)Ψ?wù)對象直接進行本地調(diào)用(步驟3)。
當(dāng)客戶應(yīng)用程序與服務(wù)對象在同一個容器進程中時,客戶應(yīng)用程序存根可以對服務(wù)對象直接進行本地調(diào)用,避免了由于不必要的IDL遠程調(diào)用所導(dǎo)致的資源浪費,實現(xiàn)了對系統(tǒng)資源的有效利用;與IDL遠程調(diào)用相比,提高了IDL調(diào)用速度與調(diào)用性能。
再參見圖4,當(dāng)客戶應(yīng)用程序與服務(wù)對象不存在于同一個容器進程中時,客戶應(yīng)用程序?qū)Ψ?wù)對象進行IDL遠程調(diào)用(步驟4)。
預(yù)先在主機上設(shè)置容器進程,該容器進程提供ORB能力,支持服務(wù)對象的定位與訪問,服務(wù)對象都是以動態(tài)庫的形式提供,被容器進程加載運行。不同的服務(wù)對象可能部署在同一個容器進程中,也可能分布在不同主機的容器進程中。如圖5所示,為本發(fā)明實施例容器進程的分布原理圖。若兩個服務(wù)對象部署在不同主機的容器進程中,或者部署在同一主機的不同容器進程中,則兩個服務(wù)對象之間只能進行IDL遠程調(diào)用,若兩個服務(wù)對象在同一容器進程中時,則通過獲取被調(diào)用服務(wù)對象的地址直接調(diào)用該被調(diào)用服務(wù)對象。
為了區(qū)分不同的容器進程,設(shè)置容器進程時向其分配一個唯一標識每一個容器進程的容器進程標識(以下簡稱ID),可以稱為Container ID。一種分配Container ID的可行方案是以主機的IP地址作為Container ID的一部分,另外再輔以0~N的序號區(qū)分同一主機上的不同容器進程,以保證唯一性。
容器進程中的加載模塊22加載服務(wù)對象時,向其分配在該容器進程中標識該服務(wù)對象的服務(wù)標識,可以稱為Service ID,并存儲該服務(wù)對象名稱與其Service ID之間的對應(yīng)關(guān)系信息,服務(wù)對象標識(以下簡稱IOR)可以由Container ID與Service ID兩部分構(gòu)成,即Container ID+Service ID,客戶應(yīng)用程序可以根據(jù)服務(wù)對象標識訪問服務(wù)對象,當(dāng)進程容器卸載服務(wù)對象時,刪除該服務(wù)對象的服務(wù)標識。如下所示為一服務(wù)對象標識的具體實例{Container ID;Service ID;}由服務(wù)對象標識的構(gòu)成可知,若兩個服務(wù)對象標識中的Container ID相同,則表示這兩個服務(wù)對象處于同一個容器進程中,二者之間可以進行本地調(diào)用;若兩個服務(wù)對象標識中的Container ID不同,則表示這兩個服務(wù)對象處于不同的容器進程中,二者之間需要進行IDL遠程調(diào)用。圖4所示的步驟2中,可以通過判斷客戶應(yīng)用程序的容器進程中是否存在被調(diào)用的服務(wù)對象的服務(wù)對象標識來判斷客戶應(yīng)用程序與被調(diào)用的服務(wù)對象是否存在于同一個容器進程中。
圖6所示,為本發(fā)明IDL調(diào)用方法另一實施例的流程圖,該實施例利用圖3所示的IDL調(diào)用裝置對服務(wù)對象add進行調(diào)用,其具體包括客戶應(yīng)用程序傳入自己的標識,例如10.11.123.1+2+12,與請求調(diào)用的服務(wù)對象add的服務(wù)對象標識,例如122.111.12.123+0+1,并通過服務(wù)對象名稱或服務(wù)對象標識創(chuàng)建存根1(步驟101);存根1根據(jù)客戶應(yīng)用程序輸入的服務(wù)對象標識與客戶應(yīng)用程序標識生成服務(wù)對象調(diào)用請求并發(fā)送給客戶端的容器進程2中的轉(zhuǎn)發(fā)模塊25,該服務(wù)對象調(diào)用請求中包含服務(wù)對象標識與客戶應(yīng)用程序標識(步驟102);容器進程2中的判斷模塊24判斷服務(wù)對象標識與客戶應(yīng)用程序標識中的Container ID是否相同,或者查詢存儲模塊23中是否存儲有服務(wù)對象的服務(wù)對象標識,來判斷服務(wù)對象與客戶應(yīng)用程序是否存在于同一個容器進程中(步驟103),如下所示為判斷模塊24判斷服務(wù)對象標識與客戶應(yīng)用程序標識中的Container ID是否相同的一實例{If(client IOR.Container ID==server IOR.Container ID){//容器進程中所有服務(wù)對象都存放在緩存模塊21中,以IOR作為鍵值return(Service*)Service Map[server IOR];}//otherwise,not in same Containerreturn NULL;
}如果服務(wù)對象與客戶應(yīng)用程序存在于同一個容器進程中,則判斷模塊24根據(jù)存儲模塊23中存儲的服務(wù)對象標識創(chuàng)建該服務(wù)對象的服務(wù)指針并返回存根1(步驟104);存根1利用服務(wù)指針對服務(wù)對象進行本地調(diào)用并運行,然后向客戶應(yīng)用程序返回運行結(jié)果(步驟105);對于運行在一個容器進程中的服務(wù)對象,在相同條件下,對其進行本地調(diào)用與通過IDL接口進行遠程調(diào)用相比,其調(diào)用速度大大提高,調(diào)用性能提高了100倍左右,并且減少了所需占用的資源。
如果服務(wù)對象與客戶應(yīng)用程序不存在于同一個容器進程中,則轉(zhuǎn)發(fā)模塊25向存根1發(fā)送無法對服務(wù)對象進行本地調(diào)用的通知信息(步驟106);存根1對服務(wù)對象標識與調(diào)用參數(shù)(例如1與2)進行編碼,并向容器進程2發(fā)送調(diào)用請求消息“Request Message”,該調(diào)用請求消息“RequestMessage”中攜帶有編碼的服務(wù)對象標識與調(diào)用參數(shù),接著設(shè)置“WAIT_REPLY”狀態(tài),并掛起線程等待應(yīng)答消息(步驟107);容器進程2根據(jù)服務(wù)對象標識中的Container ID獲知服務(wù)對象的容器進程的位置,并將調(diào)用請求消息“Request Message”轉(zhuǎn)發(fā)給服務(wù)對象的容器進程,由該服務(wù)對象的容器進程根據(jù)服務(wù)對象標識中的Service ID,將調(diào)用請求消息“Request Message”轉(zhuǎn)發(fā)給服務(wù)對象的框架3(步驟108);框架3對調(diào)用請求消息中編碼的服務(wù)對象標識與調(diào)用參數(shù)進行解碼,得到服務(wù)對象標識與調(diào)用參數(shù)(步驟109);框架3根據(jù)所在的容器進程中的存儲模塊中存儲的服務(wù)對象的名稱與服務(wù)對象標識之間的對應(yīng)關(guān)系信息,由服務(wù)對象標識中的Service ID獲知服務(wù)對象的名稱,然后根據(jù)該服務(wù)對象的名稱與調(diào)用參數(shù)調(diào)用服務(wù)對象并運行,然后對運行結(jié)果進行編碼,并通過容器進程2向存根1返回應(yīng)答消息“ReplyMessage”,該應(yīng)答消息“Reply Message”中攜帶有編碼的運行結(jié)果(步驟110);
存根1對應(yīng)答消息“Reply Message”中編碼的運行結(jié)果進行解碼,并將解碼得到的運行結(jié)果返回客戶應(yīng)用程序(步驟111)。
本發(fā)明實施例的IDL調(diào)用裝置與調(diào)用方法具有以下有益技術(shù)效果當(dāng)客戶應(yīng)用程序與請求調(diào)用的服務(wù)對象存在于同一個容器進程中時,客戶應(yīng)用程序存根可以直接對服務(wù)對象直接進行本地調(diào)用,節(jié)省了系統(tǒng)資源,實現(xiàn)了對系統(tǒng)資源的有效利用;與IDL遠程調(diào)用相比,提高了IDL調(diào)用速度與調(diào)用性能,提高了IDL調(diào)用裝置的工作效率;通過容器進程便于對服務(wù)對象進行統(tǒng)一設(shè)置與管理。
最后所應(yīng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對本發(fā)明作限制性理解。盡管參照上述較佳實施例對本發(fā)明進行了詳細說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而這種修改或者等同替換并不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種IDL調(diào)用方法,其特征在于,包括以下步驟接收服務(wù)對象調(diào)用請求,該服務(wù)對象調(diào)用請求中包含標識請求調(diào)用的服務(wù)對象的服務(wù)對象標識與標識客戶應(yīng)用程序的客戶應(yīng)用程序標識;根據(jù)所述服務(wù)對象標識與所述客戶應(yīng)用程序標識,判斷所述客戶應(yīng)用程序與所述服務(wù)對象是否存在于同一個用于加載服務(wù)對象的容器進程中;所述客戶應(yīng)用程序與所述服務(wù)對象存在于同一個容器進程中時,所述客戶應(yīng)用程序?qū)λ龇?wù)對象進行本地調(diào)用。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括容器進程加載服務(wù)對象時,向所述服務(wù)對象分配在所述容器進程中標識所述服務(wù)對象的服務(wù)標識,并存儲所述服務(wù)對象名稱與所述服務(wù)對象標識之間的對應(yīng)關(guān)系信息,所述服務(wù)對象標識包括標識所述容器進程的容器進程標識與所述服務(wù)標識。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括設(shè)置容器進程并向該容器進程分配所述容器進程標識的操作。
4.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,判斷所述客戶應(yīng)用程序與所述服務(wù)對象是否存在于同一個容器進程中具體為所述客戶應(yīng)用程序的容器進程判斷是否存在所述服務(wù)對象標識。
5.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,所述客戶應(yīng)用程序?qū)λ龇?wù)對象進行本地調(diào)用包括所述容器進程向所述客戶應(yīng)用程序創(chuàng)建的存根返回所述服務(wù)對象的服務(wù)指針;所述存根利用所述服務(wù)指針對所述服務(wù)對象進行本地調(diào)用并運行,然后向所述客戶應(yīng)用程序返回運行結(jié)果。
6.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,所述客戶應(yīng)用程序與所述服務(wù)對象不存在于同一個容器進程中時,所述客戶應(yīng)用程序?qū)λ龇?wù)對象進行IDL遠程調(diào)用。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括進程容器卸載服務(wù)對象時,還刪除該服務(wù)對象的服務(wù)標識。
8.一種IDL調(diào)用裝置,包括服務(wù)對象的框架,其特征在于,還包括客戶應(yīng)用程序的存根,用于生成并發(fā)送服務(wù)對象調(diào)用請求,以及利用接收到的服務(wù)對象指針對所述服務(wù)對象進行本地調(diào)用,在接收到無法對所述服務(wù)對象進行本地調(diào)用的通知信息后,對所述服務(wù)對象標識與調(diào)用參數(shù)進行編碼并發(fā)送調(diào)用請求消息,接收到應(yīng)答消息后,對所述應(yīng)答消息中編碼的運行結(jié)果進行解碼,并將解碼得到的運行結(jié)果返回所述客戶應(yīng)用程序;容器進程,分別與所述存根及所述框架連接,用于加載服務(wù)對象,向加載的服務(wù)對象分配服務(wù)對象標識,并存儲服務(wù)對象名稱與該服務(wù)對象標識之間的對應(yīng)關(guān)系信息;接收并轉(zhuǎn)發(fā)服務(wù)對象調(diào)用請求消息與應(yīng)答消息,以及判斷所述客戶應(yīng)用程序與所述服務(wù)對象是否存在于同一個容器進程中,如是,則向所述存根發(fā)送服務(wù)對象指針,如否,則向所述存根發(fā)送無法對所述服務(wù)對象進行本地調(diào)用的通知信息。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述容器進程包括加載模塊,用于加載服務(wù)對象并向所述服務(wù)對象分配服務(wù)對象標識;緩存模塊,與所述加載模塊連接,用于緩存加載的服務(wù)對象;存儲模塊,與所述加載模塊連接,用于存儲服務(wù)對象名稱與服務(wù)對象標識之間的對應(yīng)關(guān)系信息;判斷模塊,與所述存儲模塊連接,用于判斷客戶應(yīng)用程序標識與服務(wù)對象標識是否存在于同一個存儲模塊中;轉(zhuǎn)發(fā)模塊,分別與所述判斷模塊、所述存根及所述框架連接,用于在存根與所述框架之間轉(zhuǎn)發(fā)服務(wù)對象調(diào)用請求消息與應(yīng)答消息,以及在所述客戶應(yīng)用程序與所述服務(wù)對象存在于同一個容器進程中時,向所述存根發(fā)送服務(wù)對象指針,否則,向所述存根發(fā)送無法對所述服務(wù)對象進行本地調(diào)用的通知信息。
10.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述容器進程包括卸載模塊,分別與所述緩存模塊及所述存儲模塊連接,用于卸載服務(wù)對象,并從所述存儲模塊中刪除卸載的服務(wù)對象的對應(yīng)關(guān)系信息。
全文摘要
本發(fā)明公開了一種IDL調(diào)用裝置及調(diào)用方法,其中,調(diào)用方法包括接收服務(wù)對象調(diào)用請求,該服務(wù)對象調(diào)用請求中包含標識請求調(diào)用的服務(wù)對象的服務(wù)對象標識與標識客戶應(yīng)用程序的客戶應(yīng)用程序標識;根據(jù)服務(wù)對象標識與客戶應(yīng)用程序標識,判斷客戶應(yīng)用程序與服務(wù)對象是否存在于同一個用于加載服務(wù)對象的容器進程中;所述客戶應(yīng)用程序與所述服務(wù)對象存在于同一個容器進程中時,客戶應(yīng)用程序?qū)Ψ?wù)對象進行本地調(diào)用。當(dāng)客戶應(yīng)用程序與服務(wù)對象存在于同一個容器進程中時,采用本發(fā)明,客戶應(yīng)用程序存根可以對服務(wù)對象直接進行本地調(diào)用,避免了不必要的IDL遠程調(diào)用所占用的系統(tǒng)資源,提高了IDL調(diào)用速度與調(diào)用性能。
文檔編號G06F9/46GK101017447SQ20071006385
公開日2007年8月15日 申請日期2007年2月13日 優(yōu)先權(quán)日2007年2月13日
發(fā)明者李戰(zhàn)杰, 丁凱, 申海 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1