【发布时间】:2015-10-03 20:11:18
【问题描述】:
考虑这个用例:
我们部署到 Wildfly 8.2,其中包括许多依赖项,隐含地包括在应用服务器本身的类加载器中。示例包括诸如 HttpClient 之类的东西。为了在我的示例中说明这一点,我们将其命名为:libaryX-v1.jar。
我们将多个 EAR 部署到同一个安装中,这些 EAR 由我们组织内的多个团队提供,它们处于不同的发布和预算周期。
TeamA.ear 需要 libraryX-v1.jar 并且已使用该版本进行了全面测试和认证。
TeamB.ear 需要libraryX-v2.jar,尤其是满足此团队要求的新功能,这些功能不包含在任何其他版本中。
我们如何将这两个 EAR 部署到 Wildfly?
如果 TeamA 有预算使用 librayX-v2.jar 进行测试和获得认证,那么显而易见的解决方案是在 Wildfly 中升级该模块。
当我们将libraryX-v2.jar 添加到TeamB.ear 时,我们得到以下异常:
java.lang.LinkageError: loader constraint violation: when resolving method "org.apache.Example.<init>(Lorg/whatever/sharedClass;)V"
the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, com/company/teamB/exampleService, and
the class loader (instance of org/jboss/modules/ModuleClassLoader) for the method's defining class, org/apache/Example,
have different Class objects for the type org/whatever/sharedClass used in the signature
【问题讨论】:
标签: java jboss classloader wildfly wildfly-8