jakarta-ee - 各种应用程序服务器中单个 jar 的类加载器策略?

标签 jakarta-ee jboss websphere weblogic

我们经常遇到应用程序服务器中驻留旧 jar 但在我们耳朵中部署新 jar 的问题。应用服务器选择加载旧的 jar,应用程序抛出“UnsupportedMethod”异常或类似异常。

对于主要应用程序服务器(websphere、jboss、weblogic ...),如何为单个 jar 配置类加载器策略?

(例如,在 wwebsphere 中,存在类加载策略“父级优先/应用程序优先”,但这对于应用程序来说是全局的,并且会改变许多 jar 的行为,而问题仅涉及一个 jar... ,对于 weblogic 有 weblogic-application.xml IIRC etcpp。)

这旨在作为一个集合调用,请描述在您选择的应用程序服务器(不仅仅是 websphere)中配置它的正确方法。

最佳答案

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

另一个选项是 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

关于jakarta-ee - 各种应用程序服务器中单个 jar 的类加载器策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897373/

相关文章:

java - 创建 QName 时本地部分不能是 "null"

spring - 如何知道当前 Web 访问者是否使用 Spring Security 3.0 登录

Eclipse: 期间发生内部错误: "Loading Web Service DOM..."。

java - 在不同网络上时的 JBoss UnknownHostException

java - JBoss AS 7 - 启动初始化后

java - Wildfly 10.0.0 最终版是否像Tomcat一样支持OCSP?

java - 在 Websphere 中获取 500 NullPointerException - Apache Wink Rest 服务

java - 如何在Linux环境下使用Java发送邮件?

java - Tomcat server.xml 解析器

java - 基于 POJO 生成 EJB3 带注释的 Bean