專利名稱:用于動態(tài)提供本地庫及其相關性的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),并涉及下載、更新和運行在數(shù)據(jù)處理系統(tǒng)上以解釋編程語言編寫的應用的處理。具體而言,本發(fā)明提供一種用于將本地代碼庫及其相關性更新和安裝到適當位置以由以諸如Java、REXX、BASIC、SmallTalk、Python和Perl等解釋編程語言編寫的應用使用的方法、程序和系統(tǒng)。
背景技術:
以解釋編程語言編寫的程序可以由編程虛擬機執(zhí)行。在解釋語言中,并非生成本地機器代碼,而是由編譯器(complier)生成將由編程虛擬機使用的字節(jié)代碼。這些字節(jié)代碼提供執(zhí)行應用必需的控制和數(shù)據(jù)。隨后,為了實際地執(zhí)行解釋編程語言應用,解釋器解釋由編譯器生成的已編譯字節(jié)代碼。理論上,可以解釋任何編程語言;然而,術語“解釋編程語言”通常表示通過由解釋器執(zhí)行而實施的語言。術語“解釋編程語言”還表示不為其編寫編譯器的語言。
公知的解釋編程語言是Java,在此將其用作優(yōu)選的例子。然而,對于本領域的技術人員來說,應當很容易理解諸如REXX、BASIC、SmallTalk、Python、Perl等其它解釋編程語言在本發(fā)明的保護范圍之內。
Java是最初由Sun Microsystems開發(fā)的旨在生成可在沒有修改的情況下在所有硬件平臺上運行的應用的軟件編程語言。因為這個原因,Java應用已在萬維網(WWW)上廣泛使用??梢栽诔谋局脴苏Z言(HTML)文檔內調用或單獨啟動Java應用。
如本領域的技術人員公知的,WWW服務器可以包括用于存儲和發(fā)送應用程序的設施,所述應用例如是用Java編寫以在遠程計算機上執(zhí)行的應用程序。
Java虛擬機(JVM)是僅駐留在遠程計算機上的存儲器內的虛擬計算機組件。對于將要在不同類型的數(shù)據(jù)處理系統(tǒng)上執(zhí)行的Java應用而言,編譯器通常生成體系結構中性文件格式,以便所編譯的代碼可以在任一處理器上執(zhí)行,只要該JVM可以由處理器訪問。該體系結構中性文件格式包括由Java編譯器生成和并非專用于給定計算機體系結構的字節(jié)代碼指令。字節(jié)代碼是由Java編譯器生成和由Java解釋器執(zhí)行的機器無關代碼。作為JVM一部分的Java解釋器可選擇地解碼和解釋稱作“字節(jié)代碼”的中間代碼。這些字節(jié)代碼指令被設計為容易地在任一平臺上解釋和容易地轉換成本地機器代碼。
Java Web Start(JWS)提供一種運行Java應用而不在遠程計算機上安裝除JVM和JWS之外的任何東西的機制。通常,只要在遠程計算機上啟動Java應用,JWS就簡單地從服務器下載Java應用jar文件。這利用了Java代碼的機器獨立性,以便當在遠程計算機上下一次啟動Java應用時,容易地更新該Java應用。
但是,Java應用通常使用本地代碼,例如,以C或C++編程語言編寫的對于特定平臺或操作系統(tǒng)專用的代碼。Java應用使用Java本地接口(JNI)訪問由這些本地方法提供的本地代碼。通常,這些本地方法被作為動態(tài)加載的庫(或DLL)提供給JNI。本地方法DLL通常是不可跨不同操作系統(tǒng)移動的。
當Java應用使用JNI并具有對依賴于其他DLL的DLL的相關性時,JWS會在啟動(launch)Java應用時遇到一些局限性。例如,如果Java應用具有帶有與其他庫的相關性的任何JNI代碼,則如果所述庫不在Java運行時環(huán)境(JRE)的路徑中,應用將不會開始。這適用于任何主Java應用以及JWS本身(例如,如果存在任何帶有與其他庫的相關性的JNI代碼,則JWS也不開始)。僅當庫不具有任何其他相關性或者相關性已經安裝在JVM可以定位到它們的位置時,JWS才可以加載。
即使其在高速緩存中可用,JWS也不允許從webstart高速緩存加載JNI庫。例如,主Java應用具有在庫a.dll中的JNI代碼,庫a.dll具有對庫b.dll和c.dll的相關性。即使庫b.dll和c.dll在與a.dll相同的jar文件中,JWS也無法加載b.dll和c.dll。為了使JWS工作,需要將庫b.dll和c.dll安裝在已經在JRE路徑中的現(xiàn)有目錄中。
在這種情況下,Java Web Start啟動應用,但是應用不能開始。為了避免這種情況,必須在遠程計算機上運行諸如InstallShield之類的外部安裝器程序。然后,遠程計算機與服務器相連,并接收相關的庫以用于安裝。接下來,Java應用重新開始。如果在應用下次啟動時有對庫的更新,那么還必須手動安裝它們。
因此,將希望提供一種安裝和更新并不需要外部安裝器的本地代碼庫及其相關性的機制。還將希望提供一種安裝和更新本地代碼庫及其相關性以用于以解釋編程語言編寫的應用的機制。
更具體地,將希望提供一種安裝和更新并不需要外部安裝器的JNI庫及其相關性的機制。還將希望提供一種使用JWS在JRE路徑內安裝相關性的機制以及一種用于JNI容易地更新其相關性的機制。
本發(fā)明提供一種用于從服務器動態(tài)地安裝和更新這種本地代碼庫及其相關性以克服上述目標的方法和系統(tǒng)。
發(fā)明內容
本發(fā)明的方法從服務器將本地(native)代碼庫提供給解釋編程語言應用以在遠程計算機上執(zhí)行。在解釋編程語言應用的主類內調用安裝器對象。從包括指定本地代碼庫的至少一個庫文件名的服務器提取文件列表。將用庫文件名指示的本地代碼庫安裝到在遠程計算機上的目標二進制目錄(bin directory),隨后在遠程計算機上調用該解釋編程語言應用的主類。還將附加本地代碼庫相關性(dependency)安裝到遠程計算機上的目標二進制目錄。該方法從服務器提取最新版本的文件,在遠程計算機上的目標二進制目錄內定位當前版本文件,并比較當前版本文件和最新版本文件內的版本編號以確定將哪些文件安裝在遠程計算機上。該方法還使用最新版本文件重寫(overwrite)在目標二進制目錄內的當前版本文件,以及用本地代碼庫文件及其相關性的最新版本重寫在遠程計算機上存在的較舊的本地代碼庫文件。
根據(jù)下文對當前優(yōu)選實施例的詳細描述,結合附圖閱讀,本發(fā)明的上述和其它特征和優(yōu)點將變得更加顯而易見。詳細描述和附圖僅是說明本發(fā)明,而不是限制,本發(fā)明的范圍由權利要求書及其等同范圍定義。
圖1是可以實施本發(fā)明的數(shù)據(jù)處理系統(tǒng)網絡的方框圖;圖2是根據(jù)本發(fā)明優(yōu)選實施例的可以實施為服務器的數(shù)據(jù)處理系統(tǒng)的方框圖;圖3是圖示在其中可以實施本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方框圖;和圖4圖示根據(jù)當前發(fā)明的一種實施例的動態(tài)地將本地代碼庫提供給解釋編程語言應用的方法。
具體實施例方式
本發(fā)明實施一種數(shù)據(jù)處理系統(tǒng)和方法,用于管理在使用諸如Java、REXX、BASIC、SmallTalk、Python、Perl等解釋編程語言開發(fā)的應用內所使用的本地代碼庫及其相關性的安裝。在這種語言內,將指令編譯成由虛擬機使用的字節(jié)代碼,但是某些本地代碼(尤其是庫及其相關性)也被使用。
在下文的描述中,闡述許多具體細節(jié)以提供對本發(fā)明的完整理解。然而,對于本領域的技術人員來說,在沒有這些具體細節(jié)的情況下也可以實施本發(fā)明將是顯而易見的。在其它的例子中,以方框圖的形式圖示公知的設備以便不因為不必要的細節(jié)影響本發(fā)明。
圖1是實施本發(fā)明的分布式數(shù)據(jù)處理系統(tǒng)的一種實施例的附圖。分布式數(shù)據(jù)處理系統(tǒng)100包括網絡102,它是用于在分布式數(shù)據(jù)處理系統(tǒng)100內連接在一起的各種設備和計算機之間提供通信鏈路的介質。網絡102可以包括諸如有線或光纖電纜的永久連接或通過電話連接實現(xiàn)的臨時連接。包含本發(fā)明的各種處理可以駐留在同一主機上或者在網絡102上互連的不同機器上。(例如因特網、內部網、廣域網(WAN)或局域網(LAN))。因而,受益于本發(fā)明的機器具有適當?shù)倪B網硬件以建立到一臺或多臺其它機器(服務器和/或遠程計算機)的連接。例如,連接到網絡102的機器可以具有到網絡的TCP/IP或NETBIOS連接,所述網絡運行在令牌環(huán)或以太網適配器上。
服務器104連接到如上所述的網絡102,以及存儲單元106。服務器104向遠程計算機108、110、112提供數(shù)據(jù),例如Java應用、JNI、庫和其它程序。這些數(shù)據(jù)可以存儲在存儲單元106上并由服務器104訪問。
在本發(fā)明的圖示實施例中,中央服務器104可以使用基于Web的軟件系統(tǒng),例如Sun微系統(tǒng)公司的Java Web Start,它支持中央服務器104通過WWW連接分配和更新合適的Java應用、JNI庫及其相關性。
遠程計算機108、110和112還連接到網絡102。遠程計算機108、110和112例如可以是個人計算機或網絡計算機,具有多種處理器和操作系統(tǒng)。
分布式數(shù)據(jù)處理系統(tǒng)100可以包括附加服務器、客戶機和未圖示的其它設備。圖1將作為例子,而不作為對本發(fā)明處理的結構限制。
圖2是可以實施為服務器,例如圖1中的服務器104的數(shù)據(jù)處理系統(tǒng)的方框圖。數(shù)據(jù)處理系統(tǒng)200可以是包括連接到系統(tǒng)總線206的多個處理器202和204的對稱多處理器(SMP)系統(tǒng)。可選擇地,可以使用單處理器系統(tǒng)。還連接到系統(tǒng)總線206的是存儲器控制器/超高速緩存208,它提供到本地存儲器209的接口。I/O總線橋210連接到系統(tǒng)總線206,并提供到I/O總線212的接口。可以如圖所示集成存儲器控制器/超高速緩存208和I/O總線橋210。
連接到I/O總線212的外圍組件互連(PCI)總線橋214提供到PCI本地總線216的接口。多個調制解調器可以連接到PCI總線216。典型的PCI總線實施方式將支持四個PCI擴展槽或內插連接器??梢酝ㄟ^經內插板連接到PCI本地總線216的調制解調器218和網絡適配器220提供圖1中到網絡計算機108-112的通信連接。
附加PCI總線橋222和224提供用于附加PCI總線226和228的接口,由此可以支持附加調制解調器或網絡適配器。以這種方式,數(shù)據(jù)處理系統(tǒng)200允許到多個網絡計算機的連接。存儲器映射圖形適配器230和硬盤232還可以直接地或間接地連接到如圖所示的I/O總線212。
本領域的普通技術人員將理解圖2所示的硬件可以改變。例如,也可以附加地或者替代所圖示的硬件使用其它外圍設備,例如光盤驅動等。圖2所示的數(shù)據(jù)處理系統(tǒng)例如可以是IBM eServer pSeries,在紐約Armonk的國際商業(yè)機器公司的產品,運行Active InteractiveExecutive(AIX)操作系統(tǒng)。圖2并不意味著對本發(fā)明的體系結構限制。
在本發(fā)明的一種實施例中,在服務器104上將本地代碼庫和列出這些本地代碼庫的文件名的文件打包成jar文件,例如稱作“install.jar”。包含版本號的另一個文件也打包在服務器104上的同一jar文件中。在遠程計算機108、110、112上調用的安裝器對象從服務器104提取包含本地代碼庫列表的文件。這些相同文件的版本在install.jar文件內。因此,install.jar文件包含下述內容例如稱作“version.txt”的文件,它提供jar文件的版本號;例如稱作“filelist.txt”的文件,它提供運行主要的解釋編程語言應用需要的文件列表;和在“filelist.txt”內列出的所有文件。
這個安裝器對象查閱名稱列表,并將來自“install.jar”的每個文件提取到遠程計算機上的所需二進制目錄。
圖3是可以實施為諸如計算機108、110、112等遠程計算機的數(shù)據(jù)處理系統(tǒng)的方框圖。可以在這樣一個遠程計算機上或者在通過計算機網絡連接的一個或多個這樣的計算機上執(zhí)行更新或安裝本地代碼庫及其相關性的一個或多個處理。在說明性的實施例中,在這樣一個遠程計算機上,或者在通過計算機網絡連接的一個或多個計算機上執(zhí)行將由Java應用使用的Java本地接口庫及其相關性的更新或安裝。
除了其它組件之外,圖3的數(shù)據(jù)處理系統(tǒng)300包括處理器302、主存儲器304、操作系統(tǒng)314、虛擬機解釋器316、web啟動應用318和一個或多個主應用程序320以及至少一個安裝器對象322。
操作系統(tǒng)314在處理器302上運行,并用于協(xié)調和提供在圖3內的數(shù)據(jù)處理器系統(tǒng)300內各個組件的控制。操作系統(tǒng)可以是商業(yè)可用的操作系統(tǒng),例如Windows XP,它可以從微軟公司購買。一個或多個編程系統(tǒng)可以與操作系統(tǒng)314共同運行,所述操作系統(tǒng)314例如是解釋編程語言,包括但并不限制于Java、REXX、BASIC、SmallTalk、Python、Perl、等等。諸如Java等面向對象的編程系統(tǒng)可以與操作系統(tǒng)共同運行,并提供從在數(shù)據(jù)處理系統(tǒng)300上執(zhí)行的Java程序或應用對操作系統(tǒng)的調用,(“Java”是Sun微系統(tǒng)公司的商標)。操作系統(tǒng)的指令、面向對象編程系統(tǒng)和應用或程序位于諸如硬盤驅動器的存儲設備上,并可以加載到主存儲器304內以由處理器302執(zhí)行。
虛擬機(VM)316是抽象計算機器,包括指令集合并使用存儲器304內的各個存儲區(qū)域。將VM 316加載或存儲在諸如主存儲器304內以由處理器302執(zhí)行。VM 316是能夠解釋一個或多個解釋編程語言以向操作系統(tǒng)314提供所需程序的數(shù)據(jù)或控制的任何適當虛擬機。
在說明性的實施例中,Sun微系統(tǒng)Java 2平臺,標準版本(J2SE)仿真在各種平臺上的VM。具體關于Java虛擬機的其它細節(jié)可以在JavaTMVirtual Machine Specification,Tim Lindholm和Frank Yellin,Addison Wesley(1997),ISBN 0-201-63452-X中獲得,其在此引用作為參考。也可以使用任何適當?shù)腏ava虛擬機解釋器。
Web啟動應用(WSA)318是基于Web的軟件系統(tǒng),它支持服務器104通過如在圖4內進一步描述的與遠程計算機108、110、112的WWW連接分配和更新期望的解釋編程語言應用、本地代碼庫和相關性。將WSA 318例如加載或存儲在主存儲器304內以由處理器302執(zhí)行。使用WSA 318在遠程計算機108、110和112上啟動解釋編程語言應用。典型地,在專用平臺或運行時環(huán)境內啟動這些應用,所述平臺或環(huán)境包含核心可執(zhí)行、核心文件、支持文件和啟動期望應用需要的任何其它數(shù)據(jù)。
在說明性的實施例中,WSA 318是Java Web Start,它是基于Web的軟件系統(tǒng),支持服務器104在一個或多個遠程計算機上啟動期望的Java應用,安裝和更新JNI庫及其相關性和通過WWW連接將執(zhí)行Java應用需要的其它數(shù)據(jù)提供給遠程計算機。例如,WSA 318更新應用jar文件,或者根據(jù)本發(fā)明,將所需要的本地代碼接口放置在目標目錄內。WSA 318是VM 316的一部分或者與之通信。
因而,在這個說明性的例子中,Java運行時環(huán)境(JRE)包括Java Web Start應用、Java虛擬機、核心可執(zhí)行、核心文件和支持文件以建立標準Java平臺。因此,JRE通常在Java Web Start運行之前已經存在于遠程計算機108、110和112上。JWS 318用于更新應用jar文件。例如,當用戶第一次訪問Java應用時,JWS軟件將下載該應用需要的所有文件,并且如果所請求的版本本地不可用,則還下載JRE。
主應用320是基于Web的軟件系統(tǒng),它支持服務器104通過WWW連接在遠程計算機108、110和112上執(zhí)行期望的應用功能和處理與這些應用功能相關的數(shù)據(jù)。典型地,在專用平臺或運行時環(huán)境內啟動主應用320,所述平臺或環(huán)境可以訪問可執(zhí)行、支持文件和運行期望應用320需要的任何其它數(shù)據(jù)。盡管圖3僅圖示一個主應用,但是本發(fā)明的方法適合于與多個期望的應用一起使用。主應用320是VM 316的一部分或與之通信,并可以由WSA 318啟動。在說明性的實施例中,主應用320是任一期望Java應用,其中的許多應用在本技術領域中是公知的。
安裝器對象322是用于執(zhí)行如圖4所示的本發(fā)明步驟的變量和相關方法的軟件集合(bundle)。由遠程計算機108、110和112或者更準確地由主應用320調用安裝器對象。安裝器對象例如能夠確定某些文件的存在與否以確定在遠程計算機上的這些文件的版本,確定它從服務器下載的文件版本,并且如果它下載的版本較新或者某些文件根本不在遠程計算機上,則重寫這些文件。
例如安裝器對象包括試圖在遠程計算機上的下載文件列表內發(fā)現(xiàn)install.jar文件的計算機程序代碼。安裝器對象還包括支持從install.jar文件提取特定本地代碼庫的計算機程序代碼。安裝器對象還包括能夠將所提取的庫放置在目標二進制目錄內的計算機程序代碼。安裝器對象還包括從服務器調用本地代碼庫和將它們加載到遠程計算機上的計算機程序代碼。通常與用于主應用的其它jar文件一起打包安裝器對象,并可以在應用自身的主類內調用該安裝器對象。
在說明性的實施例中,Java Web Start連接到用遠程計算機108、110、112表示的服務器104上的URL。雖然JWS運行主應用類320,但是安裝器對象322還由主應用類320調用,并且安裝器對象如下文所述執(zhí)行本發(fā)明的方法。
本領域的普通技術人員將理解圖3中的硬件可以根據(jù)實施方式改變。附加地或者替代圖3所示的硬件,也可以使用其它的內部硬件或外圍設備,例如快速ROM(或等同的非易失性存儲器)或者光盤驅動器等。而且,可以將本發(fā)明的處理應用于多處理器數(shù)據(jù)處理系統(tǒng)。
因而,例如,遠程計算機108、110、112是任一個人計算機或工作站平臺,基于英特爾、PowerPC或RISC,并包括諸如IBM OS/2、微軟Windows XP、微軟Windows NT 4.0、Unix、AIX 5SL等操作系統(tǒng)。典型的計算機運行英特爾x86處理器、OS/2Warp第3版操作系統(tǒng)、JVM版本1.1.1和Java Web Start 1.04??蛇x擇地,計算機運行x86處理器、Windows XP(或Windows NT)操作系統(tǒng),JVM的版本是1.4和以上。通常,根據(jù)與其一起打包的JVM的版本,JWS的版本也是1.4及以上。
圖3并不是體系結構上的限制。例如,數(shù)據(jù)處理系統(tǒng)300還可以是筆記本計算機、手持式計算機或個人數(shù)字助理。數(shù)據(jù)處理系統(tǒng)300還可以是公用電話亭或Web設備。
圖4是根據(jù)本發(fā)明動態(tài)地將本地代碼庫及其相關性提供給解釋編程語言應用的方法400的流程圖??捎捎嬎銠C可使用或計算機可讀介質可訪問的計算機程序產品實現(xiàn)本發(fā)明的方法,所述介質提供由計算機或任一指令執(zhí)行系統(tǒng)使用或結合使用的程序代碼,例如Java WebStart。
本地代碼庫通常是由用本地代碼(通常C或C++)編寫的解釋編程語言應用使用的文件。這些本地代碼庫專用于特定平臺,而不是獨立于體系結構的。通常,動態(tài)地加載這些庫,意味著不是在應用啟動的過程中加載它們。也就是,直到應用需要時才加載它們。此外,這些庫通常取決于其它庫。也就是,可以加載第一庫(例如a.dll),隨后,由于其被加載,可能需要一個或多個其它的庫(例如b.dll和/或c.dll等)。
DLL對于實施插件或模塊特別有用,因為直到需要時才加載它們。這些庫也可用于多種用途。例如,可插件鑒權模塊(PAM)系統(tǒng)使用DL庫以允許管理者配置和重新配置鑒權。DLL可用于實施解釋器,以有時將代碼編譯成機器代碼,例如在實施剛好及時(just-in-time)(JIT)編譯器或多用戶地牢游戲(multi-user dungeonMUD)時。
也可以使用包括Linux、Solaris、AWT和上述Java本地接口(JNI)的多種接口訪問DLL。盡管JNI用作說明性的例子,但本發(fā)明的方法也可以由任一等價接口使用以將任一期望本地代碼庫、任一動態(tài)加載庫和任一期望相關性提供給給定解釋編程語言應用。
如在方框402中看到的,當web啟動應用318試圖在遠程計算機108、110和112上啟動解釋的編程語言時,方法400開始。通常,主應用的啟動涉及遠程計算機108、110和112連接到服務器104。這例如在如上所述的典型網絡連接上實現(xiàn)。在說明性的實施例中,JavaWeb Start試圖通過從遠程計算機連接到服務器104啟動主Java應用。
如在方框403中看到的,由遠程計算機調用安裝器對象。安裝器對象322通常由通過WSA 318啟動的主應用320調用。安裝器對象322也可以由WSA 318調用。即使filelist.txt和version.txt文件不存在,也可以調用安裝器對象。在這種情況下,它將不安裝任何文件。
在說明性的實施例中,安裝器對象由通過Java Web Start(JWS)啟動的Java應用調用。JWS在遠程計算機上啟動。隨后,JWS從服務器獲取在遠程計算機上運行期望Java應用需要的所有jar文件。隨后,JWS在遠程計算機上啟動期望的Java應用。JWS或主Java應用隨后調用安裝器對象。一旦JWS在遠程計算機上運行,則它會下載需要從服務器下載的所有文件。典型地,JWS需要下載以啟動Java應用的文件由服務器指定。
在本發(fā)明中,所有的jar文件已經在遠程計算機上。所以,安裝器對象開始于通過試圖在遠程計算機上的下載文件列表內發(fā)現(xiàn)install.jar文件。如果安裝器對象發(fā)現(xiàn)“install.jar”,則它將查閱其從install.jar文件提取JNI庫和將它們放置在指定JRE二進制目錄內的邏輯。安裝器對象將從服務器下載JNI庫,或者搜索在遠程計算機上的現(xiàn)有庫,并確保將它們放置在適當?shù)腏RE二進制目錄內。隨后,安裝器從服務器調用JNI庫,并將其加載到遠程計算機上。在調用JNI代碼以由主Java應用使用之前調用這個安裝器類對象。將該安裝類與用于Java主應用的其它jar文件一起打包,并可以從該應用自身的主類內調用。
以本技術領域內公知的方式,遠程計算機使用在Java運行時環(huán)境內的Java Web Start調用Java安裝器對象。Java是致力于將數(shù)據(jù)定義為對象和可應用于這些對象的方法的面向對象的編程語言和環(huán)境。Java安裝器對象是根據(jù)本發(fā)明的軟件組件,它已經被編譯以動態(tài)地將JNI庫及其相關性提供給主Java應用。Java安裝器對象例如能夠確定某些文件的存在與否,確定在遠程計算機上的這些文件的版本,確定它從服務器下載的文件的版本,并且如果它下載的版本較新或者某些文件在遠程計算機上根本不存在則重寫這些文件。
例如使用下述內容調用安裝器對象public static void main(String[]args){Installer installer=new Installer();Installer.install();
Run the application...
}如在方框404中看到的,遠程計算機確定“install.jar”是否存在在遠程計算機上?!癷nstall.jar”(jar文件)包含運行主應用必需的所有文件,包括實際的本地代碼庫以及列出本地代碼庫文件名的文件。包含版本號的另一個文件也打包在同一jar文件內。安裝器對象提取包含本地代碼庫列表的文件。它搜索名稱列表,并將每個文件提取到目標二進制目錄。因而,“Install.jar”包含本地代碼庫和它的相關性?!癐nstall.jar”還包含列出本地代碼庫和所有的相關文件的文件名的文件。將這個文件稱作例如“install.txt”或“filelist.txt”。通常,這個列表每行包含一個文件的名稱?!癐nstall.jar”還包含具有版本串的文件。將這個文件稱作例如“install.txt”或“version.txt”。還將該安裝器類打包在同一jar文件內。
在說明性的實施例中,“Install.jar”(jar文件)包含運行主Java應用的所有必須文件,包括實際的JNI庫以及列出JNI庫的名稱的文件。包含版本編號的另一個文件也打包在同一jar文件內。安裝器對象提取包含JNI庫列表的文件。它查閱名稱列表和將每個文件提取到指定的JRE二進制目錄內。因而,“Install.jar”包含JNI代碼及其相關性。“Install.jar”還包含JNI庫文件列表及其所有相關性。安裝器對象也打包在同一jar文件內。
如果“install.jar”不存在,則所有的必需文件已經可用于在遠程計算機上的主應用。該方法前進到方框430,其中安裝器對象已經完成其工作,并由此到方框440,其中現(xiàn)在啟動主應用。現(xiàn)在,這個初始調用安裝器對象的主應用繼續(xù)執(zhí)行其主要任務。在已經適當?shù)匦薷倪@些庫之后,這個主應用可以執(zhí)行任一適當?shù)墓δ?,其中若干功能在本在說明性的實施例中,這個主應用是Java應用,其主要任務是本技術領域中公知的任一適當?shù)腏ava功能。
如在方框406中看到的,遠程計算機從jar文件提取“filelist.txt”。該文件“filelist.txt”是一個或多個本地代碼庫的文件名及其相關性的列表。
例如,“filelist.txt”包含文件列表,例如a.dllb.dllc.dll其中a.dll是JNI庫,b.dll和c.dll是它的相關性。
在說明性的實施例中,“filelist.txt”列出用于特定Java應用的JNI庫文件以及與這些庫文件的所有相關性。
如在方框408中看到的,遠程計算機從jar文件提取“version.txt”。文件“version.txt”包含單個號碼,表示將要安裝的文件的版本。每次修改本地代碼庫時遞增文件“version.txt”。因而,“version.txt”一開始包含例如編號1.1。在修改本地代碼庫之后,隨后“version.txt”將包含編號1.2。當再次在服務器上打包install.jar文件時,隨著任一次改變本地代碼庫遞增在“version.txt”內的版本編號。在說明性的實施例中,無論何時改變JNI庫,均遞增在“version.txt”內的版本編號。
如在方框410中看到的,遠程計算機確定“version.txt”是否存在于其中解釋編程語言應用將運行的運行時環(huán)境的目標目錄中。在說明性的實施例中,目標目錄是JRE二進制目錄,它通常是在安裝JVM的遠程計算機文件系統(tǒng)上的位置。如果在目標目錄內不存在“version.txt”,則尚未在遠程計算機上安裝所需要的動態(tài)加載本地代碼庫及其相關性。如果是這種情況,則該方法返回方框404,并調用安裝器對象以在遠程計算機上安裝所有適當?shù)奈募H绻嬖凇皏ersion.txt”,則該方法可以前進到方框412。
如在方框412中看到的,遠程計算機比較在目標二進制目錄內在方框410上發(fā)現(xiàn)的文件“version.txt”的版本號與在方框408上提取的文件“version.txt”。在本發(fā)明的一種實施例中,這個版本號比較是在兩個“version.txt”文件內包含的兩個編號的字符串比較。
如在方框414中看到的,確定在方框408上提取的版本號是否大于在方框410上發(fā)現(xiàn)的編號。如果在方框408上提取的版本號不大于在方框410上發(fā)現(xiàn)的編號,則該方法前進到方框430,其中已經完成安裝器對象。
如果在方框408上提取的版本號的確大于在方框410上發(fā)現(xiàn)的編號,則該方法前進到方框420,其中將在“filelist.txt”內列出的所有適當文件提取到目標目錄。此時,該方法還包括加載表示目標目錄的文件,通常表示主應用的缺省路徑。根據(jù)本發(fā)明,該缺省路徑指向本地代碼庫和任一獨立庫。在說明性的實施例中,將在“filelist.txt”內列出的第一個文件提取到JRE二進制目錄。此外,主Java應用的缺省路徑表示JRE二進制目錄。這樣,將在“filelist.txt”內列出的JNI庫及其相關性移動到將由Java Web Start和因而Java主應用使用的合適路徑。也就是,通過將JNI庫寫入在JRE的二進制目錄內,該方法將JNI庫放置在需要這些庫的應用的“路徑”內。
如在方框422中看到的,如果在目標目錄內存在本地代碼庫的舊版本,則重寫這些文件。在說明性的例子中,如果在JRE二進制目錄內存在JNI庫文件的舊版本,則重寫這些文件。例如,如果是Java應用第一次在遠程計算機上運行,則將提取在“filelist.txt”內列出的每個文件。如果并非第一次,則將僅重寫在jar文件內具有較新版本的舊JNI庫。
如在方框423中看到的,確定在“filelist.txt”內是否存在另一個(下一個)文件。如果列出這樣一個文件,則它通常在“filelist.txt”前一文件之后的下一行上。如果列出另一個文件,則該方法返回420。如果不存在列出的文件,則該方法前進到424。
如在方框424中看到的,一旦已經將“filelist.txt”內的所有文件寫入到目標目錄,則使用來自jar文件的最新“version.txt”重寫在目標目錄內的文件“version.txt”。在說明性的實施例中,使用來自JAR文件的最新“version.txt”重寫在JRE二進制目錄內的“version.txt”。因而,JRE二進制目標現(xiàn)在將具有表示在其目錄內文件的最新版本的“version.txt”。
該方法前進到方框430,其中安裝器對象已經完成其工作。
該方法隨后前進到方框440,其中主應用現(xiàn)在完全啟動,并可以在沒有中斷的情況下運行其任務。在說明性的實施例中,啟動Java應用(Java Web Start或另一個Java應用)。一開始調用安裝器對象的這個主Java應用現(xiàn)在繼續(xù)執(zhí)行其主要任務。在已經適當?shù)匦薷膸熘?,這個主Java應用可以執(zhí)行任一適當?shù)腏ava功能,其中若干功能在現(xiàn)有技術中是公知的。
本發(fā)明可以采取完全硬件實施例、完全軟件實施例或同時包含硬件和軟件單元的實施例的形式。在優(yōu)選實施例中,在軟件內實現(xiàn)本發(fā)明,所述軟件包括但是并不限制于固件、駐留軟件或微代碼等。此外,本發(fā)明可以采取可以從計算機可用或計算機可讀介質訪問的計算機程序產品的形式,所述介質提供由計算機或任一指令執(zhí)行系統(tǒng)使用或結合使用的程序代碼。為了這個說明書的目的,計算機可用或計算機可讀介質可以是可包含、存儲、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、儀器或設備使用或結合使用的程序的任一個設備。該介質可以是電子、磁、光、電磁、紅外或半導體系統(tǒng)(或儀器或設備)或諸如載波的傳輸介質。計算機可讀介質的例子包括半導體或固態(tài)存儲器、磁帶、可拆除計算機磁盤、隨機訪問存儲器(RAM)、制度存儲器(ROM)、剛性磁盤或光盤。
雖然當前將在此公開的本發(fā)明的實施例視為優(yōu)選的,但是在不脫離本發(fā)明的精神和范圍的情況下,可以對其進行各種改變和修改。本發(fā)明的范圍將在權利要求書內表示,落入其含義和等價范圍內的所有改變將包含在其中。
權利要求
1.一種從服務器向解釋編程語言應用提供本地代碼庫以在遠程計算機上執(zhí)行的方法,包括從解釋編程語言應用的主類中調用安裝器對象;提取包含至少一個本地代碼庫文件名的文件列表,其中該本地代碼庫文件名表示在遠程計算機上的目標目錄和本地代碼庫;將用本地代碼庫文件名表示的本地代碼庫安裝到目標目錄;和在遠程計算機上調用解釋編程語言應用的主類。
2.權利要求1的方法,其中該文件列表還包括表示本地代碼庫相關性的至少一個附加庫文件名。
3.權利要求2的方法,還包括將由附加庫文件名表示的本地代碼庫相關性安裝到遠程計算機上的目標目錄。
4.權利要求1的方法,還包括從服務器提取最新版本文件,其中最新版本文件表示服務器上的文件列表的最新版本編號;在遠程計算機上的目標目錄中定位當前版本文件,其中當前版本文件表示在遠程計算機上的文件列表的當前版本編號;和比較當前版本文件和最新版本文件中的版本編號。
5.權利要求4的方法,還包括用最新版本文件重寫目標目錄中的當前版本文件。
6.權利要求3的方法,還包括用本地代碼庫文件和至少一個本地代碼庫相關性重寫遠程計算機上的至少一個較舊庫文件。
7.權利要求1的方法,其中解釋編程語言應用是Java應用,并且目標目錄是Java運行時環(huán)境(JRE)二進制目錄。
8.一種從服務器向解釋編程語言應用提供本地代碼庫以在遠程計算機上執(zhí)行的系統(tǒng),包括用于從解釋編程語言應用的主類中調用安裝器對象的裝置;用于提取包含至少一個本地代碼庫文件名的文件列表的裝置,其中該本地代碼庫文件名表示在遠程計算機上的目標目錄和本地代碼庫;用于將用本地代碼庫文件名表示的本地代碼庫安裝到目標目錄的裝置;和用于在遠程計算機上調用解釋編程語言應用的主類的裝置。
9.權利要求8的系統(tǒng),其中該文件列表還包括表示本地代碼庫相關性的至少一個附加庫文件名,還包括用于將由附加庫文件名表示的本地代碼庫相關性安裝到遠程計算機上的目標目錄的裝置。
10.權利要求8的系統(tǒng),還包括用于從服務器提取最新版本文件的裝置,其中最新版本文件表示服務器上的文件列表的最新版本編號;用于在遠程計算機上的目標目錄中定位當前版本文件的裝置,其中當前版本文件表示在遠程計算機上的文件列表的當前版本編號;和用于比較當前版本文件和最新版本文件中的版本編號的裝置。
11.權利要求10的系統(tǒng),還包括用于用最新版本文件重寫目標目錄中的當前版本文件的裝置。
12.權利要求9的系統(tǒng),還包括用于用本地代碼庫文件和至少一個本地代碼庫相關性重寫遠程計算機上的至少一個較舊庫文件的裝置。
13.權利要求8的系統(tǒng),其中解釋編程語言應用是Java應用,并且目標目錄是Java運行時環(huán)境(JRE)二進制目錄。
14.一種在計算機可讀介質內的計算機程序產品,用于將本地代碼庫從服務器提供給解釋編程語言應用以在遠程計算機上執(zhí)行,包括用于執(zhí)行權利要求1-7中任一權利要求的方法的步驟的指令。
全文摘要
提供了一種將本地代碼庫從服務器提供給用解釋編程語言編寫的應用以在遠程計算機上執(zhí)行的方法、系統(tǒng)和程序。從解釋編程語言應用的主類內調用安裝器對象。該安裝對象從包括表示本地代碼庫的至少一個本地代碼庫文件名的服務器提取文件列表。將用本地代碼庫文件名表示的本地代碼庫安裝到遠程計算機上的目標目錄,隨后在遠程計算機上調用解釋編程語言應用的主類。還將附加本地代碼庫相關性安裝到在遠程計算機上的目標目錄。
文檔編號G06F9/44GK1955922SQ20061009285
公開日2007年5月2日 申請日期2006年6月16日 優(yōu)先權日2005年10月27日
發(fā)明者尼克爾·古普塔, 杰弗里·M.·阿切特曼, 布賴恩·G.·瓦斯伯格, 布賴恩·R.·摩爾 申請人:國際商業(yè)機器公司