У меня есть военное приложение, которое содержит API JPA 2.1 и Hibernate 4.3.0.Final(реализация JPA 2.1), упакованные и загруженные с использованием контейнера Spring, и я хочу развернуть это в JBoss EAP 6.1.
Я знаю, что JBoss EAP 6.1 является совместимым с JPA 2.0, поэтому я решил заставить JBoss использовать версию JPA и реализацию из моего приложения
То, что я пытался сделать, это исключить подсистему JPA с помощью jboss-deployment-structure.xml, но я обнаружил, что даже если я прокомментирую расширение JPA и подсистему JPA от standalone.xml и исключу подсистемы JPA в jboss -deployment-structure.xml(также исключается модуль org.hibernate для использования спящего режима, упакованного в приложение), сканеры JPA не выполняются (как ожидалось), но в любой момент из военного класса (в моем случае Spring) относится к классам javax.persistence, API загружается из модулей JBoss (modules/system/layers/base/javax/persistence/api/main/hibernate-jpa-2.0-1.0.1.Final-redhat -2.jar!) INSTEAD из контейнера API, поставляемого в поставляемой войне. Поэтому, очевидно, я получаю исключение из-за несоответствия в API-интерфейсе JBoss (2.0) и его (2.1) в военном применении. Одним из исключений является, например, связанное с индексом свойство аннотации javax.persistence.Table не распознается, поскольку это добавление в JPA 2.1 и недоступно в JPA 2.0
Я мог бы обойти эту проблему, заменив JPA 2.0 API в каталоге модулей JPA 2.1 (и указав module.xml на новую банку API 2.1), и все сработало нормально. Однако я думаю, что это не правильный путь, поскольку это похоже на попытку изменить поведение сервера для всех приложений.
Является ли это преднамеренным поведением JBoss для загрузки классов, что все классы API спецификации (из которых JBoss является разработчиком) всегда будут иметь приоритет независимо от того, что используется в реализации, и независимо от того, что мы говорим ему использовать конкретный API из приложения. Я думаю, что создание конкретного сервера, совместимого со спецификациями, и предоставление способ переопределения самой версии спецификации несколько противоречив, но есть ли способ, с помощью которого я могу чисто использовать API и реализацию из моего приложения?
Другим вариантом было бы перейти на Wildfly, который является реализацией JPA 2.1, но мой вопрос заключается в том, насколько это возможно в JBoss EAP 6.1?