專利名稱:確定性散列識別遠程方法的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),尤其涉及在遠程服務器上的遠程方法啟用。更具體來說,本發(fā)明涉及使用散列值在服務器上識別遠程方法的方法和系統(tǒng)。
B.相關技術分布式系統(tǒng)通常包括連接在一網(wǎng)絡(例如,局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)或因特網(wǎng))中的諸如計算機及有關外圍設備等多個機器。分布式系統(tǒng)一般需要在不同地址空間(可能位于不同機器上)中運行的計算實體(例如,應用程序、程序、小應用程序等)能進行通信。
對于一基本的通信機構,分布式面向?qū)ο蟮南到y(tǒng)利用遠程過程調(diào)用(RPC)機構,它叫做遠程方法啟用(RMI)。RMI有助于屬于不同地址空間的“對象”之間的應用程序級通信。在面向?qū)ο蟮南到y(tǒng)中,“類(class)”提供了創(chuàng)建具有這一類的特征的“對象”(它們代表該系統(tǒng)所管理的項目和實例)所用的模板。術語模板代表每一類中的對象(即,數(shù)據(jù)項),共享由這一類所確定的某些特性或?qū)傩?,諸如其方法。對象通常是在系統(tǒng)操作期間動態(tài)創(chuàng)建的。一般,在同一類的對象上啟用(即,引起操作)與這一類相關的方法。
RMI是啟用一遠程對象的一個方法的動作。響應于使用RMI的啟用一遠程對象的一個方法,較低級的通信進程(process)使得在該遠程對象上執(zhí)行所啟用的方法。
JayaTM運行時間系統(tǒng)(被設計成實現(xiàn)以JavaTM面向?qū)ο蟮木幊陶Z言所編寫的應用程序)支持專用的JavaTMRMI應用程序接口(API)。例如,在Sun Microsystems,Inc.的名為“遠程方法啟用規(guī)范”(1997)的文檔說明了此API,這一文章可通過全球資源定位器(URL)http//www.javasoft.com/products/jdk/1.1/docs/guide/rmi/spec/rmiTOC.doc.html而獲得,在這里通過參考而引入。在許多文章中描述了JavaTM語言,包括Jamies Gosling、Bill Joy和Guy Steele、Addison-Wesley在1996年的“Java語言規(guī)范”的文章。Java和所有基于Java的商標都是Sun Microsystems,Inc.在美國和其它國家的商標或注冊商標。
Java RMI假定了一種專用的Java運行時間系統(tǒng)的同構環(huán)境,因此Java RMI盡可能地利用Java語言的專用對象模型。在JavaTM分布式對象模型中,遠程對象是具有可從另一運行時間系統(tǒng)(可能位于不同的機器上)啟用的方法的對象。通過以規(guī)定此遠程對象的方法的Java語言所編寫的一個或多個遠程接口碼來描述這種類型的對象。
Java運行時間系統(tǒng)跟蹤通過本地虛擬機(VM)來執(zhí)行的計算實體所引用(reference)的所有遠程對象。JavaTMVM(JVM)是運行時間系統(tǒng)的一個抽象的計算器,它接收來自字節(jié)碼形式的程序的指令并解釋這些字節(jié)碼(這是通過把這些字節(jié)碼轉(zhuǎn)換成諸如對象碼等執(zhí)行形式并執(zhí)行它們來實現(xiàn)的)。在Tim Lindholm和FrankYellin、Addison Wesley在1996年的名為“Java虛擬機規(guī)范”的文章中詳細地描述此JVM。
在Java RMI中,客戶在處理一程序時可通過與該客戶所提供的某些“參數(shù)”信息相關聯(lián)的方法的服務器計算機來遠程地啟動處理。在服務器已處理了此過程后,它將把其處理結(jié)果提供給該客戶,其后該客戶可在其處理操作中使用該結(jié)果。通常,在這樣的RMI調(diào)用中,客戶將利用本地“承接程序(stub)”,該承接程序在被調(diào)用時把此請求傳遞給實現(xiàn)此特定方法的服務器、獲得結(jié)果并把這些結(jié)果返還給客戶。
通常,在客戶對一包含一方法清單的遠程對象調(diào)用一方法時,由識別選中方法的串名或序號來識別該方法。然而,通過其串名來識別一方法可能會錯誤地識別一遠程方法,因為該遠程方法可能具有帶相同串名的不止一個方法。這種方法叫做“過載(overloaded)”。雖然,方法可具有相同的串名,但具有重復的相同串名的過載方法通常具有不同的參數(shù)類型。例如,假定使用Java編程語言的一個遠程方法具有以下兩個方法<pre listing-type="program-listing"><![CDATA[public interface Directory { PhoneNumber lookupPhone{String name); PhoneNumber lookupPhone(Person person)}]]></pre>如果客戶進行搜索而啟用這兩個方法中的一個方法,則僅靠串名“l(fā)ookupPhone”不能使該遠程對象確定要啟用的正確方法,這是因為存在不止一個具有該名稱的方法。
識別一遠程方法的另一個常規(guī)途徑是按字母順序放置這些方法并對它們進行編號。假定一遠程對象實現(xiàn)以下兩個方法<pre listing-type="program-listing"><![CDATA[public interface Directory { PhoneNumber lookupPhone(String name); void storePhone{String name,PhoneNumber phone);}]]></pre>可如下表示這兩個方法的編號方式1.lookupPhone2.storePhone在客戶想要啟用一方法時,它簡單地發(fā)送相應于該方法啟用指令中該方法的號碼。然而,如果要把新的方法加到遠程對象上,則它表現(xiàn)如下
<pre listing-type="program-listing"><![CDATA[public interface Directory { PhoneNumber lookupPhone(String name); void storaPhone(String name,PhoneNumber phone); Address lookupAddress(String name); void storeAddress(String name,Address addr);}]]></pre>該方法的新編號方式將為1. lookupAddress2. LookupPhone3. storeAddress4. storePhone因而,相應于每一方法的號碼已改變。這樣,繼續(xù)使用舊編號方式的舊承接程序?qū)⑹宫F(xiàn)有的客戶啟用錯誤的方法。
相應地,想要提供一種唯一地識別RMI的遠程對象的方法的系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明通過提供一種使用散列值來識別遠程對象的方法的方法和系統(tǒng),它滿足了這個和其它需要。
一種數(shù)據(jù)處理系統(tǒng)中用于啟用一遠程方法的方法包括以下步驟提供一唯一識別一遠程方法的散列值、響應于啟用該遠程方法的指令發(fā)送該散列值以及根據(jù)此散列值來啟用該遠程方法。本方法還包括使用該散列值來進行把該遠程方法在一映射表中定位的步驟。
還提供實施依據(jù)本發(fā)明的方法的設備和系統(tǒng)。
本發(fā)明的優(yōu)點是很多的。例如,符合本發(fā)明的方法和系統(tǒng)識別要啟用的唯一遠程方法,從而避免了對不正確遠程方法的錯誤識別。此外,即使兩個或多個方法具有相同的串名或這些方法使用變化的編號方式系統(tǒng),也能夠進行這一識別。
雖然可使用一長串諸如該方法名稱結(jié)合一參數(shù)類型清單等以更精確地識別一遠程方法,但這種識別器很不方便。由于不需要使用長的串來更精確地識別遠程方法,使用散列值進一步提供了更高的效率。此外,它允許服務器更有效地進行操作,這是因為服務器能更有效地管理和計算不同于串的整數(shù)。
因此,想要提供一種使用散列值唯一地識別遠程方法的方法和設備。
附圖概述引入本說明書并構成其一部分的附圖示出本發(fā)明的一個實施例,結(jié)合這些附圖及其描述來說明本發(fā)明的優(yōu)點和原理。圖中,
圖1示出可實現(xiàn)依據(jù)本發(fā)明的系統(tǒng)的網(wǎng)絡;圖2是可實現(xiàn)本發(fā)明的計算機系統(tǒng)的系統(tǒng)體系結(jié)構的方框圖;圖3是示出符合本發(fā)明在客戶計算機和服務器計算機之間使用散列值的RMI調(diào)用的方框圖。
圖4是符合本發(fā)明的散列值映射表的方框圖;圖5是示出符合本發(fā)明用來識別唯一的遠程方法的步驟的流程圖;以及圖6是示出服務器用來創(chuàng)建依據(jù)本發(fā)明的散列值映射表的步驟的流程圖。
詳細描述概述符合本發(fā)明的方法和系統(tǒng)使用一散列值來識別一遠程對象的一個方法。當客戶希望啟用位于一服務器上的一個遠程對象的一個方法時,客戶經(jīng)由RMI連接把識別該特定遠程方法的散列值發(fā)送到服務器。在一個實現(xiàn)中,此散列值是通過把一散列函數(shù)應用于該方法的串名和參數(shù)類型清單來創(chuàng)建的??蔀榇四康氖褂霉臎_突率低的散列函數(shù)。
當服務器接收到此方法啟用時,服務器使用接收到的散列值來識別所調(diào)用的方法。服務器保持散列值對服務器上與其相關的遠程方法的映射并使用該散列值來引用正確的方法。
在一遠程對象創(chuàng)建時,服務器動態(tài)地創(chuàng)建該映射表。在創(chuàng)建一遠程對象時,對該遠程對象所實現(xiàn)的每一方法確定散列值。然后,服務器把這些散列值及其相應方法的指針加到該映射表中。在加上散列值和方法指針時,服務器檢查該映射表來校驗此配對是否是唯一的,即服務器檢查散列值的沖突。此進程使得可唯一地識別遠程方法,而且還使服務器隨著遠程方法類的發(fā)展而不斷地增加方法,從而不必把新方法通知舊承接程序的所有客戶。此外,它還使使用舊承接程序的客戶能正確地識別服務器上的遠程方法。再者,使用散列避免了用長串來識別遠程方法的需要。
分布式系統(tǒng)符合本發(fā)明的方法和系統(tǒng)在具有各種部件(包括硬件和軟件)的分布式系統(tǒng)(“示例的分布式系統(tǒng)”)中進行操作。示例的分布式系統(tǒng)(1)允許系統(tǒng)的用戶在一具有許多裝置的網(wǎng)絡上共享服務和資源;(2)以允許開發(fā)穩(wěn)健而安全的分布式系統(tǒng)的工具和編程方式來提供編程器;以及(3)簡化管理分布式系統(tǒng)的任務。為了實現(xiàn)這些目標,示例的分布式系統(tǒng)利用JavaTM編程環(huán)境,從而允許以無縫的方式在各裝置之間轉(zhuǎn)移代碼和數(shù)據(jù)。相應地,示例的分布式系統(tǒng)處于Java編程環(huán)境的頂層,并開發(fā)該環(huán)境的特性,包括它所提供的安全性及它所提供的強大類型定義。在Jaworski,Java 1.1 Developer’s Guide,Sams.net(1997)中更清楚地描述了Java編程環(huán)境,這里通過參考而引入。
在示例的分布式系統(tǒng)中,把不同的計算機和裝置結(jié)合成為對用戶來說表現(xiàn)為單個的系統(tǒng)。通過表現(xiàn)為單個系統(tǒng),示例的分布式系統(tǒng)提供了單個系統(tǒng)可提供的訪問簡化和共享能力,而不放棄個人計算機或工作站的靈活性和個人化響應。示例的分布式系統(tǒng)可包含由用戶所操作的數(shù)千個裝置,這些用戶在地理上分散,但他們約定了信任、管理和政策等基本概念。在示例的分布式系統(tǒng)內(nèi)有一個或多個裝置所提供的服務的各種邏輯分組,已知每個這樣的邏輯分組是Djinn?!胺铡敝缚杀挥脩?、程序、裝置或其它服務所訪問并可以是與計算、存儲相關、與通信相關或與提供對另一個用戶的訪問相關的資源、數(shù)據(jù)或功能。作為Djinn的一部分所提供的服務的例子包括諸如打印機、顯示器和磁盤等裝置;諸如應用程序或?qū)嵱贸绦虻溶浖?;諸如數(shù)據(jù)庫和文件等信息;以及系統(tǒng)的用戶。
用戶和裝置都可加入Djinn。在加入一Djinn時,用戶或裝置把零個或多個服務加到Djinn并可訪問(經(jīng)歷安全性約束)它所包含的任一個服務。因而,裝置和用戶結(jié)合成為一Djinn,以共享對其服務的訪問。Djinn的服務在編程方面表現(xiàn)為Java編程環(huán)境的對象,此Java編程環(huán)境可包括其它對象、以不同的編程語言編寫的軟件成分或硬件裝置。服務具有定義可請求該服務的操作的界面,該服務的類型確定了構成該服務的界面。
圖1示出示例的分布式系統(tǒng)100,它包括計算機102、計算機104以及通過網(wǎng)絡108互連的裝置106。裝置106可以是許多裝置中的任一個,諸如打印機、傳真機、存儲裝置、計算機或其它裝置。網(wǎng)絡108可以是局域網(wǎng)、廣域網(wǎng)或因特網(wǎng)。雖然把示例的分布式系統(tǒng)100示為僅包括兩個計算機和一個裝置,但本領域內(nèi)的技術人員應理解,示例的分布式系統(tǒng)100可包括附加的計算機或裝置。
圖2更詳細地示出計算機102,以示出示例的分布式系統(tǒng)100的許多軟件成分。本領域內(nèi)的技術人員將理解,可類似地構成計算機104或裝置106。計算機102包括存儲器202、輔助存儲裝置204、中央處理單元(CPU)206、輸入裝置208和視頻顯示器210。存儲器202包括查找服務212、發(fā)現(xiàn)服務器214和JavaTM運行時間系統(tǒng)216。Java運行時間系統(tǒng)216包括JayaTM遠程方法調(diào)用系統(tǒng)(RMI)218和JavaTM虛擬機220。輔助存儲裝置204包括JavaTM空間222。
如上所述,示例的分布式系統(tǒng)100基于Java編程環(huán)境從而利用Java運行時間系統(tǒng)216。Java運行時間系統(tǒng)216包括JavaTMAPI,允許程序在Java允許時間系統(tǒng)的頂部運行,從而可以獨立于平臺的方式訪問這種系統(tǒng)功能,包括主操作系統(tǒng)的視窗能力和網(wǎng)絡化技術能力。由于Java API為跨移植了Java運行時間系統(tǒng)216的所有操作系統(tǒng)提供了單個公共API,所以在Java運行時間系統(tǒng)頂部運行的程序以獨立于平臺的方式運行,而不管主平臺的操作系統(tǒng)或硬件結(jié)構。Java運行時間系統(tǒng)216,作為可從加里福尼亞州Mountain View的Sun Microsystems獲得的JavaTM軟件開發(fā)工具包的一部分而提供。
Java虛擬機220也有利于平臺獨立性。Java虛擬機220起到類似于抽象計算機器的作用,它接收字節(jié)碼形式的程序中的指令,并通過把這些字節(jié)碼動態(tài)地轉(zhuǎn)換成諸如對象碼等用于執(zhí)行的形式來解釋它們,并執(zhí)行它們。RMI 218通過允許在一個計算機或裝置上執(zhí)行的對象啟用另一計算機或裝置上的對象的方法,從而有利于遠程方法調(diào)用。也提供了RMI和Java虛擬機作為Java軟件開發(fā)工具包的一部分。
查找服務212定義了特定Djinn可獲得的的服務。即,在示例的分布式系統(tǒng)100內(nèi)可存在不止一個Djinn繼而不止一個查找服務。查找服務212包含該Djinnn內(nèi)的每個服務的一個對象,每個對象包含有助于對相應的系統(tǒng)進行訪問的各種方法。在名為“便于查找服務的訪問的方法和系統(tǒng)”的___號未決美國專利申請中更詳細地描述了查找服務212及其服務,在前文已通過參考而引入。
發(fā)現(xiàn)服務214在已知為引導和加入或發(fā)現(xiàn)進程中檢測何時把一新的裝置加到示例的分布式系統(tǒng)100上以及何時檢測此新的裝置,發(fā)現(xiàn)服務器把查找服務212的一個引用傳送給新的裝置,從而此新裝置可把其服務向查找服務登記,并可成為此Djinn的一員。在登記后,新裝置變?yōu)镈jinn的一個成員,結(jié)果,它可訪問包含在查找服務212中的所有服務。在名為“用于提供在與分布式系統(tǒng)中的裝置通信時所使用的可下載代碼的設備和方法”的___號未決美國專利申請中更詳細地描述了引導和加入的進程,在前文中已通過參考而引入。
Java空間222是由示例的分布式系統(tǒng)100內(nèi)的程序用來存儲對象的對象庫。程序使用Java空間222來永久性地存儲對象并使得它們可被示例的分布式系統(tǒng)內(nèi)的其它裝置訪問。在1997年11月17日提交的名為“利用多形態(tài)入口和入口匹配的數(shù)據(jù)庫系統(tǒng)”的08/971,529號未決美國專利申請中更詳細地描述了Java空間,該申請已轉(zhuǎn)讓給共同的受讓人,在這里通過參考而引入。本領域內(nèi)的技術人員應理解,示例的分布式系統(tǒng)100可包含許多查找服務、發(fā)現(xiàn)服務和Java空間。
雖然描述了在示例的分布式系統(tǒng)和Java編程環(huán)境中操作的符合本發(fā)明的系統(tǒng)和方法,本領域內(nèi)的技術人員應理解,本發(fā)明可在其它系統(tǒng)和其它編程環(huán)境中實施。此外,雖然把本發(fā)明的方面描述為存儲在存儲器中,但本領域內(nèi)的技術人員應理解,還可把這些方面存儲在其它類型的計算機可讀媒體上或從中讀取,諸如輔助存儲裝置,類似于硬盤、軟盤或CD-ROM;來自因特網(wǎng)的載波;或其它形式的RAM或ROM。Sun、Sun Microsystems、SunLogo、Java和基于Java的商標是SunMicrosystems股份有限公司在美國和其它國家的商標或注冊商標。
使用散列來識別遠程方法圖3是示出符合本發(fā)明使用散列值的一RMI調(diào)用的方框圖。它也示出兩個計算機,客戶302和服務器312,它們可相應于分布式系統(tǒng)100中所示的計算機102和104。雖然也可使用其它RMI機構,但在一遠程對象上啟用一方法是使用Java RMI來實現(xiàn)的。當客戶302希望訪問服務器312上的一個遠程對象314所實現(xiàn)的方法時,客戶302使用引用遠程對象314的承接程序304。承接程序304通常是從服務器312下載的,但它也可以是客戶302本地的或者是從包括另一服務器的網(wǎng)絡100中的其它地方下載的。在名為“有助于動態(tài)地裝載‘承接程序’信息以使能在一地址空間中的程序操作,從而啟用另一地址空間中的遠程方法或過程的處理的系統(tǒng)和方法”的08/636,706號未決美國專利中更詳細地描述了客戶獲得一承接程序的方式,在這里通過參考而引入。此外,可以符合名為“遠程方法調(diào)用的方法和設備”的___號美國專利申請(其律師備案號為06502.0102-00000)的方式來利用“無承接程序”實現(xiàn),該申請先前已通過參考而引入。
引用遠程對象314的承接程序304具有對應于遠程對象314所實現(xiàn)的每一遠程方法(諸如遠程方法316)的本地方法306。客戶實現(xiàn)該本地方法306來啟用相應的方法316。它執(zhí)行諸如啟動客戶與遠程方法316之間的通信鏈路并發(fā)送實現(xiàn)該方法的散列值等功能。然而,應注意,雖然在圖3中僅示出一個方法316,但該遠程對象314可具有不止一個方法。類似地,雖然在圖3中為了簡化僅示出一個,但承接程序304可具有實現(xiàn)遠程方法的不止一個本地方法。
在符合本發(fā)明的一個實現(xiàn)中,本地方法306是在承接程序304(它是由服務器312創(chuàng)建的)的編譯期間創(chuàng)建的。當用戶提供作為一Java類的一個遠程對象316(以Java源碼的形式)時,服務器312上的Java編譯器(未示出)對此Java類進行編譯,繼而創(chuàng)建一二進制類文件。服務器上的承接程序編譯器(未示出)對此二進制類文件進行編譯,以創(chuàng)建一承接程序類。客戶使用此承接程序類(即,一承接程序)的實例來啟用該遠程對象316的方法。
在此實現(xiàn)中,在承接程序的編譯過程中把此本地方法306編譯成承接程序304。承接程序編譯器把散列值308編譯成為本地方法。結(jié)果,本地方法306具有一散列值,它識別該承接程序所引用的遠程對象中的相應方法。例如,假定一服務器具有一遠程方法int insurancePremium (String state, int age)然后,相應的承接程序可具有一如下實現(xiàn)的本地方法<pre listing-type="program-listing"><![CDATA[ int insurancePremium (String state,iht age) { Stream out=startNewCall ( ); sendLong (out, 4056878021019060934...); sendString(out,state); sendInt(out,age); Stream in=finishCall(out); String result=readString(in); finishResults(in); return result;}]]></pre>這里,sendLong方法調(diào)用的長整數(shù)是唯一地識別一遠程方法的散列值。
在一實現(xiàn)中,散列值308是通過把一標準散列函數(shù)應用于遠程方法316的方法名稱和參數(shù)類型清單318的組合而獲得的散列值,如下散列(方法名稱,參數(shù)類型清單)此散列函數(shù)返還的散列值可以是整數(shù)。使用方法名稱和參數(shù)類型清單來避免通過僅使用方法名稱而引起的沖突。在另一實現(xiàn)中,可把散列函數(shù)應用于方法名稱、參數(shù)類型和返回值類型。然而,在其它實現(xiàn)中,可把散列函數(shù)單獨應用于沖突可能較少的方法名稱。
在符合本發(fā)明的另一個實現(xiàn)中,應用于方法名稱和參數(shù)類型清單的散列函數(shù)是“安全散列算法1”(SHA-1)安全散列標準所使用的散列函數(shù)。在聯(lián)邦信息處理標準公告180-1,“安全散列標準”中詳細地描述了此標準,該標準也可以在因特網(wǎng)上的http//csrc.nist.gov/fips處找到。SHA-1協(xié)議是產(chǎn)生160位散列值的散列函數(shù)。在符合本發(fā)明的再一個實現(xiàn)中,所使用的散列值僅僅是SHA-1散列值的前64位。在此實現(xiàn)中,散列值308由這64位(完整的SHA-1散列值的縮短版本)來表示。
圖3還示出RMI調(diào)用310,它是在客戶302發(fā)送調(diào)用一遠程服務器(諸如服務器312)上的一個遠程方法的消息時所使用的。RMI調(diào)用310還包括散列值308。在接收到RMI調(diào)用310時,服務器312使用散列值308來引用映射表320并識別選中的遠程方法。
圖4還示出符合本發(fā)明的服務器312上的映射表320的細節(jié)。一般,映射表320代表散列值對服務器312上的一遠程對象314的各遠程方法的映射。這樣,映射表320包括一散列值404的配對402的集合以及一遠程方法306的指針。這一指向一方法的指針是“標識值”,它識別一方法,從而可通過該標識值計劃性地調(diào)用該方法。例如,在Java編程語言中,它可以是java.lang.reflect.Method的一個實例。在C++中,它可以是一函數(shù)指針(即,該代碼的實際機器地址)。結(jié)果,每個散列值304引用一遠程方法306。
(1)識別遠程方法圖5示出在符合本發(fā)明使用散列值來識別服務器上的唯一遠程方法的方法中所使用的步驟。首先,客戶302對服務器312進行RMI調(diào)用310,以遠程地啟用服務器312上的一個遠程方法316。在此RMI調(diào)用310中,客戶302發(fā)送識別待啟用的遠程方法316的散列值(步驟500)。在RMI調(diào)用310中,客戶302還可傳送該遠程方法316要使用的任何參數(shù)自變量來啟用該方法。
接著,服務器312接收包含在RMI調(diào)用310中的散列值308(步驟502)。然后,服務器312訪問遠程對象314的服務器類的映射表320,以識別要啟用哪一個遠程方法(步驟504)。在訪問映射表320時,服務器312使用在RMI調(diào)用310中所發(fā)送的散列值308,以識別在該映射表中識別要啟用的遠程方法。
此時,服務器312使用RMI調(diào)用310中接收到的參數(shù)自變量值來啟用方法316(步驟506)。最后,服務器312把此方法啟用返還客戶302(步驟508)。
對于使用符合本發(fā)明的方法的這些步驟的一個例子,假定一遠程對象實現(xiàn)以下的示例方法集合
<pre listing-type="program-listing"><![CDATA[public interface Directory { PhoneNumber lookupPhone(String name); PhoneNumber lookupPhone(Person person); void storePhone(String name,PhoneNumber phone); void storePhone(Person person,PhoneNumber phone); Address lookupAddress(String name}; Address lookupAddress(Person person); void storeAddress(String name,Address addr); void storeAddress(Person person,Address addr);}]]></pre>由于此遠程方法清單包括具有重復串名的方法,所以通過方法名稱訪問此清單可能導致啟用錯誤的方法。例如,如果客戶希望啟用本例中所列出的第一個lookupPhone方法,則客戶會發(fā)送包括該方法名稱和參數(shù)類型清單的散列Hash(lookupPhone,String)此進程保證了不會啟用具有參數(shù)Person的第二個lookupPhone方法。除了此散列以外,客戶還發(fā)送參數(shù)String的自變量(即,查找具有串名John的人的電話號碼的“John”)。
(2)建立映射表圖6示出符合在本發(fā)明的方法中服務器在運行時間內(nèi)動態(tài)地建立映射表320所使用的步驟。一般,在創(chuàng)建一遠程對象時,服務器312上的Java運行時間系統(tǒng)把該遠程對象的每一方法的散列值加到映射表320中。結(jié)果,服務器312具有對應于每一遠程類的映射表,因為通常同一類的所有遠程對象具有相同的遠程方法。
首先,在符合本發(fā)明的方法中,在服務器312上創(chuàng)建一對象作為諸如對象314等遠程對象(步驟600)。在此創(chuàng)建時,服務器312上的Java運行時間系統(tǒng)對對象314所支持的所有遠程方法316進行定位(步驟602)。Java運行時間系統(tǒng)計算遠程對象314的每一遠程方法316的散列值。在一實現(xiàn)中,它獲得方法名稱和參數(shù)類型清單318(步驟604)并計算該方法名稱和參數(shù)類型清單的散列(步驟606)。服務器312上的Java運行時間系統(tǒng)把獲得的散列值404和方法406的指針加到映射表320中(步驟608)。在加上散列值時,Java運行時間系統(tǒng)檢查該映射表,以保證在該映射表中未曾有過該散列值,即相對于散列值不發(fā)生沖突。雖然散列函數(shù)實際上保證了一散列值將唯一地識別一遠程方法,但檢查該表校驗了沒有散列值的沖突。
為了說明圖6中所使用的步驟的一個例子,假定創(chuàng)建包含以下方法的一個遠程方法
<pre listing-type="program-listing"><![CDATA[public interface Directory { Address lookupAddress(String name); Address lookupAddress(Person person}}]]></pre>服務器312上的Java運行時間系統(tǒng)創(chuàng)建每一遠程方法的散列。在本例中,它創(chuàng)建兩個散列Hash(lookupAddress,String),以及Hash(lookupAddress,Person)。每一散列值是唯一的,且它們將用來唯一地識別該遠程方法。把每一散列值同一指向其相應方法的指針加到映射表320中,從而在映射表320中創(chuàng)建了一方法和散列值配對402。以后,服務器312可使用來自客戶302的散列值308訪問映射表320,以識別待啟用的遠程方法316。
使用散列來識別遠程服務器上的遠程方法的進程有利地使客戶唯一地識別該遠程方法,而不會識別不正確的方法。此外,使用散列避免了用長碼來識別遠程方法的需要,從而能進行更有效的處理。錯誤地識別服務器上的遠程方法通常是由于遠程方法具有對不止一個方法共同的串名或改變方法的編號方式而未通知使用號碼變化的舊承接程序的客戶而引起的。符合本發(fā)明使用散列來識別一遠程服務器上的遠程方法的方法和系統(tǒng)避免了這些和有關的問題。
本領域內(nèi)的技術人員將理解,可對這里所述的符合本發(fā)明的遠程方法識別策略進行各種修改和改變,而不背離本發(fā)明的精神和范圍。通過考慮這里所揭示的本發(fā)明的說明書和實踐,將使本發(fā)明的其它實施例對本領域內(nèi)的技術人員變得明顯起來。本說明書和例子只是示例,本發(fā)明的真實范圍和精神將由以下的權利要求書來表示。
權利要求
1.一種數(shù)據(jù)處理系統(tǒng)中用于啟用遠程方法的方法,其特征在于,包括以下步驟提供一唯一地識別一遠程方法的標識符;響應于啟用該遠程方法的指令發(fā)送該標識符;以及根據(jù)此標識符來啟用該遠程方法。
2.如權利要求1所述的方法,其特征在于啟用步驟包括以下步驟把該遠程方法在一指示散列值和相應遠程方法的表中定位。
3.如權利要求1所述的方法,其特征在于還包括以下步驟返還該遠程方法的啟用的結(jié)果。
4.如權利要求1所述的方法,其特征在于提供步驟包括把一散列函數(shù)應用于該遠程方法的標識符和參數(shù)集合。
5.如權利要求4所述的方法,其特征在于應用步驟包括以下步驟應用SHA-1散列函數(shù)。
6.如權利要求1所述的方法,其特征在于啟用步驟包括以下步驟訪問包含散列值和對遠程方法的引用的散列表。
7.一種數(shù)據(jù)處理系統(tǒng)中用于啟用遠程方法的方法,其特征在于,包括以下步驟提供一唯一地識別一遠程方法的散列值;響應于啟用該遠程方法的指令發(fā)送該散列值;以及根據(jù)此散列值來啟用該遠程方法。
8.一種數(shù)據(jù)處理系統(tǒng)中用于使用一散列值來識別一服務器上的一個遠程方法的方法,其特征在于,包括以下步驟提供一唯一地識別一遠程方法的散列值;響應于啟用該遠程方法的指令發(fā)送該散列值;以及接收該遠程方法的啟用的結(jié)果。
9.如權利要求8所述的方法,其特征在于提供步驟包括以下步驟把一散列函數(shù)應用于該遠程方法的標識符和一相應參數(shù)清單以創(chuàng)建該散列值。
10.如權利要求9所述的方法,其特征在于應用步驟包括以下步驟應用SHA-1散列函數(shù)。
11.一種數(shù)據(jù)處理系統(tǒng)中用于識別包括多個機器的分布式系統(tǒng)中的遠程方法的方法,其特征在于,該方法包括通過這些機器之一來執(zhí)行的以下步驟接收一識別一待啟用方法的散列值;根據(jù)該散列值來識別該方法;以及執(zhí)行所述識別的方法。
12.如權利要求11所述的方法,其特征在于執(zhí)行步驟包括以下步驟啟用所述識別的方法;以及返還所述識別方法的啟用的結(jié)果;
13.如權利要求11所述的方法,其特征在于識別步驟包括以下步驟把此方法在一使用該散列值的表中定位。
14.一種用于使用一散列值來識別一方法并響應于此啟用該方法的系統(tǒng),其特征在于,該系統(tǒng)包括一存儲器,包括一用于把散列值映射到方法的映射表;以及一處理器,用于接收一啟用一選中方法的請求,該請求包括一識別此選中方法的散列值;訪問此映射表,以根據(jù)該請求的散列值來識別該選中方法;以及啟用該選中方法。
15.一種用于創(chuàng)建一映射表的方法,該映射表存儲了散列值與遠程方法之間的聯(lián)系,其特征在于,所述方法包括以下步驟創(chuàng)建一遠程對象;識別一由該遠程對象所實現(xiàn)的遠程方法;計算一代表該遠程方法的散列值;以及把此散列值和此遠程方法加到此映射表中。
16.如權利要求15所述的方法,其特征在于識別步驟包括以下步驟識別該遠程對象所實現(xiàn)的所有遠程方法。
17.如權利要求15所述的方法,其特征在于計算步驟包括以下步驟把一散列函數(shù)應用于此方法名稱和參數(shù)類型清單以計算此散列值。
18.一種包括一計算機可讀媒體的計算機程序產(chǎn)品,其特征在于,在該計算機可讀媒體中包含用于如下啟用遠程方法的計算機可讀代碼提供一唯一地識別一遠程方法的標識符;響應于啟用該遠程方法的指令發(fā)送該標識符;以及根據(jù)此標識符來啟用該遠程方法。
19.如權利要求18所述的產(chǎn)品,其特征在于啟用步驟包括以下步驟把該遠程方法在一指示散列值和相應遠程方法的表中定位。
20.如權利要求18所述的產(chǎn)品,其特征在于還包括以下步驟返還該遠程方法的啟用的結(jié)果。
21.如權利要求18所述的產(chǎn)品,其特征在于提供步驟包括把一散列函數(shù)應用于該遠程方法的標識符和參數(shù)集合。
22.一種包括一計算機可讀媒體的計算機程序產(chǎn)品,其特征在于,在該計算機可讀媒體中包含用于如下啟用遠程方法的計算機可讀代碼提供一唯一地識別一遠程方法的散列值;響應于啟用該遠程方法的指令發(fā)送該散列值;以及接收該遠程方法的啟用的結(jié)果。
23.一種包括一計算機可讀媒體的計算機程序產(chǎn)品,其特征在于,在該計算機可讀媒體中包含用于如下啟用遠程方法的計算機可讀代碼接收一識別一待啟用方法的散列值;根據(jù)該散列值來識別該方法;以及執(zhí)行所識別的方法。
24.一種包括一計算機可讀媒體的計算機程序產(chǎn)品,其特征在于,在該計算機可讀媒體中包含用于如下啟用遠程方法的計算機可讀代碼創(chuàng)建一遠程對象;識別一由該遠程對象所實現(xiàn)的遠程方法;計算一代表該遠程方法的散列值;以及把此散列值和此遠程方法加到此映射表中。
25.一種數(shù)據(jù)處理系統(tǒng)中用于啟用遠程方法的設備,其特征在于,包括用于提供一唯一地識別一遠程方法的標識符的裝置;用于響應于啟用該遠程方法的指令發(fā)送該標識符的裝置;以及用于根據(jù)此標識符來啟用該遠程方法的裝置。
全文摘要
提供了一種方法和系統(tǒng),使用從客戶以調(diào)用請求發(fā)送給服務器的方法署名中計算得到的散列值,唯一地識別一遠程方法以在服務器上啟用。當客戶希望啟用位于一服務器上的遠程方法時,客戶把識別該遠程方法的散列值發(fā)送給“遠程方法啟用”RMI調(diào)用中的該服務器。在一實現(xiàn)中,該散列值是通過把一散列函數(shù)應用于方法串名和參數(shù)類型清單以及可能的返還類型而創(chuàng)建的。當服務器接收到此RMI調(diào)用時,服務器使用接收到的散列值識別要啟用哪一個方法。服務器保持散列值與服務器上其相關遠程方法的映射并使用此散列值引用正確的方法。此外,在一實現(xiàn)中,服務器在創(chuàng)建一遠程對象時動態(tài)地創(chuàng)建此映射表。服務器識別該對象所實現(xiàn)的方法并對每一方法創(chuàng)建散列值。把這些散列值存儲在用來引用該遠程方法的映射表中。
文檔編號G06F12/02GK1298514SQ99805491
公開日2001年6月6日 申請日期1999年2月25日 優(yōu)先權日1998年2月26日
發(fā)明者R·謝夫勒, A·M·沃爾蕾斯, P·C·瓊斯 申請人:太陽微系統(tǒng)公司