JavaEE应用类加载冲突分析方法和装置的制造方法

文档序号:8380809阅读:311来源:国知局
JavaEE应用类加载冲突分析方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机应用技术领域,尤其涉及一种JavaEE应用类加载冲突分析方法和装置。
【背景技术】
[0002]Java应用程序的执行通常依赖于多个jar文件和Java虚拟机(Java VirtualMachine,简称JVM),其中,jar文件包括类文件(后缀为.class的文件),而且类文件需要加载到JVM中才能运行。
[0003]在JVM中负责加载类文件的组件称为类加载器,JVM本身包含了一个类加载器,称为引导类加载器,引导类加载器是用本地代码实现的,它负责加载Java的核心类,如Java_home/jre/rt.jar (Java_home为JDK的安装目录)中的类,除了引导类加载器之外,JVM还提供了两个类加载器,分别为扩展类加载器和系统类加载器,它们均用Java语言实现的,其中,扩展类加载器负责加载Java的扩展类,如Java_home/jre/lib/ext目录下jar文件中的类,系统类加载器负责加载应用程序自身需要的类,如通过“-classpath”参数指定的类和系统环境变量“CLASSPATH”指定的类。除了引导类加载器之外,每个类加载器都可以设置其父类加载器,最高级的父类加载器为引导类加载器,这样就可以形成一个类加载器链。
[0004]JVM默认采用的类加载模型是父优先加载模型,也叫委托模型或双亲委派模型,在这种模型下,子类加载器在加载一个类的时候首先委托父类加载器来加载,以此类推,如果所有的父类加载器都不能加载到,那么子类加载器再进行加载。另外,JVM也提供了自定义类加载器,自定义类加载器在加载类的时候可以不按照父优先加载模型来进行,例如子类加载器可以优先加载,如果加载不到再由父类加载器加载,这样的类加载模型称为子优先加载模型。JavaEE应用服务器既支持父优先加载模型也支持子优先加载模型。
[0005]在JVM中,一个类加载器会对已经加载过的类作缓存处理,在加载一个类的时候先在缓存中查找是否已经加载过,如果已经加载过则不再进行加载,如果没有加载过则再进行加载,即同一个类只会被加载一次;同时,不同的类加载器各自管理已加载过类的缓存,这些缓存对其它类加载器是不可见的。
[0006]在对现有技术的研宄和实践过程中,发明人发现现有技术中至少存在如下技术问题:
I)由于同一个类只会被加载一次,在JavaEE应用的类路径中不同jar文件存在类全名相同的类的情况下,不能保证能够加载到预期的类,这样就会导致Java程序运行出错,例如,对于一个JavaEE应用的类路径中一个jar文件的多个版本,程序加载了不正确的版本会导致程序运行出错。
[0007]2)由于不同类加载器管理的已加载类的缓存对其它类加载器不可见,那么就有可能出现同一个类被多次加载的现象,例如,一个JavaEE应用的类加载器采用子优先类加载,即在加载类时优先从自身类路径中加载,如果能够加载则进行加载,而恰好父类加载器也已经加载过此类,这就出现了同一个类被多个类加载器多次加载的现象,而在JVM中认为不同类加载器加载的类为不同的类,即这些类的类型是不兼容的,从而使得在类型转换等操作中导致程序运行出错。
[0008]3)由于JVM不会立即加载类路径中的全部类,而是在程序运行时根据需要来加载的,这样由类加载导致程序运行出错并不会立即暴露,从而形成了程序运行中的潜在风险。
[0009]由此可见,现有的JavaEE应用类加载机制存在潜在的类加载冲突风险,而且定位潜在的冲突类并不是很容易的,尤其是在JavaEE应用中包含了大量的jar文件的情况下,定位潜在冲突类会更加困难。

【发明内容】

[0010]本发明提供一种JavaEE应用类加载冲突分析方法和装置,能够实现对JavaEE应用程序运行中潜在的类加载冲突风险的全面分析,以及时确定潜在的冲突类。
[0011]一方面,本发明提供一种JavaEE应用类加载冲突分析方法,所述方法包括: 获取待分析应用对应的类加载器链;
基于所述类加载器链,对所述待分析应用的所有非重复类文件进行冲突分析,以确定潜在的冲突类。
[0012]另一方面,本发明提供一种JavaEE应用类加载冲突分析装置,所述装置包括类加载器管理模块和类加载冲突分析模块,其中,
所述类加载器管理模块,用于获取待分析应用对应的类加载器链;
所述类加载冲突分析模块,用于基于所述类加载器链,对所述待分析应用的所有非重复类文件进行冲突分析,以确定潜在的冲突类。
[0013]本发明提供的JavaEE应用类加载冲突分析方法和装置,获取待分析应用对应的类加载器链;基于所述类加载器链,对所述待分析应用的所有非重复类文件进行冲突分析,以确定潜在的冲突类。与现有技术相比,其能够基于所述类加载器链,实现对JavaEE应用程序运行中加载的类文件进行全面地分析,以便于及时发现潜在的冲突类,进而避免了不必要的应用程序运行错误,提高了应用程序运行的稳定性。
【附图说明】
[0014]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0015]图1为本发明JavaEE应用类加载冲突分析方法的一实施例流程示意图;
图2为本发明JavaEE应用类加载冲突分析方法的另一实施例的流程图;
图3为上述实施例中的所述类加载器链的结构示意图;
图4为本发明JavaEE应用类加载冲突分析装置的一实施例结构示意图;
图5为本发明JavaEE应用类加载冲突分析装置的另一实施例结构示意图。
【具体实施方式】
[0016]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0017]如图1所示,本发明实施例提供一种JavaEE应用类加载冲突分析方法,所述方法包括:
SI 1、获取待分析应用对应的类加载器链。
[0018]S12、基于所述类加载器链,对所述待分析应用的所有非重复类文件进行冲突分析,以确定潜在的冲突类。
[0019]本发明实施例提供的JavaEE应用类加载冲突分析方法,获取待分析应用对应的类加载器链;基于所述类加载器链,对所述待分析应用的所有非重复类文件进行冲突分析,以确定潜在的冲突类。与现有技术相比,其能够基于所述类加载器链,实现对JavaEE应用程序运行中加载的类文件进行全面地分析,以便于及时发现潜在的冲突类,进而避免了不必要的应用程序运行错误,提高了应用程序运行的稳定性。
[0020]如图2所示,本发明实施例提供一种JavaEE应用类加载冲突分析方法,所述方法包括:
S21、判断待分析应用的部署情况,若所述待分析应用为已部署应用,则执行步骤S22和S23 ;若所述待分析应用为未部署应用,则执行步骤S24。
[0021]S22、根据所述待分析应用的名称获取对应的应用类加载器。
[0022]S23、基于所述应用类加载器获取所述待分析应用对应的类加载器链,并进入步骤S27。
[0023]S24、为所述待分析应用创建应用类加载器。
[0024]S25、根据所述待分析应用的物理地址获取所述待分析应用包含的所有类文件,并将所述所有类文件添加到所述创建的应用类加载器的类加载路径中。
[0025]S26、根据JavaEE服务器提供的接口获取公共类加载器,并设置所述创建的应用类加载器的父类加载器为所述公共类加载器,以获取所述获取待分析应用对应的类加载器链。
[0026]其中,所述公共类加载为所述JavaEE服务器中所有已部署应用的父加载器。
[0027]S27、解析步骤S23或S26得到的所述类加载器链,以获取所述类加载器链上所有类加载器的类加载路径和所述类加载路径中所包含的类文件。
[0028]S28、对所述类加载路径中所包含的类文件进行去重处理,以得到所述待分析应用包含的所有非重复类文件。
[0029]可选地,若所述类加载路径中为文件夹,则以递归方式获取所述类加载路径中所包含类文件;若所述类加载路径中为jar文件,则以解压方式获取所述类加载路径中所包含的类文件。
[0030]S29、针对所述所有非重复类文件,在所述类加载器链中所有类加载器的类加载路径中进行查找操作,以得到所述潜在的冲突类和相应的冲突信息,并对所述潜在的冲突类进行标记。
[0031]其中,所述冲突类为可以在至少两个类加载路径中查找到的非重复类文件,所述冲突信息包括所述冲突类可以被哪些类加载器加载以及所述冲突类可以从哪些类文件中加载。
[0032]由此可见,本发明实施例提供的JavaEE应用类加载冲突分析方法是基于一条类加载器链,对待分析应用包含的所有非重复类文件进行类加载冲突分析,以确定潜在的冲突类。其中,所述类加载器链的结构如图3所示,由图3可知,对于对待分析应用包含的所有非重复类文件,在JavaEE应用类加载器31的类加载路径、JavaEE服务器类加载器32的类加载路径和Java虚拟机提供的三个类加载器的类加载路径中进行类加载冲突分析,以确定潜在的冲突类,其中所述三个类加载器分别为JavaEE系统类加载器33、JavaEE扩展类加载器34和JavaEE引导类加载器35。与现有技术相比,其能够基于所述类加载器链,实现对JavaEE应用程序运行中加载的类文件进行全面地分析,以便于及时发现潜在的冲突类,进而避免了不必要的应用程序运行错误,提高了应用程序运行的稳定性。
[0033]另外,本发明实施例对于已部署应用和未部署应用采用统一的处理方式,从而简化了具体实施的复杂性。
[0034]如图4所示,本发明实施例提供一种JavaE
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1