4

在我的 WebSphere 8 应用服务器上,默认的类加载顺序是parent_first(尝试从应用服务器类加载器加载,然后才从 EAR 类加载器加载)。
这会在我的应用程序对 Apache 的 HttpClient 的使用和 WebSphere 的内部使用之间产生冲突。
我正在考虑将加载顺序切换到parent_last( WebLogic 中的 prefer-web-inf-classes)。

将 Java EE 应用程序类加载顺序翻转到 parent_last 时需要注意哪些陷阱?

4

2 回答 2

2

应该没有。

PARENT_LAST允许您的应用程序使用类和 jar 进行分发,否则这些类和 jar 会与 WebSphere 的冲突。ClassClassException当两个不同的不兼容类加载器加载 WebSphere AS 和您的应用程序中的类时,将使用该设置。

WebSphere Application Server 8.0 信息中心的类加载器中描述了类PARENT_FIRST加载PARENT_LAST器模式。

人们倾向于将 jar 包捆绑在应用程序中,这会使部署时间更长、内存消耗更高并且(库)管理更加困难。

对于开发人员来说,将所有内容保存在应用程序中显然更容易,因此他们不必描述管理员必须设置的共享库(或 OSGi 存储库)。

PARENT_LAST除非我们假设在应用程序中分发 jar 是一件好事,否则我想不出有帮助的情况(我会争论这一点)。

应用程序中的 jar 越少越好:

  1. 当通过共享库或 OSGi 存储库修复问题时,应用程序可以从升级其 jar 中受益,这将简化其维护
  2. 应用程序可以共享库,从而降低内存期望并提高可重用性(显然部署变得更快)

可能有更多的理由不在应用程序中捆绑 jar,这会进一步减少PARENT_LAST配置设置。

坚持下去,PARENT_FIRST直到他们告诉你他们有理由改变,当它发生时你告诉他们答案;-)

于 2013-01-17T10:49:40.783 回答
1

了解 IBM Software Developers Kit (SDK) for Java > 类加载

[委托模型] 通过假定与核心 API 的一部分相同的名称来防止来自不太受信任的来源的代码替换受信任的核心 API 类。

因此,PARENT_LAST似乎存在应用程序由于版本不兼容而必须覆盖基类的情况,但这样做也可能会削弱安全性。

于 2013-01-17T13:41:38.303 回答