Столкновение версии библиотеки jboss: java.lang.NoClassDefFoundError: org / hibernate / cfg / ExtendedMappings - PullRequest
0 голосов
/ 26 января 2012

Я использую hibernate в своем коде и запускаю приложение на jboss 4.0.5GA. Поставляемая библиотека jboss hibernate не включает в себя менеджер сущностей, который мне нужен. Несмотря на то, что я включил hibernate 3.6.0 в каталог lib моего приложения, он не найден при запуске.

java.lang.NoClassDefFoundError: org/hibernate/cfg/ExtendedMappings
        at org.hibernate.ejb.Ejb3Configuration.(Ejb3Configuration.java:129)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)

........
Caused by: java.lang.ClassNotFoundException: Unexpected error during load of: org.hibernate.cfg.ExtendedMappings, msg=Implementing class
        at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:550)
        at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:405)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        ... 142 more
Caused by: java.lang.IncompatibleClassChangeError: Implementing class

Я думаю, это связано с тем, что библиотека ядра hibernate из jboss загружается перед библиотеками hibernate 3.6, поставляемыми с приложением.

Проблема в том, что я не могу изменить никакие jar-файлы в JBOSS_HOME. Я могу изменить / предоставить различные биты конфигурации jboss, так как мы устанавливаем каталог домена на домашнюю страницу приложения, поэтому, например, мы предоставляем файл jboss / conf / jboss-service.xml, и я могу настроить это.

Я попробовал несколько способов исправить это, и вот что я нашел:
Если я удалю hibernate3.jar из JBOSS_HOME / server / default / lib, проблема будет исправлена Если я заменю JBOSS_HOME / server / default / lib / hibernate3.jar на правильную версию (3.6.0), которая также исправит это

Есть другой подход, который я попробовал: учитывая, что jboss предоставляет ядро ​​hibernate (версия 3.2), но не менеджер сущностей или аннотации, я попытался предоставить библиотеки управления сущностями и аннотации для той же версии hibernate (3.2.0GA) в моем приложение. Однако это вызвало

java.lang.IllegalAccessError: tried to access method org.hibernate.cfg.Mappings
, потому что (я думаю) файлы JAR загружались разными загрузчиками классов / из разных репозиториев. Согласно этой записи все гибернационные библиотеки должны быть загружены из одного места. В моем случае это невозможно.

Я также попытался поиграть с ear-deployer.xml, чтобы включить изолированную загрузку классов. Это открыло целый ящик исключений Пандоры, который я не могу исправить.

Помощь!

...