CN1281180A - 为应用程序透明地加载只读存储器中的资源 - Google Patents

为应用程序透明地加载只读存储器中的资源 Download PDF

Info

Publication number
CN1281180A
CN1281180A CN00120239.1A CN00120239A CN1281180A CN 1281180 A CN1281180 A CN 1281180A CN 00120239 A CN00120239 A CN 00120239A CN 1281180 A CN1281180 A CN 1281180A
Authority
CN
China
Prior art keywords
resource
rom
file
computer
jvm
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.)
Granted
Application number
CN00120239.1A
Other languages
English (en)
Other versions
CN1113290C (zh
Inventor
P·J·米勒
E·C·史密斯
T·J·沃尔夫
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 CN1281180A publication Critical patent/CN1281180A/zh
Application granted granted Critical
Publication of CN1113290C publication Critical patent/CN1113290C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Abstract

一种为Java虚拟机上执行的应用程序透明地从只读存储器加载资源的方法、系统和计算机程序产品。本发明一般将在没有磁盘存储器、没有文件系统软件的嵌入式计算设备上使用。本文所述的新颖的类加载程序,从ROM加载资源并按应用程序的预期返回输入流对象。所以,在使用本发明时,不需要改动现有应用程序代码就能使用ROM中存储的资源。本发明可以用于以Java程序设计语言编写的程序,或者用于在JVM上执行的以其它语言编写的程序。

Description

为应用程序透明地 加载只读存储器中的资源
本发明涉及计算机系统,更具体来说涉及为Java虚拟机上执行的应用程序透明地从只读存储器(“ROM”)加载资源(诸如所存储的位图、图象、字体和声音文件)的方法、系统和计算机程序产品。
Java是由太阳微系统公司开发的一种强健、可移植、面向对象的程序设计语言,在编写因特网和万维网(以下简称WEB)程序的方面正在获得广泛的接受。大多数程序设计语言的编译程序生成适用于特定操作环境的代码,而Java则使得用“一次写成,处处运行”(Write Once,Run Anywhere)的范例编写程序成为可能。(“Java”和“Write Once,Run Anywhere”是太阳微系统公司的商标。)
Java是通过使用专门设计的虚拟机(“VM”)而得到其可移植性的。这个虚拟机也称作“Java虚拟机”或“JVM”。虚拟机使潜在硬件的细节与用于编译Java程序设计指令的编译程序得以分离。这些细节是通过虚拟机的实现而提供的,包括诸如在运行Java程序的机器上使用的是小Endian还是大Endian格式等等。因为这些从属于机器的细节不在编译代码中反映,所以能将代码移植到不同的环境(不同的硬件机器、不同的操作系统,等等),并在该环境中执行代码,而不要求改编或重新编译代码-所以就有了“一次写成,处处运行”这个说法。被称为Java“字节码”的编译代码然后在JVM的顶上运行一其中JVM是按具体的操作环境改编的。这种具体改编JVM的例子是,由于字节码是按规范格式(大Endian)生成的,如果JVM在是小Endian的机器上运行,JVM就要负责先将指令从字节码转换,再将它们传送给微处理器。
Java运行环境包括JVM以及运行Java应用程序或小应用程序所需要的若干文件和类。自此,除非另外注明,术语“JVM”和“运行环境”将互可交换地在本文中使用。
Java应用程序通常是从诸如太阳微系统公司的“JDK”(Java开发工具箱)产品的开发工具包、或用也是出自太阳微系统公司的“JRE”(Java运行环境)产品被执行的。JRE是JDK的子集,提供应用程序执行所需的功能。当采用JRE时,程序是从命令行执行的。
被称为“类加载程序”的Java类在Java环境中用来动态地加载运行程序中的类和资源。图1表示使用JVM和类加载程序的类加载的现有水平技术。JVM的类加载程序功能使Java应用程序能随着程序的执行而递增地加载。本领域中众所周知,程序员编写Java程序后,将其编译成Java字节码。含有Java字节码的文件被称为“类文件”。程序员100然后将类文件装入类文件的储存库110或111。在以后的某个时刻,应用程序150在客户计算机160上被JVM 140执行。当应用程序150试图使用某个在客户计算机160上尚未调入的类时,JVM 140的类加载程序部件130会向类服务器120发出请求102a。(类服务器功能120通常包含在标准Web服务器内。)这个请求102a通知类服务器120从储存库110提取(103a、104a)该类文件,并将其返回给(105a)JVM 140。或者,类加载程序130也可以在本机文件系统111的目录中查找所需要的类。在这种情况下,要从文件系统111请求(102b)所需的类并将其返回给(105b)给JVM140。不管文件是从位置110还是111中检索出来的,应用程序150然后都要用检索出的类文件继续执行。这种对类文件的动态加载,操作上对应用程序150的用户是透明的。
Java类加载程序在查找文件时采用预定的检索策略,对特定位置予以优先考虑。按照Java 1.2平台规范,最高优先级的检索位置是自引导的运行和国际化类,分别称为“rt.jar”和“i18n.jar”。如果在这些位置找不到所需的类,次高优先级要在安装的扩展类中查找一扩展类是在JRE的“lib/ext”目录中存储的JAR中的类。(“JAR”指“Java档案库”,是用于对应用程序所用文件进行分布和存档的一种文件格式。)最后,如果还没有找到该类,就要考虑类路径系统的属性设置。由类路径规定的任何路径,以及在用这些路径找到的JAR文件的清单的类路径属性中标识的任何路径,都可以用来检索所需的类。(欲知详细信息,可在网上参看“认识扩展类加载”(Understanding Extentsion Class Loading)一文,网址为。)此外,可以通过(用目录和文件名标识)指定类文件在文件系统中的位置从已知位置来加载类文件,或者通过指定类文件的统一资源定位器(URL)从网络服务器上的位置来加载类文件。
现有技术的动态加载方法也用于对Java应用程序所用资源文件的检索和加载。资源可能已经单独地存储在存储可执行类文件的同一个目录中;它们可能被包装在包装类文件的同一个JAR文件中;或者,它们可以与类文件一起存储在公用的目录结构中,但被收集到单独的子目录(诸如“图象”或“资源”子目录)中。
现有的类加载程序功能假设存在文件系统,并且CLASSPATH环境变量或“java.class.path”系统属性将确定在该文件系统中类加载程序能动态检索所需类文件和资源的某个位置。然而,人们正在开发大量为方便移动或便携使用的新型计算设备。这些设备要设计得重量轻、体积小、效率高(从费用角度和操作角度而言),所以许多设备都被设计得没有磁盘驱动器的系统开销,没有用来存取磁盘文件的文件系统软件。(此外,这些设备经常被配置以相对较小的存储器,容量数量级在几兆字节。)本文自此将这些设备称为“嵌入设备”,它们的例子包括个人数字助理(PDA);蜂窝电话和可视电话(screen phones)、寻呼机以及便携式(wearable)计算设备。
这些嵌入设备如果没有磁盘驱动存储器,可以将资源文件存储在只读存储器中。然而如前文所述,现有的Java类加载程序机构优先检索在文件系统中存储的文件。由于嵌入设备没有文件系统,所以要为嵌入设备提供一种可替代的技术。这个技术必须能高效地查找出在嵌入设备上执行的应用程序所需要的资源。在名称为“访问ROM中存储的资源文件”(Access to Resource Files Stored in ROM)的待审定美国专利申请(序列号09/___,受让给本发明的同一个受让人,本文引用作为参考)中,描述了一种技术。然而,该技术要求修改现有应用程序代码来专门检索ROM存储器中的资源。尽管这种方法在特定情况中是有益的,但如果换一种方法能避免修改应用程序代码则会更好。修改应用程序代码是人们不希望做的事情,这是因为它有导入错误的可能,需要进行额外的测试来验证改编后的代码,也因为成百上千的应用程序可能已经广泛地散布到千千万万的用户手中,使应用程序修改成为难以控制的任务。
因此,需要一种技术,现有应用程序用它能透明地(不加改动地)访问已经在ROM中存储的资源。这种技术应当是后向兼容的,使得在具有文件系统的现有计算环境中执行的程序不受影响。
本发明的一个目的是提供一种现有应用程序代码能通过其透明地加载ROM中存储的资源的技术。
本发明的另一个目的是通过一种可替代的类加载机制来提供这种技术。
本发明的另一个目的是以与资源不在ROM中存储的现有计算环境后向兼容的方式来提供这种技术。
本发明的另一个目的是以不要求用户行动或不要求用户意识到该可替代的加载机制或策略的方式来提供这种技术。
本发明的其它目的和优点,部分将在本说明和以下的各附图中陈述,部分将通过本说明阐明或者通过对本发明的实践得到了解。
为了实现以上目的,按照本文广义地说明的本发明的目的,本发明提供一种用于在计算环境中从ROM存储器透明地加载资源的方法、系统和计算机程序产品。这个技术包含:在ROM中存储多个资源文件;在计算机上执行Java虚拟机(“JVM”);在JVM上执行应用程序;在JVM上执行ROM类加载程序-ROM类加载程序要适合从ROM加载资源文件;创建包含对应每个资源文件的项的表;由ROM类加载程序接收应用程序对选定的一个资源文件上的输入流的请求;利用表定位ROM中所选择的资源文件;利用查找到的资源返回该输入流。
表中的每项最好包含:与特定一个资源文件的标识符对应的键值;该特定资源文件在ROM中的位置;在该特定资源文件的位置存储的数据的长度。对表的使用最好还包含:用该特定资源文件的标识符作为键值来访问表;访问表时如果发现匹配的项就返回该特定资源文件的位置和长度。
这个技术最好进一步包含将JVM配置得能使用ROM类加载程序。此外,该请求最好原封不动地保留最好是在应用程序中规定的预先存在的语义。
现在将结合以下附图来说明本发明。各附图中相同的标注号自始至终表示同一个部件。
图1表示现有技术水平用Java虚拟机进行类加载的技术;
图2是可以在其中实践本发明的计算机工作站环境的框图;
图3是可以在其中实践本发明的连网的计算环境的框图;
图4至6表示的流程图叙述的是实现本发明最佳实施例时使用的逻辑。
图7至9表示的是可用来实现本发明最佳实施例的Java程序设计语言样本。
图2表示一个可以在其中实践本发明的代表性的工作站硬件环境。图2的环境包含一个代表性的、包括有关外围设备在内的用户计算机工作站210-例如个人电脑。工作站210包括微处理器212和总线214,后者用于按已知技术连接微处理器212与工作站210的部件并使它们之间能进行通信。工作站210通常包括用户接口适配器216,它将微处理器212通过总线连接到一个或多个接口设备,诸如键盘218、鼠标器220和/或其它接口设备222-后者可以是任何用户接口设备,诸如触摸屏、数字输入键盘、等等。总线214也将显示器224(诸如LCD屏幕或监视器)通过显示适配器226与微处理器212相连。总线214还将微处理器212连接到存储器228和长期存储器230,后者可包括硬盘驱动器、软盘驱动器、磁带驱动器,等等。
工作站210例如可以通过某个通信频道或调制解调器232与其它计算机或计算机网络进行通信。工作站210或者也可以用232表示的无线接口-诸如CDPD(蜂窝数字包数据)-进行通信。工作站210可以与局域网(LAN)或宽域网(WAN)中的其它计算机联系在一起,工作站210或者也可以是在与另一个计算机的客户机/服务器组合中的客户机,等等。所有这些配置以及适当的通信硬件和软件,都是本领域中已知的。
图3表示可以在其中实践本发明的数据处理网络240。数据处理网络240可以包括若干个别的网络,诸如无线网络242和网络244,它们每个都包含若干个别的工作站210。此外,本领域的熟练人员知道,可以包含一个或多个LAN(未予示出),其中,LAN可以包含若干与宿主处理机相连的智能工作站。
继续参看图3,网络242和网络244也可以包括主计算机或服务器,诸如网关计算机(gateway computer)246或应用服务器247(它可以访问数据储存库248)。网关计算机246起着进入每个网络244的入口点的作用。网关246最好通过通信链路250a与另一个网络242相连。网关也可以用通信链路250b、250c直接连接到一个或多个工作站210。网关计算机246可以用IBM公司的企业系统体系结构/370(Enterprise Systems Architecture/370)、企业系统体系结构/390(Enterprise Systems Architecture/390)计算机等来实现。视具体应用而定,可以采用中等的计算机,诸如应用系统/400(Application System/400)(也叫AS/400)。(Enterprise SystemsArchitecture/370是IBM的商标,Enterprise SystemsArchitecture/390、Application System/400和AS/400是IBM的注册商标。)
网关计算机246也可以连接249到存储器(诸如数据储存库248)。此外,网关246可以直接或间接地连接到一个或多个工作站210。
本领域的熟练人员将知道,网关计算机246可以位于地理位置远离网络242的地方,类似地,工作站210可以位于与网络242和244有相当距离的位置。例如,网络242可以位于美国加州,而网关246可以位于德克萨斯,一个或多个工作站可以位于纽约。工作站210可以用诸如传输控制协议/网际协议(TCP/IP)的连网协议,经过若干可选择的连接媒介(诸如蜂窝电话、无线电频率网络、卫星网络等等),与无线网络242连接。无线网络242最好用诸如TCP或UDP(用户数据报协议)的网络连接250a,经过IP、X.25、帧中继、ISDN(综合业务数字网)、PSTN(公共交换电话网)等,与网关246连接。工作站210也可以选择用拨号连接250b或250c直接连接到网关246。此外,无线网络242和网络244可以以图3中所示的类似的方式连接到一个或多个网络(未予示出)。
体现本发明的软件程序代码,一般是由工作站210的微处理器212从某种类型的长期存储介质(诸如CD-ROM或硬盘驱动器)中访问的。软件应用程序可以收录在已知各种用于数据处理系统的媒体的任何一种上(诸如软盘,硬盘驱动器或CD-ROM)。代码可以在这类媒体上传播,或者可以经过某种类型的网络从一个计算机系统的内存或外存传播到其它计算机系统,供这些其它系统的用户使用。或者,程序代码也可以在包含在存储器228上,由微处理器212用总线214来访问。在存储器中、物理媒体上收录软件程序代码和/或通过网络传播软件代码的技术和方法是众所周知的,本文将不作更深的讨论。
本发明可以在不与网络连接的、以独立方式运行的用户工作站上使用。或者,本发明可以在与网络相连的用户工作站上使用。当本发明用在客户机-服务器连网环境中时,本发明运行所在的客户计算机可以用导线连接或无线连接与服务器相连。有线连接是采用诸如电缆和电话线的物理媒体的连接;而无线连接采用的媒体诸如是无线链路、无线电频率波和红外波。许多连接技术都可以用于这些各种媒体,例如:用计算机的调制解调器经过电话线建立连接;用LAN卡,诸如令牌环或以太网;用蜂窝式调制解调器建立无线连接;等等。客户计算机可以是具有处理功能的(也可以有通信功能的)任何类型的计算机处理机,包括膝上型、手提式或移动式计算机;车载设备;桌面计算机;大型机;等等。类似地,远程服务器可以是具有处理和通信功能的众多不同类型的计算机中的任何一种。这些技术在本领域是众所周知的,硬件设备和能使硬件有用的软件很容易获得。自此,将在相同的意义上把客户计算机称为“工作站”、“机器”、“设备”或计算机,任何这些术语或术语“服务器”都是指上述的任何类型的计算设备。
在最佳实施例中,本发明是以计算机软件程序(或程序)的一个或多个模块(也称为代码子例程,或者,在面向对象的程序设计中称为“对象”)实现的。这个实现通常将驻留在嵌入设备上并在嵌入设备上执行。或者,它也可以在诸如没有磁盘存储器和文件系统的桌面计算机的客户工作站上运行,而不会对程序在这个环境中的运行产生不利的影响。本发明可以用于因特网环境中的工作站。或者,环境也可以是公司内部网、外部网(extranet)或任何其它网络环境。或者,本发明可以在独立的环境中使用。在连网的环境中使用时,本发明的代码在客户机设备上运行。最佳实施例的程序代码最好以Java面向对象程序设计语言中的对象来实现。或者,本发明也可以与在Java虚拟机上执行的、以任何程序设计语言(诸如Javascript或NetRexx)编写的程序代码一起使用。(Javascript是太阳微系统s公司的商标,NetRexx是IBM公司的商标。)本发明也可以用于具有语义与本文所描述的Java类加载程序的语义类似的动态部件加载机制的其它环境。
最佳实施例提供的透明地从ROM加载资源的方法,要使用本文定义的一下文将结合图4-9作更详细讨论的-一组部件,以后将会说明,它们是一起工作的。这些部件是:(1)在本文中称为“OSMemory”的对象类,它使应用程序代码能访问ROM存储器;(2)在本文中称为“OSMemoryInputStream”的对象类,它是java.io.InputStream类的子类,为OSMemory对象提供流接口;(3)在本文中称为“RomLoadingClassLoader”的对象类,它是一个新颖的Java类加载程序,知道如何从ROM向外加载资源。
如前文结合图1所述,类加载程序在Java应用中,用来在执行的应用程序需要类或资源时,动态地加载类和资源;当程序请求资源或调用类时,正是ClassLoader去寻找并返回该资源或类。
在现有技术的应用程序代码中,访问资源通常要针对某个类调用Class.getResouceAsStream()过程。这个过程将资源的名称作为参数。Class.getResouceAsStream()过程以调用ClassLoader.getResouceAsStream()过程而结束。每个类都有一个与其相关联的ClassLoader对象。各种getResouceAsStream()过程返回一个InputStream类型的对象。这个InputStream对象是应用程序代码用来读资源数据的标准接口。
在这种现有技术的从应用程序代码加载资源方法(如前文结合图1的系统体系结构所述)中使用的过程调用一般如下所列-以名为“picture.gif”的资源被请求时为例:
(1)应用程序调用getClass.getResourceAsStream(“picture.gif”)。
(2)Class.getResourceAsStream()确定定义该类所在的包名,将该包名置于所请求资源名称的前面,并(假设包名是“package_name”)调用getClassLoader.getResourceAsStream(“package-name/picture.gif”)。
(3)ClassLoader.getResourceAsStream(“package-name/picture.gif”)寻找文件系统中以文件形式存在的、或是JAR文件中以文件形式存在的、或是在网络服务器上存在的该“picture.gif”资源,并返回一个应用程序能用来读取该资源文件中数据的InputStream对象。
如上所述,本发明定义一个新颖的类加载程序一本文称之为对象“RomLoadingClassLoader”。RomLoadingClassLoader是从ROM加载的所有类的类加载程序。这个类加载程序的这个实现,用一个资源名表来确定所请求的资源位于存储器中的什么位置。按照最佳实施例,资源将与类一起被封装(packaged),作为映象(image)装入ROM中。进行封装所用的技术不是本发明的组成部分。这样来同时定位(co-locating)类和资源,使特定类和其所需资源的安装和拆卸变得更加容易。一旦资源被封装在一起后,就对照该封装映象运行一个实用程序(它不是本发明组成部分)。这个实用程序确定在该映象中含有的资源的名称或标识符(它们将是一个串值)、所存储资源在映象内的起点、资源的存储数据的长度。根据这个信息,实用程序构造一个用于访问该被存储资源的表,其中,表(或者其它存储机构,诸如阵列)中的每项包含一个设置成该串标识符的键值,以及一个最好包含-(1)指向资源位置的指针和(2)资源长度-的值。可以用来以所述方式封装资源、创建标识资源的表的商业产品,是与IBM VisualAge_for Embeded Systems一起提供的jxeLink工具一这是出自IBM公司的JavaTM Technology Edition产品。对本领域的熟练人员来说,显然,这种访问表技术在资源尚未被封装在一起时也是可以使用的。在这种情况下,要求知道被存储的资源的标识符、位置和长度值。然后就能用该信息来构造表。
当getResourceAsStream()的调用请求某资源时,romLoadingClassLoader在该表中检查ROM中当前可用的资源。如果它发现对应该被请求资源的项,就创建一个OSMemoryInputStream类型的对象。这个对象是InputStream的子类,所以可以安全地被返回给应用程序代码。这个类的实现能在ROM存储器之上使用InputStream的性能。所以,期望从输入流读取资源的现有程序,无论是在资源位于文件系统中的桌面计算机上执行的,还是在资源位于ROM中的嵌入设备上执行的,其运行都是透明的。
本发明的最佳实施例用以下过程调用(假设被请求资源是与前面例子中所用的相同的“picture.gif”)从应用程序代码加载资源:
(1)应用程序调用getClass.getResourceAsStream(“picture.gif”)。这个调用原封不动地出自现有技术,所以现有应用程序将继续工作,而不要求修改它们现有的调用语义。
(2)Class.getResourceAsStream()确定定义该类所在的包名,将该包名置于所请求资源名称的前面,然后调用RomLoadingClassLoader.getResourceAsStream(“package-name/picture.gif”)。此时,被调用的是本发明的新颖的类加载程序,而不是现有技术的类加载程序。
(3)RomLoadingClassLoader.getResourceAsStream()利用资源表寻找该对象在ROM中的位置。它构造一个OSMemory对象,该对象最好明确(1)指向该对象位置的指针,(2)在该位置存储的资源数据的长度。过程然后为这个OSMemory对象创建一个OSMemoryInputStream对象。由于这个对象符合应用程序期望的InputStream协议,所以应用程序就像是在文件系统中存储的文件中读取该数据。
现在将结合图4至9更详细地讨论本发明的最佳实施例。图4至6表示是本发明最佳实施例使用的逻辑的流程图。图7至9表示的是可用来实现本发明最佳实施例的Java程序设计语言的类和过程的样本。
按照本发明,需要建立计算机系统来从ROM加载类和资源,但这种工作无需改动应用程序代码。所需要的是对JVM确定新的类加载程序romLoadingClassLoader,供其启动时使用。所以,并不是需要改动现有应用程序代码才能运行本发明。规定作为JVM一个选项的类加载程序的技术是现有技术水平已知的,是特定于系统的;所以,本文将不详细说明这些技术。许多嵌入设备都用Java代码来支持它们的用户界面。这种设备因而将在设备通电时启动JVM。否则,JVM就将在在JVM上运行的应用程序被执行时启动。JVM的启动方式并不是本发明达组成部分。
图4表示在romLoadingClassLoader执行时发生的初始化过程。对应这个过程的程序设计语言语句,在图7中表示,表现形式是包700中类705的过程710、715。向过程RomLoadingClassLoader710发送一个消息,将指针711传送给资源表400。过程710的调用对应于图4的方框410。这个过程710调用过程initializeResTable 715-如712处所示,也传送资源表指针。过程715的调用对应于方框420。如前文所述,资源表400含有一些数量的项405、406、407、408等等,它们每个有一个键值401、一个指针402和一个长度值403。过程715根据资源表400创建散列表430。按照最佳实施例,项435、436、437、438等每个包含(1)来自对应资源表项的相同键值431和(2)OSMemory对象432。每个OSMemory对象432包含来自对应资源表项的的指针和长度值(如图8中OSMemory类805的元素806、807处所定义的那样)。过程715所创建的hashTable对象在图7中被称为“resTable”-如元素706处所指示的那样。
创建散列表的技术在本领域中是已知的,可以使用标准的Java类“Hashtable”。所以在图7中没有显示过程715的详细内容。此外,用散列表是一种可选的优化,在最佳实施例中用于提高检索资源信息的速度。创建和使用散列表要求有额外的存储空间来存储该表,所以,特定的实现可以选择优化空间而不是速度,因而不使用散列表实现。
既然romLoadingClassLoader被作为类加载程序安装并且建立了散列表430,应用程序代码的执行就开始。图5表示应用程序请求资源的逻辑流程,以及最佳实施例所用的在ROM中查找资源并向应用程序返回输入流的技术。假设应用程序含有的代码要创建一个关于按“.gif”文件存储的并具有资源名“picture.gif”的图形的输入流-如前一个例子中一样,并且程序员选择了名称“pictureStream”作为将被用于这个资源的流。过程调用于是就可以如下:
pictureStream=getClass ().getResourceAsStream(“picture.gif”)
这个程序设计语句对应于图5的方框505。这个语句导致关于该对象类的getClass().getResourceAsStream()过程被调用,传递资源名“picture.gif”-如方框510所示。该类将按照现有技术自动确定其包名,然后将自动将该名置于资源名参数前面(方框515)。如果包名例如是“package-name/…”,方框515就创建串“package-name/…/picture.gif”。该类然后将调用一个关于其类加载程序的过程,传递这个串作为参数(方框520)。按照现有技术水平,这个调用是自动发生的,调用格式为:
getClassLoader().getResourceAsStream(“package-name/…/picture.gif”)
因为romLoadingClassLoader已经被作为类加载程序安装,并被定义为ClassLoader的子类(见图7的元素707),所以它将截获这个请求。RomLoadingClassLoader类705中的过程getResourceAsStream 702然后将执行。方框525至545对应于过程720。就是否在散列表430存在这个资源的对应项进行判定(方框525)。根据本例,用于访问散列表的键值是“package-name/…/picture.gif”。如果在表中找不到该键值,方框530将向应用程序返回空值,图5的对当前资源请求的处理就结束。特定于应用程序的处理然后就会处理这个情况,方法例如是向用户生成一个例外条件或出错消息-这种处理超出了本发明的范围。另一方面,如果找到了该键值,方框535就从散列表中检出OSMemory对象432。(如果如上所述的那样尚未构建散列表,方框525就检查资源表400。如果在表中找到该键值,方框535就根据资源表400中存储的指针402和长度值创建OSMemory对象。)
然后为这个OSMemory对象构建一个OSMemoryInputStream对象。这在721处的过程调用被执行时发生,导致OSMemory类805的过程getInputStream825被调用。过程825随后调用OSMemoryInputStream类905的过程OSMemoryInputStream 910。过程910向721处的调用过程返回一个类型OSMemoryInputStream的输入流对象。这个输入流然后被返回(方框545)到应用程序,后者获得OSMemoryInputStream对象(方框550),然后开始用这个对象来访问资源。在较早时使用的程序设计语言语句的例子中,应用程序要将这个流对象赋予对象“pictureStream”。
既然应用程序已经有了用于访问该资源的、作为OSMemoryInputStream对象一个实例的输入流,它就可以开始使用该实例一如图6中所示。在方框605,应用程序对OSMemoryInputStream调用read()过程。图9中925处表示了读过程的一个例子。方框610至635代表与这个过程925中的代码对应的逻辑。如方框610所示,read()过程进行查验以保证偏移(offset)实例变量的值小于资源的总体大小。这是通过调用getSize()过程而确定的,该过程返回(821)“大小”(size)实例变量(811)的值。如果这个比较(方框615)结果是否定的,则最好将-1返回(方框620)给应用程序,表示已经到达该流的结尾。图6的处理于是就结束。否则,如果方框615的结果是肯定的,处理就在方框625继续,此处,getByte()过程815被调用。这个过程815返回在通过偏移值与指向资源起始位置的指针的值相加而计算出的位置存储的字节。(实现这个本机过程的细节不是本发明的组成部分,而对本领域的一般熟练人员来说则是显而易见的)。调用过程925随后向应用程序返回(方框635)这个字节,图6的对这个调用的处理结束。(注意,图6和9表示的是应用程序一次获得一个字节,可以用按照现有技术水平定义的过程来用一次调用获得多个字节,其中现有技术的过程的潜在代码保证反复地调用单一字节的返回)。
因此可见,本发明提供了以对应用程序透明的方式从ROM存储器加载资源的有益技术。这就免得需要在在R0M中存储资源时修改现有应用程序代码,使得应用程序能无视资源是在不是诸如文件系统和网络服务器的“常规”存储器的存储器中而继续执行。
对本领域的一般熟练人员来说,显然,本文中所使用的类和对象的名称只是示意性的,可以等价地使用其它名称。此外,可以向本文中说明的类添加过程,向已经说明过的那些过程添加额外的功能,可以使用能替代图7至9中所示内容的类结构,这些都不偏离本文中所揭示的发明思想。
尽管说明了本发明的最佳实施例,对于本领域的熟练人员来说,一旦了解了基本的发明思想,就可以在实施例中作出另外的改动和修改。因此,希望后附的权利要求将被解释为将最佳实施例和所有这种改动和修改这两方面都包含在本发明的精神和范围内。

Claims (12)

1.一种在计算机可读的媒体上体现的、由某计算环境中的计算机可读的、用于透明地从计算机的只读存储器(“ROM”)加载资源的计算机程序产品,包含:
存储在ROM中的若干资源文件;
用于在计算机上执行一个Java虚拟机(“JVM”)的计算机可读的程序代码装置;
用于在JVM上执行一个应用程序的计算机可读的程序代码装置;
用于在JVM上执行一个ROM类加载程序的计算机可读的程序代码装置-ROM类加载程序适合从ROM加载资源文件;
用于创建包含每个资源文件的对应项的表的计算机可读的程序代码装置;
用于由ROM类加载程序接收应用程序对选定一个资源文件上的输入流的请求的计算机可读的程序代码装置;
用于利用表在ROM中定位选定资源文件的计算机可读的程序代码装置;和
用于利用找到的资源返回输入流的计算机可读的程序代码装置;
2.按照权利要求1的透明地加载资源的计算机程序产品,其中,表中的每项包含:
与特定一个资源文件的标识符对应的键值;
特定资源文件在ROM中的位置;
在特定资源文件所处位置存储的数据的长度;并且,利用表的计算机可读的程序代码装置进一步包含:
用于用特定资源文件的标识符作为键值来访问表的计算机可读的程序代码装置;
用于在由用于访问的计算机可读的程序代码装置在表中找到匹配的项时返回特定资源文件的位置和长度的计算机可读的程序代码装置。
3.按照权利要求1的透明地加载资源的计算机程序产品,进一步包含用于将JVM配置得能使用ROM类加载程序的计算机可读的程序代码装置。
4.按照权利要求1的透明地加载资源的计算机程序产品,其中,请求保持应用程序中所规定的已有的请求语义不变。
5.一个在计算环境中透明地从计算环境中的计算机的只读存储器(“ROM”)加载资源的系统,包含:
存储在ROM中的若干资源文件;
用于在计算机上执行一个Java虚拟机(“JVM”)的装置;
用于在JVM上执行一个应用程序的装置;
用于在JVM上执行一个ROM类加载程序的装置-ROM类加载程序适合从ROM加载资源文件;
用于创建包含每个资源文件的对应项的表的装置;
用于由ROM类加载程序接收应用程序对选定一个资源文件上的输入流的请求的装置;
用于利用表在ROM中定位选定资源文件的装置;和
用于利用找到的资源返回输入流的装置;
6.按照权利要求5的透明地加载资源的系统,其中,表中的每项包含:
与特定一个资源文件的标识符对应的键值;
特定资源文件在ROM中的位置;
在特定资源文件所处位置存储的数据的长度;并且,利用表的装置进一步包含:
用于用特定资源文件的标识符作为键值来访问表的装置;
用于在由用于访问的装置在表中找到匹配的项时返回特定资源文件的位置和长度的装置。
7.按照权利要求5的透明地加载资源的系统,进一步包含用于将JVM配置得能使用ROM类加载程序的装置。
8.按照权利要求5的透明地加载资源的系统,其中,请求保持应用程序中所规定的已有的请求语义不变。
9.一种透明地从计算环境中的计算机的只读存储器(“ROM”)加载资源的方法,包含的步骤为:
在ROM中存储若干资源文件;
在计算机上执行一个Java虚拟机(“JVM”);
在JVM上执行一个应用程序;
在JVM上执行一个ROM类加载程序-ROM类加载程序适合从ROM加载资源文件;
创建包含每个资源文件的对应项的表;
由ROM类加载程序接收应用程序对选定一个资源文件上的输入流的请求;
利用表在ROM中定位选定资源文件;
利用找到的资源返回输入流;
10.按照权利要求9的透明地加载资源的方法,其中,表中的每项包含:
与特定一个资源文件的标识符对应的键值;
特定资源文件在ROM中的位置;
在特定资源文件所处位置存储的数据的长度;并且,利用表的步骤进一步包含的步骤为:
用特定资源文件的标识符作为键值来访问表;
在由访问步骤在表中找到匹配的项时返回特定资源文件的位置和长度。
11.按照权利要求9的透明地加载资源的方法,进一步包含将JVM配置得能使用ROM类加载程序的步骤。
12.按照权利要求9的透明地加载资源的方法,其中,请求保持应用程序中所规定的已有的请求语义不变。
CN00120239.1A 1999-07-15 2000-07-14 为应用程序透明地加载只读存储器中的资源的系统和方法 Expired - Lifetime CN1113290C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/353880 1999-07-15
US09/353,880 US6584612B1 (en) 1999-07-15 1999-07-15 Transparent loading of resources from read-only memory for an application program

Publications (2)

Publication Number Publication Date
CN1281180A true CN1281180A (zh) 2001-01-24
CN1113290C CN1113290C (zh) 2003-07-02

Family

ID=23390992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN00120239.1A Expired - Lifetime CN1113290C (zh) 1999-07-15 2000-07-14 为应用程序透明地加载只读存储器中的资源的系统和方法

Country Status (4)

Country Link
US (1) US6584612B1 (zh)
CN (1) CN1113290C (zh)
CA (1) CA2300240C (zh)
TW (1) TW459202B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1300681C (zh) * 2003-02-07 2007-02-14 三星电子株式会社 用于缩短java程序中的类加载处理的系统和方法
CN100410882C (zh) * 2005-02-11 2008-08-13 戴尔产品有限公司 用于虚拟机中的集中式软件管理的系统和方法
CN103473089A (zh) * 2013-09-02 2013-12-25 深圳市华傲数据技术有限公司 一种分布式java程序运行方法、装置和系统
CN106845249A (zh) * 2002-03-29 2017-06-13 英特尔公司 用于执行安全环境初始化指令的系统和方法
CN109426506A (zh) * 2017-08-22 2019-03-05 佛山市顺德区顺达电脑厂有限公司 选用只读存储器的加载方法

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US7080382B2 (en) * 2000-02-25 2006-07-18 Oracle International Corporation Accessing shorter-duration instances of activatable objects based on object references stored in longer-duration memory
US6978456B1 (en) 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US6901591B1 (en) 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6957428B2 (en) * 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7240101B2 (en) * 2001-04-02 2007-07-03 International Business Machines Corporation Method and apparatus for efficiently reflecting complex systems of objects in XML documents
US7260820B1 (en) * 2001-04-26 2007-08-21 Vm Ware, Inc. Undefeatable transformation for virtual machine I/O operations
US6799185B2 (en) * 2001-05-09 2004-09-28 Sun Microsystems, Inc. Frameworks for accessing Java class files
US7117489B2 (en) * 2001-06-20 2006-10-03 Sun Microsystems, Inc. Optional attribute generator for customized Java programming environments
US6964033B2 (en) * 2001-06-20 2005-11-08 Sun Microsystems, Inc. Object band customization of Java runtime environments
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US6944846B2 (en) * 2001-12-14 2005-09-13 Hewlett-Packard Development Company, L.P. Algorithm for localization of a JAVA application using reflection API and a custom class loader
US20030177484A1 (en) * 2002-03-15 2003-09-18 Bosschaert Allaert J. D. Firewall class loader
US7158995B2 (en) 2002-05-08 2007-01-02 Oracle International Corporation Method for managing pointers to external objects in a run-time environment
US7246347B1 (en) * 2002-06-26 2007-07-17 Sun Microsystems, Inc Method and apparatus for loading class files into non-volatile memory
US7293267B1 (en) * 2003-12-22 2007-11-06 Sun Microsystems Inc System and method for performing speculative initialization of application models for a cloned runtime system process
US7730482B2 (en) * 2004-06-08 2010-06-01 Covia Labs, Inc. Method and system for customized programmatic dynamic creation of interoperability content
US7398523B2 (en) * 2004-08-19 2008-07-08 International Business Machines Corporation Adaptive class loading
US7849459B2 (en) * 2004-11-04 2010-12-07 International Business Machines Corporation Deploying java applications in resource constrained environments
US20060123397A1 (en) * 2004-12-08 2006-06-08 Mcguire James B Apparatus and method for optimization of virtual machine operation
US7506310B2 (en) * 2005-02-22 2009-03-17 Microsoft Corporation Method and system for caching managed code for efficient execution on resource-constrained devices
US7577761B2 (en) * 2005-08-31 2009-08-18 International Business Machines Corporation Out of user space I/O directly between a host system and a physical adapter using file based linear block address translation
JP4881023B2 (ja) * 2006-02-01 2012-02-22 キヤノン株式会社 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム
US8225311B1 (en) * 2006-03-30 2012-07-17 Emc Corporation Deploying and distributing content management code
US7814498B2 (en) * 2006-05-01 2010-10-12 Microsoft Corporation Loading application resources
US8127271B2 (en) * 2007-03-02 2012-02-28 International Business Machines Corporation Method and system for accessing a resource implemented in a computer network
US8127284B2 (en) * 2007-10-16 2012-02-28 Microsoft Corporation On-demand loading of types of software code of a program executing on a computing device
EP2513787A1 (en) * 2009-12-18 2012-10-24 Syddansk Universitet Method, computer program product, and system for non-blocking dynamic update of statically typed class-based object-oriented software
US8448023B2 (en) 2010-04-30 2013-05-21 Honeywell International Inc. Approach for data integrity in an embedded device environment
CN103176781B (zh) * 2011-12-22 2016-03-16 北京东方广视科技股份有限公司 一种实现软件产品客户化的方法及设备
GB2546239A (en) * 2015-11-23 2017-07-19 Acadiant Ltd A Method and system for providing and executing web applications
CN111443989B (zh) * 2020-03-23 2023-06-23 武汉轻工大学 基于和声搜索的虚拟机放置方法、装置、设备及存储介质
CN111625290B (zh) * 2020-05-06 2023-03-24 小船出海教育科技(北京)有限公司 一种Android平台下布局文件预加载方法、装置及电子设备
CN114356439B (zh) * 2021-12-21 2023-06-13 四川启睿克科技有限公司 离线免安装启动web应用的方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6167253A (en) * 1995-01-12 2000-12-26 Bell Atlantic Network Services, Inc. Mobile data/message/electronic mail download system utilizing network-centric protocol such as Java
US5761499A (en) * 1995-12-21 1998-06-02 Novell, Inc. Method for managing globally distributed software components
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6305009B1 (en) * 1997-12-05 2001-10-16 Robert M. Goor Compiler design using object technology with cross platform capability
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
CA2255042C (en) * 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106845249A (zh) * 2002-03-29 2017-06-13 英特尔公司 用于执行安全环境初始化指令的系统和方法
CN1300681C (zh) * 2003-02-07 2007-02-14 三星电子株式会社 用于缩短java程序中的类加载处理的系统和方法
CN100410882C (zh) * 2005-02-11 2008-08-13 戴尔产品有限公司 用于虚拟机中的集中式软件管理的系统和方法
CN103473089A (zh) * 2013-09-02 2013-12-25 深圳市华傲数据技术有限公司 一种分布式java程序运行方法、装置和系统
CN109426506A (zh) * 2017-08-22 2019-03-05 佛山市顺德区顺达电脑厂有限公司 选用只读存储器的加载方法
CN109426506B (zh) * 2017-08-22 2022-01-28 佛山市顺德区顺达电脑厂有限公司 选用只读存储器的加载方法

Also Published As

Publication number Publication date
CN1113290C (zh) 2003-07-02
CA2300240C (en) 2004-10-12
TW459202B (en) 2001-10-11
CA2300240A1 (en) 2001-01-15
US6584612B1 (en) 2003-06-24

Similar Documents

Publication Publication Date Title
CN1113290C (zh) 为应用程序透明地加载只读存储器中的资源的系统和方法
US6272674B1 (en) Method and apparatus for loading a Java application program
US6560618B1 (en) On-demand generation, packaging, and delivery of archive files
CN1153138C (zh) 提高Java环境的可管理性和可用性的系统和方法
US6542908B1 (en) Technique for automatically and transparently transforming software components into software components capable of execution in a client/server computing environment
CN100388265C (zh) 管理数据处理系统中的应用文件的方法和装置
EP0861467B1 (en) An object oriented programming based global registry system and method
US6718364B2 (en) Method and apparatus for expedited file downloads in an applet environment
CN100421375C (zh) 数据共享系统及方法
EP0913769B1 (en) Method and apparatus for pre-processing and packaging class files
US6941552B1 (en) Method and apparatus to retain applet security privileges outside of the Java virtual machine
US7849459B2 (en) Deploying java applications in resource constrained environments
US7107592B2 (en) Method, system, and program for making objects available for access to a client over a network
US7478408B2 (en) System and method for accessing objects in a platform dependent environment from a platform independent environment
US7174361B1 (en) Scripting task-level user-interfaces
US7490332B2 (en) System and method for accessing ActiveX objects in a platform dependent environment from objects in a platform independent environment
US20030084120A1 (en) Software framework for web-based applications
US20080178151A1 (en) Method and Apparatus to Implement Adaptive Scripting Tool
WO2003083688A1 (en) Mobile download system
US6442558B1 (en) Mechanisms for division, storage, reconstruction, generation, and delivery of java class files
CN1749961A (zh) 使用网络模型的单机软件
US7181732B2 (en) Method and apparatus for facilitating lazy type tagging for compiled activations
US6339829B1 (en) Method and apparatus to store extended security information in a data structure which shadows a java class object
CN1363887A (zh) 用于提供与软件包相关的信息的系统及其支持测试的系统
JP2005301985A (ja) 情報処理装置、オブジェクト生成方法、オブジェクト変換方法、オブジェクト生成プログラム、オブジェクト変換プログラム及び記録媒体

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20030702

CX01 Expiry of patent term