CN1113290C - 为应用程序透明地加载只读存储器中的资源的系统和方法 - Google Patents
为应用程序透明地加载只读存储器中的资源的系统和方法Info
- Publication number
- CN1113290C CN1113290C CN00120239.1A CN00120239A CN1113290C CN 1113290 C CN1113290 C CN 1113290C CN 00120239 A CN00120239 A CN 00120239A CN 1113290 C CN1113290 C CN 1113290C
- Authority
- CN
- China
- Prior art keywords
- resource
- rom
- read
- memory
- file
- 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 - Lifetime
Links
- 238000000034 method Methods 0.000 claims abstract description 94
- 238000011068 loading method Methods 0.000 claims abstract description 44
- 230000015654 memory Effects 0.000 claims abstract description 27
- 230000008878 coupling Effects 0.000 claims description 3
- 238000010168 coupling process Methods 0.000 claims description 3
- 238000005859 coupling reaction Methods 0.000 claims description 3
- 238000012423 maintenance Methods 0.000 claims 2
- 238000004590 computer program Methods 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 37
- 238000005516 engineering process Methods 0.000 description 25
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 239000004615 ingredient Substances 0.000 description 4
- 230000008521 reorganization Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 239000000047 product Substances 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000013065 commercial product Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
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 VisualAgefor 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随后向应用程序返回(方框6 35)这个字节,图6的对这个调用的处理结束。(注意,图6和9表示的是应用程序一次获得一个字节,可以用按照现有技术水平定义的过程来用一次调用获得多个字节,其中现有技术的过程的潜在代码保证反复地调用单一字节的返回)。
因此可见,本发明提供了以对应用程序透明的方式从ROM存储器加载资源的有益技术。这就免得需要在在ROM中存储资源时修改现有应用程序代码,使得应用程序能无视资源是在不是诸如文件系统和网络服务器的“常规”存储器的存储器中而继续执行。
对本领域的一般熟练人员来说,显然,本文中所使用的类和对象的名称只是示意性的,可以等价地使用其它名称。此外,可以向本文中说明的类添加过程,向已经说明过的那些过程添加额外的功能,可以使用能替代图7至9中所示内容的类结构,这些都不偏离本文中所揭示的发明思想。
尽管说明了本发明的最佳实施例,对于本领域的熟练人员来说,一旦了解了基本的发明思想,就可以在实施例中作出另外的改动和修改。因此,希望后附的权利要求将被解释为将最佳实施例和所有这种改动和修改这两方面都包含在本发明的精神和范围内。
Claims (8)
1.一个在计算环境中透明地从计算环境中的计算机的只读存储器加载资源的系统,包含:
存储在只读存储器中的若干资源文件;
用于在计算机上执行一个Java虚拟机的装置;
用于在JAVA虚拟机上执行一个应用程序的装置;
用于在JAVA虚拟机上执行一个只读存储器类加载程序的装置,所述执行只读存储器类加载程序的装置适合从只读存储器加载资源文件;
用于创建包含每个资源文件的对应项的表的装置;
用于由只读存储器类加载程序接收应用程序对选定一个资源文件上的输入流的请求的装置;
用于利用表在只读存储器中定位选定资源文件的装置;和
用于利用找到的资源返回输入流的装置;
2.按照权利要求1的透明地加载资源的系统,其中,表中的每项包含:
与特定一个资源文件的标识符对应的键值;
特定资源文件在只读存储器中的位置;
在特定资源文件所处位置存储的数据的长度;并且,利用表的装置进一步包含:
用于用特定资源文件的标识符作为键值来访问表的装置;
用于在由用于访问的装置在表中找到匹配的项时返回特定资源文件的位置和长度的装置。
3.按照权利要求1的透明地加载资源的系统,进一步包含用于将JAVA虚拟机配置得能使用只读存储器类加载程序的装置。
4.按照权利要求1的透明地加载资源的系统,其中,请求保持应用程序中所规定的已有的请求语义不变。
5.一种透明地从计算环境中的计算机的只读存储器加载资源的方法,包含的步骤为:
在只读存储器中存储若干资源文件;
在计算机上执行一个Java虚拟机;
在JAVA虚拟机上执行一个应用程序;
在JAVA虚拟机上执行一个只读存储器类加载程序,所述执行只读存储器类加载程序的装置适合从只读存储器加载资源文件;
创建包含每个资源文件的对应项的表;
由只读存储器类加载程序接收应用程序对选定一个资源文件上的输入流的请求;
利用表在只读存储器中定位选定资源文件;
利用找到的资源返回输入流;
6.按照权利要求5的透明地加载资源的方法,其中,表中的每项包含:
与特定一个资源文件的标识符对应的键值;
特定资源文件在只读存储器中的位置;
在特定资源文件所处位置存储的数据的长度;并且,利用表的步骤进一步包含的步骤为:
用特定资源文件的标识符作为键值来访问表;
在由访问步骤在表中找到匹配的项时返回特定资源文件的位置和长度。
7.按照权利要求5的透明地加载资源的方法,进一步包含将JAVA虚拟机配置得能使用只读存储器类加载程序的步骤。
8.按照权利要求5的透明地加载资源的方法,其中,请求保持应用程序中所规定的已有的请求语义不变。
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 CN1281180A (zh) | 2001-01-24 |
CN1113290C true 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 (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
Families Citing this family (46)
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 |
US6988261B2 (en) | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
US7039904B2 (en) | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
US7058934B2 (en) * | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
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 |
US7069442B2 (en) * | 2002-03-29 | 2006-06-27 | Intel Corporation | System and method for execution of a secured environment initialization instruction |
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 |
KR100493893B1 (ko) * | 2003-02-07 | 2005-06-10 | 삼성전자주식회사 | 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법 |
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 |
CA2569714A1 (en) * | 2004-06-08 | 2005-12-22 | Dartdevices Corporation | Architecture, apparatus and method for device team recruitment and content renditioning for universal device interoperability platform |
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 |
US20060184937A1 (en) * | 2005-02-11 | 2006-08-17 | Timothy Abels | System and method for centralized software management in virtual machines |
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 | キヤノン株式会社 | 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム |
US8225310B1 (en) | 2006-03-30 | 2012-07-17 | Emc Corporation | Automatic detection and redistribution of 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 |
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 | 北京东方广视科技股份有限公司 | 一种实现软件产品客户化的方法及设备 |
CN103473089A (zh) * | 2013-09-02 | 2013-12-25 | 深圳市华傲数据技术有限公司 | 一种分布式java程序运行方法、装置和系统 |
GB2546239A (en) * | 2015-11-23 | 2017-07-19 | Acadiant Ltd | A Method and system for providing and executing web applications |
CN109426506B (zh) * | 2017-08-22 | 2022-01-28 | 佛山市顺德区顺达电脑厂有限公司 | 选用只读存储器的加载方法 |
CN111443989B (zh) * | 2020-03-23 | 2023-06-23 | 武汉轻工大学 | 基于和声搜索的虚拟机放置方法、装置、设备及存储介质 |
CN111625290B (zh) * | 2020-05-06 | 2023-03-24 | 小船出海教育科技(北京)有限公司 | 一种Android平台下布局文件预加载方法、装置及电子设备 |
US11729253B2 (en) * | 2020-10-01 | 2023-08-15 | Samsung Electronics Co., Ltd. | Method and device for storing and distributing file content in MC network |
CN114356439B (zh) * | 2021-12-21 | 2023-06-13 | 四川启睿克科技有限公司 | 离线免安装启动web应用的方法 |
Family Cites Families (8)
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 |
-
1999
- 1999-07-15 US US09/353,880 patent/US6584612B1/en not_active Expired - Lifetime
-
2000
- 2000-03-08 CA CA002300240A patent/CA2300240C/en not_active Expired - Lifetime
- 2000-04-17 TW TW089107151A patent/TW459202B/zh not_active IP Right Cessation
- 2000-07-14 CN CN00120239.1A patent/CN1113290C/zh not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
Also Published As
Publication number | Publication date |
---|---|
CA2300240A1 (en) | 2001-01-15 |
CN1281180A (zh) | 2001-01-24 |
CA2300240C (en) | 2004-10-12 |
US6584612B1 (en) | 2003-06-24 |
TW459202B (en) | 2001-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1113290C (zh) | 为应用程序透明地加载只读存储器中的资源的系统和方法 | |
US6560618B1 (en) | On-demand generation, packaging, and delivery of archive files | |
CN1153138C (zh) | 提高Java环境的可管理性和可用性的系统和方法 | |
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 | |
US6542908B1 (en) | Technique for automatically and transparently transforming software components into software components capable of execution in a client/server computing environment | |
CN100388265C (zh) | 管理数据处理系统中的应用文件的方法和装置 | |
US7849459B2 (en) | Deploying java applications in resource constrained environments | |
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 | |
EP1011043B1 (en) | Method and apparatus for loading a java application program | |
US7107592B2 (en) | Method, system, and program for making objects available for access to a client over a network | |
US8359570B2 (en) | Adaptive scripting tool | |
US9069582B2 (en) | Classpath optimization in a Java runtime environment | |
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 | |
US20040103114A1 (en) | System and method for accessing objects in a platform dependent environment from a platform independent environment | |
CA2298003A1 (en) | Scripting task-level user interfaces | |
US6442558B1 (en) | Mechanisms for division, storage, reconstruction, generation, and delivery of java class files | |
KR20020012594A (ko) | 풋프린트 장치를 위한 정시공급 서비스 | |
KR20060050608A (ko) | 데이터 공유 시스템, 방법 및 소프트웨어 툴 | |
WO2003083688A1 (en) | Mobile download system | |
JPH1040087A (ja) | ソフトウェア工学で使われるデータモデルの取り扱い方法 | |
US6339829B1 (en) | Method and apparatus to store extended security information in a data structure which shadows a java class object | |
CN1853167A (zh) | 具有可扩展预配置的动态内容处理的系统和方法 |
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 |