專(zhuān)利名稱(chēng):動(dòng)態(tài)裝入方法調(diào)用異常代碼的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及客戶(hù)/服務(wù)器計(jì)算機(jī)網(wǎng)絡(luò)。更詳細(xì)地說(shuō),本發(fā)明涉及一種僅在運(yùn)行時(shí)間與它被需要時(shí)用來(lái)將方法調(diào)用異常代碼裝入一客戶(hù)計(jì)算機(jī)中的技術(shù)。
在一客戶(hù)/服務(wù)器網(wǎng)絡(luò)中,一客戶(hù)計(jì)算機(jī)的用戶(hù)請(qǐng)求一對(duì)象的執(zhí)行。特別是,該用戶(hù)請(qǐng)求與該對(duì)象有關(guān)的一方法的執(zhí)行。常常是,該對(duì)象沒(méi)有本地地存貯在客戶(hù)計(jì)算機(jī)中。因此,必須對(duì)在其中駐留有對(duì)象的一服務(wù)器計(jì)算機(jī)進(jìn)行遠(yuǎn)程過(guò)程調(diào)用(RPC)。在大多數(shù)情況中,該服務(wù)器計(jì)算機(jī)執(zhí)行該所請(qǐng)求的方法以產(chǎn)生一結(jié)果。該結(jié)果隨后被傳送到客戶(hù)計(jì)算機(jī)。但是,當(dāng)該服務(wù)器計(jì)算機(jī)不可能執(zhí)行該所請(qǐng)求的方法或者只能執(zhí)行該所請(qǐng)求方法的一部分時(shí),則稱(chēng)存在有一異常。在這種情況中,該服務(wù)器計(jì)算機(jī)將異常通知該客戶(hù)計(jì)算機(jī)。然后該客戶(hù)計(jì)算機(jī)有責(zé)任解釋該異常的性質(zhì)并采取矯正行動(dòng)。
在許多支持遠(yuǎn)程過(guò)程調(diào)用的分布式計(jì)算機(jī)系統(tǒng)中,例如在JAVATM虛擬機(jī)環(huán)境下使用SOLARISTM操作系統(tǒng)的計(jì)算機(jī)系統(tǒng),其中的JAVATM和SOLARISTM均來(lái)自加尼福尼亞Mountain View的Sun Microsystems公司(SOLARISTM、JAVATM和Sun Microsystems是Sun Microsystems公司在美國(guó)和其它國(guó)家的商標(biāo)或注冊(cè)商標(biāo)),當(dāng)一客戶(hù)計(jì)算機(jī)請(qǐng)求在一對(duì)象中執(zhí)行一方法時(shí)(有時(shí)稱(chēng)之為調(diào)用一對(duì)象方法),該客戶(hù)計(jì)算機(jī)例示所有與該方法相關(guān)的異常代碼。該異常代碼可被本地地存貯在該客戶(hù)計(jì)算機(jī)中,但在許多情況中該異常代碼必須從一遠(yuǎn)處的計(jì)算機(jī)中取回。因此,在大多數(shù)情況下,在調(diào)用一對(duì)象之前,該客戶(hù)計(jì)算機(jī)必須從一遠(yuǎn)處的計(jì)算機(jī)中取回異常代碼。啟動(dòng)與遠(yuǎn)處計(jì)算機(jī)的通信以及同遠(yuǎn)處計(jì)算機(jī)交換信息是一相當(dāng)耗費(fèi)時(shí)間的操作。
由于在大多數(shù)情況中該調(diào)動(dòng)方法被成功地執(zhí)行,所以客戶(hù)計(jì)算機(jī)不需使用該方法異常代碼。因此,該客戶(hù)計(jì)算機(jī)不必耗費(fèi)寶貴的時(shí)間去裝入異常代碼。鑒于這種情況,最好是提供一種用來(lái)僅僅在運(yùn)行時(shí)間必要時(shí)裝入方法調(diào)用異常代碼的技術(shù)。
本發(fā)明的目的在于提供一種在產(chǎn)生方法調(diào)用的時(shí)間不需裝入異常代碼而只有在運(yùn)行時(shí)間需要時(shí)才裝入該異常代碼的方法和裝置。
本發(fā)明的一實(shí)施例包括在一服務(wù)器計(jì)算機(jī)中接收一客戶(hù)計(jì)算機(jī)所產(chǎn)生的一方法調(diào)用的步驟。該服務(wù)器計(jì)算機(jī)隨后試圖去執(zhí)行該方法調(diào)用并接著產(chǎn)生一異常。該異常被傳送到客戶(hù)計(jì)算機(jī)。該客戶(hù)計(jì)算機(jī)將該異常與在客戶(hù)計(jì)算機(jī)中所存貯的一異常表中的異常相匹配以獲得一異常對(duì)象標(biāo)識(shí)符。該異常對(duì)象標(biāo)識(shí)符用來(lái)將異常代碼裝入該客戶(hù)計(jì)算機(jī)。為了處理該異常而隨后對(duì)該異常代碼進(jìn)行處理。因此,在產(chǎn)生該方法調(diào)用的時(shí)間不裝入該異常代碼。而是僅僅當(dāng)在運(yùn)行時(shí)間需要時(shí)才裝入該異常代碼。
本發(fā)明的該裝置包括一產(chǎn)生一方法調(diào)用的客戶(hù)計(jì)算機(jī)。一服務(wù)器計(jì)算機(jī)從連接在客戶(hù)計(jì)算機(jī)和服務(wù)器計(jì)算機(jī)之間的一傳送通道中接收該方法調(diào)用。該服務(wù)器計(jì)算機(jī)試圖處理該方法調(diào)用并且隨后產(chǎn)生一異常。該異常越過(guò)該傳送通道傳送給客戶(hù)計(jì)算機(jī)。該客戶(hù)計(jì)算機(jī)將該異常與所存貯的一組異常相匹配。所匹配的異常與一異常對(duì)象標(biāo)識(shí)符相關(guān)聯(lián)。該異常對(duì)象標(biāo)識(shí)符用來(lái)裝入異常代碼??蛻?hù)計(jì)算機(jī)隨后處理該異常代碼,因此響應(yīng)于由該方法調(diào)用所產(chǎn)生的異常。
本發(fā)明的客戶(hù)計(jì)算機(jī)的操作非常之快,這是因?yàn)楫?dāng)一方法被調(diào)用時(shí)它們裝入少量信息。特別地是它們只裝入該方法調(diào)用的代碼。在該方法調(diào)用不成功的相對(duì)少見(jiàn)的情況中,則與該方法相關(guān)聯(lián)的方法異常代碼才被迅速地裝入。
為了更好地了解本發(fā)明的屬性和目的,將參考附圖作如下詳細(xì)說(shuō)明,在附圖中
圖1示出了一客戶(hù)/服務(wù)器計(jì)算機(jī)的拓?fù)浣Y(jié)構(gòu)。
圖2示出了與圖1的裝置相關(guān)的處理。
圖3示出了與本發(fā)明的一實(shí)施例的協(xié)議識(shí)別方法有關(guān)的處理步驟。
圖4示出了在實(shí)踐該披露的技術(shù)中可使用的一數(shù)據(jù)結(jié)構(gòu)的例子。
圖5示出了在實(shí)踐該披露的技術(shù)中可使用的一數(shù)據(jù)結(jié)構(gòu)的一般表示。
圖6示出了根據(jù)本發(fā)明的一實(shí)施例,與異常代碼的動(dòng)態(tài)裝入相關(guān)的處理步驟。
在幾個(gè)附圖中相同的標(biāo)號(hào)表示相應(yīng)的部分。
圖1示出了包括本發(fā)明技術(shù)的一客戶(hù)/服務(wù)器計(jì)算機(jī)裝置20。該裝置20包括有一組客戶(hù)計(jì)算機(jī)22A-22N。這些計(jì)算機(jī)的每一個(gè)均與一傳送通道23相連。該傳送通道23通常是指任何在計(jì)算機(jī)之間的有線(xiàn)或無(wú)線(xiàn)線(xiàn)路。該客戶(hù)計(jì)算機(jī)22A-22N利用傳送通道23與服務(wù)器計(jì)算機(jī)24或由服務(wù)器計(jì)算機(jī)24N所指定的其它服務(wù)器計(jì)算機(jī)進(jìn)行通信。
每個(gè)客戶(hù)計(jì)算機(jī)22具有包括有與一存貯器32相連的中央處理單元(CPU)30的標(biāo)準(zhǔn)計(jì)算機(jī)配置,該存貯器32存貯有一組可執(zhí)行程序。在該典型系統(tǒng)中該可執(zhí)行程序包括有至少一個(gè)客戶(hù)應(yīng)用程序34、客戶(hù)存根38、客戶(hù)子合同40、和一操作系統(tǒng)42。
該客戶(hù)應(yīng)用程序34是任何應(yīng)用層程序,例如是與一客戶(hù)計(jì)算機(jī)22的該用戶(hù)互相配合的應(yīng)用程序。該客戶(hù)存根38通過(guò)應(yīng)用程序34請(qǐng)求特定對(duì)象的特定方法的執(zhí)行而接收過(guò)程調(diào)用。該客戶(hù)存根38的用途是訪(fǎng)問(wèn)在另外地址空間中,例如在服務(wù)器計(jì)算機(jī)24被實(shí)施的對(duì)象。
該客戶(hù)子合同程序40和服務(wù)器子合同程序58控制對(duì)象調(diào)用和變?cè)ㄟ^(guò)的基本機(jī)理。它們控制對(duì)象調(diào)用如何被實(shí)施、在地址空間之間對(duì)象基準(zhǔn)如何被傳送、對(duì)象基準(zhǔn)如何被解除,以及類(lèi)似的對(duì)象運(yùn)行時(shí)間操作。例如,當(dāng)一客戶(hù)調(diào)用一給定子合同的對(duì)象時(shí),通過(guò)將該請(qǐng)求傳送給相關(guān)對(duì)象所處的地址空間、一般為服務(wù)器計(jì)算機(jī)24,該子合同實(shí)施該對(duì)象調(diào)用。
該客戶(hù)子合同程序40執(zhí)行一引導(dǎo)操作,以將一對(duì)象調(diào)用(即,遠(yuǎn)程過(guò)程調(diào)用)傳送給另一地址空間。由服務(wù)器計(jì)算機(jī)24中一服務(wù)器子合同58執(zhí)行相應(yīng)的解編組操作。當(dāng)從另一計(jì)算機(jī),即所說(shuō)的服務(wù)計(jì)算機(jī)24,接收一應(yīng)答(諸如從一方法調(diào)用產(chǎn)生的結(jié)果)時(shí),該客戶(hù)子合同程序40還執(zhí)行解編組操作。一操作系統(tǒng)42,諸如Sun Microsystem的SOLARIS操作系統(tǒng),構(gòu)成客戶(hù)應(yīng)用程序34、客戶(hù)存根38、和客戶(hù)子合同40的操作的基礎(chǔ)。
服務(wù)器24具有一類(lèi)似于客戶(hù)計(jì)算機(jī)22的構(gòu)型。該服務(wù)器24包括一CPU50和一相關(guān)存貯器52。存貯器52存貯有服務(wù)器應(yīng)用程序54、服務(wù)器存根56、服務(wù)器子合同程序58、和一操作系統(tǒng)60。如上所指出的,服務(wù)器存根56處理在一對(duì)象上輸入的方法調(diào)用并調(diào)用所指定的方法以執(zhí)行該操作。如上面還指出的,服務(wù)器子合同58執(zhí)行數(shù)據(jù)編組和其它操作,以支持在服務(wù)器24和客戶(hù)計(jì)算機(jī)22之間方法調(diào)用和所致返回信息的傳送。
參考圖2對(duì)圖1裝置的操作作更全面的的說(shuō)明。圖2示出了圖1的客戶(hù)計(jì)算機(jī)22A、傳送通道23、和服務(wù)器24。如上面所述,客戶(hù)應(yīng)用程序34利用遠(yuǎn)程過(guò)程調(diào)用在一不同的地址空間調(diào)用一對(duì)象的特定方法。該遠(yuǎn)程過(guò)程調(diào)用通過(guò)客戶(hù)存根38被送到客戶(hù)子合同40,為了在該傳送通道23上傳送,該客戶(hù)子合同將該遠(yuǎn)程過(guò)程調(diào)用進(jìn)行組裝。服務(wù)器24的服務(wù)器子合同58接收該信息并將它解組裝。服務(wù)器子合同58隨后將該信息送到服務(wù)器存根56。該服務(wù)器存根56對(duì)上面所描述的對(duì)象方法的服務(wù)器應(yīng)用程序54進(jìn)行存取。更詳細(xì)地說(shuō),特定的服務(wù)器存根56形成一過(guò)程調(diào)用以執(zhí)行一被調(diào)用對(duì)象的特定的方法。該方法的執(zhí)行產(chǎn)生一組結(jié)果,這里稱(chēng)之為應(yīng)答,該應(yīng)答隨后返回到服務(wù)器子合同58并且該通信路徑被反向,如同圖2箭頭所指那樣。
圖2的方框70示出了有關(guān)本發(fā)明的一對(duì)象請(qǐng)求代理(ORB)組成部分。如上面所指出的,在ORB上使用了各種的通信協(xié)議。當(dāng)一服務(wù)器試圖識(shí)別輸入的對(duì)象請(qǐng)求時(shí),在不同的ORB上使用不同的協(xié)議是困難的。
現(xiàn)在與本發(fā)明相關(guān)的一般的結(jié)構(gòu)格式和處理已經(jīng)被說(shuō)明了。接著轉(zhuǎn)向更為詳細(xì)地討論本發(fā)明的結(jié)構(gòu)格式、本發(fā)明的處理、這些要素和現(xiàn)有技術(shù)中的相應(yīng)要素之間的區(qū)別、以及與所披露技術(shù)有關(guān)的優(yōu)點(diǎn)。
如圖2所示,客戶(hù)子合同40使用一協(xié)議相關(guān)方法描述符去請(qǐng)求與一被調(diào)用對(duì)象有關(guān)的方法。更詳細(xì)地說(shuō),該客戶(hù)子合同40使用了一服從于一被選擇的在線(xiàn)數(shù)據(jù)格式的編組緩沖器。例如,為了識(shí)別一所給方法“X”,一協(xié)議可使用“XXX”的一值,另一協(xié)議可使用“@@@∷123∷XXX”的一值,以及另一協(xié)議可使用“123456”的一整數(shù)值,這里該值是在該方法名上的一散列函數(shù)的輸出??蛻?hù)存根38將協(xié)議相關(guān)值的一表格送到客戶(hù)子合同40,客戶(hù)子合同40根據(jù)該表格計(jì)算協(xié)議相關(guān)方法描述符。
因此,當(dāng)一組客戶(hù)計(jì)算機(jī)22A-22N被連接到服務(wù)器24時(shí),服務(wù)器24必須處理每一個(gè)協(xié)議。單獨(dú)的服務(wù)器子合同58(未示出)必須適應(yīng)于這些協(xié)議的每一個(gè)。在現(xiàn)有技術(shù)中,每一服務(wù)器子合同58有一組相應(yīng)的服務(wù)器存根56。這樣,為了支持帶有多個(gè)協(xié)議的ORB,對(duì)于每個(gè)協(xié)議服務(wù)器24將具有不同的服務(wù)器存根56,其結(jié)果將具有大量的服務(wù)器存根56。因此,很容易了解不同ORB協(xié)議的使用會(huì)導(dǎo)致對(duì)服務(wù)器24不便的請(qǐng)求。
根據(jù)本發(fā)明,當(dāng)服務(wù)器子合同58接收一輸入的方法調(diào)用時(shí),它以對(duì)該子合同協(xié)議的特定的方式將該方法描述符解編組。然后試著將該方法描述符與每一個(gè)進(jìn)入?yún)f(xié)議相關(guān)值的表中的值相匹配。協(xié)議相關(guān)的值可以是字符串、數(shù)值、以及其它類(lèi)型參數(shù)值。不同協(xié)議可以使用不同的匹配函數(shù)以使該方法描述符與協(xié)議相關(guān)值的表進(jìn)行比較。該匹配函數(shù)可以是一字符串比較、一散列函數(shù)、或由服務(wù)器子合同58所指定的其它技術(shù)。當(dāng)一匹配協(xié)議相關(guān)的值被識(shí)別時(shí),該服務(wù)器子合同58可以隨后將它與一索引值關(guān)聯(lián)。
如圖2所示,該索引值被送到可以調(diào)用相應(yīng)于該索引值的方法的協(xié)議無(wú)關(guān)的服務(wù)器存根56。在這種方式中,從屬于各自對(duì)象基準(zhǔn)的協(xié)議與協(xié)議無(wú)關(guān)的服務(wù)器存根56相隔離。因此,協(xié)議無(wú)關(guān)的服務(wù)器存根56可被用到任何類(lèi)型的對(duì)象請(qǐng)求代理70。另外,一單個(gè)的編譯程序可以用來(lái)產(chǎn)生該協(xié)議無(wú)關(guān)服務(wù)器存根56。
因此,不同于現(xiàn)有技術(shù),本發(fā)明提供了識(shí)別各種ORB協(xié)議的服務(wù)器24。此外,通過(guò)使用一組協(xié)議無(wú)關(guān)服務(wù)器存根56以高效的方式執(zhí)行這種功能。應(yīng)注意的是為了支持這種技術(shù),現(xiàn)有技術(shù)存根通常使用的編組和解編組操作由本發(fā)明的客戶(hù)子合同40和服務(wù)器子合同58所執(zhí)行。這種處理的移植和為協(xié)議無(wú)關(guān)服務(wù)器提供存根的索引值的使用構(gòu)成了現(xiàn)有技術(shù)和本發(fā)明的一方面之間差別。因此,一旦這些處理的差別被調(diào)整,在現(xiàn)存的結(jié)構(gòu)格式和過(guò)程中本發(fā)明的這種方式可以被成功地實(shí)施。
圖3是對(duì)前面部分所描述的該處理步驟的詳細(xì)說(shuō)明。圖3的第一個(gè)處理步驟是該服務(wù)器子合同識(shí)別在一方法調(diào)用中的一方法描述符(框80)。如上面所指出的,該客戶(hù)計(jì)算機(jī)產(chǎn)生一方法調(diào)用,該方法調(diào)用作為一組信息最終被組裝在一引導(dǎo)緩沖器中。該信息的內(nèi)容隨具有被引導(dǎo)的該信息的客戶(hù)子合同而定。在該服務(wù)器處相應(yīng)的子合同將該信息解編組并在該信息之內(nèi)識(shí)別該方法描述符。
下一個(gè)處理步驟是對(duì)于該服務(wù)器子合同去選擇一匹配該方法描述符的協(xié)議相關(guān)值(框82)。這種操作可參照?qǐng)D4來(lái)說(shuō)明。圖4示出了協(xié)議相關(guān)值的一描述符_表。該表包括N個(gè)子集合表。每一子集合表識(shí)別一組可被用來(lái)識(shí)別單個(gè)方法的協(xié)議相關(guān)值。每個(gè)子集合表具有j個(gè)入口。在圖4中,這些入口如描述符_表_1_l到描述符_表_1_j所示。在圖4中,描述符_表_1_1是與一接口定義語(yǔ)言(IDL)短名有關(guān)。IDL是在該技術(shù)中使用的一標(biāo)準(zhǔn)。也就是,在該表中的一入口是用于被調(diào)用方法的IDL短名。該IDL短名是一在該技術(shù)中使用的ORB協(xié)議名。同一表示出了與一IDL長(zhǎng)名相關(guān)的描述符_表1_2。也就是說(shuō),在該表中這個(gè)入口是用于該被調(diào)用方法的IDL長(zhǎng)名。該IDL長(zhǎng)名是在該技術(shù)中使用的另一ORB協(xié)議名。在該子集合表中的第三個(gè)入口是描述符_表_1_3,它具有一貯存庫(kù)ID。該貯存庫(kù)ID是一用于該技術(shù)的另一ORB協(xié)議中的名稱(chēng)。這些不同協(xié)議的例子包括如下的語(yǔ)句
“get_weak_comparator”(IDL短名)“∷comparator∷weak_comparable∷get_weak_comparator”(IDL長(zhǎng)名),和“IDL/comparator/weak_comparable/gek_weak_comparator1.0”(貯存庫(kù)ID),這些語(yǔ)句被用于調(diào)用該操作get_weak_comparator。
如圖4所指出的,另外的指定還可用于該協(xié)議相關(guān)值的表中。此外,無(wú)須使用由這里例子所示的指定。無(wú)論如何,使用由IDL標(biāo)準(zhǔn)和其它工業(yè)標(biāo)準(zhǔn)以及實(shí)踐所建立的格式,可以預(yù)言在該方式中大多數(shù)方法描述符將由任何適當(dāng)?shù)膮f(xié)議來(lái)實(shí)施。
作為一個(gè)簡(jiǎn)單的例子,用下面的偽代碼來(lái)說(shuō)明該描述符表是如何被檢索的。
<pre listing-type="program-listing"><![CDATA[(1)i=0(2)match=false(3)repeat(4) i=i+1(5) if Match_p(method_Descriptor,Descriptor_List_i_j)(6) Then Match=True(7)until Match(8)call operation Table(i)]]></pre>行(1)和(2)提供初始化。行(3)是進(jìn)入一處理循環(huán)的入口。行(4)提供在該處理循環(huán)中的初始化。行(5)用于一條件校驗(yàn)。即,該代碼校驗(yàn)是否該方法調(diào)用的解編組的“Method_Descriptor”與協(xié)議相關(guān)表的“第i個(gè)”子集合表(Descriptor_List_i_j)的“第j個(gè)”入口相匹配?!暗趈個(gè)”入口,即所說(shuō)明IDL短名,由服務(wù)器子合同58知道是用于這個(gè)協(xié)議比較的一個(gè)入口。該“第i個(gè)”值是允許每個(gè)子集合描述符表(Descriptor_List_1到Descriptor_List_N)被校驗(yàn)的一增量值。該“Match_p”項(xiàng)代表用來(lái)將Method_Descriptor與該表入口相比較的匹配函數(shù)。例如,“Match_p”可規(guī)定為在兩值之間的一簡(jiǎn)單字符串比較,或可規(guī)定為散列值的比較?!癕atch_p”的定義由服務(wù)器子合同58提供。
如果該條件滿(mǎn)足,則求得一匹配,否則,則訪(fǎng)問(wèn)下一個(gè)子集合表“i”。當(dāng)求出一匹配時(shí),則行(8)提供對(duì)服務(wù)器存根(56)的一操作表的調(diào)用。應(yīng)注意的是,當(dāng)求得一匹配時(shí),值“i”是送到服務(wù)器存根的值。這個(gè)值對(duì)應(yīng)于被檢索表的一子集合,并且這個(gè)子集合與已被調(diào)用的單個(gè)方法相關(guān)聯(lián)。因此,在行(8)中的代碼表示圖3的下一個(gè)處理步驟,即該服務(wù)器子合同將一索引值送給該服務(wù)器存根(框86)。
一旦該服務(wù)器存根接收該索引值,則它們根據(jù)如圖4中所示的一操作表100調(diào)用由該索引值指定的方法。該操作表最好是作為一種具有一組與每種情況值“i”相關(guān)聯(lián)的處理步驟的情況表而被實(shí)施。當(dāng)該值“i”被接收時(shí),由該值所規(guī)定的方法被執(zhí)行(框88)。圖4示出了為完成這種結(jié)果的一組簡(jiǎn)單的處理步驟。第一步是執(zhí)行方法i,第二步是將所有的結(jié)果信息(應(yīng)答)裝入該編組緩沖器中。最后的處理步驟如圖3所示是對(duì)于該服務(wù)器存根將由執(zhí)行該方法產(chǎn)生的應(yīng)答送到服務(wù)器子合同(框90)。
圖5示出了本發(fā)明支持的與方法調(diào)用相關(guān)聯(lián)的異常。在上面所討論類(lèi)型的現(xiàn)有技術(shù)系統(tǒng)中,在該方法被調(diào)用之前,與一方法相關(guān)聯(lián)的異常代碼被裝入。例如,在一現(xiàn)有技術(shù)系統(tǒng)中,當(dāng)一方法被調(diào)用時(shí),在產(chǎn)生一RPC以執(zhí)行該方法之前,該客戶(hù)計(jì)算機(jī)22裝入所有與該方法調(diào)用相關(guān)的異常的代碼。
更詳細(xì)地說(shuō),對(duì)于每個(gè)可能的異常條件,存在有一相應(yīng)的對(duì)象類(lèi)別。與一異常的對(duì)象類(lèi)別被例示時(shí),一對(duì)象例子被建立,該對(duì)象例子包含響應(yīng)于該相應(yīng)異常或在相反情況下處理該相應(yīng)異常的一方法(即,一種可執(zhí)行程序)。因此,在現(xiàn)有技術(shù)系統(tǒng)中,當(dāng)一客戶(hù)應(yīng)用程序啟動(dòng)一RPC以調(diào)用一對(duì)象方法時(shí),如果該RPC參照異常對(duì)象類(lèi)別的一長(zhǎng)表,則在客戶(hù)子合同40中該RPC可將該方法調(diào)用傳送到服務(wù)器計(jì)算機(jī)24之前,在客戶(hù)應(yīng)用程序34的地址空間中所有這些異常對(duì)象類(lèi)別將需要被例示。
雖然在該客戶(hù)計(jì)算機(jī)22上可存在這些異常中的某些異常信息(即例如某些異常對(duì)象類(lèi)別中的例子),在大多數(shù)情況中至少有一些異常對(duì)象類(lèi)別將不駐留該客戶(hù)計(jì)算機(jī)22。對(duì)于這些在該客戶(hù)計(jì)算機(jī)22上不具有相應(yīng)異常過(guò)程(即異常代碼)的異常來(lái)說(shuō),該客戶(hù)計(jì)算機(jī)22不得不從如圖1所示的諸如服務(wù)器24N之類(lèi)的遠(yuǎn)程計(jì)算機(jī)中重新取回該異常過(guò)程。另外,為了得到每個(gè)異常過(guò)程(即異常代碼),典型地需要單獨(dú)的通信對(duì)話(huà)。因此,聚集異常代碼的過(guò)程可能相對(duì)耗時(shí),由于在大多數(shù)情況中客戶(hù)計(jì)算機(jī)22不需要該異常代碼,所以這種處理代價(jià)尤其令人遺憾。
本發(fā)明的一方法調(diào)用不必參考與該方法調(diào)用相關(guān)聯(lián)的每個(gè)異常。因此,不同的異常不被初始地裝入。僅當(dāng)一異常被輸送時(shí)它們才被裝入。因此,在本發(fā)明中,僅僅該方法調(diào)用被初始地處理,其結(jié)果產(chǎn)生較快速的性能。僅僅在一異常被處理的相對(duì)少見(jiàn)的情況下才得不到該改進(jìn)的性能。
如圖5所示,每一個(gè)被識(shí)別的方法,所說(shuō)的該方法與Descriptor_List_i相關(guān),具有一相關(guān)聯(lián)的異常描述符。該異常描述符是一指針。例如,依照上述例子“get_weak_comparator”,該異常描述符是_get_weak_comparatorException Descriptor Instance。
該異常描述符指向具有M個(gè)異常子集合表的一異常表。圖5示出了Exception_List_x。每個(gè)指定對(duì)于方法調(diào)用的一個(gè)異常的子集合表包括IDL短名、IDL長(zhǎng)名、一貯存庫(kù)識(shí)別、和對(duì)于該異常的任何交替識(shí)別。每一異常表還包括被用于在運(yùn)行時(shí)間設(shè)置異常代碼的一異常對(duì)象識(shí)別符。
在本發(fā)明的實(shí)施例中所使用的該異常描述符概念如圖4所示。應(yīng)注意的是在該子集合描述符表“Descriptor_List_1”中的最后入口是指向一異常表的一異常描述符。當(dāng)執(zhí)行一方法時(shí),服務(wù)器計(jì)算機(jī)所產(chǎn)生的應(yīng)答可包括在異常表中的任何一個(gè)入口,也就是說(shuō),與Exception_List_1、Exception_List_3、或Exception_List_M相關(guān)聯(lián)的異常。一指定的服務(wù)器子合同58使用它的相關(guān)聯(lián)的協(xié)議來(lái)傳送該異常。該客戶(hù)計(jì)算機(jī)22隨后自服務(wù)計(jì)算機(jī)24接收該異常。
根據(jù)本發(fā)明,客戶(hù)子合同40存貯與異常描述符相關(guān)的異常表的一拷貝。因此,當(dāng)從服務(wù)器計(jì)算機(jī)24接收該異常時(shí),利用前面已描述的有關(guān)識(shí)別方法的技術(shù),客戶(hù)計(jì)算機(jī)22可將它們與在該異常表中的異常相匹配。
該異常隨后通過(guò)依靠一異常對(duì)象識(shí)別符而被處理,該異常對(duì)象識(shí)別符被用來(lái)重新取回與該異常相關(guān)聯(lián)的異常代碼。應(yīng)注意的是在圖5中象所有其它的異常子集合表一樣,Exception_List_x包括一異常對(duì)象識(shí)別符(異常對(duì)象ID),該異常對(duì)象識(shí)別符是規(guī)定處理該異常的該對(duì)象類(lèi)別的一字符串名。用于該對(duì)象類(lèi)別的代碼可以在本地對(duì)象貯存庫(kù)104中。在該對(duì)象在該本地對(duì)象貯存庫(kù)104中不存在的情況中,通過(guò)從在該網(wǎng)絡(luò)中的另一計(jì)算機(jī)中—即所說(shuō)的圖1的服務(wù)器24N-下載代碼,該操作系統(tǒng)42將該對(duì)象例示入該本地對(duì)象貯存庫(kù)104中。因此,圖5的遠(yuǎn)程對(duì)象貯存庫(kù)106一般是指為一對(duì)象提供代碼的任何被調(diào)用的計(jì)算機(jī)。該代碼隨后直接送入本地對(duì)象貯存庫(kù)104。從本地對(duì)象貯存庫(kù)104和遠(yuǎn)程對(duì)象貯存庫(kù)106取出代碼的過(guò)程類(lèi)似于現(xiàn)有技術(shù)的方法,但是在本發(fā)明中是在一異常已被返回之后才執(zhí)行該操作,而不是當(dāng)該方法描述符被構(gòu)成時(shí)執(zhí)行該操作。
參照?qǐng)D6概括前面所披露的本發(fā)明的內(nèi)容。與圖6的過(guò)程相關(guān)聯(lián)的第一步驟是在一客戶(hù)計(jì)算機(jī)22中產(chǎn)生一方法調(diào)用(框110)。如上面所指出的,本發(fā)明的該方法調(diào)用不例示一異常的對(duì)象類(lèi)別。因此,該方法調(diào)用無(wú)須例示異常對(duì)象而被處理。
接下來(lái)的處理步驟是在服務(wù)器計(jì)算機(jī)24中處理該方法調(diào)用(框112)。如上面所指出的,對(duì)該方法調(diào)用的處理導(dǎo)致該服務(wù)器計(jì)算機(jī)24識(shí)別一異常。該異常隨后被送到客戶(hù)計(jì)算機(jī)22(框114)。
當(dāng)該客戶(hù)計(jì)算機(jī)22接收該異常時(shí),它試圖與其所存貯的異常表中的異常相匹配(框116)。異常表的每個(gè)子集合(所說(shuō)的Exception_List_M)與一單個(gè)異常相關(guān)聯(lián),并且每個(gè)子集合具有一相應(yīng)的異常對(duì)象識(shí)別符(如圖4中所示的Exception_object_ID)。該異常對(duì)象識(shí)別符用來(lái)將異常代碼裝入該客戶(hù)計(jì)算機(jī)(框118)。最后,響應(yīng)于由該方法調(diào)用所產(chǎn)生的異常,該客戶(hù)計(jì)算機(jī)處理該異常代碼(框120)。
鑒于前述,本發(fā)明的益處是明顯的。根據(jù)本發(fā)明,由于當(dāng)一方法被調(diào)用時(shí),客戶(hù)計(jì)算機(jī)22裝入較少的信息,所以它們的操作非???。特別是,它們僅僅裝入需要處理的該方法調(diào)用的代碼。在方法調(diào)用不成功的相對(duì)難得的情況下,與該方法相關(guān)聯(lián)的異常代碼才被迅速地裝入。
為了說(shuō)明和描述的目的而對(duì)所存在的本發(fā)明的特定實(shí)施例作了如上所述的說(shuō)明。上述說(shuō)明并不意味著包括了本發(fā)明的全部或限于所披露的本發(fā)明的精確的形式,很明顯地,對(duì)本發(fā)明的上述技術(shù)作若干改進(jìn)和變型是可能的。例如,本發(fā)明的技術(shù)可以應(yīng)用于需要調(diào)用對(duì)象的任何場(chǎng)合。
為了更好的說(shuō)明本發(fā)明的原理和它的實(shí)際應(yīng)用而選擇和描述了這些實(shí)施例,本技術(shù)領(lǐng)域的其它普通技術(shù)人員能夠更好的利用本發(fā)明和具有各種改進(jìn)的不同的實(shí)施例以適應(yīng)所預(yù)期的特定應(yīng)用。這意味著由下面的權(quán)利要求和它們的等效物來(lái)確定本發(fā)明的范圍。
權(quán)利要求
1.一種可用于控制客戶(hù)/服務(wù)器系統(tǒng)以一特定方式操作的計(jì)算機(jī)可讀存貯器,包括在所述存貯器中存貯的方法異常信息,所述方法異常信息包括指定一組異常的異常表;和在所述存貯器中存貯的可執(zhí)行指令,所述可執(zhí)行指令包括響應(yīng)于來(lái)自所述客戶(hù)/服務(wù)器系統(tǒng)的客戶(hù)計(jì)算機(jī)的一方法調(diào)用而在一客戶(hù)/服務(wù)器系統(tǒng)的一服務(wù)器計(jì)算機(jī)中產(chǎn)生一異常的指令;將來(lái)自所述服務(wù)器計(jì)算機(jī)的所述異常送到所述客戶(hù)計(jì)算機(jī)的指令;將所述異常與在所述異常表中的異常相匹配以形成異常對(duì)象識(shí)別符的指令;相應(yīng)于所述異常對(duì)象識(shí)別符將異常代碼裝入所述客戶(hù)計(jì)算機(jī)的指令;和處理所述異常代碼以響應(yīng)所述方法調(diào)用的所述異常的指令。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀存貯器,其中將來(lái)自所述服務(wù)器計(jì)算機(jī)的所述異常傳送給所述客戶(hù)計(jì)算機(jī)的所述指令包括有以一協(xié)議相關(guān)格式傳送所述異常的指令。
3.如權(quán)利要求1所述的計(jì)算機(jī)可讀存貯器,其中將所述異常與在所述異常表中的異常相匹配的指令包括有使用一具有多個(gè)子集合表的異常表的指令,每個(gè)子集合表相應(yīng)于一指定的異常并包括相應(yīng)于用于標(biāo)明所述指定異常的不同協(xié)議相關(guān)語(yǔ)句的一組入口。
4.如權(quán)利要求1所述的計(jì)算機(jī)可讀存貯器,其中相應(yīng)于所述異常對(duì)象識(shí)別符將異常代碼裝入所述客戶(hù)計(jì)算機(jī)的指令包括有當(dāng)所述異常代碼不處在所述客戶(hù)計(jì)算機(jī)中時(shí)裝入來(lái)自除所述客戶(hù)計(jì)算機(jī)外的其他計(jì)算機(jī)的所述異常代碼的指令。
5.如權(quán)利要求1所述的計(jì)算機(jī)可讀存貯器,進(jìn)一步包括在所述方法調(diào)用內(nèi)設(shè)置在一協(xié)議相關(guān)格式中規(guī)定的一方法描述符的指令;在匹配所述方法描述符時(shí)向在一協(xié)議相關(guān)語(yǔ)句的表中的一被選擇的協(xié)議相關(guān)語(yǔ)句賦予一索引值的指令;和將所述索引值傳送到所述服務(wù)器計(jì)算機(jī)的一協(xié)議無(wú)關(guān)處理模塊的指令,其中所述計(jì)算機(jī)服務(wù)器根據(jù)所述索引值將一應(yīng)答返回給所述客戶(hù)計(jì)算機(jī)。
全文摘要
一種在客戶(hù)/服務(wù)器計(jì)算機(jī)系統(tǒng)中處理方法調(diào)用的方法,包括在服務(wù)器計(jì)算機(jī)中接收由客戶(hù)計(jì)算機(jī)所產(chǎn)生的一方法調(diào)用的步驟。該服務(wù)器計(jì)算機(jī)試圖執(zhí)行該方法調(diào)用并隨后產(chǎn)生一異常。該異常被送到客戶(hù)計(jì)算機(jī),并將其與存貯在客戶(hù)計(jì)算機(jī)中的異常表中的諸異常作匹配以獲得一異常對(duì)象識(shí)別符。該識(shí)別符用來(lái)將異常代碼裝入客戶(hù)計(jì)算機(jī)。隨后該代碼被處理。因此在產(chǎn)生該方法調(diào)用的時(shí)間不需裝入該異常代碼而只有在運(yùn)行時(shí)間需要時(shí)才被裝入。
文檔編號(hào)G06F17/00GK1153354SQ9611272
公開(kāi)日1997年7月2日 申請(qǐng)日期1996年10月4日 優(yōu)先權(quán)日1996年10月4日
發(fā)明者彼得·B·凱斯勒, 格雷厄姆·漢密爾頓, 杰夫里·D·尼斯王格 申請(qǐng)人:太陽(yáng)微系統(tǒng)有限公司