在我的 WebSphere 8 应用服务器上,默认的类加载顺序是parent_first(尝试从应用服务器类加载器加载,然后才从 EAR 类加载器加载)。
这会在我的应用程序对 Apache 的 HttpClient 的使用和 WebSphere 的内部使用之间产生冲突。
我正在考虑将加载顺序切换到parent_last( WebLogic 中的 prefer-web-inf-classes)。
将 Java EE 应用程序类加载顺序翻转到 parent_last 时需要注意哪些陷阱?
在我的 WebSphere 8 应用服务器上,默认的类加载顺序是parent_first(尝试从应用服务器类加载器加载,然后才从 EAR 类加载器加载)。
这会在我的应用程序对 Apache 的 HttpClient 的使用和 WebSphere 的内部使用之间产生冲突。
我正在考虑将加载顺序切换到parent_last( WebLogic 中的 prefer-web-inf-classes)。
将 Java EE 应用程序类加载顺序翻转到 parent_last 时需要注意哪些陷阱?
应该没有。
这PARENT_LAST
允许您的应用程序使用类和 jar 进行分发,否则这些类和 jar 会与 WebSphere 的冲突。ClassClassException
当两个不同的不兼容类加载器加载 WebSphere AS 和您的应用程序中的类时,将使用该设置。
WebSphere Application Server 8.0 信息中心的类加载器中描述了类PARENT_FIRST
加载PARENT_LAST
器模式。
人们倾向于将 jar 包捆绑在应用程序中,这会使部署时间更长、内存消耗更高并且(库)管理更加困难。
对于开发人员来说,将所有内容保存在应用程序中显然更容易,因此他们不必描述管理员必须设置的共享库(或 OSGi 存储库)。
PARENT_LAST
除非我们假设在应用程序中分发 jar 是一件好事,否则我想不出有帮助的情况(我会争论这一点)。
应用程序中的 jar 越少越好:
可能有更多的理由不在应用程序中捆绑 jar,这会进一步减少PARENT_LAST
配置设置。
坚持下去,PARENT_FIRST
直到他们告诉你他们有理由改变,当它发生时你告诉他们答案;-)
从 了解 IBM Software Developers Kit (SDK) for Java > 类加载:
[委托模型] 通过假定与核心 API 的一部分相同的名称来防止来自不太受信任的来源的代码替换受信任的核心 API 类。
因此,PARENT_LAST
似乎存在应用程序由于版本不兼容而必须覆盖基类的情况,但这样做也可能会削弱安全性。