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