运行时类提取的方法和系统的制作方法

文档序号:6598214阅读:93来源:国知局
专利名称:运行时类提取的方法和系统的制作方法
技术领域
本发明涉及Java运行时环境,尤其涉及提取各种应用的运行时类的装置。
背景技术
软件库是相关目标代码的集合,比如Java语言中的Java类的使用。软件库一般 封装在比如Java存档(Jar)文件的模块中。在Java环境中,在运行时,类装载器负责定位 库,读取其内容,和把包含在库中的类装载到Java虚拟机(JVM)中。通常类是在程序实际 使用这些类中的每个类时按需装载的。类装载器使运行时系统不需要了解底层文件系统及 其中文件的准确结构。企业级软件应用,比如应用服务器,能够包括许多模块或者Jar。每个独立模块或 Jar只包含更大应用中的功能的子集。类装载器能够把企业级软件应用的不同模块或Jar 装载到虚拟机中,从而提供某些功能。在一些情况下,不是每个模块或Jar都被装载到虚拟 机中,因为仅仅使用企业级软件应用的功能的子集。这正是本发明的实施例意图应用于的
一般领域。

发明内容
按照一个实施例,在虚拟机上运行的应用包括多个运行时类。类装载器能够把多 个运行时类中的一个或多个运行时类装载到虚拟机中,以支持对应用的操作。另外,类装载 器能够记录所述一个或多个运行时类中的每个运行时类的上下文信息。根据记录的每个运 行时类的上下文信息,能够提取所述一个或多个运行时类。在一个方面中,一种提取运行时类的方法包括在虚拟机中建立系统类装载器; 支持对在所述虚拟机上运行的应用执行的操作,其中所述应用与多个运行时类关联,并且 所述操作与所述多个运行时类中的一个或多个运行时类关联;确定所述一个或多个运行时 类中的每个运行时类的类路径信息,其中上下文信息使系统类装载器能够定位所述运行时 类,以便将所述运行时类装载到所述虚拟机中;借助所述系统类装载器,记录所述一个或多 个运行时类的类路径信息;和根据记录的类路径信息,提取所述一个或多个运行时类。在另一个方面中,一种提取运行时类的系统包括系统类装载器;在虚拟机上运 行的应用,其中所述应用包括多个运行时类,其中所述多个运行时类中的每一个适于由所 述系统类装载器装载到虚拟机中;其中所述系统类装载器与所述虚拟机相关联,并且所述 系统类装载器操作以支持对在所述虚拟机上运行的所述应用执行的操作,其中所述应用 与多个运行时类相关联,并且所述操作与所述多个运行时类中的一个或多个运行时类相关 联;确定所述一个或多个运行时类中的每个运行时类的类路径信息,其中上下文信息使系 统类装载器能够定位所述运行时类,以便将所述运行时类装载到所述虚拟机中;借助所述 系统类装载器,记录所述一个或多个运行时类的类路径信息。在另一个方面中,一种提取运行时类的系统包括用于在虚拟机中建立系统类装 载器的装置;用于支持对在所述虚拟机上运行的应用执行的操作的装置,其中所述应用与多个运行时类相关联,并且所述操作与所述多个运行时类中的一个或多个运行时类相关 联;用于确定所述一个或多个运行时类中的每个运行时类的类路径信息的装置,其中上下 文信息使系统类装载器能够定位所述运行时类,以便将所述运行时类装载到虚拟机中;用 于借助所述系统类装载器,记录所述一个或多个运行时类的类路径信息的装置;和用于根 据所记录的类路径信息,提取所述一个或多个运行时类的装置。


图1是表示按照一个实施例,虚拟机中的运行时类提取器的一个例子的示图。图2是表示按照一个实施例,在JVM类装载器层次和委托模型中的运行时类提取 器的一个例子的示图。图3是按照一个实施例的在虚拟机中提取运行时类的方法的流程图。
具体实施例方式附图中举例图解说明了本发明,但不是对本发明的限制,附图中相似的附图标记 表示相似的元件。应注意本公开中对“一个”或“一些”实施例的引用不一定指的是相同的 实施例,这种引用意味至少一个。下面的本发明的实施例的描述使用WebLogic 应用服务器功能或库作为应用 服务器功能或库的例子。对本领域的技术人员来说,显然可以使用其它种类的应用服务器 功能或库,而不受限制。按照一个实施例,企业级应用服务器可包括许多模块或Jar。可以创建独立的模块 或Jar,以包含较大应用中的特定功能子集。创建独立的模块或Jar以只包含特定功能子集 的优点在于当仅需要一个功能子集时,通过不包括不必要功能的类或源文件,减小系统和/ 或应用的整个占用空间(footprint)。例如,可在web服务客户端侧的独立环境中提供web服务客户端Jar,而不安装应 用服务器。可以选择类的最小集合来满足运行时的所有客户端特征的需要,并且仍然使占 用空间保持尽可能地小。按照一个实施例,选择类的最小集合的一种方法是分析实现企业级应用服务器的 源代码,并选择客户端应用在运行时所需要的相关类和文件。不过,逐类地分析源代码(包 括考虑每个类的依存关系)通常需要相当大量的时间。按照一个实施例,选择类的最小集合的一种备选方法是使用运行时类提取器,所 述运行时类提取器能够记录当对应用执行一个或多个特定功能时所有装载的运行时类。图1是表示按照一个实施例,虚拟机中的运行时类提取器的例子的示图。如图1 中所示,应用101在包括多个运行时类110、111、112、113和114的虚拟机100上运行。这 些运行时类可包含在几个不同的模块或Jar 107和108中。按照一个实施例,相同的运行 时类A. Class 110和113可被包含在不同的Jar 107和108中。另外,虚拟机100与类装 载器102关联,类装载器102能够把运行时类110、111、112、113和114中的每一个装载到 虚拟机100中。应用101提供能够由用户执行的一种或多种操作。每种操作是基于由类装载器 102载入的一个或多个运行时类110、111、112、113或114执行的。按照一个实施例,类装载器102被修改为记录当执行所述一种或多种操作时使用的一个或多个运行时类。按照一个实施例,在运行时,虚拟机,比如Java虚拟机(JVM),使用动态类装载装 置把需要的类从类路径定义装载到JVM中。运行时类提取器使用负责装载类并把选择的运 行时类记录到文件中的记录类装载器。系统类装载器被配置成保证所有需要的类都由该记 录类装载器装载。图2是表示按照一个实施例,JVM类装载器层次和委托模型中的运行时类提取器 的一个例子的示图。如图2中所示,所有的Java运行时类装载器直接或间接地委托给引导 类装载器201 (通常称为基本类装载器)。在应用的正常执行期间,使用应用类装载器203 通过扩展类装载器202把各种运行时类装载到虚拟机中。系统类装载器204可被用于提取运行时类。系统类装载器204是一种自定义的类 装载器,它能够被设置成使用其它子级类装载器205,并且通过定义类装载器的类名和虚拟 机能够定位系统装载器的路径,能够在虚拟机中被启动。例如,可利用选项:Djava. system, class, loader 禾口 Xbootclasspath 在 JVM 内规定Java类装载器。Djava. system, class, loader选项定义类装载器的类名; Xbootclasspath选项定义系统装载器所位于的路径。按照一个实施例,系统类装载器204能够把其功能内部委托给另一个类装载器 207,以接收类路径URL定义。受委托的类装载器207可以是扩展自URL类装载器206的记 录类装载器。当受系统类装载器委托时,受委托的类装载器或者记录类装载器207能够工 作,从而代替应用类装载器203装载运行时类。按照一个实施例,记录类装载器207能够根据预定的目标类路径208定位类。例 如,由类装载器用于定位运行时类或Jar的实际CLASSPATH定义可以采取“pre_URLs ;ce_ URLs ;post_URLs” 的形式。按照一个实施例,可以分多个部分地定义目标类路径,比如pre_ClaSSpath,ce_ classpath和post^lasspath。如果在运行时装载特定模块或者jar内的一个或多个类, 那么目标类路径的ce^lasspath部分定义需要被记录的模块或Jar。pre^lasspath部分 定义包括Java平台中的API Jar或库,比如JDK库(tools, jar)的模块或Jar。按照一个 实施例,在运行时不需要记录这些Jar或者出自这些Jar的类。类似地,不需要记录出自目 标类路径的poSt_ClaSSpath部分的模块或Jar中的类。在post^lasspath部分中定义的 模块或Jar包括还在另一个jar中定义的一个或多个类,所述另一个jar在目标类路径的 ce-classpath部分中被定义。例如,Al. jar包括A. class,B. class禾口C. class ;A2. jar包括A. clsaa禾口D. class ; Al. jar定义在ce-classpath中,并且Al. jar中的所有类都需要被记录。从而,需要在 post_classpath 中定义 A2. jar,因为 A2. jar 包括 A. class (它是在 ce-classpath 中定义 的Al. jar的一部分),和不需要被记录的D. class。按照一个实施例,可把运行时类的上下文信息记录到记录文件中。这种上下文信 息包括类的全限定名称(full-qualified name)和实际位置。另外,记录文件可使用如表 1中所示的格式。
权利要求
1.一种提取运行时类的方法,包括 在虚拟机中建立系统类装载器;支持对在所述虚拟机上运行的应用执行的操作,其中所述应用与多个运行时类关联, 并且所述操作与所述多个运行时类中的一个或多个运行时类关联;确定所述一个或多个运行时类中的每个运行时类的类路径信息,其中上下文信息使系 统类装载器能够定位所述运行时类,以便将所述运行时类装载到所述虚拟机中; 借助所述系统类装载器,记录所述一个或多个运行时类的类路径信息;和 根据记录的类路径信息,提取所述一个或多个运行时类。
2.按照权利要求1所述的方法,还包括把所述多个运行时类包含在一个或多个模块中。
3.按照权利要求2所述的方法,还包括如果记录了包含在所述一个或多个模块中的至少一个模块中的至少一个运行时类,则 将所述至少一个模块记录在文件中。
4.按照权利要求1所述的方法,还包括将所述一个或多个运行时类拷贝到新产生的模块中。
5.按照权利要求4所述的方法,还包括把新产生的模块添加到能够被应用类装载器使用的目标类路径中。
6.按照权利要求1所述的方法,还包括选择类的最小集合,所述类的最小集合能够支持一个或多个操作的执行。
7.按照权利要求1所述的方法,还包括从预定的目标类路径装载所述一个或多个运行时类。
8.按照权利要求7所述的方法,还包括在预定的目标类路径的一个部分中定义所述一个或多个运行时类。
9.按照权利要求1所述的方法,还包括删除除了所述一个或多个运行时类之外的所述多个运行时类。
10.按照权利要求1所述的方法,还包括通过所述系统类装载器,将类装载和记录处理委托给受委托类装载器。
11.一种提取运行时类的系统,包括 系统类装载器;在虚拟机上运行的应用,其中所述应用包括多个运行时类,其中所述多个运行时类中 的每一个适于由所述系统类装载器装载到虚拟机中;其中所述系统类装载器与所述虚拟机相关联,并且所述系统类装载器操作以 支持对在所述虚拟机上运行的所述应用执行的操作,其中所述应用与多个运行时类相 关联,并且所述操作与所述多个运行时类中的一个或多个运行时类相关联;确定所述一个或多个运行时类中的每个运行时类的类路径信息,其中上下文信息使系 统类装载器能够定位所述运行时类,以便将所述运行时类装载到所述虚拟机中;以及 借助所述系统类装载器,记录所述一个或多个运行时类的类路径信息。
12.按照权利要求11所述的系统,其中所述多个运行时类包含在一个或多个模块中。
13.按照权利要求12所述的系统,其中如果记录了包含在所述一个或多个模块中至少一个模块中的至少一个运行时类,则将 所述至少一个模块记录在文件中。
14.按照权利要求11所述的系统,还包括包含所提取的一个或多个运行时类的新产生的模块。
15.按照权利要求14所述的系统,其中所述新产生的模块被添加到与所述应用相关联的应用类装载器能够使用的目标类路 径中。
16.按照权利要求11所述的系统,还包括定义将被装载到虚拟机中的一个或多个运行时类的目标类路径。
17.按照权利要求16所述的系统,其中在预定目标类路径的一个部分中定义所述一个或多个运行时类。
18.按照权利要求11所述的系统,还包括被所述系统类装载器委托执行类装载处理的受委托类装载器。
19.按照权利要求11所述的系统,还包括根据所记录的类路径信息产生包含所述一个或多个运行时类的新产生模块的提取器。
20.一种提取运行时类的系统,包括 用于在虚拟机中建立系统类装载器的装置;用于支持对在所述虚拟机上运行的应用执行的操作的装置,其中所述应用与多个运行 时类相关联,并且所述操作与所述多个运行时类中的一个或多个运行时类相关联;用于确定所述一个或多个运行时类中的每个运行时类的类路径信息的装置,其中上下 文信息使系统类装载器能够定位所述运行时类,以便将所述运行时类装载到虚拟机中; 用于借助所述系统类装载器,记录所述一个或多个运行时类的类路径信息的装置;和 用于根据所记录的类路径信息,提取所述一个或多个运行时类的装置。
21.按照权利要求20所述的系统,还包括用于把所述多个运行时类包含在一个或多个模块中的装置。
22.按照权利要求21所述的系统,还包括用于如果记录了包含在所述一个或多个模块中的至少一个模块中的至少一个运行时 类,则将所述至少一个模块记录在文件中的装置。
23.按照权利要求20所述的系统,还包括用于将所述一个或多个运行时类拷贝到新产生的模块中的装置。
24.按照权利要求23所述的系统,还包括用于把新产生的模块添加到能够被应用类装载器使用的目标类路径中的装置。
25.按照权利要求20所述的系统,还包括用于选择类的最小集合的装置,所述类的最小集合能够支持一个或多个操作的执行。
26.按照权利要求20所述的系统,还包括用于从预定的目标类路径装载所述一个或多个运行时类的装置。
27.按照权利要求沈所述的系统,还包括用于在预定的目标类路径的一个部分中定义所述一个或多个运行时类的装置。
28.按照权利要求20所述的系统,还包括用于删除除了所述一个或多个运行时类之外的所述多个运行时类的装置。
29.按照权利要求20所述的系统,还包括用于通过所述系统类装载器,将类装载和记录处理委托给受委托类装载器的装置。
全文摘要
一种提取运行时类的方法和系统,包括在虚拟机中建立系统类装载器;支持对在所述虚拟机上运行的应用执行的操作,其中所述应用与多个运行时类关联,并且所述操作与所述多个运行时类中的一个或多个运行时类关联;确定所述一个或多个运行时类中的每个运行时类的类路径信息,其中上下文信息使系统类装载器能够定位所述运行时类,以便将所述运行时类装载到所述虚拟机中;借助所述系统类装载器,记录所述一个或多个运行时类的类路径信息;和根据记录的类路径信息,提取所述一个或多个运行时类。
文档编号G06F9/445GK102147734SQ201010110578
公开日2011年8月10日 申请日期2010年2月10日 优先权日2010年2月10日
发明者王强 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1