Рассмотрим случай использования:Как вы развертываете EAR для Wildfly с разными версиями JAR, чем Wildfly?
Мы используем для 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
Я согласен с вашим желанием упаковать все необходимые библиотеки и не ссылаться на модули wildfly, однако это не работает в Wildfly8.2. Даже через указанные версии каждого зависимого JAR находятся в соответствующих EAR, Wildfly использует версию из своих основных модулей. На основе [этой документации] (https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly#ClassLoadinginWildFly-ClassLoading%26nbsp%3BPrecedence) библиотекаX-vX.jar загружается как зависимость основного модуля Wildfly, который неявно добавлен. – peterl
Конечно, классы модулей Wildfly также будут использовать версию модуля библиотеки, а не ту, которую вы упаковали в EAR. Но как это влияет на вашу настройку? Где происходит обмен объектов между модулем wildfly и обоими приложениями? Какой модуль вы используете? Пожалуйста, напишите немного больше информации (код, jboss-deployment-structure.xml, ...) – shillner
Вы можете увидеть все неявные зависимости, добавленные сервером, и исключить те из них, которые могут быть проблемой. https://docs.jboss.org/author/display/WFLY8/Implicit+module+dependencies+for+deployments#Implicitmoduledependenciesfordeployments-Whicharetheimplicitmoduledependencies%3F –