TW7类加载优先友商对比

类加载策略需求文档

  1. 需求概述
    支持类加载策略的配置,包括父类优先、子类优先两种加载方式并可以通过过滤方式反向调整单个或者多个类的优先级顺序。

  2. 其他中间件实现
    2.1 weblogic 14.1.1.0中的实现。
    weblogic.xml中配置以下参数,来设定加载顺序:

1、 prefer-application-packages、prefer-application-resources

可以指定包名,始终由应用加载(需要2中的配置prefer-web-inf-classes为false)。

区别:
prefer-application-packages:应用类加载器优先于容器去加载
prefer-application-resources:只在应用类加载器中搜索。

2、 prefer-web-inf-classes
设置为true,加载顺序为:
1) Web应用程序WEB-INF目录中的类,
2) 应用程序或系统类加载器中加载的类。

参考地址:
https://docs.oracle.com/en/middleware/standalone/weblogic-server/14.1.1.0/wbapp/weblogic_xml.html#GUID-56955103-7F68-44B9-8D14-137BCDD904ED

2.2 BES中的实现
通过配置bes-web.xml中class-loader元素来设定加载顺序(Ejb通过bes-ejb-jar.Xml中相同元素),overridablePackages(环境变量)指定排除的包名。
class-loader包含delegate、filter集合;filter包含package-name(要过滤的包名)、class-name(类名)、resource-file(资源文件)、resources-scope、scope。

加载class时,逻辑如下:
1、 delegate配置为true或者overridablePackages包名中包含有该class,判定delegate为true,即父加载优先。
2、 当父加载优先并且filter中包名类名都不包含class时、或者子加载优先并且filter中包含class时,由父加载器优先加载;否则,子加载器优先加载。
也就是说,如果filter中包含class,则与delegate的设定反向加载
3、 如果class的scope为self时,当前类加载器加载不到时,抛出ClassNotFoundException。比如:如果是父加载器优先加载,父加载器加载不到,子加载器不会继续尝试加载。
加载resource时,加载逻辑同上,scope是单独的resources-scope来设定。

  1. Tongweb实现
    3.1 Web应用
    配置tongweb-web-app.xml文件:

1、prefer-app-packages

可以指定包名、类名、资源文件,配置后,始终由应用加载,若应用类加载器加载不到则抛出异常。

2、prefer-app-resources

可以指定资源文件,配置后,只在应用类加载器中搜索。

3.2 EAR应用
配置tongweb-ejb-jar文件:

1、 prefer-app-packages、prefer-app-resources配置说明同3.1中相同。

2、EAR中包含多个ejb应用时,会合并配置,包含的war包按3.1中Web应用的逻辑。

注:扫描注解时,容器类加载器会扫描到EAR中WAR包内的类,会加载进来,但是实际使用的还是web应用类加载器加载的CLASS实例(可以将war包中的类配置到tongweb-ejb-jar.xml文件中,即可避免)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值