В нашем java-приложении мы должны использовать библиотеки apache CXF 3.0.0 и WSS4j 2.1.1. Чтобы избежать проблем с загрузчиком классов: Как я могу использовать Apache CXF 3.X и WSS4J 2.X из моего проекта уха, а не CXF и WSS4J (старее), которые установлены в модулях JBoss 6.3.0 EAP?
Как я могу использовать Apache CXF 3.X и WSS4J 2.X из моего проекта уха, а не CXF и WSS4J (более старые), которые установлены в модулях JBoss 6.3.0 EAP?
Ответы (1)
Поскольку загрузка классов JBoss является модульной, вы можете создать jboss-deployment-structure.xml
и исключить модули, связанные с CXF и WSS4J, в файле ear. Для справки см. эту вики-страницу. Вы можете найти имена отдельных модулей в папке модулей module.xml
файла.
Например, чтобы исключить модуль CXF-сервера:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.jboss.ws.cxf.jbossws-cxf-server"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
Очевидно, вам нужно будет убедиться, что ваш pom.xml
извлекает нужные артефакты для ваших версий CXF и WSS4J и не установлен в предоставленную область. В качестве альтернативы вы можете создать свою собственную папку пользовательского модуля JBoss и добавить туда библиотеки, если они будут совместно использоваться более чем одним приложением (помогает уменьшить размер ваших файлов EAR и WAR и централизованно управлять зависимостями в организации в контейнере). В этом случае вы можете установить его в предоставленную область.
Имейте в виду, что упаковка ваших собственных библиотек, вероятно, нарушит поддержку, поскольку они не являются частью битов реализации, предоставляемых контейнером.