WAS 调整类加载顺序

给自己备忘下该问题,解决方法、was类加载机制

1. java的类加载器:


JAVA类加载器分为3层——引导加载器、扩展加载器、应用程序加载器,类加载遵循"父委托模式".

引导加载器(Bootstrap): 加载<JAVA_HOME>/jre/lib 下的vm.jar,core.jar等核心

扩展加载器(Extensions):   加载<JAVA_HOME>/jre/lib/ext  或者通过java.ext.dirs 这个系统属性指定的路径下的代码

应用程序加载器(Application):  加载java.class.path下的代码(就是我们程序及程序依赖的第三方类)

2. websphere类加载模型



JVM ClassLoader层(包含上述的JAVA 3个层次的类加载器)——>WebSphere Extensions Classloader——>WebSphere "server" Class loader——>Application Classloader(包含有Application Module Classloader和Web Module ClassLoader.这2个类加载器上可以设置类加载顺序)

3.默认类加载顺序(父类优先)

Websphere采用的是父类优先的类加载顺序。通过websphere控制台——故障诊断——类装入器查看器 我们可以看到一个应用在websphere上部署完成启动后真正形成的类加载层次:



如图,类加载层次是:

JDK扩展装入器(也就是java类加载器中的扩展加载器(Extensions))——应用程序装入器应用程序加载器(Application)——OSGI(was6.1新特性)装入、引导程序、类保护器——组合类装入器——组合类装入器

4.改变类加载顺序(应用程序优先)

这里是关键。我一直认为改变WAS中的类加载顺序,调整的是WAS扩展出来的那些类加载层次:也就是上面的“OSGI(was6.1新特性)装入、引导程序、类保护器——组合类装入器——组合类装入器”顺序的改变。

实际情况是:



可以看到,事实上的情况是,改变了类加载顺序之后,最低级的2个类加载器竟然排到了扩展加载器(Extensions)之上,仅在引导加载器(Bootstrap)之后,也就是说:

“应用程序优先”的类加载顺序的结果是:

引导加载器(Bootstrap)——原来最低级的web和module加载器——扩展加载器(Extensions)——应用程序加载器(Application)——was扩展classloader、WAS应用程序类加载器

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值