2

We regularly have problems with old jars residing in the app-servers but newer jars deployed in our ears. Appserver chooses to load old jar and application throws "UnsupportedMethod" Exceptions or similar.

For main application servers (websphere, jboss, weblogic ...), how can I configure classloader policy for single jars?

( e.g. in wwebsphere there is class-loading policy "parent-first / application-first" but this is global for the application and will change behavior for many many jars, while the issue is only with one single jar..., for weblogic there is weblogic-application.xml IIRC etcpp. )

This is intended as a collection call, please describe the correct way to configure this in the application server of your choice (not only websphere please).

4

3 回答 3

1

在 WAS 中,无法控制 JAR 级别的类加载。我不太明白为什么您不能使用 Parent Last 策略,因为它是避免不必要的依赖项的自然且安全的方法。

如果您仍然需要处理 JAR 级别的依赖关系,您可能会发现Web 应用程序包很有用。这是基于提供完全不同的类加载模型的 OSGi。

于 2013-09-19T19:54:49.590 回答
1

所以你只能在特定的类加载器上控制类加载。在 websphere 中,有一个特性可以使用指定的“委托模式”或类加载器策略创建您自己的自定义类加载器,即父级最后或父级优先。因此,您的选择是创建一个自定义类加载器,其中包含您的依赖 jar-file/s,并将类加载器策略指定为类加载器的“最后一个父级”。

另一个选项是 WAR 类加载器策略,即如果依赖来自特定的 web 模块。然后你必须把你的 jar/s 放到那个 WAR 中的 web-inf/lib 中。

请注意,仍然存在风险,因为将有多个版本的“相同”类驻留在同一个 JVM 堆空间中,那些由 Websphere 类加载器加载,而那些由您的自定义类加载器加载。这意味着存在类版本冲突的风险,您的代码将遭受 ClassCastExceptions 和 LinkageErrors。

有关更多信息,请在此处阅读: http://pic.dhe.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic= %2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Fttrb_classload_viewer.html

于 2013-09-20T08:13:37.243 回答
1

单个 jar 的中间立场是将它们放入 websphere “共享库”中,该库将在产品拥有 jar 之前进行搜索,而无需更改为整个模块的 parent-last。

这是“隔离”共享库的教育链接,共享库的可选进一步设置:

http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.was_v7/was/7.0/Administration/WASv7_IsolatedSharedLibraries/player.html

于 2013-09-22T16:17:58.407 回答