Конфликты Hibernate и Jersey с использованием Tomcat и Eclipse IDE

В моем проекте я использую как Hibernate, так и Джерси, есть конфликт библиотеки с Hibernate, Джерси из приведенной ниже ссылки, которую я получаю так

http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

Jersey использует библиотеку ASM, которая также используется Hibernate, но в других версиях. Hibernate использует версию 1.5.3, а Jersey — 3.5.1. Большая разница! Мы не можем просто удалить старую версию и поставить туда новую, потому что они архитектурно разные. В версии 1.5.3 есть пакет «attrs», а в версии 3.5.1 его нет, но есть пакет «signatures». Пакет ASM необходим пакету cglib, который является частью библиотек Hibernate. Если мы удалим этот пакет, Jersey будет работать правильно, но Hibernate перестанет работать. Чтобы решить этот конфликт, используйте cglib-nodep.jar вместо cglib.jar и сохраните ASM версии 3.x с Jersey. cglib-nodep.jar включает в себя некоторые классы ASM, требуемые cglib.jar, изменив имя пакета, чтобы избежать конфликта классов.

но после включения asm-3.1.jar, asm-attrs-2.2.3.jar, asm-commons-3.1.jar, asm-util-3.1.jar, cglib-nodep-2.1_3sources.jar я получаю ошибки:

если я поставлю cglib 2.1.3:

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
    at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
    at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)

если я поставлю cglib-nodep-2.1_3-sources.jar:

java.lang.ClassNotFoundException: net.sf.cglib.core.KeyFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)

Пожалуйста, укажите любой файл jar, необходимый для решения этой проблемы.


person Rajeswari Kotikalapudi    schedule 18.07.2012    source источник


Ответы (1)


Если я не ошибаюсь, cglib больше не является предпочтительным поставщиком байт-кода для Hibernate. Скорее Javassist, и вы можете заставить Javassist следующим образом:

hibernate.bytecode.provider=javassist

В последних версиях Hibernate это уже поведение по умолчанию. У вас должна быть либо более старая версия Hibernate, либо проект уже настроен для переопределения вышеуказанного с помощью cglib. Таким образом, вы можете либо обновить свою версию Hibernate, либо настроить свой экземпляр для использования вместо этого javassist. Тип конфигурации зависит от вашей среды и того, что вы хотите. Как правило, вы включаете указанную выше строку в файл hibernate.properties в свой путь к классам. Я думаю, вы также можете добавить -Dhibernate.bytecode.provider=javassist в командную строку или в JAVA_OPTS для конфигурации JBoss.

Вы можете увидеть больше обсуждений здесь и в других местах в сети. Просто Google hibernate.bytecode.provider

person Kevin Welker    schedule 18.07.2012
comment
я не понял, можешь подробно объяснить - person Rajeswari Kotikalapudi; 19.07.2012
comment
К вашему сведению, я расширил свой ответ некоторое время назад. Надеюсь, это поможет прояснить. - person Kevin Welker; 21.07.2012