CN105589715A - 信息处理设备、库加载方法和计算机可读介质 - Google Patents
信息处理设备、库加载方法和计算机可读介质 Download PDFInfo
- Publication number
- CN105589715A CN105589715A CN201510761977.XA CN201510761977A CN105589715A CN 105589715 A CN105589715 A CN 105589715A CN 201510761977 A CN201510761977 A CN 201510761977A CN 105589715 A CN105589715 A CN 105589715A
- Authority
- CN
- China
- Prior art keywords
- information
- load request
- library file
- identifier
- application
- 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
Links
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
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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
- G06F9/44536—Selecting among different versions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种信息处理设备、库加载方法和计算机可读介质,其中,多个应用能够适当使用被请求加载的具有相同名称且包括不同内容的多个库。信息处理设备包括:标识符生成单元,其生成用于识别库文件的内容的标识符信息,生成表示标识符信息之间的关系的加载请求关联信息和请求对象信息;加载请求解释单元,其获得关于包括加载请求的对象的库文件的标识符信息;以及加载单元,当加载单元确定对应于加载请求的对象的部分不被加载时,从由所获得的标识符信息指示的库文件中至少加载对应于加载请求的对象的部分。
Description
本申请基于并且要求2014年11月10日提交的日本专利申请No.2014-228181的优先权的权益,其公开内容在此通过引用合并于此。
技术领域
本发明涉及用于能够执行应用程序的信息处理设备(计算机)的库加载技术。
背景技术
日本专利申请特开公开No.2014-228181公开了一种方法,该方法用于以使得在信息处理设备执行功能时加载包括程序的库的方式将库加载到能够执行应用程序的信息处理设备,在该程序下,信息处理设备执行功能。根据Java(注册商标),例如,称为类加载器的模块通常响应于从应用发出的类加载请求来从库加载程序。
还已知,存在具有相同名称但包括不同内容的各种类型的库版本作为功能增强的结果或在源上不同,或者出于其他原因。例如,存在这样的情况,提供用于应用的执行环境的应用服务器所使用的库版本不同于应用所使用的且名称与应用服务器所使用的库的名称相同的库版本。在此情况下,存在这样的可能性:类加载器加载包括具有相同类名称但不同版本的程序的库以响应于对于特定类名称的加载请求。当类加载器加载用于应用服务器的库(即,不同版本的库)以响应于来自应用的加载请求时,应用不在正常状况下操作。因此,类加载器需要从与应用相关联的具有相同名称的多个库中选择适当库,并且加载所选择的库。
用于解决该问题的相关技术在日本专利申请公开No.2010-113474(下文中称为文献1)中公开。在文献1中,信息处理设备使用能够使用不同库的多个应用程序,每个都包括具有在一个JVM(Java虚拟机)内的相同名称的类。根据文献1中描述的信息处理设备,用户等事先设置关于库和程序的属性作为表信息。然后,设定意味着基于表信息区分程序的分发者,并且设置用于与区分的分发者相关联的库文件的路径。信息处理设备在这样执行程序期间能够切换库文件的路径。
日本专利申请公开No.2007-206965(下文称为文献2)公开了一种信息处理设备,其切换与要被执行的应用程序的分发者相关联的库文件的路径的设定。根据文献2中描述的信息处理设备,用户事先在清单文件等中描述关于库的版本的信息。在加载请求的类时,类加载器基于版本信息选择由应用提供的类库或具有相同名称的系统库。
日本专利申请公开No.2013-196453(下文称为文献3)公开了一种信息处理设备,其执行面向对象编程语言中描述的程序。信息处理设备能够加载所需版本的类。根据文献3中所述的信息处理设备,外部定义存储单元完全存储用于每个类加载器的类对应加载对象和加载源的合格类名称(FQCN)。当生成用于实现类加载器的类时,授权模型介入装置插入用于授权模型的介入的字节代码,用于基于外部定义存储单元中定义的加载源来将类加载到生成的类中。信息处理设备能够这样与要被执行的程序相关联地切换类库的加载源。
根据在文献1到3中公开的信息处理设备,但是,包括相同内容的库在执行多个应用时被加载用于每个应用。这种情形产生这些信息处理设备的存储器使用数量增加的问题。例如,在由各个信息处理设备执行多个相同应用的情况下,类加载器在其中加载已经用于要在随后执行的应用而加载的相同库。
发明内容
发明的示例目标在于提供一种信息处理设备等,其中,多个应用能够适当使用多个被请求记载的具有相同名称且包括不同内容的库,而同时减少存储器使用的数量上的增加,作为包括相同内容的库的多重加载的结果。
为了实现上面的目标,本发明的一方面的一种信息处理设备包括,
标识符生成单元,其为每个库文件生成用于识别库文件的内容的标识符信息,生成表示标识符信息之间的关系的加载请求关联信息和表示包括在库文件中且可能成为想要的加载请求的对象的部分的请求对象信息,并且输出加载请求关联信息到存储设备;
加载请求解释单元,其接收来自当前执行的应用的加载请求,基于加载请求和加载请求关联信息获得关于包括加载请求的对象的库文件的标识符信息,并且输出表示加载请求的对象的请求对象信息和所获得的标识符信息;以及
加载单元,其管理表示库文件中包括的各个部分的加载状态的加载状态信息,当加载单元基于加载状态信息确定对应于由请求对象信息和由所获得的标识符信息所指示的加载请求的对象的部分不被加载时,从由所获得的标识符信息指示的库文件中至少加载对应于加载请求的对象的部分,并且对加载请求进行响应。
进而,为了达成上面的目标,发明的库加载方法包括,
为每个库文件生成用于识别库文件的内容的标识符信息;
生成表示标识符信息之间的关系的加载请求关联信息和表示包括在库文件中且可能成为想要的加载请求的对象的部分的请求对象信息;
输出所述加载请求关联信息到存储设备;
当接收到来自当前执行的应用的加载请求时,
基于加载请求和加载请求关联信息而获得关于包括加载请求的对象的库文件的标识符信息;
当基于表示库文件中包括的各个部分的加载状态的加载状态信息而确定对应于由表示加载请求对象的请求对象信息和由所获得的标识符信息所指示的加载请求的对象的部分不被加载时,从由所获得的标识符信息所指示的库文件中至少加载对应于加载请求的对象的部分,并且在加载状态信息中登记对应于加载请求的对象的部分已被加载;以及
进行对加载请求的响应。
进而,还通过计算机程序以及存储该计算机程序的计算机可读存储介质来达成对象,所述计算机程序使得计算机实现包括如上所述配置的信息处理设备和与该设备相关联的方法。
附图说明
通过下面的详细描述,并结合附图,本发明的示例特征和优点将变得显然,在附图中:
图1是图示说明根据本发明的第一示例实施例的信息处理设备1的配置的框图;
图2是图示说明根据本发明的第二示例实施例的应用服务器的配置的框图;
图3是图示说明根据第二示例实施例的类加载单元110的配置、类加载单元110的各个配置和在存储设备105中存储的信息之间的关系的图;
图4是图示说明根据第二示例实施例的由应用布置单元101和独特ID生成单元102执行的应用布置操作的流程图;
图5是图示说明根据第二示例实施例的响应于类请求而由应用120和130以及类加载单元110所执行的加载操作的流程图;
图6是图示说明根据第二示例实施例的用于取消由应用布置单元101执行的应用布置的操作的流程图;
图7是图示说明根据第二示例实施例的封装名称关联表127的示例的图;
图8是图示说明根据第二示例实施例的封装名称关联表137的示例的图;
图9是图示说明根据第二示例实施例的独特ID表106的示例的图;以及
图10是图示说明根据本发明的各个示例实施例及其修改示例的可适用于信息处理设备或应用服务器的计算机(信息处理设备)的配置的示例的图。
具体实施方式
接下来,将结合附图对于本发明的示例实施例给出详细解释。
<第一示例实施例>
图1是图示说明根据本发明的第一示例实施例的信息处理设备1的配置的框图。参看图1,根据这个示例实施例的信息处理设备1包括标识符生成单元2、加载单元3、加载请求解释单元4和存储设备5。
信息处理设备1可以包括电路,例如普通信息处理设备(计算机),其在通过使用CPU(中央处理单元:未示出)而执行的计算机程序(软件程序)的控制下操作。可替换地,信息处理设备1的电路中的各个单元可以包括专用硬件设备,或逻辑电路。稍后将结合图10来描述由计算机实现的信息处理设备1的硬件配置示例。
存储设备5由例如半导体存储器设备或盘设备来实现。存储设备5能够存储家在请求关联信息7以及加载状态信息8。
标识符生成单元2生成用于每个库文件10的标识符信息作为用于识别各个库文件10的内容的信息。更具体地,标识符信息是这样的信息,基于它可以识别各个库文件10的内容上的差别。标识符生成单元2生成用于每个库文件10的不同标识符信息,例如具有相同名称但不同版本(即包括不同内容)。可以采用公知且普通的技术来允许标识符生成单元2识别每个库文件10在内容上的不同,诸如哈希的生成和文件的比较。
标识符生成单元2进一步生成加载请求关联信息7,示出生成的标识符信息与表示在对应库文件10中包括并且可以成为加载请求的对象的部分的请求对象信息之间的关系。
“可以成为加载请求的对象的部分”在此上下文中指的是在执行应用期间对应于在从应用发布的加载请求11中指定的加载的对象的库文件的部分(程序)。请求对象信息由类名称来表达,例如根据应用语言。库文件10可以包括对应于加载请求对象的一个或多个程序。标识符生成单元2在存储设备5中存储(输出)生成的加载请求关联信息7。
加载请求解释单元4从当前执行的应用接收加载请求11。加载请求解释单元4随后基于表示加载请求11的对象的请求对象信息和加载请求关联信息7而获得关于包括加载请求11的对象的库文件的标识符信息。更具体地,加载请求解释单元4解释已经发布加载请求11的库文件10,并且将解释的库文件10表示为标识符信息。加载请求解释单元4输出请求对象信息和获得的标识符信息到加载单元3。
加载单元3管理表示包括在用于每个标识符信息的库文件10中的各个部分的加载状态的加载状态信息8。加载单元3能够基于加载状态信息8确定由表示加载请求11的对象的请求对象信息以及由加载请求解释单元4所获得的标识符信息所指示的库文件10的部分(下文中这样的部分被称为“加载请求的部分”)是否已经被加载。
当基于表示加载请求11的对象的请求对象信息、由加载请求解释单元4获得的标识符信息以及加载状态信息8确定加载请求的部分没有被加载时,加载单元3执行下面的操作。
最初,加载单元3从由加载请求解释单元4获得的标识符信息所指示的库文件10加载至少由请求对象信息指示的部分。加载单元3在记载状态信息8中登记至少由请求对象信息所指示的部分已经从库文件加载。加载单元3在存储设备5中存储加载状态信息。然后,加载单元3发送(进行)响应到加载请求11。
另一方面,当确定加载请求的部分已经被加载时,加载单元3发送(进行)响应到加载请求11而不进行任何加载。换句话说,加载单元3基于标识符信息防止执行包括相同内容的库文件10的多重加载。
根据这里所述的该示例实施例中所提供的优点,多个应用能够适当使用被请求加载的具有相同名称且包括不同内容的多个库。而且,根据在该示例实施例中所提供的优点,作为包括相同内容的库的多重加载的结果,可达成减少存储器使用量的增加。换句话说,根据该示例实施例,提供信息处理设备等,其中,多个应用能够适当使用被请求加载的多个库,其具有相同名称且包括不同内容,作为包括相同内容的库的多重加载的结果,减少了存储器使用量的增加。这些优点在库文件的对象对于加载请求分别具有不同对象名称或不同库文件名但包括相同内容时类似地提供。因此,根据这个示例实施例,提供信息处理设备,能够这样控制来避免包括相同内容的库的多重加载以响应于任何类型的要发布的加载请求。
这些优点是从这一点产生的:标识符生成单元2这样生成标识符信息以允许识别被请求加载的具有相同名称的库文件10的内容的不同。优点还来自于这一点:加载请求解释单元4不由库文件的名称而由分配给库文件的每个内容的标识符信息来解释包括加载请求11的对象的库文件。在此情况下,加载单元3能够通过使用标识符信息而进一步防止包括相同内容的库文件10的多重加载。
此外,根据该示例实施例的优点,消除了准备关于库文件10或应用的在先信息的必要性。根据在“背景技术”部分中描述的PTL1到3,事先准备的信息,诸如属性、版本信息和关于库和程序的加载源,被给到信息处理设备。这个工作麻烦且耗时。但是,根据该示例实施例,不需要用于准备这样的在先信息的工作。
该工作的消除是由通过标识符生成单元2自动生成的加载请求关联信息7来实现的,用来表示生成的标识符信息和表示库文件10中包括的加载请求的对象的请求对象信息之间的关系。
用于示例实施例的下面的修改可以例如如下进行。
例如,在生成加载请求关联信息7时,标识符生成单元2可以使用关于包括在库文件10中且可以成为加载请求的对象的部分的信息,作为事先准备的信息。更具体地,表示在库文件10中包括的频繁使用的功能的名称的列表信息是例如事先准备的。标识符生成单元2可以与库文件10一起获得列表信息。标识符生成单元2可以基于列表信息而非检查库文件10来生成加载请求关联信息7。这个方法允许标识符生成单元2减少用于从库文件10获得功能名称的处理时间。通过这个方法,例如,前述的在这个修改示例中准备的信息可以只为选择作为能够达成处理时间的显著减少的文件的库文件10的部分而生成。
根据在这里所述的这个修改示例中提供的优点,可达成在从应用接收加载请求之前所需的处理时间的减少。
这个优点是从这一点产生的:标识符生成单元2在生成加载请求关联信息7时减少用于检查关于库文件10的可能成为加载请求的对象的部分的处理。
<第二示例实施例>
下文描述基于第一示例实施例的第二示例实施例。下面,主要描述第二示例实施例的特征。第二示例实施例中的配置包括与第一示例实施例中相应配置相同或相似的配置,已被给出与第一示例实施例中给出的参考标号相同的参考标号,并且这里不再重复对相应配置的详细解释。
这里被描述为该示例实施例的示例的是已应用本发明的Java应用服务器(下文简称为“应用服务器”)。该示例实施例不同于第一示例实施例之处在于应用的布置,且额外达成应用的布置的取消。在此上下文中,应用的布置指的是例如通过将资源分配给应用且加载到存储器而在信息处理设备中的应用的可执行状态的实现。在此上下文中,应用的布置的取消是通过在与布置相反的可执行状态中释放诸如分配给应用的存储器的资源而取消应用的可执行状态。
下文中,结合图2来描述根据这个示例实施例的配置。图2是图示说明根据本发明的第二示例实施例的应用服务器的配置的框图。
参看图2,根据这个示例实施例的应用服务器包括信息处理设备100、库管理目录140和存储设备150。库管理目录140和存储设备150可以是与信息处理设备100相连接的诸如半导体存储设备的存储设备。库管理目录140和存储设备150可以是外部设备,能够经由诸如互联网和局域网(LAN)的通信网络进行通信。库管理目录140和存储设备150可以包括在例如相同存储设备中。
信息处理设备100可以包括电路,例如在通过使用CPU(未示出)执行的计算机程序(软件程序)的控制下操作的普通信息处理设备(计算机)。可替换地,信息处理设备100的电路中的各个单元可以包括专用硬件设备或逻辑电路。稍后将结合图10来描述由计算机实现的信息处理设备100的硬件配置示例。
根据这个示例实施例,存储设备150能够存储对应于作为对象的应用的应用120和130,用于由应用服务器布置、执行和布置取消。应用120(130)包括应用程序121(131)以及一个或多个库文件122(132)。
应用程序121(131)是可执行程序。应用程序121(131)通过如第一示例实施例中所述在执行应用程序121(131)期间发布加载请求11来参考(使用)库文件122(132)。每个库文件122(132)是库文件,包括被应用程序121(131)参考的一组类。每个库文件122(132)基于根据第一示例实施例的库文件10。
信息处理设备100包括应用布置单元101、独特ID生成单元102、类加载单元110和存储设备105。存储设备105由例如半导体存储器设备或盘设备来实现。存储设备105能够存储独特ID表(库标识符管理信息)106、封装关联表127和137以及类管理区域108。参看图3,类加载单元110包括高阶类加载器组111、公共类加载器113和应用类加载器124和134。图3是图示说明根据这个示例实施例的类加载单元110的配置以及类加载单元110的各个配置与在存储设备105中存储的信息之间的关系的图。
除了基于根据第一示例实施例的信息处理设备110中包括的元件的各个元件以外,信息处理设备100包括应用布置单元101和独特ID表106。在这个示例实施例中,第一示例实施例中的标识符信息被实现为基于例如关于库文件122(132)的哈希信息生成的“独特ID”。在下面的解释中,“标识符信息”被替换为“独特ID”。例如,在下面的描述中,基于根据第一示例实施例的标识符生成单元2的标识符生成单元102被称为独特ID生成单元102。此外,根据这个示例实施例,第一示例实施例中的加载请求关联信息7存储在封装关联表127或137中用于每个应用。应用布置单元101能够布置存储在存储设备150中的应用120和130。当布置应用120(130)时,应用布置单元101生成应用类加载器124(134)用于每个应用。应用类加载器124(134)将稍后在类加载单元110的描述中被详细描述。
应用布置单元101通过将库文件122(132)传送到独特ID生成单元102来指示独特ID生成单元102生成独特ID和封装关联表127和137。
应用布置单元101进一步在存储设备105中存储库标识符管理信息106,包括由独特ID生成单元102生成的独特ID(标识符信息)和表示参考与独特ID相关联的库文件122(132)的应用的数目的参考数目信息。在下面所述的示例实施例中,“应用的数目”被视为应用的“量”,从应用的数目对应于“参考数目”的索引(参数)的角度来看,也被视为“数值”。根据这个示例实施例,库标识符管理信息106被实现为独特ID表106,作为具体示例。图9是图示说明根据第二示例实施例的独特ID表106的示例的图。参看图9,独特ID被视为独特ID表106中的密钥,且表示参考与独特ID相关联的库文件122(132)的应用的数目的参考数目信息被存储为对应于密钥的值。
应用布置单元101进一步在库管理目录140中存储库文件122(132)的副本。
应用布置单元101能够取消已布置应用120和130的布置。更具体地,应用布置单元101基于库标识符管理信息移除关于由作为布置取消的结果而变为缺失的应用120(130)参考的库文件122(132)的资源。在此情况下,应用布置单元101进一步移除关于取消布置的应用120(130)的资源。要被移除的资源包括存储信息等。在这个上下文中,要被移除的具体资源包括应用类加载器124(134)、封装名称关联表127(137)和由库管理目录140复制的库文件122(132)等等。
独特ID生成单元102基于根据第一示例实施例的标识符生成单元2。在这个示例实施例中,独特ID生成单元102通过从应用布置单元101接收库文件122(132)来生成独特ID(标识符信息)和加载请求关联信息。图9中的列“项目号”是仅为了澄清描述而添加的列,因此列“项目号”在实际情形中不需要被提供。
独特ID生成单元102在封装名称关联表127(137)(图3)中存储生成的加载请求关联信息7用于每个应用120(130)。封装名称关联表127(137)能够包括加载请求关联信息7用于包括在由应用120(130)所使用的库文件122中的一个或多个文件。
封装名称关联表127(137)包括表示包括在库文件122(132)中的所有封装的名称与独特ID之间的关系的加载请求关联信息7。在这个上下文中,封装的名称(封装名称)是绑定多个类的组的名称。一个库文件122(132)能够包括多个封装。在Java的情况中,加载请求被发布作为对对应于包括封装名称和类名称的FQCN的类的请求(类请求)。换句话说,根据这个示例实施例,类请求对应于第一示例实施例中的加载请求。这个示例实施例中的加载请求关联信息7是,不由类作为加载请求的单元,而由包括类的封装名称(组名称),来管理加载请求和标识符信息15(库文件)之间的关系的示例。
图7和8图示说明了封装名称关联表127(137)的示例。图7是图示说明根据第二示例实施例的封装名称关联表127的示例的图。图8是图示说明根据第二示例实施例的封装名称关联表137的示例的图。如图7和8中所图示,“封装名称”被存储为在封装名称关联表127(137)中包括的各条加载请求关联信息7中的密钥,与包括对应封装(类的组)的库文件122(132)相关联的“独特ID”被存储为对应于密钥的值。图7和8中的列“项目号”是仅为了澄清描述而添加的列,因此列“项目号”在实际情形中不需要被提供。
独特ID生成单元102的结构和内容类似于根据第一示例实施例的标识符生成单元2,除了上面所述的点,因此这里不重复这些结构和内容的详细描述。
如上所述,类加载单元110包括高阶类加载器组111、列类加载器113和应用类加载器124和134。类加载单元110中的这个结构对应于Java中的类加载器层级结构。Java中普通类加载器中出现的操作和问题的细节将稍后描述。类加载单元110的各个单元所执行的且与这个示例实施例的实现相关联的操作在下文中描述。
高阶类加载器组111掌控加载请求,用于从未包括在库文件122(132)中的库文件(诸如系统库)加载的类。换句话说,高阶类加载器组111等价于类加载器,包括在Java中的普通类加载器中,顺序上比公共类加载器更高。高阶类加载器的操作的细节将在稍后描述的Java中普通类加载器的操作和问题的细节的部分中描述。
公共类加载器113基于根据第一示例实施例的加载单元3。应用类加载器124(134)基于根据第一示例实施例的加载请求解释单元4。
根据这个示例实施例,在由应用布置单元101对应用120(130)布置之后,应用类加载器124(134)接收来自执行的应用120的类请求。应用类加载器124(134)基于类请求和封装名称关联表127(137)获得与类请求相关联的库文件122(132)的独特ID。应用类加载器124(134)输出对应于类请求的对象的FQCN(第一示例实施例中的“表示加载请求11的对象的请求对象信息”)以及获得的独特ID到公共类加载器113。
类似于第一示例实施例中的加载单元3,公共类加载器113基于类管理区域108,根据对应于类请求的对象的类的加载状态来执行处理。
类管理区域108基于根据第一示例实施例的加载状态信息8。在这个示例实施例中,基于例如将类加载到类管理区域108中,公共类加载器113登记类已被加载的状态。换句话说,除了表示类已被加载的信息之外,类管理区域108还包括对应于全部加载类的程序代码。
而且,根据这个示例实施例,应用类加载器124(134)和公共类加载器113包括对于不包括在库文件122(132)中的类的类请求的处理。更具体地,应用类加载器124(134)和公共类加载器113通过授权(留下)请求给高阶类加载器组111而掌控这个类请求。
应用类加载器124(134)和公共类加载器113的结构和内容类似于第一示例实施例中的加载请求解释单元4和加载单元3,除了上述的点,因此这里不重复对其的详细描述。
现在描述库管理目录140。库管理目录140能够存储由应用布置单元101复制的库文件122(132)。当公共类加载器113加载类时,库管理目录140进一步能够输出存储的库文件122(132)到公共类加载器113。
下文描述因此构造的根据这个示例实施例的操作的细节。在下面的操作描述中,加载请求11被称为“类请求”。这个示例实施例中的操作包括用于布置应用的操作(布置操作)、用于响应于类请求而加载的操作(加载操作)和用于取消应用布置的操作(布置取消操作)。
最初结合图4来描述应用布置操作。图4是图示说明由应用布置单元101和独特ID生成单元102执行的应用布置操作的流程图。
一开始,涉及下面所述的具体示例中确定的先决条件。根据这个示例实施例,假设应用120和130分别包括库文件122的集合和库文件132的集合,作为库文件的两个集合,具有相同的名称,作为具体示例。进一步假设,在具有相同名称的库文件122和132的两个集合中,一个集合包括不同的内容。进一步假设,具有相同名称的库文件122和132的两个集合中的另一集合包括相同的内容。
进一步假设在开始应用布置操作时,类加载单元110的高阶类加载器组111和公共类加载器113驻留在未示出的主存储设备等中。应用布置单元101和独特ID生成单元102可以开始于操作初始时。进一步假设在独特ID表106、封装关联表127和137以及类管理区域108中不存储。
根据前述的先决条件,现在描述在布置应用120时执行的操作。
最初,应用布置单元101从用户经由未示出的输入设备等接收布置应用120的指令。响应于该指令,应用布置单元101生成与应用120相关联的应用类加载器124,作为类加载单元110的公共类加载器113的下级(步骤S10)。
当多个库文件122存在时,从步骤S11到步骤S15的操作可以对于每个库文件122而执行。根据这个具体示例,存在两个库文件122。因此,从步骤S11到步骤S15的操作总共对各个库文件122执行两次。在下面的从步骤S11到步骤S15的描述中,“库文件122”指的是“一个库文件122”。
应用布置单元101将包括在应用120中的库文件122传递到独特ID生成单元102,并且指示独特ID生成单元102生成独特ID和加载请求关联信息7(封装关联表127)。独特ID生成单元102最初为每个库文件122生成独特ID(步骤S11)。更具体地,独特ID生成单元102由例如哈希函数为库文件122获得哈希信息。然后,独特ID生成单元102确定获得的哈希信息为用于对应库文件122的独特ID。
独特ID生成单元102登记包括在库文件122中的封装名称与封装名称关联表127中的独特ID之间的关系(步骤S12)。更具体地,独特ID生成单元102最初提取包括在库文件122中的所有类的封装名称。然后,独特ID生成单元102将提取的封装名称视为密钥,并且在封装关联表127登记在步骤S11中生成的独特ID作为用于对应密钥的值。在登记初始信息之前,封装关联表127可以由独特ID生成单元102生成。
作为步骤S12的最后处理,独特ID生成单元102返回独特ID到应用布置单元101。应用布置单元101检查生成的独特ID已经登记在独特ID表106中(步骤S13)。根据这个具体示例,与库文件122相关联的独特ID不登记在独特ID表106中。当独特ID没有被登记时(步骤S13:否),应用布置单元101在独特ID表106中登记生成的独特ID,同时设置参考数目信息为“1”。然后,应用布置单元101将库文件122复制到库管理目录140(步骤S21)。当复制库文件122时,应用布置101复制库文件122,其方式为:库文件122可基于独特ID搜索。例如,应用布置单元101存储从库文件122复制的文件,作为具有包括独特ID的名称的文件。而且,应用布置单元101生成与独特ID相关联的类管理区域108(步骤S22)。
当在这些处理之后存在未处理的库文件122时,应用布置单元101对未处理的库文件执行步骤S11之后的处理(步骤S15)。
图7图示说明了与这样生成的应用120相关联的封装关联表127的示例。例如,与图7中“A1”的“项目号”列相关联的加载请求关联信息7(下文称为“A1的项目”)示出了封装名称为“org.apache.commons.beanutils.converters”的封装包括在独特ID为“0c41feelb50b22ac23ac99388f649b9a634e8346”的库文件122中。具有相同独特ID列的A1到A4的四项中每个是有关包括在具有相同ID“0c41feelb50b22ac23ac99388f649b9a634e8346”的库文件122中的四个封装的信息。A5和A6的每项是用于包括在具有相同ID“f6f66e966c70a83ffbdb6fl7a0919eaf7c8aca7f”的库文件122中的两个封装的信息。
这样来布置应用120。
下文描述在布置应用120之后布置应用130时执行的操作。如上所述,应用130包括具有与库文件122的名称相同的名称但是包括与库文件122的内容的内容的库文件132。应用130进一步包括具有与库文件122的名称相同的名称且包括与库文件122的内容相同的内容的其他库文件132。
用于布置具有与库文件122的名称相同的名称且包括与库文件122的内容不同的内容的库文件132的操作类似于在应用120的布置操作中对于库文件122执行的操作。对于具有与库文件122的名称相同的名称且包括与库文件122的内容相同的内容的库文件132的从步骤S10到步骤S12的操作类似于用于如上所述布置应用120的对应操作。在步骤S11,独特ID生成单元102为具有与库文件122的名称相同的名称且包括与库文件122的内容不同的内容的库文件132生成新独特ID。另一方面,独特ID生成单元102为具有与库文件122的名称相同的名称且包括与库文件122的内容相同的内容的库文件132生成与库文件122的独特ID相同的独特ID。
在步骤S13,用于具有与库文件122的名称相同的名称且包括与库文件122的内容相同的内容的库文件132的独特ID已经登记在独特ID表106中。当确定独特ID已被登记时(步骤S13:是),应用布置单元101为与对应独特ID相关联的参考数目信息添加1以更新独特ID表106(步骤S14)。图9图示说明了在应用130的布置之后的独特ID表106的示例。图9中的C1的项目对应于为具有相同名称和相同内容的库文件122(132)更新为参考数目“2”的信息。当剩余库文件132未处理时,应用布置单元101执行步骤S11之后的处理(步骤S15)。
图8图示说明了以上述方式生成的与应用130相关联的封装关联表137的示例。在图8中,B1到B4的每个项目是用于具有与库文件122的名称相同的名称且包括与库文件122的内容相同的内容的库文件132的信息。B5和B6的每个项目是用于在具有与库文件122的名称相同的名称且包括与库文件122不同的内容(独特ID“37c659e57293656ebefla247fc6ceb738ebdfc74”)的库文件132中包括的两个封装的信息。
这样来布置应用130。
应用布置单元101可以在任意时间,包括图4中所示的一系列应用布置操作之前和之后,执行由普通Java应用服务器执行的应用布置操作。
这样来执行应用布置操作。
下文结合图5来描述响应于类请求而执行的加载操作。图5是图示说明根据第二示例实施例的由应用120和130以及类加载单元110响应于类请求而所执行的加载操作。
类请求在每个布置的应用程序121和131开始之后发布。在下面的描述中,“执行的应用程序121(131)”被缩写为“应用120(130)”。
最初描述的是在具有相同名称的类请求从多个应用发布到包括不同内容的库文件时执行的加载操作。一开始,描述在应用120请求“org.apache.commons.logging.LogFactory”类时的加载操作。用于该类请求的FQCN是“org.apache.commons.logging.LogFactory”。用于该类请求的封装名称是“org.apache.commons.logging,不包括在FQCN尾部提供的“.LogFactory”。
包括这个类的库文件122和132具有相同的名称但具有不同的内容。用于这个类请求的封装名称被登记在封装名称关联表127中的A5的项目中(图7)以及封装名称关联表137的B5的项目中(图8),而与不同独特ID相关联。在下面的描述中,从封装名称关联表127和137获得(读取)的项目,或者独特ID表106使用图7到图9中所图示的项目号以简单方式描述。例如,从封装名称关联表127中的A1的项目中获得的“独特ID”列中的信息被称为“项目A1的独特ID”。
应用120请求上述的类(步骤S30)。
在这个情况下,与对应应用120(130)相关联的类加载单元110的应用类加载器124(134)接收类请求(步骤S40)。更具体地,应用类加载器124接收从应用120发布的类请求。
应用类加载器124(134)检查所请求的类的封装名称是否存在于关联的封装名称关联表127(137)中(步骤S41)。更具体地,应用类加载器124使用所请求的类的封装名称“org.apache,commons,logging”作为密钥来搜索与应用120相关联的封装名称关联表127。应用类加载器124基于独特ID(项目A5的独特ID)已经从图7中的A5的项目中获得的状态来确定包括所请求的类的封装名称的封装名称关联表127。
当类的封装名称存在于封装名称关联表127(137)中时(步骤S41:是),应用类加载器124(134)输出对应于类请求的对象的FQCN以及获得的独特ID到公共类加载器113。公共类加载器113检查对应于类请求的对象的类是否已经加载到与独特ID相关联的类管理区域108(步骤S42)。根据具体示例,不向类管理区域108加载任何。因此,公共类加载器113确定请求的类没有被加载。
当请求的类没有被加载时(步骤S42:否),公共类加载器113从与独特ID相关联的库文件122(132)加载类(步骤S43)。更具体地,公共类加载器113从库管理目录140获得通过项目A5的独特ID的名称复制的库文件。然后,公共类加载器113从获得的库文件122加载包括请求的类的程序到类管理区域108。
最后,公共类加载器113经由应用类加载器124(134)对类请求进行响应(步骤S44)。更具体地,公共类加载器113经由应用类加载器124向应用120返回包括表示已经记载类的位置的信息的对象。
接收对类请求的响应(步骤S31)。
接下来描述的是在应用130请求与前述类相同的“org.apache.commons.logging.LogFactory”类时执行的加载操作。在下面的描述中,简短地初级与前述操作不同的操作点。最初,应用130请求对应于与应用120的FQCN相同的FQCN的类(步骤S30)。
类加载单元110的应用类加载器134接收类请求(步骤S40)。
应用类加载器134基于独特ID(项目B5的独特ID)的状态确定包括请求的类的封装名称(项目B5的独特ID)是否已经从封装关联表237获得(步骤S41)。然后,应用类加载器134输出项目B5的FQCN和独特ID到公共加载器113(步骤S41:是)。如上所述,项目B5的独特ID与项目A5的独特ID不同。
公共类加载器113确定与FQCN相关联的类没有加载到与项目B5的独特ID相关联的类管理区域108(步骤S42)。
当请求的类没有被加载时(步骤S42:否),公共类加载器113从与项目B5的独特ID相关联的库文件132加载包括请求的类的程序到类管理区域108,其方式类似于上述的方式(步骤S43)。
最后,公共类加载器113经由应用类加载器134返回包括表示已经最新加载类的位置的信息的对象作为对类请求的响应(步骤S44)。
因此,即使在具有相同名称的类请求从多个应用发布到包括不同内容的库文件时,类加载单元110能够独立加载与各个应用相关联的库文件。
接下来描述的是在用于加载包括相同内容的库文件的请求被从多个应用发布时执行的加载操作。下面将描述当应用120和130相继请求“org.apache.commons.beanutils.converters.DateConverter”类时执行的加载操作作为示例。
包括这个类的库文件122和132具有相同名称和相同内容。因此,封装名称“org.apache.commons.beanutils.converters”被登记在封装名称关联表127的项目A1中(图7)和封装名称关联表137的项目B1中(图8),同时与相同独特ID相关联。
最初,应用120请求前述的类(步骤S30)。
在此情况下,类加载单元110的应用类加载器124接收类请求(步骤S40)。应用类加载器124进一步从封装名称关联表127获得与请求的类的封装名称相关联的独特ID(项目A1的独特ID)(步骤S41)。然后,应用类加载器124输出项目A1的FQCN和独特ID到公共类加载器113(步骤S41:是)。
公共类加载器113确定对应类没有加载到类管理区域108(步骤S42)。公共类加载器113从与项目A1的独特ID相关联的库文件122加载包括类的程序(步骤S43)。然后,公共类加载器113经由应用类加载器124进行对类请求的响应(步骤S44)。
接下来描述的是在应用130请求与应用120所请求的类相同的“org.apache.commons.beanutils.converters.DateConverter”类时执行的加载操作。
最初,应用130请求对应于与应用120所请求的FQCN相同的FQCN的类(步骤S30)。
在此情况下,类加载单元110的应用类加载器134接收类请求(步骤S40)。应用类加载器134进一步从封装名称关联表137获得与所请求的类的封装名称相关联的独特ID(项目B1的独特ID)(步骤S41)。然后,应用类加载器134输出项目B1的FQCN和独特ID到公共类加载器113(步骤S41:是)。如上所述,项目B1的独特ID与项目A1的独特ID相同。
公共类加载器113确定与FQCN相关联的类已经加载到与项目B1的独特ID相关联的类管理区域108中(步骤S42)。当确定所请求的类已经被加载时(步骤S42:是),公共类加载器113经由应用类加载器134返回包括指示类已被加载的位置的信息的对象,作为对类请求的响应(步骤S44)。包括在这个响应中且指示类已经被加载到的位置的信息对应于在加载该类时指出之前从应用120所请求的类已从与项目A1的独特ID相关联的库文件122加载到的位置的信息(步骤S43)。
以这种方式,类加载单元110能够避免包括相同内容的库文件122(132)的多重加载。
接下来描述的是当未包括在库文件122和132中的类被请求时执行的加载操作。描述当应用120或130请求“foo.Bar”类时执行的加载操作作为示例。假设类“foo”不包括在库文件122或132中。
应用120请求前述的类(步骤S30)。
在此情况下,类加载单元110的应用类加载器124(134)接收类请求(步骤S40)。应用类加载器124(134)进一步使用封装名称“foo”搜索封装名称关联表127(137)(步骤S41)。但是,应用类加载器124(134)不获得与封装名称“foo”相关联的独特ID(步骤S41:否)。因此,应用类加载器124(134)经由通信类加载器113授权加载处理到高阶类加载器组111(步骤S50)。更具体地,应用类加载器124(134)通知公共类加载器113有关仅仅所请求的类的FQCN“foo.Bar”。当没有得到有关独特ID的通知时,公共类加载器113授权“foo.Bar”加载到更高阶中存在的高阶类加载器组111。随后的操作类似于由Java中普通类加载器所执行的对应操作。更具体地,公共类加载器113随后从高阶类加载器组111接收对类请求的响应(步骤S51)。然后,公共类加载器113基于所接收到的响应经由应用类加载器124对应用120进行响应(步骤S44)。
以这种方式,类加载单元110根据这个示例实施例同时实现普通Java类加载和操作的机制。
响应于类请求的加载操作以上述方式来执行。
下文结合图6来描述应用布置取消操作。图6是图示说明根据第二示例实施例的用于取消由应用布置单元101执行的应用布置的操作的流程图。下面的操作是由应用布置单元101执行的,用来取消在上述的布置状态中的应用120或130的布置。
最初,应用布置单元101从用户经由未示出的输入设备等接收用于取消应用120或130的布置的指令。在此情况下,应用布置单元101从封装名称关联表127或137中选择与取消布置的应用120或130相关联的包括在封装名称关联表127或137中的未处理的独特ID(步骤S60)。换句话说,应用布置单元101对包括在封装名称关联表127或137中的每个独特ID执行从S61到S63的操作。
应用布置单元101用与独特ID表106中所选独特ID相关联的参考数目信息减去“1”(步骤S61)。
应用布置单元101随后确定在步骤S61的减法之后参考数目信息是否为“1”或更大(步骤S62)。
当参考数目信息为“1”或更大时(步骤S62:是),应用布置单元101识别存在包括与对应独特ID相关联的库文件122或132的应用120或130。应用布置单元101结束与对应独特ID相关联的布置处理。当剩余独特ID未被处理时,应用布置单元101返回步骤S61用于处理未处理的独特ID(步骤S63)。
另一方面,当参考数目信息不为“1”或更大(即,参考数目信息为“0”)时(步骤S62:否),应用布置单元101识别包括与对应独特ID相关联的库文件122或132的应用变为不存在。应用布置单元101移除关于库文件122或132的信息、资源等。
更具体地,应用布置单元101从独特ID表中移除对应独特ID的条目(步骤S70)。此外,应用布置单元101放弃与对应独特ID相关联的类管理区域108(步骤S71)。结果,被加载的库文件122或132所占用的存储器被释放。应用布置单元101进一步从库管理目录140中移除与对应独特ID相关联的库文件122或132(步骤S72)。当剩余未被处理的独特ID时,应用布置单元101返回到步骤S61用来处理未被处理的独特ID(步骤S63)。
更具体地,在应用120和130中任一个的布置的取消时,图9中所图示的独特ID表106中项目C1的条目以及与项目C1相关联的库文件122(132)和类管理区域108未被移除。独特ID表106中项目C2或项目C3的条目被移除。此外,与项目C2的独特ID或项目C3的独特ID相关联的库文件122(132)以及与项目C2的独特ID或项目C3的独特ID相关联的类管理区域108被移除。
在处理封装名称关联表127或137中包括的所有独特ID之后(步骤S63:否),应用布置单元101移除与取消布置的应用120或130相关联的应用类加载器124或134以及封装名称关联表127或137(步骤S64)。
这样,取消了应用120或130的布置。应用布置单元101能够在取消应用的布置时基于独特ID表106来控制关于库文件122和132的资源的保留和移除。
应用布置单元101可以执行由普通Java应用服务器在任意时间,包括在图6中所图示的应用布置取消操作的序列之前和之后,执行的应用布置取消操作。
以上述方式来执行应用布置取消操作。
下文中描述Java中普通类加载器的操作和问题的细节,作为操作的最终解释。
在Java应用服务器的情况下,通常,多个类加载器形成为层级结构。在类的加载时,使用下面详述的授权模型。
根据这个授权模型,对应于加载对象的库文件被定义(关联)用于每个类加载器。当类请求从应用发布到某个类加载器时,类加载器在所请求的类是已经加载的类时返回相关联的类(对象)。
但是,当所请求的类未加载时,类加载器授权对高阶类加载器的加载。这个高阶类加载器递归地执行相似的操作。当所请求的类是未被层级中最高阶类加载器加载的类时,最高阶类加载器在该类包括在所定义的库文件中时加载该类。最高阶类加载器返回加载的类到位于较低阶的一个类中的子类加载器。当所请求的类不包括在所定义的库文件中时,最高阶类加载器向子类加载器返回响应,以指示所请求的类的加载未完成。
下文中,由子类加载器递归地执行类似的操作。
当存在多个库且每个包括具有相同名称的类时,包括在库文件中的类对应于层级结构中的高阶类加载器的加载对象,且以这种方式优先加载。
类加载器的层级结构的结尾对于在应用服务器中布置的多个应用中每个生成应用类加载器。应用类加载器确定应用模块中包括的程序和库文件作为加载对象。用于每个应用的类加载器能够划分每个应用的类名称空间。例如,当具有相同名称和不同内容的类存在于应用A的库文件和应用的库文件的每个中时,这两个应用的类加载器能够分开加载具有相同名称的类。
在“背景技术”部分中所述的问题来自于普通类加载器的这个结构。问题之一在于具有相同名称而包括不同内容的类的加载在类包括在对应于低阶类加载器加载的对象的库文件中时是不同的。更具体地,普通类加载器难以在某情况下从用于每个应用的库文件中加载和在另一情况下从对应于由高阶类加载器加载的对象的系统的库文件中加载之间切换。这个问题来自于这一点:对应于由高阶类加载器加载的对象的库文件总是被给予优先权。另一问题在于:各个应用的类加载器加载对于每个应用包括完全相同内容的库文件。结果,存储器使用量增加。这个问题是由这一点产生的:应用类加载器不具有允许要被加载的库的统一管理的机制。
根据这个示例实施例来解决出自普通类加载器的结构的这些问题。更具体地,这个示例实施例中的类加载单元110能够优先加载包括在应用120(130)中的库文件122(132)。换句话说,根据这个示例实施例的信息处理设备100能够根据库文件122(132)是否要包括在应用120(130)中而切换要优先加载的库文件。同时,类加载单元110能够避免包括相同内容的库文件的多重加载。
上述点是Java中普通类加载器的操作和问题的细节。
如山所述,这个示例所述提供类似于上述第一示例实施例的优点的优点,并且进一步在布置和取消应用的布置时提供诸如库文件和存储器的资源被适当管理的资源的优点。
这个优点来自这一点:应用布置单元101基于独特ID表106来管理参考用于每个独特ID的库文件的应用的数目。
(第二示例实施例的修改示例)
这个示例实施例例如可以以下面的方式修改。
例如,可以由另一功能单元执行上述的应用布置单元101的功能的一部分。例如,根据JAVA的普通定制,类加载单元110可以以下面的方式管理存储在存储设备105中的信息等。在生成独特ID(图4中的步骤S11)之后,应用布置单元101通知公共类加载器有关生成的独特ID和库文件122(132)的路径。然后,公共类加载器113可以管理独特ID表106和包括表106和区域108的生成的类管理区域108,复制库文件122(132)到库管理目录140。类似地,在应用布置取消时,公共类加载器113可以执行用于独特ID表106、类管理区域108和库管理目录140的处理。
<硬件配置示例的描述>
在上述各个示例实施例中的图1到3中所图示的各个单元可以由独立硬件电路来实现,或者可以被视为软件程序的功能(处理)单元(软件模块)。但是,这些图中图示的各个单元的划分仅仅是处于便利解释的原因而形成的,且各种类型的配置可被假设在实际安装时。下文结合图10来描述作为这些配置的示例的硬件环境。图10是图示说明根据本发明的各个示例实施例及其修改示例的适用于信息处理设备或应用服务器的计算机(信息处理设备)的配置的示例的图。更具体地,图10图示说明了对应于可实现根据上述的各个示例实施例的信息处理设备1和100中至少一个且能够实现根据上述的各个示例实施例的各个功能的计算机的配置的硬件环境。
图10中所图示的计算机900包括CPU(中央处理单元)901、ROM(只读存储器)902、RAM(随机存取存储器)903、通信接口(I/F)904、显示器905和硬盘设备(HDD)906,所有的单元901到906都经由总线907互相连接。当图10中所图示的计算机起到信息处理设备1和100的作用时,显示器905不必需要。
通信接口904是普通通信功能,用于实现根据上述各个示例实施例的各个计算机之间的通信。硬盘设备906存储程序组906A和各种类型的存储信息906B。程序组906A是计算机程序,用于实现与例如上述图1到3中所图示的各个块(各个单元)相关联的功能。各种类型的存储信息906B对应于图1到3中所图示的加载请求关联信息7、加载状态信息8、库10、122和132、独特ID表106、类管理区域108以及封装名称关联表127和137。在这个硬件配置中,CPU901控制计算机900的整个操作。在计算机程序被提供且读入到硬件的CPU901之后,结合通过举例呈现的各个示例实施例描述的本发明是基于能够实现块配置图(图1到3)中所图示的功能和在各个示例实施例的描述中被参考的流程图(图4到图6)的计算机程序的执行而实践的。供应给计算机的计算机程序可以存储在可读和可写的临时存储存储器903中,或者诸如硬盘设备906的非易失性存储设备(存储介质)中。
现在的普通流程可被采纳作为用于供应计算机程序给上述情况中的各个设备的方法,诸如用于经由诸如软盘(注册商标)和CD-ROM的各种类型存储媒体来安装计算机程序到设备的方法,用于从外部经由诸如互联网的通信网络100下载计算机程序的方法。考虑到这些情况,认为本发明是由用于实现计算机程序的代码,或者登记这些代码的存储介质作为计算机可读存储介质,来实现的。
部分或全部前述示例实施例可以被描述为下面的补充注释。但是,示例实施例所描述的本发明不被限制于下面。
(补充注释1)
一种信息处理设备,包括:
标识符生成单元,其为每个库文件生成用于识别库文件的内容的标识符信息,生成表示标识符信息之间的关系的加载请求关联信息和表示包括在库文件中且可能成为想要的加载请求的对象的部分的请求对象信息,并且输出加载请求关联信息到存储设备;
加载请求解释单元,其接收来自当前执行的应用的加载请求,基于加载请求和加载请求关联信息获得关于包括加载请求的对象的库文件的标识符信息,并且输出表示加载请求的对象的请求对象信息和所获得的标识符信息;以及
加载单元,其管理表示库文件中包括的各个部分的加载状态的加载状态信息,当加载单元基于加载状态信息确定对应于由请求对象信息和由所获得的标识符信息所指示的加载请求的对象的部分不被加载时,从由所获得的标识符信息指示的库文件中至少加载对应于加载请求的对象的部分,并且对加载请求进行响应。
(补充注释2)
根据补充注释1所述的信息处理设备,其中
当加载单元基于加载状态信息确定对应于加载请求的对象的部分已被加载时,所述加载单元对所述加载请求进行响应而不加载对应于加载请求的对象的部分。
(补充注释3)
根据补充注释1或2所述的信息处理设备,进一步包括应用布置单元,其中
在布置可执行状态中的应用时,所述应用布置单元生成包括标识符信息的库标识符管理信息,和表示参考与标识符信息相关联的库文件的应用的数目的参考数目信息,以及
在用于取消应用的可执行状态的布置取消时,所述应用布置单元基于所述库标识符管理信息而移除包括关于由作为布置取消的结果而变得缺失的应用所参考的库文件以及关于取消布置的应用的存储信息的资源。
(补充注释4)
根据补充注释1到3中任意一项所述的信息处理设备,其中
所述标识符生成单元生成所述加载请求关联信息,同时使用在库文件中包括的封装的名称作为请求对象信息,以及
所述加载请求解释单元基于对应于加载请求对象的类的封装名称以及所述加载请求关联信息来获得关于包括加载请求对象的库文件的标识符信息。
(补充注释5)
根据补充注释1到4中任意一项所述的信息处理设备,其中
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息生成标识符信息。
(补充注释6)
一种库加载方法,包括:
为每个库文件生成用于识别库文件的内容的标识符信息;
生成表示标识符信息之间的关系的加载请求关联信息和表示包括在库文件中且可能成为想要的加载请求的对象的部分的请求对象信息;
输出所述加载请求关联信息到存储设备;
当接收到来自当前执行的应用的加载请求时,
基于加载请求和加载请求关联信息而获得关于包括加载请求的对象的库文件的标识符信息;
当基于表示库文件中包括的各个部分的加载状态的加载状态信息而确定对应于由表示加载请求对象的请求对象信息和由所获得的标识符信息所指示的加载请求的对象的部分不被加载时,从由所获得的标识符信息所指示的库文件中至少加载对应于加载请求的对象的部分,并且在加载状态信息中登记对应于加载请求的对象的部分已被加载;以及
进行对加载请求的响应。
(补充注释7)
根据补充注释6所述的库加载方法,其中,当确定对应于加载请求的对象的部分已经在接收到加载请求之前被加载时,对所述加载请求进行响应而不加载对应于加载请求的对象的部分。
(补充注释8)
根据补充注释6或7所述的库加载方法,进一步包括:
在生成所述标识符信息之后以及在接收到所述加载请求之前,生成包括所述标识符信息的库标识符管理信息和表示参考与所述标识符信息相关联的库文件的应用的数目的参考数目信息;以及
在用于取消应用的可执行状态的布置取消时,基于所述库标识符管理信息而移除包括关于由作为布置取消的结果而变成缺失的应用所参考的库文件以及关于取消布置的应用的存储信息的资源。
(补充注释9)
根据补充注释6到8中任意一项所述的库加载方法,其中
生成加载请求关联信息,同时使用包括在库文件中的封装的名称作为请求对象信息,且基于对应于加载请求对象的类的封装名称和基于加载请求关联信息来获得有关包括加载请求对象的库文件的标识符信息。
(补充注释10)
根据补充注释6到9中任意一项所述的库加载方法,其中
在生成标识符信息之前,获得有关库文件的哈希信息且基于哈希信息生成标识符信息。
(补充注释11)
一种用于存储计算机程序的非瞬时计算机可读介质,所述计算机程序使得计算机执行:
标识符生成处理,用于为每个库文件生成用于识别库文件的内容的标识符信息,生成表示标识符信息之间的关系的加载请求关联信息和表示包括在库文件中且可能成为想要的加载请求的对象的部分的请求对象信息,以及输出所述加载请求关联信息到存储设备;
加载请求解释处理,用于接收来自当前执行的应用的加载请求,基于加载请求和加载请求关联信息而获得关于包括加载请求的对象的库文件的标识符信息;以及
加载处理,用于管理表示库文件中包括的各个部分的加载状态的加载状态信息,当基于所述加载状态信息而确定对应于由请求对象信息和由所获得的标识符信息所指示的加载请求的对象的部分不被加载时,从由所获得的标识符信息所指示的库文件中至少加载对应于加载请求的对象的部分,以及进行对加载请求的响应。
(补充注释12)
根据补充注释11所述的用于存储计算机程序的计算机可读介质,其中
当确定对应于加载请求的对象的部分已经在接收到加载请求之前被加载时,对所述加载请求进行响应而不加载对应于加载请求的对象的部分。
(补充注释13)
根据补充注释11或12所述的用于存储计算机程序的计算机可读介质,进一步执行应用布置处理,其中
在生成所述标识符信息之后以及在接收到所述加载请求之前,生成包括所述标识符信息的库标识符管理信息和表示参考与所述标识符信息相关联的库文件的应用的数目的参考数目信息;以及
在用于取消应用的可执行状态的布置取消时,基于所述库标识符管理信息而移除包括关于由作为布置取消的结果而变成缺失的应用所参考的库文件以及关于取消布置的应用的存储信息的资源。
(补充注释14)
根据补充注释11到13中任意一项所述的用于存储计算机程序的计算机可读介质,其中
所述标识符生成处理生成加载请求关联信息,同时使用包括在库文件中的封装的名称作为请求对象信息,以及
所述加载请求解释处理基于对应于加载请求对象的类的封装名称和基于加载请求关联信息来获得有关包括加载请求对象的库文件的标识符信息。
(补充注释15)
根据补充注释11到14中任意一项所述的用于存储计算机程序的计算机可读介质,其中
标识符生成处理获得有关库文件的哈希信息且基于哈希信息生成标识符信息。
之前的示例实施例的描述被提供以使得本领域技术人员能够做出并使用本发明。而且,对这些示例实施例的各种修改将易于对本领域技术人员而言显然,且这里所限定的一般原理和具体示例可以应用于其他示例实施例而不用创造性能力。因此,本发明不想要被限制于这里所述的示例实施例,而是要符合由权利要求及其等价物的限制所限定的最宽的范围。
进而,注意到,发明人的意图在于保持所要求保护的发明的所有等价物,即使权利要求在审查期间被修改。
Claims (20)
1.一种信息处理设备,包括:
标识符生成单元,所述标识符生成单元针对每个库文件生成用于识别库文件的内容的标识符信息,生成表示在所述标识符信息和请求对象信息之间的关系的加载请求关联信息,并且将所述加载请求关联信息输出到存储设备,所述请求对象信息表示包括在所述库文件中并且能够成为想要的加载请求的对象的部分;
加载请求解释单元,所述加载请求解释单元接收来自当前执行的应用的加载请求,基于所述加载请求和所述加载请求关联信息来获得关于包括所述加载请求的对象的库文件的标识符信息,并且输出表示所述加载请求的对象的请求对象信息和所获得的标识符信息;以及
加载单元,所述加载单元管理表示包括在所述库文件中的各个部分的加载状态的加载状态信息,当所述加载单元基于所述加载状态信息确定了与由所述请求对象信息和由所获得的标识符信息所指示的所述加载请求的对象相对应的部分没有被加载时,从由所获得的标识符信息指示的所述库文件中加载至少与所述加载请求的对象相对应的部分,并且对所述加载请求进行响应。
2.根据权利要求1所述的信息处理设备,其中,
当所述加载单元基于所述加载状态信息确定了与所述加载请求的对象相对应的部分已被加载时,所述加载单元在不加载与所述加载请求的对象相对应的部分的情况下,对所述加载请求进行响应。
3.根据权利要求1所述的信息处理设备,进一步包括应用布置单元,其中,
在以可执行状态中布置所述应用时,所述应用布置单元生成库标识符管理信息,所述库标识符管理信息包括所述标识符信息以及参考数目信息,所述参考数目信息表示参考与所述标识符信息相关联的所述库文件的应用的数目,并且
在用于取消所述应用的可执行状态的布置取消时,所述应用布置单元基于所述库标识符管理信息来移除包括关于由作为所述布置取消的结果而变得缺失的应用所参考的库文件以及关于取消布置的应用的存储信息的资源。
4.根据权利要求1所述的信息处理设备,其中,所述标识符生成单元在使用在库文件中包括的封装的名称作为所述请求对象信息的同时,生成所述加载请求关联信息,并且
所述加载请求解释单元基于与所述加载请求对象的类的封装名称并且基于所述加载请求关联信息来获得关于包括所述加载请求对象的库文件的标识符信息。
5.根据权利要求1所述的信息处理设备,其中,
所述标识符生成单元获得关于所述库文件的哈希信息,并且基于所述哈希信息来生成所述标识符信息。
6.根据权利要求2所述的信息处理设备,进一步包括应用布置单元,其中,
在以可执行状态布置应用时,所述应用布置单元生成库标识符管理信息,所述库标识符管理信息包括所述标识符信息以及参考数目信息,所述参考数目信息表示参考与所述标识符信息相关联的所述库文件的应用的数目,并且
在用于取消所述应用的可执行状态的布置取消时,所述应用布置单元基于所述库标识符管理信息来移除包括关于由作为所述布置取消的结果而变得缺失的应用所参考的库文件以及关于取消布置的应用的存储信息的资源。
7.根据权利要求2所述的信息处理设备,其中,
所述标识符生成单元在使用包括在所述库文件中的封装的名称作为所述请求对象信息的同时,生成所述加载请求关联信息,并且
所述加载请求解释单元基于与所述加载请求对象相对应的类的封装名称并且基于所述加载请求关联信息来获得关于包括所述加载请求对象的库文件的标识符信息。
8.根据权利要求2所述的信息处理设备,其中,
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息来生成所述标识符信息。
9.根据权利要求3所述的信息处理设备,其中,
所述标识符生成单元在使用包括在所述库文件中的封装的名称作为所述请求对象信息的同时,生成所述加载请求关联信息,并且
所述加载请求解释单元基于与所述加载请求对象相对应的类的封装名称并且基于所述加载请求关联信息来获得关于包括所述加载请求对象的库文件的标识符信息。
10.根据权利要求3所述的信息处理设备,其中,
所述标识符生成单元获得关于所述库文件的哈希信息,并且基于所述哈希信息来生成所述标识符信息。
11.根据权利要求4所述的信息处理设备,其中,
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息来生成所述标识符信息。
12.根据权利要求6所述的信息处理设备,其中,
所述标识符生成单元在使用包括在所述库文件中的封装的名称作为所述请求对象信息的同时,生成所述加载请求关联信息,并且
所述加载请求解释单元基于与所述加载请求对象相对应的类的封装名称并且基于所述加载请求关联信息来获得关于包括所述加载请求对象的库文件的标识符信息。
13.根据权利要求6所述的信息处理设备,其中,
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息来生成所述标识符信息。
14.根据权利要求7所述的信息处理设备,其中,
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息来生成标识符信息。
15.根据权利要求9所述的信息处理设备,其中,
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息来生成标识符信息。
16.根据权利要求12所述的信息处理设备,其中,
所述标识符生成单元获得关于库文件的哈希信息,并且基于所述哈希信息来生成标识符信息。
17.一种库加载方法,包括:
针对每个库文件生成用于识别库文件的内容的标识符信息;
生成表示在所述标识符信息和请求对象信息之间的关系的加载请求关联信息,所述请求对象信息表示包括在所述库文件中并且能够成为想要的加载请求的对象的部分;
将所述加载请求关联信息输出到存储设备;
当接收到来自当前执行的应用的加载请求时,
基于所述加载请求和所述加载请求关联信息来获得关于包括所述加载请求的对象的库文件的标识符信息;
当基于表示包括在所述库文件中的各个部分的加载状态的加载状态信息确定了与由表示所述加载请求对象的请求对象信息和由所获得的标识符信息所指示的所述加载请求的对象相对应的部分没有被加载时,从由所获得的标识符信息所指示的库文件中至少加载与所述于加载请求的对象相对应的部分,并且在所述加载状态信息中登记与所述加载请求的对象相对应的部分已经被加载;以及
对所述加载请求进行响应。
18.根据权利要求17所述的库加载方法,其中,
当确定了与所述加载请求的对象相对应的部分已经在接收到所述加载请求之前被加载时,在不加载与所述加载请求的对象相对应的部分的情况下,对所述加载请求进行响应。
19.根据权利要求17所述的库加载方法,进一步包括:
在生成所述标识符信息之后并且在接收到所述加载请求之前,生成库标识符管理信息,所述库标识符管理信息包括所述标识符信息以及参考数目信息,所述参考书目信息表示参考与所述标识符信息相关联的库文件的应用的数目;以及
在用于取消所述应用的可执行状态的布置取消时,基于所述库标识符管理信息来移除包括关于由作为所述布置取消的结果而变得缺失的应用所参考的库文件以及关于取消布置的应用的存储信息的资源。
20.一种非瞬时计算机可读介质,用于存储计算机程序,所述计算机程序使得计算机执行:
标识符生成处理,用于针对每个库文件生成用于识别库文件的内容的标识符信息,生成表示在所述标识符信息和请求对象信息之间的关系的加载请求关联信息,并且将所述加载请求关联信息输出到存储设备,所述请求对象信息表示包括在所述库文件中并且能够成为想要的加载请求的对象的部分;
加载请求解释处理,用于接收来自当前执行的应用的加载请求,基于所述加载请求和所述加载请求关联信息来获得关于包括所述加载请求的对象的库文件的标识符信息;以及
加载处理,用于管理表示包括在所述库文件中的各个部分的加载状态的加载状态信息,当基于所述加载状态信息确定了与由所述请求对象信息和由所获得的标识符信息所指示的所述加载请求的对象相对应的部分没有被加载时,从由所获得的标识符信息指示的所述库文件中加载至少与所述加载请求的对象相对应的部分,并且对所述加载请求进行响应。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014228181A JP6409514B2 (ja) | 2014-11-10 | 2014-11-10 | 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム |
JP2014-228181 | 2014-11-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105589715A true CN105589715A (zh) | 2016-05-18 |
CN105589715B CN105589715B (zh) | 2019-11-05 |
Family
ID=55912287
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510761977.XA Active CN105589715B (zh) | 2014-11-10 | 2015-11-10 | 信息处理设备、库加载方法和计算机可读介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9477498B2 (zh) |
JP (1) | JP6409514B2 (zh) |
CN (1) | CN105589715B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107038045A (zh) * | 2017-03-30 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 加载库文件的方法及装置 |
CN108668162A (zh) * | 2018-03-20 | 2018-10-16 | 青岛海信电器股份有限公司 | 视频文件播放的处理方法、装置及智能终端 |
CN110874246A (zh) * | 2018-08-28 | 2020-03-10 | Tcl集团股份有限公司 | 一种模块加载方法、系统及设备 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017056194A1 (ja) * | 2015-09-29 | 2017-04-06 | 株式会社 東芝 | 情報機器または情報通信端末および、情報処理方法 |
JP2017157103A (ja) * | 2016-03-03 | 2017-09-07 | キヤノン株式会社 | 情報処理装置およびライブラリ管理方法 |
US10564959B2 (en) * | 2017-03-14 | 2020-02-18 | Google Llc | Shared software libraries for computing devices |
CN110673869B (zh) * | 2019-09-24 | 2023-09-12 | 聚好看科技股份有限公司 | 库文件的加载方法、装置及系统 |
CN113111291B (zh) * | 2021-05-12 | 2023-03-31 | 杭州网易再顾科技有限公司 | 一种页面加载方法、装置、介质和计算设备 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6430569B1 (en) * | 1998-08-14 | 2002-08-06 | Sun Microsystems, Inc. | Methods and apparatus for type safe, lazy, user-defined class loading |
CN1577268A (zh) * | 2003-07-12 | 2005-02-09 | 三星电子株式会社 | 共享库系统及构建该系统的方法 |
WO2007006697A1 (fr) * | 2005-07-08 | 2007-01-18 | Gemplus | Arborescence de chargeurs de classes calquee sur l ' arborescence de repertoires |
CN1989486A (zh) * | 2004-05-20 | 2007-06-27 | Sap股份公司 | 在运行时系统中共享对象 |
JP2007206965A (ja) * | 2006-02-01 | 2007-08-16 | Canon Inc | 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム |
CN101069157A (zh) * | 2004-09-30 | 2007-11-07 | 茨特里克斯系统公司 | 用于访问资源的方法和系统 |
JP2010113474A (ja) * | 2008-11-05 | 2010-05-20 | Sony Corp | 情報処理装置、情報処理方法及びプログラム |
CN102985907A (zh) * | 2010-05-10 | 2013-03-20 | 泰必高软件公司 | 在动态类加载器环境下管理遗留软件的静态数据结构 |
JP2013196453A (ja) * | 2012-03-21 | 2013-09-30 | Nec Corp | 情報処理装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5615400A (en) * | 1993-06-30 | 1997-03-25 | Apple Computer, Inc. | System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers |
JP3570940B2 (ja) * | 1999-11-25 | 2004-09-29 | 北海道日本電気ソフトウェア株式会社 | ダイナミックリンクライブラリ制御方式,方法および記録媒体 |
US7865914B2 (en) * | 2007-03-29 | 2011-01-04 | Microsoft Corporation | Cooperative DLL unload |
US8595715B2 (en) * | 2010-12-31 | 2013-11-26 | International Business Machines Corporation | Dynamic software version selection |
US8739147B2 (en) * | 2011-04-15 | 2014-05-27 | International Business Machines Corporation | Class isolation to minimize memory usage in a device |
-
2014
- 2014-11-10 JP JP2014228181A patent/JP6409514B2/ja active Active
-
2015
- 2015-10-09 US US14/879,305 patent/US9477498B2/en active Active
- 2015-11-10 CN CN201510761977.XA patent/CN105589715B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6430569B1 (en) * | 1998-08-14 | 2002-08-06 | Sun Microsystems, Inc. | Methods and apparatus for type safe, lazy, user-defined class loading |
CN1577268A (zh) * | 2003-07-12 | 2005-02-09 | 三星电子株式会社 | 共享库系统及构建该系统的方法 |
CN1989486A (zh) * | 2004-05-20 | 2007-06-27 | Sap股份公司 | 在运行时系统中共享对象 |
CN101069157A (zh) * | 2004-09-30 | 2007-11-07 | 茨特里克斯系统公司 | 用于访问资源的方法和系统 |
WO2007006697A1 (fr) * | 2005-07-08 | 2007-01-18 | Gemplus | Arborescence de chargeurs de classes calquee sur l ' arborescence de repertoires |
JP2007206965A (ja) * | 2006-02-01 | 2007-08-16 | Canon Inc | 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム |
JP2010113474A (ja) * | 2008-11-05 | 2010-05-20 | Sony Corp | 情報処理装置、情報処理方法及びプログラム |
CN102985907A (zh) * | 2010-05-10 | 2013-03-20 | 泰必高软件公司 | 在动态类加载器环境下管理遗留软件的静态数据结构 |
JP2013196453A (ja) * | 2012-03-21 | 2013-09-30 | Nec Corp | 情報処理装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107038045A (zh) * | 2017-03-30 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 加载库文件的方法及装置 |
CN108668162A (zh) * | 2018-03-20 | 2018-10-16 | 青岛海信电器股份有限公司 | 视频文件播放的处理方法、装置及智能终端 |
CN110874246A (zh) * | 2018-08-28 | 2020-03-10 | Tcl集团股份有限公司 | 一种模块加载方法、系统及设备 |
Also Published As
Publication number | Publication date |
---|---|
JP6409514B2 (ja) | 2018-10-24 |
US20160132343A1 (en) | 2016-05-12 |
CN105589715B (zh) | 2019-11-05 |
US9477498B2 (en) | 2016-10-25 |
JP2016091460A (ja) | 2016-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105589715A (zh) | 信息处理设备、库加载方法和计算机可读介质 | |
CN111324571B (zh) | 一种容器集群管理方法、装置及系统 | |
US8667459B2 (en) | Application specific runtime environments | |
US5715461A (en) | System for managing software development in distributed development environment | |
EP3238421B1 (en) | System for high-throughput handling of transactions in data-partitioned, distributed, relational database management system | |
CN107077389A (zh) | 用于在多租户应用服务器环境中使用全局运行时的系统和方法 | |
CN104272258A (zh) | 用于在事务中间件机器环境中支持隐式版本控制的系统和方法 | |
US10338910B2 (en) | Multi-tenant upgrading | |
US8200787B2 (en) | Methods and systems for distributing software | |
US20160062754A1 (en) | Coordinating Application Deployment with a Platform Tier | |
US11941413B2 (en) | Managed control plane service | |
CN114239055A (zh) | 分布式数据库多租户隔离方法及系统 | |
US8122101B2 (en) | Methods and systems for distributing software | |
CN114546563A (zh) | 一种多租户页面访问控制方法和系统 | |
US20080163200A1 (en) | Methods and systems for distributing software | |
Mohamed et al. | SaaS dynamic evolution based on model-driven software product lines | |
WO2023160418A1 (zh) | 资源处理方法及资源调度方法 | |
US7707543B2 (en) | Architecture for a computer-based development environment with self-contained components and a threading model | |
US10379973B2 (en) | Allocating storage in a distributed storage system | |
CN114090969B (zh) | 多级多租户交叉授权管理方法 | |
US20080162619A1 (en) | Methods and systems for distributing software | |
US7159012B2 (en) | Computational data processing system and computational process implemented by means of such a system | |
JP5675925B2 (ja) | 設計モデルのオブジェクトデータの一時的分離方法 | |
US20090293064A1 (en) | Synchronizing shared resources in an order processing environment using a synchronization component | |
US20230418957A1 (en) | Providing programs for control devices of technical equipment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |