專利名稱:用于為遠程執(zhí)行鏈接程序的方法和裝置的制作方法
本申請與下面的美國專利申請相關,并將其作為參考美國專利申請No.09/044,900,題目為“用于為遠程執(zhí)行封裝程序的方法和裝置”,其代理文檔(attorney docket)為no.06502.0073-00000,并且與本申請的申請日相同。
本發(fā)明的實施例一般地涉及分布式計算機系統(tǒng),特別涉及用于為遠程執(zhí)行封裝程序的方法和裝置。
在當今社會中,因特網(wǎng)已經(jīng)成為信息交換的重要媒介。雖然因特網(wǎng)現(xiàn)在在一般公眾中非常普及,其最初是開始于一個由政府和學術研究者使用的互連計算機的系統(tǒng)(或網(wǎng)絡)。這個網(wǎng)絡的早期問題是由互連計算機不相同這個事實所產(chǎn)生的;他們采用不同的硬件和不同的操作系統(tǒng)。在這樣一個多機種網(wǎng)絡上的信息交換提出了一個通信問題這個問題是通過在共同標準上的協(xié)議來解決的,包括諸如傳輸控制協(xié)議/互連網(wǎng)絡協(xié)議(TCP/IP)和超文本傳輸協(xié)議(HTTP)等的協(xié)議。這些協(xié)議使各種互連機器能以靜態(tài)文本或圖形文件的形式共享信息。
然而,這些協(xié)議在因特網(wǎng)的發(fā)展中只代表了兩個步驟。雖然用戶可以在與因特網(wǎng)相連的各種計算機中交換信息文件,但他們不能交換以常規(guī)語言、例如C或C++寫成的可執(zhí)行應用程序,這些可執(zhí)行應用程序是設計為與一特定處理器(例如,Intel奔騰處理器)和/或一特定操作系統(tǒng)(例如,Windows 95或DOS)進行連系的。這個問題是以JavaTM程序設計語言及其相關的運行系統(tǒng)的出現(xiàn)而解決的。
Java程序設計語言是一個面向?qū)ο蟮某绦蛟O計語言,在例如由Addison-Wesley的Mary Campione和Kathy Walrath在1996年所著的題為“JavaTM指導”的教科書中進行了描述1。重要地是Java程序設計語言是一個與平臺無關的解釋語言-也就是說,其實用性并不限于一個特定的計算機系統(tǒng)。使用Java程序設計語言,軟件開發(fā)者以通常被稱為Java源代碼的形式寫程序。當開發(fā)者完成程序的編寫時,他則以一個Java編譯器將其編譯成被稱為字節(jié)代碼的中間形式。Java源代碼和字節(jié)代碼都是與平臺無關的。
然后,可以將編譯過的字節(jié)代碼在任何采用了一個包括虛擬機(VM)的可兼容運行系統(tǒng)的計算機系統(tǒng)上執(zhí)行,例如包括Java虛擬機(JVM)和Java類庫的Java運行環(huán)境(JRE)。JVM在由Addison Wesley的Tim Lindholm和Frank Yellin在1996年所著的題為“Java虛擬機說明書”的教科書中進行了描述。Java VM用作為字節(jié)代碼和所使用的特定計算機系統(tǒng)之間的解釋器。通過使用與平臺無關的字節(jié)代碼和Java VM,可以在任何計算機系統(tǒng)上執(zhí)行以Java程序設計語言寫出的程序。這在將不同的計算機系統(tǒng)進行互連的網(wǎng)絡、例如因特網(wǎng)中是特別有用的。
在能夠執(zhí)行一個Java程序之前,必須將某些必不可少的類(class)裝載進執(zhí)行該程序的計算機的存儲器中。這些類可以從計算機的磁盤裝載,但更常用的是通過網(wǎng)絡從一個服務器傳輸。習慣上,將這些類在程序執(zhí)行期間盡可能晚地裝載;換句話說,它們是根據(jù)需要在程序執(zhí)行期間首次被引用時才裝載的。當這種裝載出現(xiàn)時,一旦需要一個類的任何一部分,通常裝載整個類。
根據(jù)一種常規(guī)方法,當機器上的用戶發(fā)出執(zhí)行駐留在一個遠程服務器上的程序的請求時,將包含main方法的類文件通過網(wǎng)絡從該服務器裝載到該客戶機。這個類文件包含程序字節(jié)代碼。虛擬機然后通過調(diào)用程序的main方法開始執(zhí)行。
執(zhí)行一直持續(xù)進行到程序引用一個成份,例如,被稱為“F”的成份。響應于該引用,將包含成份F的整個類從服務器上的類文件通過網(wǎng)絡傳輸給客戶機。所引用的成份F被使用,執(zhí)行然后繼續(xù)進行,直到引用另一個成份,例如被稱為“G”的成份。響應于該引用,將包含成份G的整個類從服務器上的類文件通過網(wǎng)絡傳輸給客戶機執(zhí)行則繼續(xù)進行到結束。一旦執(zhí)行已經(jīng)完成,在客戶機和服務器之間通過網(wǎng)絡的一系列連接最終可以被終止。
這個說明證明常規(guī)的方法有兩個顯著的缺陷。首先,在程序執(zhí)行期間,它需要在客戶機和服務器之間的重復連接。這樣一種連接所必須的長周期對于諸如移動計算的情況是成問題的。其次,一旦引用一個成份,例如成份F,該方法需要從服務器加載包含所引用成份的整個類。然而,如果在類內(nèi)只有很少的成份最終被使用,則從服務器向客戶機傳輸未用成份所需的帶寬就被浪費了。這在涉及客戶機和服務器之間的有限帶寬、即慢的連接速度或高等待時間的連接的情況中是成問題的。
因此,需要一種通過只將一整個程序的所需成份封裝在一起并在執(zhí)行開始之前將其傳送給客戶機來減輕這些問題的系統(tǒng)。已經(jīng)采用了用于遠程執(zhí)行的預封裝軟件,該軟件使用其他需要機器兼容性的編譯計算機語言,例如Cobol、C和Fortran。然而,還沒有采用使用一種面向?qū)ο蟮恼Z言、例如Java程序設計語言的軟件,其中Java程序設計語言提供了很多另外的好處,例如從其父類提取所需的成份。
依據(jù)本發(fā)明,一種為分布式系統(tǒng)中的執(zhí)行封裝一個程序成份的方法包括如下步驟確定由一個程序所引用的成份,從一個存儲的類中提取出所述成份,以及產(chǎn)生一個包括所述程序和提取出的成份的程序包。
依據(jù)本發(fā)明,一種計算機可讀介質(zhì)包含用于為分布式系統(tǒng)中的執(zhí)行封裝一個程序成份的指令,該封裝通過下列步驟完成確定由一個程序所引用的成份,從一個存儲的類中提取出所述成份,以及產(chǎn)生一個包括所述程序和提取出的成份的程序包。
依據(jù)本發(fā)明,一種為分布式系統(tǒng)中的執(zhí)行封裝一個程序成份的設備,包括如下裝置用于確定由一個程序所引用的成份的裝置,用于從一個存儲的類中提取出所述成份的裝置,以及用于產(chǎn)生一個包括所述程序和提取出的成份的程序包的裝置。
依據(jù)本發(fā)明,一個系統(tǒng)包括客戶機、服務器和網(wǎng)絡??蛻魴C具有處理器、存儲器和包括虛擬機任務的運行環(huán)境。服務器具有處理器、存儲器、接口任務、鏈接編輯器任務和成份文件。網(wǎng)絡將客戶機和服務器進行互連。
在本說明書中所包含的并構成說明書的一部分的附圖顯示了本發(fā)明的一個實施例,并與說明書一起用于解釋本發(fā)明的優(yōu)點和原理在附圖中,
圖1是一個典型的客戶機-服務器結構的方框圖,用于說明使用包括一個虛擬機的運行環(huán)境的遠程程序執(zhí)行;圖2是顯示一個典型的可執(zhí)行面向?qū)ο蟪绦蚣捌湟玫某煞莺退鼈兊囊蕾囆缘姆娇驁D;圖3是說明與本發(fā)明一致的鏈接和執(zhí)行的定時的時線;圖4是顯示典型的與服務器和客戶機有關的接口和鏈接編輯器任務的方框圖;圖5是由與本發(fā)明一致的封裝處理中的接口任務執(zhí)行的步驟的流程圖;圖6是在本發(fā)明的一個實施例中由封裝輸出文件中的鏈接編輯器執(zhí)行的步驟的流程圖;以及圖7是在本發(fā)明的一個實施例中為了增加必要的方法而執(zhí)行的步驟的流程圖;以及圖8是在本發(fā)明的一個實施例中為了執(zhí)行程序而由客戶機執(zhí)行的步驟的流程圖。
下面將參考附圖詳細說明本發(fā)明的實施形式。其中,在整個附圖和下面的說明中,相同的標號代表相同或相似的部分。A.概述依據(jù)本發(fā)明的系統(tǒng)和方法工作在一個分布式計算機系統(tǒng)中,該系統(tǒng)典型地具有多個客戶機和一個或多個服務器。例如,試圖執(zhí)行一個程序的客戶機向服務器請求將運行程序所需的軟件封裝在一起。在形成該請求時,客戶機可以指定應該包括在該程序包內(nèi)的特定成份。
在服務器執(zhí)行的任務(“接口任務”)接收到這個請求,并確定已經(jīng)駐留在客戶機內(nèi)的軟件成份。接口任務應用該信息形成一組給被稱為鏈接編輯器的另一任務的指令。這些指令可以包括要執(zhí)行的程序名,因為已經(jīng)駐留在客戶機內(nèi)而不必被封裝的成份,以及客戶機可能已經(jīng)指定要包括在該程序包內(nèi)的任何軟件成份的名稱。
鏈接編輯器接收此信息,并產(chǎn)生一個包含駐留在服務器內(nèi)并且程序執(zhí)行所必須的所有軟件成份的輸出文件。這個輸出文件是通過迭代地分析引用其他軟件成份的程序并從這些成份的父類提取出這些成份而產(chǎn)生的。鏈接編輯器將完成的輸出文件發(fā)送給接口任務,接口任務將其傳送給需要的客戶機,程序開始執(zhí)行。B.術語為了說明的緣故,下面的詳細說明是基于Java程序設計語言的。由于這個原因,下面是在下文所用到的術語的簡要定義部分。然而,本領域的普通技術人員應該認識到,下面說明的原理同樣適用于其他程序設計語言。
Java應用程序包括一個或多個類定義,每個類定義已經(jīng)被編譯成它自己的.class文件,包含字節(jié)代碼和其他信息。一個“類”本身又是一個數(shù)據(jù)(“字段”)、在數(shù)據(jù)上操作的“方法”、以及輔助信息的集合。例如,輔助信息可以包括共享的數(shù)據(jù)結構、超類(superclass)的名字、以及實現(xiàn)的接口。在這里所用的術語“成份”指的是方法或字段或二者皆包括?!皩ο蟆笔遣捎糜梢粋€類提供的藍圖所生成的東西,即它是類的一個“實例”。Java應用程序必須包含一個定義main方法的類,該main方法代表Java解釋器開始執(zhí)行程序的一點。這樣一種應用程序可以由Java解釋器、即Java VM來執(zhí)行。
與一個單獨的應用程序相比,Java小應用程序(applet)不包含main方法,因此不能直接由Java解釋器執(zhí)行。相反,Java小應用程序是由一個已經(jīng)執(zhí)行的Java應用程序、例如網(wǎng)瀏覽器所加載的類。Java應用程序在合適的時間調(diào)用小應用程序的各種方法。
在這里所用的術語“程序”,在單獨使用時,可以代表應用程序、Java小應用程序、過程或其他軟件代碼。術語“任務”可以代表一個在計算機處理器上執(zhí)行的程序。術語“程序包”可以包括成份、輔助信息或程序執(zhí)行所需的其他數(shù)據(jù)。
為了簡化的緣故,在這里所包含的例子假設一個應用程序正在執(zhí)行。然而,本領域普通技術人員應該認識到,本發(fā)明的權利要求可以包括一個小應用程序或其他軟件代碼的執(zhí)行。C.結構圖1顯示了Java程序設計語言在一個分布式計算系統(tǒng)中的使用。該系統(tǒng)包括通過網(wǎng)絡150互連的一個或多個服務器、例如服務器160和一個或多個客戶機、例如客戶機100和155。軟件開發(fā)者應用Java程序設計語言生成一個程序,并將其編譯成字節(jié)代碼115,存儲在服務器160上。服務器160一般還包括很多由Java程序使用的類文件125。當客戶100希望執(zhí)行一個Java程序時,它向服務器160發(fā)出一個請求。作為響應,服務器160向客戶機100發(fā)送程序115的字節(jié)代碼版本。在客戶機100,字節(jié)代碼115在一個運行環(huán)境110上執(zhí)行,運行環(huán)境110在字節(jié)代碼115與駐留在客戶機100上的處理器之間進行解釋。
圖2是顯示在一個典型的可執(zhí)行程序內(nèi)的成份引用的例示性方框圖。在這個例子中,程序200引用四個成份,分別顯示為成份A 210、成份B 220、成份C 230和成份D 240。這些引用成份自己又引用其他成份。例如,成份B 220引用成份B1 250。同樣,成份C 230引用成份A 210和成份C1 270。成份C1 270自己又引用成份C1A 280。這樣一種由一個成份對另一個成份的引用通常被稱作為依賴性(dependency)。因為在程序執(zhí)行期間會被用到,每個被引用的成份必須被加載。D.時線圖3是用于說明依據(jù)本發(fā)明的鏈接和執(zhí)行的定時的時線。當用戶發(fā)出一個在客戶機100上執(zhí)行程序的請求時(點310),程序開始。作為響應,服務器160確定程序執(zhí)行需要哪些成份和依賴性(點320)。然后,將這些所需成份的每一個與輔助類信息一起通過網(wǎng)絡150從服務器160傳送給客戶機100(點330)。此時,已經(jīng)將程序執(zhí)行所需的所有成份和類都從服務器150傳送到客戶機100,因此,在兩者之間的連接可以中斷。
然后程序執(zhí)行開始(點340),并引用成份A 210(點350)。然而,因為該成份已經(jīng)(在點330)被加載在客戶機100上,不需要將該成份從服務器160向客戶機100單獨傳送。同樣,在引用成份B 220時(點360),因為它已經(jīng)被從服務器160傳送到客戶機100,所以不需要再傳送它。因此,執(zhí)行不中斷地進行到結束(點370)。
圖3證明了依據(jù)本發(fā)明的處理僅僅需要客戶機100與服務器160保持連接到程序加載結束(從點300至點330)。一旦所需的成份和輔助類信息已經(jīng)被加載(在點330),客戶機100可以斷開與服務器160的連接。則對于整個程序執(zhí)行期間(點340至點370),客戶機100與服務器160無須相連此外,服務器160只向客戶機100傳送對于程序執(zhí)行所必須的那些成份和輔助類信息(點330)。通過去除了對無用成份的傳輸,則更有效地利用了帶寬。E.接口任務和鏈接編輯器的結構圖4是顯示與服務器和客戶機相關的接口任務和鏈接編輯器的方框圖??蛻魴C100通過網(wǎng)絡150與服務器160互連。服務器160包含一個可以包含Java類文件的存儲器482。存儲器482的例子包括隨機存取存儲器(RAM)、只讀存儲器(ROM)、硬盤驅(qū)動器或基于光盤的ROM(CD-ROM)。有兩個任務在服務器160上執(zhí)行接口任務484和鏈接編輯器487。向服務器160發(fā)出一個封裝所需Java代碼的請求,以便在客戶機100上執(zhí)行程序。在服務器160,這個請求由接口任務484接收。接口任務484然后形成一組封裝指令,并將其發(fā)送給鏈接編輯器487。鏈接編輯器487生成一個包含駐留在服務器160內(nèi)的執(zhí)行所需的任何成份的程序包,并將該程序包發(fā)送給接口任務484。接口任務484接收到該程序包,將其發(fā)送給客戶機100,客戶機100應用該程序包來執(zhí)行程序。F.接口任務圖5是由依據(jù)本發(fā)明的封裝過程中的接口任務所執(zhí)行的步驟的流程圖。在過程開始時,接口任務484(在服務器160上執(zhí)行)接收為一指定客戶機、例如客戶機100上的執(zhí)行封裝Java程序的請求(步驟510)。Java程序一般被指定為是Java類和成份的集合。一些類文件的位置是預先定義的。其他所必需的類的位置被包括在封裝Java程序的請求中。
響應于這個請求,接口任務484為鏈接編輯器形成一組指令。作為這些指令的一部分,接口任務通知鏈接編輯器487關于程序的開始點(步驟515)。這給了鏈接編輯器487一個用于確定需要哪些成份的開始點。
接口任務484還通知鏈接編輯器487任何已經(jīng)存在于客戶機100上的類(步驟520)。通過提供這個信息,接口任務避免了不必要的封裝鏈接編輯器487不需要封裝已經(jīng)存在于客戶機100上的成份。這通過使輸出文件的大小最小而節(jié)省了使用的帶寬。該信息可以作為封裝成份請求的一部分提供給接口任務(步驟510)?;蛘撸撔畔⒖梢员活A先提供,存儲在服務器160的存儲器482內(nèi)。為了使這一步驟能正常工作,已經(jīng)存在于客戶機100上的類與在服務器160上的那些必須是一致的。
接口任務484還通知鏈接編輯器487關于任何應該增加到程序包中的附加成份(步驟530)。這對于有些情況是必須的,例如,如果由于包含一個成份的類已經(jīng)存在于客戶機100上、則該成份被排除在鏈接步驟之外的話;然而,這個被排除的成份可能會引用在客戶機100上沒有的其他成份,因此可能會需要由鏈接編輯器487增加到程序包內(nèi)。除了由于其類已經(jīng)存在于客戶機100上而被排除在外的成份之外,還可能有一些依賴性不能被有計劃地發(fā)現(xiàn)接口任務484一般(在步驟510)被通知將任何附加成份作為封裝成份請求的一部分。
例如,方法quicksort可以被排除在鏈接步驟之外,因為包含該方法的類sun.misc.Sort已經(jīng)被加載在客戶機100上了。當方法quicksort被調(diào)用時,它的一個參數(shù)是具有方法doCompare的對象。Quicksort將調(diào)用doCompare,而doCompare可能還未被加載在客戶機100上。因比接口任務484必須通知鏈接編輯器487方法doCompare必須作為一個附加成份被加載。
接口任務484還通知鏈接編輯器487用于查找所需Java類文件的位置列表(步驟540)。接口任務484將這些指令發(fā)送給鏈接編輯器487(步驟550),鏈接編輯器487產(chǎn)生一個輸出文件,這將在下面參考圖5進行說明。接口任務484接收該輸出文件,并將其發(fā)送給客戶機100(步驟560),該過程結束。G.鏈接編輯器圖6是依據(jù)本發(fā)明的由鏈接編輯器487在封裝輸出文件中執(zhí)行的步驟的詳細流程圖。出于例示的目的,下面對流程的說明是基于圖2的例子的。
在過程開始時,鏈接編輯器487(一般在服務器160上執(zhí)行)從接口任務484接收一組指令。鏈接編輯器487然后生成并以要執(zhí)行的程序的開始點初始化一個列表(步驟605)。該列表被稱為“成份列表”,包含對每個必須由鏈接編輯器487加載的所需成份的引用。
鏈接編輯器487然后選擇在成份列表中的下一項,最初將為main方法(步驟610)。鏈接編輯器487查看所選成份是否在要從鏈接步驟中排除的項目列表上(步驟615)。成份可以在要排除的項目列表上,例如,因為該成份更容易從其他來源、例如客戶機100或其他服務器獲得。因為main方法不會在要排除的項目列表上,所以鏈接編輯器487查看以確定所選擇成份是否以前已經(jīng)加載進鏈接過程(步驟620)。因為main方法不會已經(jīng)在以前加載過,則鏈接編輯器487采用由服務器在其給鏈接編輯器487的指令中提供的文件位置列表對包含要加載的成份的類文件進行定位(步驟625)。鏈接編輯器487讀取類文件、提取與該類文件相聯(lián)系的任何輔助信息、從該類文件提取出所選擇成份、并將提取出的輔助信息和成份增加到一個輸出文件(步驟630)。應該注意,通過這樣做,鏈接編輯器487只提取出所需成份和輔助信息,而不是加載整個類。
在加載了提取出的成份之后,鏈接編輯器487檢查被替代的方法(步驟632)。該步驟將在下面參考圖7進一步說明。接著,鏈接編輯器487分析提取出的成份,以確定其是否引用了其他成份(步驟635)。換句話說,鏈接編輯器487分析提取出的成份的依賴性。在這個例子中,main方法引用了四個成份A、B、C和D。因為提取出的成份(main)包含依賴性(步驟640),所以將這些依賴性增加到成份列表中(步驟645),然后(在步驟610)重復該過程。
然后對于成份A、B、C和D進行與上述的關于main方法相同的過程。假設成份D被包含在一個接口任務484指示鏈接編輯器487從封裝過程中排除的類中(例如,因為該類已經(jīng)存在于客戶機100上),則成份D將被排除在輸出文件之外(步驟615)。另一方面,成份A、B和C將被從它們的各個類中(與與這些類相聯(lián)系的輔助信息一起)提取出來,并增加到輸出文件中(步驟625-630)。當這些成份被提取和分析時,鏈接編輯器487將發(fā)現(xiàn),成份B引用了成份B1,成份C引用了成份A和C1(步驟635)。因此成份B1、A和C1將被增加到成份列表中(步驟645),該過程再一次進行重復(步驟610)。
在這下一次循環(huán)中,將不提取成份A,因為它已經(jīng)被增加到輸出文件中了(步驟620)。但成份B1和C1將被從它們各自的類中提取出來,與與它們的類相聯(lián)系的輔助信息一起,增加到輸出文件中(步驟625-630)。鏈接編輯器487將發(fā)現(xiàn),成份C1引用了成份C1A(步驟635),于是將其增加到成份列表(步驟645)。過程再重復一次。在此期間,成份C1A被從其相應的類中(與該類的輔助信息一起)提取出來,增加到輸出文件中(步驟625-630)。
通過應用這個迭代過程,鏈接編輯器487生成一個包含駐留在服務器160中的執(zhí)行程序所必需的所有成份(及輔助類信息)的輸出文件。鏈接編輯器487將這個輸出文件發(fā)送到接口任務484(步驟655),該過程結束。
圖7是依據(jù)本發(fā)明為了檢查被替代的方法、由鏈接編輯器487執(zhí)行的步驟的流程圖。替代是一種用于將一個方法的超類的實施以子類的實施來代替的技術。為了檢查被替代的方法,鏈接編輯器487首先確定提取出的成份是一個方法還是數(shù)據(jù)(步驟705)。因為替代問題僅僅與是方法的成份有關,如果提取出的成份是數(shù)據(jù)的話,則不必進行任何操作。另一方面,如果提取出的成份是方法,鏈接編輯器487確定該方法是否是一個構造程序(即,它是否生成一個對象)(步驟710)。
如果提取出的方法不是一個構造程序,鏈接編輯器487接著確定該方法是否是一個靜態(tài)方法(步驟715)。如果它是靜態(tài)的,則不必進行任何操作,因為靜態(tài)方法不能被替代。如果該方法不是靜態(tài)的,則鏈接編輯器487查看該提取出的方法是否已被替代。特別地鏈接編輯器487搜索(提取出的方法的類的)已經(jīng)具有一個被加載的構造程序的所有子類。如果這些子類中的任何一個具有替代了所提取方法的方法,則必須將這個替代的方法加到成份列表中(步驟720)。
如果提取出的方法是一個構造程序,鏈接編輯器487搜索所提取方法的類,以確定其是否包含替代了以前加載的方法的任何方法。特別地,鏈接編輯器487為非靜態(tài)方法(靜態(tài)方法不能被替代)搜索包含所提取成份的類(步驟725)。如果這些非靜態(tài)方法中的任何一個替代了以前從所提取成份的類的超類加載的一個方法(步驟730),則替代的非靜態(tài)方法必須被增加到成份列表中(步驟735)。上述方法不僅用于被替代的方法,還用于作為Java接口說明的一部分的方法。H.客戶機過程圖8是依據(jù)本發(fā)明由執(zhí)行一個程序的客戶機執(zhí)行的步驟的流程圖。首先,客戶機100發(fā)出一個開始執(zhí)行指定程序的請求(步驟810)。響應于該請求,客戶機100從服務器160接收一個包含程序執(zhí)行所需的所有成份的封裝文件(即,上面提到的輸出文件)??蛻魴C100將所提供的成份增加到那些已經(jīng)存在于客戶機100上的成份中(步驟830)。特別地,客戶機100從封裝文件中讀取信息,建立內(nèi)部數(shù)據(jù)結構,并將這些數(shù)據(jù)結構鏈接成它自己的類名列表??蛻魴C100然后開始執(zhí)行程序(步驟840),根據(jù)需要分辨(resolve)類名。該過程然后結束。I.結論上述系統(tǒng)只將程序執(zhí)行所必須的成份封裝在一起,并在執(zhí)行開始之前將它們傳送給該客戶機。上面對本發(fā)明的一個實施形式的說明只是為了例示和說明的目的。例如,所述的實施例包括軟件,但本發(fā)明也可以被實現(xiàn)為硬件與軟件的結合或單獨以硬件實現(xiàn)。在上述說明的提示下,可以作出各種修改和變化,或者可以從本發(fā)明的實踐中得出。
雖然依據(jù)本發(fā)明的系統(tǒng)和方法是在例示性的分布式系統(tǒng)和Java程序設計環(huán)境下操作的,本領域普通技術人員應該理解本發(fā)明可以在其他系統(tǒng)和程序設計環(huán)境中實現(xiàn)。另外,雖然本發(fā)明的各個方面被描述為存儲在存儲器中,本領域普通技術人員應該理解這些方面也可以存儲在其他類型的計算機可讀介質(zhì)中,例如二級存儲設備,象硬盤、軟盤或CD-ROM;來自因特網(wǎng)的載體;或其他形式的RAM或ROM。本發(fā)明的范圍由附帶的權利要求及其等效物限定。
權利要求
1.一種為分布式系統(tǒng)中的執(zhí)行封裝程序成份的方法,包括如下步驟確定由一個程序所引用的成份;從一個存儲的類中提取出所述成份;以及產(chǎn)生一個包括所述程序和提取出的成份的程序包。
2.如權利要求1所述的方法,還包括提取出與存儲的類相聯(lián)系的輔助信息的步驟。
3.如權利要求1所述的方法,還包括下列步驟分析所述成份對另一個成份的任何引用;從一個存儲的類中提取出所引用的成份;以及將提取出的所引用成份增加到程序包中。
4.如權利要求1所述的方法,還包括下列步驟為一個替代方法分析一個子類;從一個存儲的類中提取出所述替代方法;以及將提取出的所述替代方法增加到程序包中。
5.如權利要求1所述的方法,還包括下列步驟為一個替代以前加載的方法的方法分析一個存儲的類;從存儲的類中提取出所述替代方法;以及將提取出的所述替代方法增加到程序包中。
6.如權利要求1所述的方法,其特征在于,提取步驟還包括根據(jù)一個以前提取的成份確定是否應該提取出一個成份的步驟。
7.如權利要求1所述的方法,其特征在于,提取步驟還包括下列步驟接收一個關于不應被增加到所述程序包中的被排除的成份的指令;以及根據(jù)所述指令確定是否應該提取出一個成份。
8.如權利要求2所述的方法,還包括下列步驟接收一個關于不應被增加到所述程序包中的被排除的成份的指令;以及根據(jù)所述指令確定是否應該提取出一個成份。
9.如權利要求1所述的方法,還包括下列步驟接收一個關于應該被增加到所述程序包中的附加成份的指令;從一個存儲的類中提取出所述附加成份;以及將所述附加成份增加到程序包中。
10.如權利要求2所述的方洗還包括下列步驟接收一個關于應該被增加到所述程序包中的附加成份的指令;從一個存儲的類中提取出所述附加成份;以及將所述附加成份增加到程序包中。
11.如權利要求1所述的方法,還包括下列步驟接收程序執(zhí)行的開始點;以及接收一個類文件的位置。
12.一種計算機可讀介質(zhì),包含用于為分布式系統(tǒng)中的執(zhí)行封裝程序成份的指令,所述封裝通過如下步驟完成確定由一個程序所引用的成份;從一個存儲的類中提取出所述成份;以及產(chǎn)生一個包括所述程序和提取出的成份的程序包。
13.如權利要求12所述的計算機可讀介質(zhì),還包括提取出與存儲的類相聯(lián)系的輔助信息的步驟。
14.如權利要求12所述的計算機可讀介質(zhì),還包括下列步驟分析所述成份對另一個成份的任何引用;從一個存儲的類中提取出所引用的成份;以及將提取出的所引用成份增加到程序包中。
15.如權利要求12所述的計算機可讀介質(zhì),還包括下列步驟為一個替代方法分析一個子類;從一個存儲的類中提取出所述替代方法;以及將提取出的所述替代方法增加到程序包中。
16.如權利要求12所述的計算機可讀介質(zhì),還包括下列步驟為一個替代以前加載的方法的方法分析一個存儲的類;從存儲的類中提取出所述替代方法;以及將提取出的所述替代方法增加到程序包中。
17.如權利要求12所述的計算機可讀介質(zhì),其特征在于,提取步驟還包括根據(jù)一個以前提取的成份確定是否應該提取出一個成份的步驟。
18.如權利要求12所述的計算機可讀介質(zhì),其特征在于,提取步驟還包括下列步驟接收一個關于不應被增加到所述程序包中的被排除的成份的指令;以及根據(jù)所述指令確定是否應該提取出一個成份。
19.如權利要求13所述的計算機可讀介質(zhì),還包括下列步驟接收一個關于不應被增加到所述程序包中的被排除的成份的指令;以及根據(jù)所述指令確定是否應該提取出一個成份。
20.如權利要求12所述的計算機可讀介質(zhì),還包括下列步驟接收一個關于應該被增加到所述程序包中的附加成份的指令;從一個存儲的類中提取出所述附加成份;以及將所述附加成份增加到程序包中。
21.如權利要求13所述的計算機可讀介質(zhì),還包括下列步驟接收一個關于應該被增加到所述程序包中的附加成份的指令;從一個存儲的類中提取出所述附加成份;以及將所述附加成份增加到程序包中。
22.如權利要求12所述的計算機可讀介質(zhì),還包括下列步驟接收程序執(zhí)行的開始點;以及接收一個類文件的位置。
23.一種用于為分布式系統(tǒng)中的執(zhí)行封裝程序成份的設備,包括用于確定由一個程序所引用的成份的裝置;用于從一個存儲的類中提取出所述成份的裝置;以及用于產(chǎn)生一個包括所述程序和提取出的成份的程序包的裝置。
24.一種系統(tǒng),包括一個具有(a)處理器、(b)存儲器和(c)包括虛擬機任務的運行環(huán)境的客戶機;一個具有(a)處理器、(b)存儲器、(c)接口任務、(d)鏈接編輯器任務和(e)成份文件的服務器;以及將客戶機和服務器進行互連的網(wǎng)絡。
全文摘要
一個在服務器上執(zhí)行的鏈接編輯器接收用于封裝在一個客戶機上的程序執(zhí)行所需的軟件成份的指令。鏈接編輯器通過循環(huán)地分析程序?qū)ζ渌浖煞莸囊貌⑦@些成份從其父類中提取出來,產(chǎn)生一個輸出文件。鏈接編輯器將完成的輸出文件發(fā)送給一個接口任務,接口任務然后將其發(fā)送給客戶機。
文檔編號G06F9/445GK1233010SQ9910738
公開日1999年10月27日 申請日期1999年3月19日 優(yōu)先權日1998年3月20日
發(fā)明者皮特·W·馬德尼, 里查德·塔克, 尼迪姆·福勒斯克 申請人:太陽微系統(tǒng)公司