Я испытываю затруднения, когда пытаюсь отправить в свой EAR мою собственную версию Hibernate (а не ту, которую JBoss приносит по умолчанию).
Затем я сделал развертывание «ограниченным», включив в EAR файл jboss-app.xml, содержащий следующее:
<jboss-app>
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
И, как обычно, я объявляю моего провайдера персистентности в модуле персистентности Hibernate следующим образом:
<persistence>
<persistence-unit name="myapp">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
...
Но тогда случается худшее. При развертывании сервер генерирует исключение ClassCastException при попытке привести из org.hibernate.ejb.HibernatePersistence к интерфейсу JPA javax.persistence.spi.PersistenceProvider (что подразумевается HibernatePersistence ).
Это своего рода странно, потому что я отправляю API JPA также в моем EAR, поэтому, учитывая, что классы EAR имеют приоритет над классами JBoss, у него не должно возникнуть проблем при приведении из HibernatePersistence к PersistenceProvider, так как они "должны быть" в одном загрузчике классов.
Если я не отправляю свой собственный API JPA, то развертывание завершается ошибкой с ClassNotFoundException, когда JBoss пытается найти какой-либо класс JPA.
Есть идеи, почему этот кастинг не удался?
Я использую JBoss 5.1.0 и пытаюсь использовать Hibernate 3.5.6.Final. Версия API JPA является транзитивно импортированной упомянутой версией Hibernate.