專利名稱:訪問非遠(yuǎn)程對(duì)象的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種訪問非遠(yuǎn)程對(duì)象的方法和裝置。
背景技術(shù):
在Java語言中,一個(gè)對(duì)象要想被遠(yuǎn)程訪問,它必須實(shí)現(xiàn)遠(yuǎn)程訪問接口 java. rmi. Remote接口,但有些對(duì)象在設(shè)計(jì)時(shí)并未實(shí)現(xiàn)java. rmi. Remote接口,而僅實(shí)現(xiàn)了其他非遠(yuǎn)程的接口,并且已經(jīng)形成了標(biāo)準(zhǔn)不可更改,但后來此類對(duì)象也有被遠(yuǎn)程訪問的需求,因此, 如何遠(yuǎn)程訪問非遠(yuǎn)程對(duì)象成為需要解決的問題。針對(duì)上述非遠(yuǎn)程對(duì)象的遠(yuǎn)程訪問問題,目前可以通過包裝的方式實(shí)現(xiàn),其具體步驟包括定義一個(gè)包裝對(duì)象作為目標(biāo)對(duì)象的伴隨對(duì)象,該包裝對(duì)象靜態(tài)地定義目標(biāo)對(duì)象的每個(gè)公有方法,從而實(shí)現(xiàn)目標(biāo)對(duì)象的接口,同時(shí)包裝對(duì)象實(shí)現(xiàn)java. rmi. Remote接口,則這個(gè)包裝對(duì)象可以被遠(yuǎn)程訪問。包裝對(duì)象接收到遠(yuǎn)程請(qǐng)求后,根據(jù)其自身實(shí)現(xiàn)的目標(biāo)對(duì)象的接口,將遠(yuǎn)程請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)對(duì)象,如果目標(biāo)對(duì)象返回值的類型為Java的基本類型、遠(yuǎn)程對(duì)象或krializable (可序列化)對(duì)象等能夠通過網(wǎng)絡(luò)傳輸?shù)念愋蜁r(shí),則將返回值轉(zhuǎn)交給客戶,否則,程序不能正常執(zhí)行,遠(yuǎn)程訪問失敗。綜合上述,當(dāng)非遠(yuǎn)程對(duì)象的返回值不能夠通過網(wǎng)絡(luò)傳輸時(shí),現(xiàn)有技術(shù)沒有給出相應(yīng)的解決方案,從而造成遠(yuǎn)程訪問失敗。
發(fā)明內(nèi)容
為了解決非遠(yuǎn)程對(duì)象遠(yuǎn)程訪問失敗的問題,本發(fā)明實(shí)施例提供了一種訪問非遠(yuǎn)程對(duì)象的方法和裝置。所述技術(shù)方案如下—種訪問非遠(yuǎn)程對(duì)象的方法,所述方法包括服務(wù)器端的轉(zhuǎn)發(fā)器接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,所述目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;所述轉(zhuǎn)發(fā)器將所述調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給所述目標(biāo)對(duì)象,并接收所述目標(biāo)對(duì)象發(fā)送的所述調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;如果所述返回值不是可傳輸類型、并且所述返回值實(shí)現(xiàn)有一接口,所述轉(zhuǎn)發(fā)器根據(jù)所述返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建所述另一轉(zhuǎn)發(fā)器的樁^Ub ;所述轉(zhuǎn)發(fā)器將所述另一轉(zhuǎn)發(fā)器的^ub發(fā)送給所述客戶端,使所述客戶端根據(jù)所述另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)所述調(diào)用處理器和所述返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。其中,所述服務(wù)器端的轉(zhuǎn)發(fā)器接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求之前包括所述客戶端獲取所述轉(zhuǎn)發(fā)器的Mub ;所述客戶端根據(jù)所述轉(zhuǎn)發(fā)器的Mub,創(chuàng)建另一調(diào)用處理器;
所述客戶端根據(jù)所述另一調(diào)用處理器和所述目標(biāo)對(duì)象的接口,構(gòu)造另一動(dòng)態(tài)遠(yuǎn)程代理;所述客戶端根據(jù)所述另一動(dòng)態(tài)遠(yuǎn)程代理向所述轉(zhuǎn)發(fā)器發(fā)起對(duì)所述目標(biāo)對(duì)象的調(diào)用請(qǐng)求。其中,所述方法還包括如果所述返回值是可傳輸類型,所述轉(zhuǎn)發(fā)器將所述返回值發(fā)送給所述客戶端,使所述客戶端將所述返回值返回給客戶。其中,所述可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象。一種訪問非遠(yuǎn)程對(duì)象的裝置,所述裝置包括接收模塊,用于接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,所述目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;收發(fā)模塊,用于將所述接收模塊接收的調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給所述目標(biāo)對(duì)象,并接收所述目標(biāo)對(duì)象發(fā)送的所述調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;構(gòu)造模塊,用于如果所述收發(fā)模塊接收的返回值不是可傳輸類型、并且所述返回值實(shí)現(xiàn)有一接口,根據(jù)所述返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建所述另一轉(zhuǎn)發(fā)器的樁Stub ;發(fā)送模塊,用于將所述另一轉(zhuǎn)發(fā)器的Mub發(fā)送給所述客戶端,使所述客戶端根據(jù)所述另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)所述調(diào)用處理器和所述返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。其中,所述裝置還包括第二發(fā)送模塊,用于如果所述收發(fā)模塊接收的返回值是可傳輸類型,將所述返回值發(fā)送給所述客戶端,使所述客戶端將所述返回值返回給客戶。其中,所述構(gòu)造模塊或所述第二發(fā)送模塊的可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象。其中,所述裝置是一轉(zhuǎn)發(fā)器。本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是一方面,通過在服務(wù)器端設(shè)置一個(gè)轉(zhuǎn)發(fā)器作為目標(biāo)對(duì)象的伴隨對(duì)象,在客戶端設(shè)置一個(gè)調(diào)用處理器與之相配合,該服務(wù)器端的轉(zhuǎn)發(fā)器自動(dòng)處理對(duì)目標(biāo)對(duì)象方法調(diào)用的返回值,對(duì)于無法在網(wǎng)絡(luò)上傳輸?shù)姆祷刂?,?gòu)造新的轉(zhuǎn)發(fā)器返回給客戶端,該客戶端的調(diào)用處理器對(duì)服務(wù)器的返回值進(jìn)行判斷處理,如果服務(wù)器返回的是另一轉(zhuǎn)發(fā)器,則客戶端根據(jù)另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)調(diào)用處理器和返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶,后續(xù)如果客戶需要,可再執(zhí)行動(dòng)態(tài)遠(yuǎn)程代理中的方法發(fā)起遠(yuǎn)程調(diào)用,另外,如果服務(wù)器的返回值可以在網(wǎng)絡(luò)上傳輸,則直接返回給客戶,從而有效解決了非遠(yuǎn)程對(duì)象遠(yuǎn)程訪問失敗的問題。另一方面,服務(wù)器端的轉(zhuǎn)發(fā)器和客戶端的另一遠(yuǎn)程調(diào)用處理器是兩個(gè)現(xiàn)成組件, 用戶在對(duì)目標(biāo)對(duì)象開始實(shí)施遠(yuǎn)程調(diào)用時(shí),僅在開始分別在服務(wù)器端和客戶端實(shí)例化這兩個(gè)組件,即可進(jìn)行調(diào)用,而后續(xù)若對(duì)返回對(duì)象再實(shí)施調(diào)用,則無需作任何額外的動(dòng)作,因?yàn)檗D(zhuǎn)發(fā)器和遠(yuǎn)程調(diào)用處理器會(huì)自動(dòng)再生成后續(xù)的返回對(duì)象的轉(zhuǎn)發(fā)器和遠(yuǎn)程調(diào)用處理器,從而實(shí)現(xiàn)調(diào)用的簡單化和自動(dòng)化。
圖1是本發(fā)明實(shí)施例1提供的訪問非遠(yuǎn)程對(duì)象的方法流程圖;圖2是本發(fā)明實(shí)施例1提供的訪問非遠(yuǎn)程對(duì)象的另一方法流程圖;圖3是本發(fā)明實(shí)施例2提供的訪問非遠(yuǎn)程對(duì)象的裝置示意圖;圖4是本發(fā)明實(shí)施例2提供的訪問非遠(yuǎn)程對(duì)象的另一裝置示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。實(shí)施例1參見圖1,本實(shí)施例提供了一種訪問非遠(yuǎn)程對(duì)象的方法,包括101 服務(wù)器端的轉(zhuǎn)發(fā)器接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;進(jìn)一步的,步驟101之前,客戶端獲取轉(zhuǎn)發(fā)器的Mub,根據(jù)轉(zhuǎn)發(fā)器的Stub,創(chuàng)建另一調(diào)用處理器,根據(jù)另一調(diào)用處理器和目標(biāo)對(duì)象的接口,構(gòu)造另一動(dòng)態(tài)遠(yuǎn)程代理,根據(jù)另一動(dòng)態(tài)遠(yuǎn)程代理向轉(zhuǎn)發(fā)器發(fā)起對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求。102 轉(zhuǎn)發(fā)器將調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)對(duì)象,并接收目標(biāo)對(duì)象發(fā)送的調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;103 如果返回值不是可傳輸類型、并且返回值實(shí)現(xiàn)有一接口,轉(zhuǎn)發(fā)器根據(jù)返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建另一轉(zhuǎn)發(fā)器的樁Mub ;另外,如果返回值是可傳輸類型,轉(zhuǎn)發(fā)器將返回值發(fā)送給客戶端,使客戶端將返回值返回給客戶。其中,可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象。104 轉(zhuǎn)發(fā)器將另一轉(zhuǎn)發(fā)器的Mub發(fā)送給客戶端,使客戶端根據(jù)另一轉(zhuǎn)發(fā)器的 Stub創(chuàng)建調(diào)用處理器,并根據(jù)調(diào)用處理器和返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。參見圖2,下面結(jié)合具體實(shí)例,詳細(xì)介紹上述訪問非遠(yuǎn)程對(duì)象的方法。其中,步驟101-104中的轉(zhuǎn)發(fā)器、另一調(diào)用處理器、另一動(dòng)態(tài)遠(yuǎn)程代理、返回值、另一轉(zhuǎn)發(fā)器、調(diào)用處理器、動(dòng)態(tài)遠(yuǎn)程代理分別對(duì)應(yīng)步驟200-209中的第一轉(zhuǎn)發(fā)器、第一調(diào)用處理器、第一動(dòng)態(tài)遠(yuǎn)程代理、第一返回值、第二轉(zhuǎn)發(fā)器、第二調(diào)用處理器、第二動(dòng)態(tài)遠(yuǎn)程代理。 其中,第一和第二用于區(qū)分不同的對(duì)象,并不表示順序關(guān)系。200 服務(wù)器端的目標(biāo)對(duì)象實(shí)現(xiàn)某一接口,該目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;其中,目標(biāo)對(duì)象的方法的返回值是面向?qū)ο笳Z言的基本類型、遠(yuǎn)程對(duì)象或 Serializable對(duì)象等能夠通過網(wǎng)絡(luò)傳輸?shù)念愋?簡稱可傳輸類型),或者不能通過網(wǎng)絡(luò)傳輸?shù)念愋偷珜?shí)現(xiàn)了某一接口。另外,面向?qū)ο笳Z言包括但不限于Java,其基本類型包括 int,float,boolean 等。201 服務(wù)器端根據(jù)目標(biāo)對(duì)象創(chuàng)建可被遠(yuǎn)程訪問的第一轉(zhuǎn)發(fā)器;其中,第一轉(zhuǎn)發(fā)器是“遠(yuǎn)程調(diào)用器”的一個(gè)具體實(shí)現(xiàn)、且“遠(yuǎn)程調(diào)用器”是一個(gè)可被遠(yuǎn)程訪問的接口,因此,第一轉(zhuǎn)發(fā)器也可以被遠(yuǎn)程訪問。遠(yuǎn)程調(diào)用器”可被遠(yuǎn)程訪問,具體可以通過繼承遠(yuǎn)程接口實(shí)現(xiàn),以Java為例,可以繼承java. rmi. Remote接口實(shí)現(xiàn)可被遠(yuǎn)程訪問?!斑h(yuǎn)程調(diào)用器”包括一個(gè)調(diào)用方法,該調(diào)用方法的參數(shù)包括目標(biāo)對(duì)象方法的標(biāo)識(shí)和目標(biāo)對(duì)象方法的參數(shù)。其中,調(diào)用方法實(shí)現(xiàn)對(duì)目標(biāo)對(duì)象某一方法的調(diào)用,以Java為例,該調(diào)用方法的簽名為public Object invoke (long opnum, Object []args) throws hrowable ;參數(shù)opnum表示目標(biāo)對(duì)象方法的標(biāo)識(shí),具體可以根據(jù)目標(biāo)對(duì)象方法的簽名構(gòu)造出的字符串的SHA(Secure Hash Algorithm,安全散列算法)消息摘要,取其前64位而得到的一個(gè)long型值作為 opnum,參數(shù)args為目標(biāo)對(duì)象方法的參數(shù)。202 服務(wù)器端創(chuàng)建第一轉(zhuǎn)發(fā)器的Stub (樁),并將Mub放到公共的命名服務(wù)器上,該命名服務(wù)器可以被客戶端訪問;其中,Stub是一種本地代理,用于代理遠(yuǎn)程主機(jī)上的遠(yuǎn)程對(duì)象,它與遠(yuǎn)程對(duì)象實(shí)現(xiàn)相同的接口,負(fù)責(zé)接收來自本地的方法調(diào)用,并在后臺(tái)發(fā)起對(duì)遠(yuǎn)程對(duì)象的網(wǎng)絡(luò)連接,完成實(shí)際的遠(yuǎn)程調(diào)用,調(diào)用完成后,把調(diào)用結(jié)果返回給本地客戶。Mub都是krializable對(duì)象,因此可以在網(wǎng)絡(luò)上傳輸。其中,本地指客戶端,遠(yuǎn)程主機(jī)指服務(wù)器,遠(yuǎn)程對(duì)象指目標(biāo)對(duì)象,客戶指客戶端調(diào)用遠(yuǎn)程對(duì)象的程序。203 客戶端從命名服務(wù)器上獲取第一轉(zhuǎn)發(fā)器的Mub ;另外,客戶端除了通過命名服務(wù)器獲取第一轉(zhuǎn)發(fā)器的Mub,還可以通過其他方法獲取第一轉(zhuǎn)發(fā)器的^ub,本實(shí)施例并不限定。204 客戶端根據(jù)第一轉(zhuǎn)發(fā)器的Stub,創(chuàng)建客戶端的第一調(diào)用處理器;其中,第一調(diào)用處理器由于持有第一轉(zhuǎn)發(fā)器的Mub,第一轉(zhuǎn)發(fā)器是遠(yuǎn)程調(diào)用器的一個(gè)具體實(shí)現(xiàn),因此,第一調(diào)用處理器可以發(fā)起對(duì)遠(yuǎn)程調(diào)用對(duì)象的調(diào)用。205 客戶端根據(jù)第一調(diào)用處理器和目標(biāo)對(duì)象的接口,創(chuàng)建目標(biāo)對(duì)象的第一動(dòng)態(tài)遠(yuǎn)程代理;其中,第一動(dòng)態(tài)遠(yuǎn)程代理的生成過程為現(xiàn)有技術(shù),這里不再贅述。206:客戶端根據(jù)目標(biāo)對(duì)象的第一動(dòng)態(tài)遠(yuǎn)程代理,發(fā)起對(duì)服務(wù)器端目標(biāo)對(duì)象的調(diào)用;具體的,客戶端向服務(wù)器端的第一轉(zhuǎn)發(fā)器發(fā)送調(diào)用請(qǐng)求,調(diào)用請(qǐng)求攜帶目標(biāo)對(duì)象方法的標(biāo)識(shí)和目標(biāo)對(duì)象方法的參數(shù)。207a:服務(wù)器端的第一轉(zhuǎn)發(fā)器接收到客戶端的調(diào)用請(qǐng)求后,將調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給實(shí)際的目標(biāo)對(duì)象;207b 目標(biāo)對(duì)象根據(jù)調(diào)用請(qǐng)求,利用其參數(shù)執(zhí)行相應(yīng)的方法,并將方法的第一返回值發(fā)送給服務(wù)器端的第一轉(zhuǎn)發(fā)器;208 服務(wù)器端的第一轉(zhuǎn)發(fā)器對(duì)第一返回值進(jìn)行判斷;具體的,a)如果第一返回值不是可傳輸類型、并且第一返回值實(shí)現(xiàn)有一接口,根據(jù)第一返回值構(gòu)造可被遠(yuǎn)程訪問的第二轉(zhuǎn)發(fā)器,并創(chuàng)建第二轉(zhuǎn)發(fā)器的樁Mub,將第二轉(zhuǎn)發(fā)器的Mub 作為第二返回值攜帶在調(diào)用響應(yīng)中返回給客戶端;其中,第二轉(zhuǎn)發(fā)器及其Mub實(shí)現(xiàn)了可被遠(yuǎn)程訪問的“遠(yuǎn)程調(diào)用器”。其中,可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象,相應(yīng)的,不是可傳輸類型,也即不是基本類型、遠(yuǎn)程對(duì)象或可序列化對(duì)象。b)如果不是以上情況,例如,第一返回值是基本類型、遠(yuǎn)程對(duì)象或可序列化對(duì)象等可傳輸類型,則不做處理,將第一返回值作為第二返回值攜帶在調(diào)用響應(yīng)中直接返回給客戶端。209:客戶端接收到服務(wù)端返回的調(diào)用響應(yīng)后,根據(jù)其中攜帶的第二返回值進(jìn)行相應(yīng)處理;具體的,a)針對(duì)208a),如果第二返回值實(shí)現(xiàn)了“遠(yuǎn)程調(diào)用器”,則利用步驟204和205的方法構(gòu)造第二動(dòng)態(tài)遠(yuǎn)程代理返回給客戶,也即根據(jù)第二返回值創(chuàng)建第二調(diào)用處理器,根據(jù)第二調(diào)用處理器和第一返回值的接口,構(gòu)造第二動(dòng)態(tài)遠(yuǎn)程代理。其中,第二動(dòng)態(tài)遠(yuǎn)程代理實(shí)現(xiàn)了第二返回值所實(shí)現(xiàn)的接口,后續(xù)最終客戶如果需要可以不重復(fù)步驟206-209的過程,可以直接執(zhí)行第二動(dòng)態(tài)遠(yuǎn)程代理中的方法,發(fā)起遠(yuǎn)程調(diào)用。b)針對(duì)208b),如果第二返回值是可傳輸類型(也即未實(shí)現(xiàn)“遠(yuǎn)程調(diào)用器”),則直接返回給客戶。本實(shí)施例提供的方法,一方面通過在服務(wù)器端設(shè)置一個(gè)轉(zhuǎn)發(fā)器作為目標(biāo)對(duì)象的伴隨對(duì)象,在客戶端設(shè)置一個(gè)調(diào)用處理器與之相配合,該服務(wù)器端的轉(zhuǎn)發(fā)器自動(dòng)處理對(duì)目標(biāo)對(duì)象方法調(diào)用的返回值,對(duì)于無法在網(wǎng)絡(luò)上傳輸?shù)姆祷刂担瑯?gòu)造新的轉(zhuǎn)發(fā)器返回給客戶端, 該客戶端的調(diào)用處理器對(duì)服務(wù)器的返回值進(jìn)行判斷處理,如果服務(wù)器返回的是另一轉(zhuǎn)發(fā)器,則客戶端根據(jù)另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)調(diào)用處理器和返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶,后續(xù)如果客戶需要,可再執(zhí)行動(dòng)態(tài)遠(yuǎn)程代理中的方法發(fā)起遠(yuǎn)程調(diào)用,另外,如果服務(wù)器的返回值可以在網(wǎng)絡(luò)上傳輸,則直接返回給客戶,從而有效解決了非遠(yuǎn)程對(duì)象遠(yuǎn)程訪問失敗的問題。另一方面,服務(wù)器端的轉(zhuǎn)發(fā)器和客戶端的另一遠(yuǎn)程調(diào)用處理器是兩個(gè)現(xiàn)成組件, 用戶在對(duì)目標(biāo)對(duì)象開始實(shí)施遠(yuǎn)程調(diào)用時(shí),僅在開始分別在服務(wù)器端和客戶端實(shí)例化這兩個(gè)組件,即可進(jìn)行調(diào)用,而后續(xù)若對(duì)返回對(duì)象再實(shí)施調(diào)用,則無需作任何額外的動(dòng)作,因?yàn)檗D(zhuǎn)發(fā)器和遠(yuǎn)程調(diào)用處理器會(huì)自動(dòng)再生成后續(xù)的返回對(duì)象的轉(zhuǎn)發(fā)器和遠(yuǎn)程調(diào)用處理器,從而實(shí)現(xiàn)調(diào)用的簡單化和自動(dòng)化。實(shí)施例2參見圖3,本實(shí)施例提供了一種訪問非遠(yuǎn)程對(duì)象的裝置,包括接收模塊301,用于接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;收發(fā)模塊302,用于將接收模塊301接收的調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)對(duì)象,并接收目標(biāo)對(duì)象發(fā)送的調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;構(gòu)造模塊303,用于如果收發(fā)模塊302接收的返回值不是可傳輸類型、并且返回值實(shí)現(xiàn)有一接口,根據(jù)返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建另一轉(zhuǎn)發(fā)器的樁 Stub ;發(fā)送模塊304,用于將另一轉(zhuǎn)發(fā)器的Mub發(fā)送給客戶端,使客戶端根據(jù)另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)調(diào)用處理器和返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。
其中,調(diào)用請(qǐng)求是客戶端獲取轉(zhuǎn)發(fā)器的Stub,根據(jù)轉(zhuǎn)發(fā)器的Stub,創(chuàng)建另一調(diào)用處理器,根據(jù)另一調(diào)用處理器和目標(biāo)對(duì)象的接口,構(gòu)造另一動(dòng)態(tài)遠(yuǎn)程代理,根據(jù)另一動(dòng)態(tài)遠(yuǎn)程代理向轉(zhuǎn)發(fā)器發(fā)起對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求。進(jìn)一步的,參見圖4,該裝置還包括第二發(fā)送模塊305,用于如果收發(fā)模塊302接收的返回值是可傳輸類型,將返回值發(fā)送給客戶端,使客戶端將返回值返回給客戶。其中,構(gòu)造模塊303或第二發(fā)送模塊305的可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象。本實(shí)施例提供的裝置,可以是一轉(zhuǎn)發(fā)器,與方法實(shí)施例中的第一轉(zhuǎn)發(fā)器屬于同一構(gòu)思,其實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。本實(shí)施例提供的裝置,通過將自身設(shè)置在服務(wù)器端作為目標(biāo)對(duì)象的伴隨對(duì)象,并與客戶端設(shè)置的調(diào)用處理器配合,本裝置自動(dòng)處理對(duì)目標(biāo)對(duì)象方法調(diào)用的返回值,對(duì)于無法在網(wǎng)絡(luò)上傳輸?shù)姆祷刂?,?gòu)造新的轉(zhuǎn)發(fā)器返回給客戶端,該客戶端的調(diào)用處理器對(duì)服務(wù)器的返回值進(jìn)行判斷處理,如果服務(wù)器返回的是另一轉(zhuǎn)發(fā)器,則客戶端根據(jù)另一轉(zhuǎn)發(fā)器的 Stub創(chuàng)建調(diào)用處理器,并根據(jù)調(diào)用處理器和返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶,后續(xù)如果客戶需要,可再執(zhí)行動(dòng)態(tài)遠(yuǎn)程代理中的方法發(fā)起遠(yuǎn)程調(diào)用,另外,如果服務(wù)器的返回值可以在網(wǎng)絡(luò)上傳輸,則直接返回給客戶,從而有效解決了非遠(yuǎn)程對(duì)象遠(yuǎn)程訪問失敗的問題。另一方面,本裝置和客戶端的另一遠(yuǎn)程調(diào)用處理器是兩個(gè)現(xiàn)成組件,用戶在對(duì)目標(biāo)對(duì)象開始實(shí)施遠(yuǎn)程調(diào)用時(shí),僅在開始分別在服務(wù)器端和客戶端實(shí)例化這兩個(gè)組件,即可進(jìn)行調(diào)用,而后續(xù)若對(duì)返回對(duì)象再實(shí)施調(diào)用,則無需作任何額外的動(dòng)作,因?yàn)楸狙b置和遠(yuǎn)程調(diào)用處理器會(huì)自動(dòng)再生成后續(xù)的返回對(duì)象的相應(yīng)裝置和遠(yuǎn)程調(diào)用處理器,從而實(shí)現(xiàn)調(diào)用的簡單化和自動(dòng)化。以上實(shí)施例提供的技術(shù)方案中的全部或部分內(nèi)容可以通過軟件編程實(shí)現(xiàn),其軟件程序存儲(chǔ)在可讀取的存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)例如計(jì)算機(jī)中的硬盤、光盤或軟盤。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種訪問非遠(yuǎn)程對(duì)象的方法,其特征在于,所述方法包括服務(wù)器端的轉(zhuǎn)發(fā)器接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,所述目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;所述轉(zhuǎn)發(fā)器將所述調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給所述目標(biāo)對(duì)象,并接收所述目標(biāo)對(duì)象發(fā)送的所述調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;如果所述返回值不是可傳輸類型、并且所述返回值實(shí)現(xiàn)有一接口,所述轉(zhuǎn)發(fā)器根據(jù)所述返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建所述另一轉(zhuǎn)發(fā)器的樁Mub ;所述轉(zhuǎn)發(fā)器將所述另一轉(zhuǎn)發(fā)器的^ub發(fā)送給所述客戶端,使所述客戶端根據(jù)所述另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)所述調(diào)用處理器和所述返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。
2.如權(quán)利要求1所述的方法,其特征在于,所述服務(wù)器端的轉(zhuǎn)發(fā)器接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求之前包括所述客戶端獲取所述轉(zhuǎn)發(fā)器的^ub ; 所述客戶端根據(jù)所述轉(zhuǎn)發(fā)器的Mub,創(chuàng)建另一調(diào)用處理器;所述客戶端根據(jù)所述另一調(diào)用處理器和所述目標(biāo)對(duì)象的接口,構(gòu)造另一動(dòng)態(tài)遠(yuǎn)程代理;所述客戶端根據(jù)所述另一動(dòng)態(tài)遠(yuǎn)程代理向所述轉(zhuǎn)發(fā)器發(fā)起對(duì)所述目標(biāo)對(duì)象的調(diào)用請(qǐng)求。
3.如權(quán)利要求1所述的方法,其特征在于,所述方法還包括如果所述返回值是可傳輸類型,所述轉(zhuǎn)發(fā)器將所述返回值發(fā)送給所述客戶端,使所述客戶端將所述返回值返回給客戶。
4.如權(quán)利要求1-3任一所述的方法,其特征在于,所述可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象。
5.一種訪問非遠(yuǎn)程對(duì)象的裝置,其特征在于,所述裝置包括接收模塊,用于接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,所述目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;收發(fā)模塊,用于將所述接收模塊接收的調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給所述目標(biāo)對(duì)象,并接收所述目標(biāo)對(duì)象發(fā)送的所述調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;構(gòu)造模塊,用于如果所述收發(fā)模塊接收的返回值不是可傳輸類型、并且所述返回值實(shí)現(xiàn)有一接口,根據(jù)所述返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建所述另一轉(zhuǎn)發(fā)器的樁 Stub ;發(fā)送模塊,用于將所述另一轉(zhuǎn)發(fā)器的^ub發(fā)送給所述客戶端,使所述客戶端根據(jù)所述另一轉(zhuǎn)發(fā)器的Mub創(chuàng)建調(diào)用處理器,并根據(jù)所述調(diào)用處理器和所述返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。
6.如權(quán)利要求5所述的裝置,其特征在于,所述裝置還包括第二發(fā)送模塊,用于如果所述收發(fā)模塊接收的返回值是可傳輸類型,將所述返回值發(fā)送給所述客戶端,使所述客戶端將所述返回值返回給客戶。
7.如權(quán)利要求5或6所述的裝置,其特征在于,所述構(gòu)造模塊或所述第二發(fā)送模塊的可傳輸類型包括基本類型、遠(yuǎn)程對(duì)象和可序列化對(duì)象。
8.如權(quán)利要求5所述的裝置,其特征在于,所述裝置是一轉(zhuǎn)發(fā)器。
全文摘要
本發(fā)明公開了一種訪問非遠(yuǎn)程對(duì)象的方法和裝置,屬于計(jì)算機(jī)領(lǐng)域。方法包括服務(wù)器端的轉(zhuǎn)發(fā)器接收客戶端發(fā)起的對(duì)目標(biāo)對(duì)象的調(diào)用請(qǐng)求,目標(biāo)對(duì)象是非遠(yuǎn)程對(duì)象;將調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)對(duì)象,并接收目標(biāo)對(duì)象發(fā)送的調(diào)用請(qǐng)求對(duì)應(yīng)的返回值;如果返回值不是可傳輸類型、并且返回值實(shí)現(xiàn)有一接口,根據(jù)返回值構(gòu)造可被遠(yuǎn)程訪問的另一轉(zhuǎn)發(fā)器,并創(chuàng)建另一轉(zhuǎn)發(fā)器的樁Stub;將另一轉(zhuǎn)發(fā)器的Stub發(fā)送給客戶端,使客戶端根據(jù)另一轉(zhuǎn)發(fā)器的Stub創(chuàng)建調(diào)用處理器,并根據(jù)調(diào)用處理器和返回值的接口構(gòu)造并返回動(dòng)態(tài)遠(yuǎn)程代理給客戶。裝置包括接收、收發(fā)、構(gòu)造和發(fā)送模塊。本發(fā)明解決了非遠(yuǎn)程對(duì)象遠(yuǎn)程訪問失敗的問題,并且實(shí)現(xiàn)了調(diào)用的簡單化和自動(dòng)化。
文檔編號(hào)H04L29/06GK102255872SQ20101017923
公開日2011年11月23日 申請(qǐng)日期2010年5月19日 優(yōu)先權(quán)日2010年5月19日
發(fā)明者江海軍 申請(qǐng)人:深圳市金蝶中間件有限公司