考虑这个用例:
我们部署到Wildfly 8.2,其中包含许多依赖项,包括应用程序服务器本身在类加载器中。例子包括像HttpClient这样的东西。为了在我的示例中说明这一点,我们将其称为:libaryX-v1.jar
。
我们将多个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