CN100583032C - 用于动态提供本地库及其相关性的方法和系统 - Google Patents

用于动态提供本地库及其相关性的方法和系统 Download PDF

Info

Publication number
CN100583032C
CN100583032C CN200610092851A CN200610092851A CN100583032C CN 100583032 C CN100583032 C CN 100583032C CN 200610092851 A CN200610092851 A CN 200610092851A CN 200610092851 A CN200610092851 A CN 200610092851A CN 100583032 C CN100583032 C CN 100583032C
Authority
CN
China
Prior art keywords
file
remote computer
native code
code library
programming language
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN200610092851A
Other languages
English (en)
Other versions
CN1955922A (zh
Inventor
尼克尔·古普塔
杰弗里·M.·阿切特曼
布赖恩·G.·瓦斯伯格
布赖恩·R.·摩尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1955922A publication Critical patent/CN1955922A/zh
Application granted granted Critical
Publication of CN100583032C publication Critical patent/CN100583032C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Abstract

提供了一种将本地代码库从服务器提供给用解释编程语言编写的应用以在远程计算机上执行的方法、系统和程序。方法包括:响应于远程计算机上启动解释编程语言应用的主类从解释编程语言应用的主类中调用安装器对象并由安装器对象执行:从服务器提取包含至少一个本地代码库文件名的文件列表,其中该本地代码库文件名表示在远程计算机上的目标目录和本地代码库,其中该文件列表包括表示本地代码库相关性的至少一个附加库文件名;将用本地代码库文件名表示的本地代码库安装到目标目录;和将由附加库文件名表示的本地代码库相关性安装到远程计算机上的目标目录;在远程计算机上调用解释编程语言应用的主类。

Description

用于动态提供本地库及其相关性的方法和系统
技术领域
本发明涉及数据处理系统,并涉及下载、更新和运行在数据处理系统上以解释编程语言编写的应用的处理。具体而言,本发明提供一种用于将本地代码库及其相关性更新和安装到适当位置以由以诸如Java、REXX、BASIC、SmallTalk、Python和Perl等解释编程语言编写的应用使用的方法、程序和系统。
背景技术
以解释编程语言编写的程序可以由编程虚拟机执行。在解释语言中,并非生成本地机器代码,而是由编译器(complier)生成将由编程虚拟机使用的字节代码。这些字节代码提供执行应用必需的控制和数据。随后,为了实际地执行解释编程语言应用,解释器解释由编译器生成的已编译字节代码。理论上,可以解释任何编程语言;然而,术语“解释编程语言”通常表示通过由解释器执行而实施的语言。术语“解释编程语言”还表示不为其编写编译器的语言。
公知的解释编程语言是Java,在此将其用作优选的例子。然而,对于本领域的技术人员来说,应当很容易理解诸如REXX、BASIC、SmallTalk、Python、Perl等其它解释编程语言在本发明的保护范围之内。
Java是最初由Sun Microsystems开发的旨在生成可在没有修改的情况下在所有硬件平台上运行的应用的软件编程语言。因为这个原因,Java应用已在万维网(WWW)上广泛使用。可以在超文本置标语言(HTML)文档内调用或单独启动Java应用。
如本领域的技术人员公知的,WWW服务器可以包括用于存储和发送应用程序的设施,所述应用例如是用Java编写以在远程计算机上执行的应用程序。
Java虚拟机(JVM)是仅驻留在远程计算机上的存储器内的虚拟计算机组件。对于将要在不同类型的数据处理系统上执行的Java应用而言,编译器通常生成体系结构中性文件格式,以便所编译的代码可以在任一处理器上执行,只要该JVM可以由处理器访问。该体系结构中性文件格式包括由Java编译器生成和并非专用于给定计算机体系结构的字节代码指令。字节代码是由Java编译器生成和由Java解释器执行的机器无关代码。作为JVM一部分的Java解释器可选择地解码和解释称作“字节代码”的中间代码。这些字节代码指令被设计为容易地在任一平台上解释和容易地转换成本地机器代码。
Java Web Start(JWS)提供一种运行Java应用而不在远程计算机上安装除JVM和JWS之外的任何东西的机制。通常,只要在远程计算机上启动Java应用,JWS就简单地从服务器下载Java应用jar文件。这利用了Java代码的机器独立性,以便当在远程计算机上下一次启动Java应用时,容易地更新该Java应用。
但是,Java应用通常使用本地代码,例如,以C或C++编程语言编写的对于特定平台或操作系统专用的代码。Java应用使用Java本地接口(JNI)访问由这些本地方法提供的本地代码。通常,这些本地方法被作为动态加载的库(或DLL)提供给JNI。本地方法DLL通常是不可跨不同操作系统移动的。
当Java应用使用JNI并具有对依赖于其他DLL的DLL的相关性时,JWS会在启动(launch)Java应用时遇到一些局限性。例如,如果Java应用具有带有与其他库的相关性的任何JNI代码,则如果所述库不在Java运行时环境(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路径中的现有目录中。
在这种情况下,Java Web Start启动应用,但是应用不能开始。为了避免这种情况,必须在远程计算机上运行诸如InstallShield之类的外部安装器程序。然后,远程计算机与服务器相连,并接收相关的库以用于安装。接下来,Java应用重新开始。如果在应用下次启动时有对库的更新,那么还必须手动安装它们。
因此,将希望提供一种安装和更新并不需要外部安装器的本地代码库及其相关性的机制。还将希望提供一种安装和更新本地代码库及其相关性以用于以解释编程语言编写的应用的机制。
更具体地,将希望提供一种安装和更新并不需要外部安装器的JNI库及其相关性的机制。还将希望提供一种使用JWS在JRE路径内安装相关性的机制以及一种用于JNI容易地更新其相关性的机制。
本发明提供一种用于从服务器动态地安装和更新这种本地代码库及其相关性以克服上述目标的方法和系统。
发明内容
根据本发明,提供一种从服务器向解释编程语言应用提供本地代码库以在远程计算机上执行的方法,包括:响应于远程计算机上启动解释编程语言应用的主类从解释编程语言应用的主类中调用安装器对象并由安装器对象执行:从服务器提取包含至少一个本地代码库文件名的文件列表,其中该本地代码库文件名表示在远程计算机上的目标目录和本地代码库,其中该文件列表包括表示本地代码库相关性的至少一个附加库文件名;将用本地代码库文件名表示的本地代码库安装到目标目录;和将由附加库文件名表示的本地代码库相关性安装到远程计算机上的目标目录;在远程计算机上调用解释编程语言应用的主类。
本发明的方法从服务器将本地(native)代码库提供给解释编程语言应用以在远程计算机上执行。在解释编程语言应用的主类内调用安装器对象。从包括指定本地代码库的至少一个库文件名的服务器提取文件列表。将用库文件名指示的本地代码库安装到在远程计算机上的目标二进制目录(bin directory),随后在远程计算机上调用该解释编程语言应用的主类。还将附加本地代码库相关性(dependency)安装到远程计算机上的目标二进制目录。该方法从服务器提取最新版本的文件,在远程计算机上的目标二进制目录内定位当前版本文件,并比较当前版本文件和最新版本文件内的版本编号以确定将哪些文件安装在远程计算机上。该方法还使用最新版本文件重写(overwrite)在目标二进制目录内的当前版本文件,以及用本地代码库文件及其相关性的最新版本重写在远程计算机上存在的较旧的本地代码库文件。
根据下文对当前优选实施例的详细描述,结合附图阅读,本发明的上述和其它特征和优点将变得更加显而易见。详细描述和附图仅是说明本发明,而不是限制,本发明的范围由权利要求书及其等同范围定义。
附图说明
图1是可以实施本发明的数据处理系统网络的方框图;
图2是根据本发明优选实施例的可以实施为服务器的数据处理系统的方框图;
图3是图示在其中可以实施本发明的数据处理系统的方框图;和
图4图示根据当前发明的一种实施例的动态地将本地代码库提供给解释编程语言应用的方法。
具体实施方式
本发明实施一种数据处理系统和方法,用于管理在使用诸如Java、REXX、BASIC、SmallTalk、Python、Perl等解释编程语言开发的应用内所使用的本地代码库及其相关性的安装。在这种语言内,将指令编译成由虚拟机使用的字节代码,但是某些本地代码(尤其是库及其相关性)也被使用。
在下文的描述中,阐述许多具体细节以提供对本发明的完整理解。然而,对于本领域的技术人员来说,在没有这些具体细节的情况下也可以实施本发明将是显而易见的。在其它的例子中,以方框图的形式图示公知的设备以便不因为不必要的细节影响本发明。
图1是实施本发明的分布式数据处理系统的一种实施例的附图。分布式数据处理系统100包括网络102,它是用于在分布式数据处理系统100内连接在一起的各种设备和计算机之间提供通信链路的介质。网络102可以包括诸如有线或光纤电缆的永久连接或通过电话连接实现的临时连接。包含本发明的各种处理可以驻留在同一主机上或者在网络102上互连的不同机器上。(例如因特网、内部网、广域网(WAN)或局域网(LAN))。因而,受益于本发明的机器具有适当的连网硬件以建立到一台或多台其它机器(服务器和/或远程计算机)的连接。例如,连接到网络102的机器可以具有到网络的TCP/IP或NETBIOS连接,所述网络运行在令牌环或以太网适配器上。
服务器104连接到如上所述的网络102,以及存储单元106。服务器104向远程计算机108、110、112提供数据,例如Java应用、JNI、库和其它程序。这些数据可以存储在存储单元106上并由服务器104访问。
在本发明的图示实施例中,中央服务器104可以使用基于Web的软件系统,例如Sun微系统公司的Java Web Start,它支持中央服务器104通过WWW连接分配和更新合适的Java应用、JNI库及其相关性。
远程计算机108、110和112还连接到网络102。远程计算机108、110和112例如可以是个人计算机或网络计算机,具有多种处理器和操作系统。
分布式数据处理系统100可以包括附加服务器、客户机和未图示的其它设备。图1将作为例子,而不作为对本发明处理的结构限制。
图2是可以实施为服务器,例如图1中的服务器104的数据处理系统的方框图。数据处理系统200可以是包括连接到系统总线206的多个处理器202和204的对称多处理器(SMP)系统。可选择地,可以使用单处理器系统。还连接到系统总线206的是存储器控制器/超高速缓存208,它提供到本地存储器209的接口。I/O总线桥210连接到系统总线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的接口,由此可以支持附加调制解调器或网络适配器。以这种方式,数据处理系统200允许到多个网络计算机的连接。存储器映射图形适配器230和硬盘232还可以直接地或间接地连接到如图所示的I/O总线212。
本领域的普通技术人员将理解图2所示的硬件可以改变。例如,也可以附加地或者替代所图示的硬件使用其它外围设备,例如光盘驱动等。图2所示的数据处理系统例如可以是IBM eServer pSeries,在纽约Armonk的国际商业机器公司的产品,运行Active InteractiveExecutive(AIX)操作系统。图2并不意味着对本发明的体系结构限制。
在本发明的一种实施例中,在服务器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等远程计算机的数据处理系统的方框图。可以在这样一个远程计算机上或者在通过计算机网络连接的一个或多个这样的计算机上执行更新或安装本地代码库及其相关性的一个或多个处理。在说明性的实施例中,在这样一个远程计算机上,或者在通过计算机网络连接的一个或多个计算机上执行将由Java应用使用的Java本地接口库及其相关性的更新或安装。
除了其它组件之外,图3的数据处理系统300包括处理器302、主存储器304、操作系统314、虚拟机解释器316、web启动应用318和一个或多个主应用程序320以及至少一个安装器对象322。
操作系统314在处理器302上运行,并用于协调和提供在图3内的数据处理器系统300内各个组件的控制。操作系统可以是商业可用的操作系统,例如Windows XP,它可以从微软公司购买。一个或多个编程系统可以与操作系统314共同运行,所述操作系统314例如是解释编程语言,包括但并不限制于Java、REXX、BASIC、SmallTalk、Python、Perl、等等。诸如Java等面向对象的编程系统可以与操作系统共同运行,并提供从在数据处理系统300上执行的Java程序或应用对操作系统的调用,(“Java”是Sun微系统公司的商标)。操作系统的指令、面向对象编程系统和应用或程序位于诸如硬盘驱动器的存储设备上,并可以加载到主存储器304内以由处理器302执行。
虚拟机(VM)316是抽象计算机器,包括指令集合并使用存储器304内的各个存储区域。将VM 316加载或存储在诸如主存储器304内以由处理器302执行。VM 316是能够解释一个或多个解释编程语言以向操作系统314提供所需程序的数据或控制的任何适当虚拟机。
在说明性的实施例中,Sun微系统Java 2平台,标准版本(J2SE)仿真在各种平台上的VM。具体关于Java虚拟机的其它细节可以在JavaTM Virtual Machine Specification,Tim Lindholm和Frank Yellin,Addison Wesley(1997),ISBN 0-201-63452-X中获得,其在此引用作为参考。也可以使用任何适当的Java虚拟机解释器。
Web启动应用(WSA)318是基于Web的软件系统,它支持服务器104通过如在图4内进一步描述的与远程计算机108、110、112的WWW连接分配和更新期望的解释编程语言应用、本地代码库和相关性。将WSA 318例如加载或存储在主存储器304内以由处理器302执行。使用WSA 318在远程计算机108、110和112上启动解释编程语言应用。典型地,在专用平台或运行时环境内启动这些应用,所述平台或环境包含核心可执行、核心文件、支持文件和启动期望应用需要的任何其它数据。
在说明性的实施例中,WSA 318是Java Web Start,它是基于Web的软件系统,支持服务器104在一个或多个远程计算机上启动期望的Java应用,安装和更新JNI库及其相关性和通过WWW连接将执行Java应用需要的其它数据提供给远程计算机。例如,WSA 318更新应用jar文件,或者根据本发明,将所需要的本地代码接口放置在目标目录内。WSA 318是VM 316的一部分或者与之通信。
因而,在这个说明性的例子中,Java运行时环境(JRE)包括Java Web Start应用、Java虚拟机、核心可执行、核心文件和支持文件以建立标准Java平台。因此,JRE通常在Java Web Start运行之前已经存在于远程计算机108、110和112上。JWS 318用于更新应用jar文件。例如,当用户第一次访问Java应用时,JWS软件将下载该应用需要的所有文件,并且如果所请求的版本本地不可用,则还下载JRE。
主应用320是基于Web的软件系统,它支持服务器104通过WWW连接在远程计算机108、110和112上执行期望的应用功能和处理与这些应用功能相关的数据。典型地,在专用平台或运行时环境内启动主应用320,所述平台或环境可以访问可执行、支持文件和运行期望应用320需要的任何其它数据。尽管图3仅图示一个主应用,但是本发明的方法适合于与多个期望的应用一起使用。主应用320是VM 316的一部分或与之通信,并可以由WSA 318启动。在说明性的实施例中,主应用320是任一期望Java应用,其中的许多应用在本技术领域中是公知的。
安装器对象322是用于执行如图4所示的本发明步骤的变量和相关方法的软件集合(bundle)。由远程计算机108、110和112或者更准确地由主应用320调用安装器对象。安装器对象例如能够确定某些文件的存在与否以确定在远程计算机上的这些文件的版本,确定它从服务器下载的文件版本,并且如果它下载的版本较新或者某些文件根本不在远程计算机上,则重写这些文件。
例如安装器对象包括试图在远程计算机上的下载文件列表内发现install.jar文件的计算机程序代码。安装器对象还包括支持从install.jar文件提取特定本地代码库的计算机程序代码。安装器对象还包括能够将所提取的库放置在目标二进制目录内的计算机程序代码。安装器对象还包括从服务器调用本地代码库和将它们加载到远程计算机上的计算机程序代码。通常与用于主应用的其它jar文件一起打包安装器对象,并可以在应用自身的主类内调用该安装器对象。
在说明性的实施例中,Java Web Start连接到用远程计算机108、110、112表示的服务器104上的URL。虽然JWS运行主应用类320,但是安装器对象322还由主应用类320调用,并且安装器对象如下文所述执行本发明的方法。
本领域的普通技术人员将理解图3中的硬件可以根据实施方式改变。附加地或者替代图3所示的硬件,也可以使用其它的内部硬件或外围设备,例如快速ROM(或等同的非易失性存储器)或者光盘驱动器等。而且,可以将本发明的处理应用于多处理器数据处理系统。
因而,例如,远程计算机108、110、112是任一个人计算机或工作站平台,基于英特尔、PowerPC或RISC,并包括诸如IBM OS/2、微软Windows XP、微软Windows NT 4.0、Unix、AIX 5SL等操作系统。典型的计算机运行英特尔x86处理器、OS/2Warp第3版操作系统、JVM版本1.1.1和Java Web Start 1.04。可选择地,计算机运行x86处理器、Windows XP(或Windows NT)操作系统,JVM的版本是1.4和以上。通常,根据与其一起打包的JVM的版本,JWS的版本也是1.4及以上。
图3并不是体系结构上的限制。例如,数据处理系统300还可以是笔记本计算机、手持式计算机或个人数字助理。数据处理系统300还可以是公用电话亭或Web设备。
图4是根据本发明动态地将本地代码库及其相关性提供给解释编程语言应用的方法400的流程图。可由计算机可使用或计算机可读介质可访问的计算机程序产品实现本发明的方法,所述介质提供由计算机或任一指令执行系统使用或结合使用的程序代码,例如Java WebStart。
本地代码库通常是由用本地代码(通常C或C++)编写的解释编程语言应用使用的文件。这些本地代码库专用于特定平台,而不是独立于体系结构的。通常,动态地加载这些库,意味着不是在应用启动的过程中加载它们。也就是,直到应用需要时才加载它们。此外,这些库通常取决于其它库。也就是,可以加载第一库(例如a.dll),随后,由于其被加载,可能需要一个或多个其它的库(例如b.dll和/或c.dll等)。
DLL对于实施插件或模块特别有用,因为直到需要时才加载它们。这些库也可用于多种用途。例如,可插件鉴权模块(PAM)系统使用DL库以允许管理者配置和重新配置鉴权。DLL可用于实施解释器,以有时将代码编译成机器代码,例如在实施刚好及时(just-in-time)(JIT)编译器或多用户地牢游戏(multi-user dungeon:MUD)时。
也可以使用包括Linux、Solaris、AWT和上述Java本地接口(JNI)的多种接口访问DLL。尽管JNI用作说明性的例子,但本发明的方法也可以由任一等价接口使用以将任一期望本地代码库、任一动态加载库和任一期望相关性提供给给定解释编程语言应用。
如在方框402中看到的,当web启动应用318试图在远程计算机108、110和112上启动解释的编程语言时,方法400开始。通常,主应用的启动涉及远程计算机108、110和112连接到服务器104。这例如在如上所述的典型网络连接上实现。在说明性的实施例中,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应用的文件由服务器指定。
在本发明中,所有的jar文件已经在远程计算机上。所以,安装器对象开始于通过试图在远程计算机上的下载文件列表内发现install.jar文件。如果安装器对象发现“install.jar”,则它将查阅其从install.jar文件提取JNI库和将它们放置在指定JRE二进制目录内的逻辑。安装器对象将从服务器下载JNI库,或者搜索在远程计算机上的现有库,并确保将它们放置在适当的JRE二进制目录内。随后,安装器从服务器调用JNI库,并将其加载到远程计算机上。在调用JNI代码以由主Java应用使用之前调用这个安装器类对象。将该安装类与用于Java主应用的其它jar文件一起打包,并可以从该应用自身的主类内调用。
以本技术领域内公知的方式,远程计算机使用在Java运行时环境内的Java Web Start调用Java安装器对象。Java是致力于将数据定义为对象和可应用于这些对象的方法的面向对象的编程语言和环境。Java安装器对象是根据本发明的软件组件,它已经被编译以动态地将JNI库及其相关性提供给主Java应用。Java安装器对象例如能够确定某些文件的存在与否,确定在远程计算机上的这些文件的版本,确定它从服务器下载的文件的版本,并且如果它下载的版本较新或者某些文件在远程计算机上根本不存在则重写这些文件。
例如使用下述内容调用安装器对象:
public static void main(String[]args){
Installer installer=new Installer();
Installer.install();
Run the application...
}
如在方框404中看到的,远程计算机确定“install.jar”是否存在在远程计算机上。“install.jar”(jar文件)包含运行主应用必需的所有文件,包括实际的本地代码库以及列出本地代码库文件名的文件。包含版本号的另一个文件也打包在同一jar文件内。安装器对象提取包含本地代码库列表的文件。它搜索名称列表,并将每个文件提取到目标二进制目录。因而,“Install.jar”包含本地代码库和它的相关性。“Install.jar”还包含列出本地代码库和所有的相关文件的文件名的文件。将这个文件称作例如“install.txt”或“filelist.txt”。通常,这个列表每行包含一个文件的名称。“Install.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,其中现在启动主应用。现在,这个初始调用安装器对象的主应用继续执行其主要任务。在已经适当地修改这些库之后,这个主应用可以执行任一适当的功能,其中若干功能在本技术领域中是公知的。
在说明性的实施例中,这个主应用是Java应用,其主要任务是本技术领域中公知的任一适当的Java功能。
如在方框406中看到的,远程计算机从jar文件提取“filelist.txt”。该文件“filelist.txt”是一个或多个本地代码库的文件名及其相关性的列表。
例如,“filelist.txt”包含文件列表,例如:
a.dll
b.dll
c.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”是否存在于其中解释编程语言应用将运行的运行时环境的目标目录中。在说明性的实施例中,目标目录是JRE二进制目录,它通常是在安装JVM的远程计算机文件系统上的位置。如果在目标目录内不存在“version.txt”,则尚未在远程计算机上安装所需要的动态加载本地代码库及其相关性。如果是这种情况,则该方法返回方框404,并调用安装器对象以在远程计算机上安装所有适当的文件。如果存在“version.txt”,则该方法可以前进到方框412。
如在方框412中看到的,远程计算机比较在目标二进制目录内在方框410上发现的文件“version.txt”的版本号与在方框408上提取的文件“version.txt”。在本发明的一种实施例中,这个版本号比较是在两个“version.txt”文件内包含的两个编号的字符串比较。
如在方框414中看到的,确定在方框408上提取的版本号是否大于在方框410上发现的编号。如果在方框408上提取的版本号不大于在方框410上发现的编号,则该方法前进到方框430,其中已经完成安装器对象。
如果在方框408上提取的版本号的确大于在方框410上发现的编号,则该方法前进到方框420,其中将在“filelist.txt”内列出的所有适当文件提取到目标目录。此时,该方法还包括加载表示目标目录的文件,通常表示主应用的缺省路径。根据本发明,该缺省路径指向本地代码库和任一独立库。在说明性的实施例中,将在“filelist.txt”内列出的第一个文件提取到JRE二进制目录。此外,主Java应用的缺省路径表示JRE二进制目录。这样,将在“filelist.txt”内列出的JNI库及其相关性移动到将由Java WebStart和因而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二进制目标现在将具有表示在其目录内文件的最新版本的“version.txt”。
该方法前进到方框430,其中安装器对象已经完成其工作。
该方法随后前进到方框440,其中主应用现在完全启动,并可以在没有中断的情况下运行其任务。在说明性的实施例中,启动Java应用(Java Web Start或另一个Java应用)。一开始调用安装器对象的这个主Java应用现在继续执行其主要任务。在已经适当地修改库之后,这个主Java应用可以执行任一适当的Java功能,其中若干功能在现有技术中是公知的。
本发明可以采取完全硬件实施例、完全软件实施例或同时包含硬件和软件单元的实施例的形式。在优选实施例中,在软件内实现本发明,所述软件包括但是并不限制于固件、驻留软件或微代码等。此外,本发明可以采取可以从计算机可用或计算机可读介质访问的计算机程序产品的形式,所述介质提供由计算机或任一指令执行系统使用或结合使用的程序代码。为了这个说明书的目的,计算机可用或计算机可读介质可以是可包含、存储、传送、传播或传输由指令执行系统、仪器或设备使用或结合使用的程序的任一个设备。该介质可以是电子、磁、光、电磁、红外或半导体系统(或仪器或设备)或诸如载波的传输介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可拆除计算机磁盘、随机访问存储器(RAM)、制度存储器(ROM)、刚性磁盘或光盘。
虽然当前将在此公开的本发明的实施例视为优选的,但是在不脱离本发明的精神和范围的情况下,可以对其进行各种改变和修改。本发明的范围将在权利要求书内表示,落入其含义和等价范围内的所有改变将包含在其中。

Claims (10)

1.一种从服务器向解释编程语言应用提供本地代码库以在远程计算机上执行的方法,包括:
响应于远程计算机上启动解释编程语言应用的主类从解释编程语言应用的主类中调用安装器对象并由安装器对象执行:
从服务器提取包含至少一个本地代码库文件名的文件列表,其中该本地代码库文件名表示在远程计算机上的目标目录和本地代码库,其中该文件列表包括表示本地代码库相关性的至少一个附加库文件名;
将用本地代码库文件名表示的本地代码库安装到目标目录;和
将由附加库文件名表示的本地代码库相关性安装到远程计算机上的目标目录;
在远程计算机上调用解释编程语言应用的主类。
2.权利要求1的方法,还包括:
从服务器提取最新版本文件,其中最新版本文件表示服务器上的文件列表的最新版本编号;
在远程计算机上的目标目录中定位当前版本文件,其中当前版本文件表示在远程计算机上的文件列表的当前版本编号;和
比较当前版本文件和最新版本文件中的版本编号。
3.权利要求2的方法,还包括:
用最新版本文件重写目标目录中的当前版本文件。
4.权利要求1的方法,还包括:
用本地代码库文件和至少一个本地代码库相关性重写远程计算机上的至少一个较旧库文件。
5.权利要求1的方法,其中解释编程语言应用是Java应用,并且目标目录是Java运行时环境JRE二进制目录。
6.一种从服务器向解释编程语言应用提供本地代码库以在远程计算机上执行的系统,包括:
用于响应于远程计算机上启动解释编程语言应用的主类从解释编程语言应用的主类中调用安装器对象的装置,其中所述安装器对象包括:
用于从服务器提取包含至少一个本地代码库文件名的文件列表的装置,其中该本地代码库文件名表示在远程计算机上的目标目录和本地代码库,其中该文件列表包括表示本地代码库相关性的至少一个附加库文件名;
用于将用本地代码库文件名表示的本地代码库安装到目标目录的装置;和
用于将由附加库文件名表示的本地代码库相关性安装到远程计算机上的目标目录的装置;
用于在远程计算机上调用解释编程语言应用的主类的装置。
7.权利要求6的系统,所述系统还包括:
用于从服务器提取最新版本文件的装置,其中最新版本文件表示服务器上的文件列表的最新版本编号;
用于在远程计算机上的目标目录中定位当前版本文件的装置,其中当前版本文件表示在远程计算机上的文件列表的当前版本编号;和
用于比较当前版本文件和最新版本文件中的版本编号的装置。
8.权利要求7的系统,所述系统还包括:
用于用最新版本文件重写目标目录中的当前版本文件的装置。
9.权利要求6的系统,所述系统还包括:
用于用本地代码库文件和至少一个本地代码库相关性重写远程计算机上的至少一个较旧库文件的装置。
10.权利要求6的系统,其中解释编程语言应用是Java应用,并且目标目录是Java运行时环境JRE二进制目录。
CN200610092851A 2005-10-27 2006-06-16 用于动态提供本地库及其相关性的方法和系统 Expired - Fee Related CN100583032C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/260,576 US7941797B2 (en) 2005-10-27 2005-10-27 Dynamically providing native libraries and their dependencies
US11/260,576 2005-10-27

Publications (2)

Publication Number Publication Date
CN1955922A CN1955922A (zh) 2007-05-02
CN100583032C true CN100583032C (zh) 2010-01-20

Family

ID=38063271

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200610092851A Expired - Fee Related CN100583032C (zh) 2005-10-27 2006-06-16 用于动态提供本地库及其相关性的方法和系统

Country Status (2)

Country Link
US (1) US7941797B2 (zh)
CN (1) CN100583032C (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8127288B2 (en) 2006-01-17 2012-02-28 International Business Machines Corporation Installing and updating interpreted programming language applications using a designated virtual machine
US8443358B1 (en) * 2006-02-10 2013-05-14 Citrix Systems, Inc. Hot pluggable virtual machine
US7921415B1 (en) * 2006-05-19 2011-04-05 Tellme Networks, Inc. Externally loaded browser interpreter for non-native language support
US20080317042A1 (en) * 2007-06-22 2008-12-25 Palo Alto Research Center Incorporated Extensible framework for compatibility testing
US20090172657A1 (en) * 2007-12-28 2009-07-02 Nokia, Inc. System, Method, Apparatus, Mobile Terminal and Computer Program Product for Providing Secure Mixed-Language Components to a System Dynamically
US8418170B2 (en) * 2008-01-29 2013-04-09 Flexera Software Llc Method and system for assessing deployment and un-deployment of software installations
US20090249311A1 (en) * 2008-03-31 2009-10-01 International Business Machines Corporation Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US9058483B2 (en) 2008-05-08 2015-06-16 Google Inc. Method for validating an untrusted native code module
US9176754B2 (en) 2008-07-16 2015-11-03 Google Inc. Method and system for executing applications using native code modules
TW201224814A (en) * 2010-12-07 2012-06-16 Hon Hai Prec Ind Co Ltd System and method for updating software on android
US8914784B2 (en) 2011-06-10 2014-12-16 International Business Machines Corporation Method and system for checking the consistency of application jar files
US20130007517A1 (en) * 2011-06-30 2013-01-03 International Business Machines Corporation Checkpoint Recovery Utility for Programs and Compilers
CN103902265B (zh) * 2012-12-26 2018-01-09 腾讯科技(深圳)有限公司 一种应用实现方法及相关装置
US20150095406A1 (en) * 2013-10-02 2015-04-02 Gadi Dor System and method for remote administration of an electronic device
CN106406925A (zh) * 2015-08-03 2017-02-15 阿里巴巴集团控股有限公司 用于支持在线升级的设备和方法
US20170052773A1 (en) * 2015-08-17 2017-02-23 Google Inc. Application installs using remote applications
WO2019049542A1 (ja) * 2017-09-07 2019-03-14 ソニー株式会社 情報処理装置、および情報処理方法
CN107729134B (zh) * 2017-10-31 2021-09-07 努比亚技术有限公司 一种提高应用程序本地方法运行速度的方法、移动终端及计算机可读存储介质
US11243803B2 (en) * 2019-04-30 2022-02-08 Automation Anywhere, Inc. Platform agnostic robotic process automation
US11301224B1 (en) 2019-04-30 2022-04-12 Automation Anywhere, Inc. Robotic process automation system with a command action logic independent execution environment
US11614731B2 (en) 2019-04-30 2023-03-28 Automation Anywhere, Inc. Zero footprint robotic process automation system
US11113095B2 (en) 2019-04-30 2021-09-07 Automation Anywhere, Inc. Robotic process automation system with separate platform, bot and command class loaders
CN110673834A (zh) * 2019-09-23 2020-01-10 北京博睿宏远数据科技股份有限公司 一种源码调用方法、装置、计算机设备及存储介质
CN110888674B (zh) * 2019-11-28 2022-08-09 支付宝(杭州)信息技术有限公司 在Python虚拟机中执行安全计算的方法及装置
CN111651197B (zh) * 2020-07-01 2023-04-28 中国银行股份有限公司 一种自动搬库方法和装置
CN113342323B (zh) * 2021-06-29 2024-03-29 银清科技有限公司 软件在线开发的方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1265487A (zh) * 1999-01-29 2000-09-06 国际商业机器公司 用于改进java方法调用速度的方法和装置
CN1271893A (zh) * 1999-04-27 2000-11-01 国际商业机器公司 提高Java环境的可管理性和可用性的系统和方法
US6542887B1 (en) * 1999-10-29 2003-04-01 International Business Machines Corporation Incorporating native code in Java archive files
CN1659517A (zh) * 2002-06-08 2005-08-24 皇家飞利浦电子股份有限公司 Java虚拟机的操作

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4970639A (en) * 1988-05-20 1990-11-13 International Business Machines Corporation Virtual machine architecture independent program loader
US6006034A (en) * 1996-09-05 1999-12-21 Open Software Associates, Ltd. Systems and methods for automatic application version upgrading and maintenance
US6381742B2 (en) * 1998-06-19 2002-04-30 Microsoft Corporation Software package management
US6272677B1 (en) * 1998-08-28 2001-08-07 International Business Machines Corporation Method and system for automatic detection and distribution of code version updates
US7000230B1 (en) * 2000-06-21 2006-02-14 Microsoft Corporation Network-based software extensions
US7281047B2 (en) * 2001-01-16 2007-10-09 Cognos Incorporated System and method for automatic provision of an application
US20030093508A1 (en) * 2001-10-18 2003-05-15 Seiko Epson Corporation System for installing and launching network applications
US7523116B2 (en) * 2003-10-30 2009-04-21 International Business Machines Corporation Selection of optimal execution environment for software applications
US8127288B2 (en) * 2006-01-17 2012-02-28 International Business Machines Corporation Installing and updating interpreted programming language applications using a designated virtual machine

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1265487A (zh) * 1999-01-29 2000-09-06 国际商业机器公司 用于改进java方法调用速度的方法和装置
CN1271893A (zh) * 1999-04-27 2000-11-01 国际商业机器公司 提高Java环境的可管理性和可用性的系统和方法
US6542887B1 (en) * 1999-10-29 2003-04-01 International Business Machines Corporation Incorporating native code in Java archive files
CN1659517A (zh) * 2002-06-08 2005-08-24 皇家飞利浦电子股份有限公司 Java虚拟机的操作

Also Published As

Publication number Publication date
US7941797B2 (en) 2011-05-10
US20070169110A1 (en) 2007-07-19
CN1955922A (zh) 2007-05-02

Similar Documents

Publication Publication Date Title
CN100583032C (zh) 用于动态提供本地库及其相关性的方法和系统
CN100478888C (zh) 用于安装和更新解释编程语言应用的方法和系统
EP3084596B1 (en) Executable code for constrained computing environments
JP5663006B2 (ja) ランタイム環境を構築するためのシステムおよび方法
Dahm Byte code engineering
EP1214645B1 (en) Method and system for distributing object-oriented computer programs
KR100864192B1 (ko) 사전 내면화된 프로그램 파일들을 생성 및 이용하기 위한 방법 및 디바이스
US7340730B2 (en) On demand, network accessible, run time compile server
US20050240907A1 (en) Loading object-oriented computer programs
EP3314422A1 (en) Extending a virtual machine instruction set architecture
JPH11327916A (ja) コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術
Gregersen et al. Towards a Dynamic-update-enabled JVM
KR100679687B1 (ko) 객체지향적 컴퓨터 프로그램의 로딩
US11243876B2 (en) Techniques for accessing off-heap memory
US6996825B2 (en) Method and apparatus for efficient object sub-typing

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100120

Termination date: 20160616

CF01 Termination of patent right due to non-payment of annual fee