Hibernate 5 java.lang.NoSuchMethodError org.jboss.logging.Logger.debugf

У меня проблема, когда я развертываю веб-приложение с спящим режимом 5

Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:759) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:490) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
... 23 more

С Hibernate 4 все ок.

Я взглянул на класс NamedQueryRepository в строке 149. Этот класс вызывает метод debugf таким образом.

        log.debugf( "Checking %s named HQL queries", namedQueryDefinitionMap.size() );

я не вижу проблемы

Вот мое дерево зависимостей

[INFO] ------------------------------------------------------------------------
[INFO] Building app Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ app---
[INFO] +- org.springframework:spring-aspects:jar:4.1.7.RELEASE:compile
[INFO] |  \- org.aspectj:aspectjweaver:jar:1.8.6:compile
[INFO] +- org.springframework:spring-tx:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-beans:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-context-support:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:4.1.7.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-core:jar:4.1.7.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] +- org.springframework:spring-orm:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:4.1.7.RELEASE:compile
[INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-jdbc:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-test:jar:4.1.7.RELEASE:test
[INFO] +- junit:junit:jar:4.12:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.hibernate:hibernate-entitymanager:jar:5.0.0.CR2:compile
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:5.0.0.CR2:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  \- org.jboss:jandex:jar:1.2.2.Final:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- org.hibernate.common:hibernate-commons-annotations:jar:5.0.0.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] |  +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO] |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] +- org.hibernate:hibernate-c3p0:jar:5.0.0.CR2:compile
[INFO] |  \- com.mchange:c3p0:jar:0.9.2.1:compile
[INFO] |     \- com.mchange:mchange-commons-java:jar:0.2.3.4:compile
[INFO] +- org.primefaces:primefaces:jar:5.2.RC3:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.2:compile
[INFO] \- net.sourceforge.jtds:jtds:jar:1.2.8:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

person Jago Satori    schedule 21.07.2015    source источник


Ответы (15)


В Glassfish Эта проблема вызвана конфликтом с зависимостями модулей Glassfish. Если вы проверите список библиотек в Glassfishdir/modules, вы увидите boss-logging.jar. Вы можете удалить его и заменить последним, например org.jboss.logging:jboss-logging:jar:3.3.0.Final. Это сработало для меня.

person Ekrem Kucuk    schedule 06.12.2015
comment
Пришлось это сделать и перезапустить домен в Payara Server, сработало отлично. - person Moreno; 29.03.2019

В моем случае виновником был артефакт валидатора джерсейской фасоли. Одна из его зависимостей, bean-validation-2.4.0-b06.jar, по какой-то причине содержит классы ведения журнала Jboss. Мне пришлось исключить артефакты jersey-bean-validation и bean-validator из зависимости spring-boot-starter-jersey:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>jersey-bean-validation</artifactId>
                <groupId>org.glassfish.jersey.ext</groupId>
            </exclusion>
            <exclusion>
                <artifactId>bean-validator</artifactId>
                <groupId>org.glassfish.hk2.external</groupId>
            </exclusion>
        </exclusions>
    </dependency>

РЕДАКТИРОВАТЬ: Начиная с spring-boot 1.3.0, это исправлено, и указанные выше исключения больше не нужны.

person Daniel Nitzan    schedule 28.08.2015
comment
Это отлично сработало для меня, мне нужно было добавить его в зависимость org.glassfish.ext -> jersey-spring3. - person Chris Hinshaw; 23.09.2015
comment
@danieln Я хотел бы знать, как вы узнали о проблемном файле jar. Плагин зависимостей mvn отображает только 1 уровень глубины, а класс jboss имеет глубину 2 уровня. - person Francis Zabala; 17.10.2015
comment
@FrancisZabala, вы можете использовать свою IDE для устранения этой и подобных проблем. Я работаю с Eclipse и использую диалоговое окно «Открыть тип» (ctrl-shift-T) и вставляю org.jboss.logging.Logger (класс из исключения) в поле поиска, оскорбительный bean-validator-2.4.0 -b31.jar показан в результатах в разделе .m2\repository\org\glassfish\hk2\external\bean-validator\2.4.0-b31, среди прочих результатов, которые являются исходным файлом jboss-logging jar. - person Daniel Nitzan; 18.10.2015
comment
Затем я использовал вкладку POM Dependency Hierarchy в Eclipse для поиска этого артефакта, и он показывает, что он находится под jersey-spring3. - person Daniel Nitzan; 18.10.2015
comment
@danieln Спасибо! Диалоговое окно «Открыть тип» работало. Этот совет действительно очень полезен. Никогда не думал, что я могу использовать диалог Open Type. Отдельное спасибо за горячую клавишу. - person Francis Zabala; 18.10.2015
comment
Также обратите внимание на порядок перечисления в диалоговом окне «Открыть тип». В случае возникновения проблемы первая указанная ошибка исходит от org.glassfish.ext. Обычно, если есть что-то вроде L / V, может возникнуть конфликт из-за того, что банок больше одной. (Ljava/язык/строка;I)V - person jai; 09.12.2015
comment
Я не использую весеннюю загрузку. Но используя spring-core 4.2.4, hibernate 5.0.7 и jersey-spring3 2.22.1. Но все же столкнулся с этой ошибкой. Исправил это, исключив org.glassfish.hk2.external:bean-validator из org.glassfish.jersey.ext:jersey-spring3:2.22.1, а затем добавив org.glassfish.jersey.ext:jersey-bean-validation:2.22.1 в качестве прямой зависимости. - person Sathish; 04.02.2016
comment
@Sathish Отличный улов! Именно то, что я искал! - person sschrass; 14.03.2016

Попробуйте обновить jboss-logging.jar до более новой версии. Тот, который вы используете, не совместим с Hibernate 5.

person David Levesque    schedule 21.07.2015
comment
Это лучшее решение. Я обновляю файл jboss-logging.jar до версии 3.3.0 (найдите его в папках установки Widlfly), изменил имя файла в файле module.xml, и теперь все работает. Я использую Wildfly 8 с спящим режимом 5. - person tggm; 02.10.2015
comment
3.3.0.Final уже используется, это самая актуальная версия на сегодняшний день (год спустя), так что обновлять нечего. - person Karl Richter; 19.08.2016
comment
Дерево mvn выше указывает, что OP уже использует org.jboss.logging:jboss-logging:jar:3.3.0.Final. Проблема в том, что другой артефакт приносит те же классы и находится ранее в пути к классам. - person Michael Piefel; 31.10.2016

Я также столкнулся с такой проблемой, когда развернул ухо на сервере weblogic. По-видимому, weblogic также использует систему ведения журнала jboss и использует ее старую версию.
Мое исправление:
Добавьте «weblogic-application.xml» в папку META-INF с этим содержимым:

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-application>
        <prefer-application-packages>
            <package-name>org.jboss.logging.*</package-name>
        </prefer-application-packages>

        <prefer-application-resources>
            <resource-name>org/jboss/logging/Logger.class</resource-name>
        </prefer-application-resources>
    </weblogic-application>
person Evgeniy    schedule 09.07.2016

Я получал ту же ошибку, используя jersey-spring-3 и hibernate 5.0.1.Final.Excluding org.glassfish.hk2.external:bean-validator from jersy-spring-3 и добавляя org.glassfish.jersey.ext:jersey- у меня работала bean-validation. Вот моя последняя зависимость.

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.22.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>bean-validator</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-bean-validation</artifactId>
    <version>2.22.2</version>
</dependency>

от :

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.22.2</version>
</dependency>
person Sudhir Kumar    schedule 21.04.2016

По всей вероятности, у вас есть устаревший JAR JBoss Logging JAR в пути к классам приложения. Методы ...f являются относительно новым дополнением к Logger API. Hibernate 5 напрямую зависит от Logging версии 3.3.0, но возможно, что где-то в вашем pom.xml у вас есть переопределяющая зависимость от более ранней версии. Другая возможность заключается в том, что вы выполняете развертывание в контейнере JBoss, где API ведения журнала предоставляется контейнером. Затем вам может потребоваться обновить сервер JBoss или ввести обходной путь, чтобы предпочесть классы, предоставленные вашим приложением.

person Marko Topolnik    schedule 21.07.2015
comment
На самом деле, я использую maven, а регистрация jboss является прямой зависимостью от hibernate 5. - person Jago Satori; 21.07.2015
comment
Точно. Мой ответ объясняет, как может быть задействован неправильный JAR, несмотря на это. Поскольку ваше дерево операций показывает правильную версию ведения журнала JBoss, другим вариантом является класс, унаследованный от контейнера, который переопределяет класс вашего приложения. Кстати, это очень распространенная проблема для классов ведения журнала. - person Marko Topolnik; 22.07.2015


В моем случае проблема была вызвана тем, что более старая версия jboss-logging была переходной зависимостью от hibernate-ehcache, которую я обнаружил, изучив дерево зависимостей maven. Я решил это, добавив исключение:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>${hibernate.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
person raspacorp    schedule 19.11.2016

У меня была такая же ошибка, она решается сначала добавлением зависимости jboss log jar следующим образом

<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.0.Final</version>
</dependency>

И если ошибка все еще существует, добавьте следующее исключение в зависимость maven.

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.12</version>
     <exclusions>
            <exclusion>
                    <groupId>org.glassfish.hk2</groupId>
                    <artifactId>hk2</artifactId>
            </exclusion>
        </exclusions>
</dependency>

После этих двух вещей у меня все работает нормально. Надеюсь, у вас тоже.

person Prakhar Agrawal    schedule 29.11.2018

Ошибка, которую я получил, была "

Application run failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

:::
:::
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V"

я удалил папку журнала jboss ‹.m2\repository\org\jboss\logging\jboss-logging> и перезапустил сервер jboss.

Банки были добавлены обратно, и ошибка исчезла. (после этого я получил еще какую-то ошибку, но, по крайней мере, эта ошибка исчезла)

person Barani r    schedule 17.01.2019

Я тоже столкнулся с этой проблемой. Это то, что исправило это для меня

       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
person himangshuj    schedule 02.02.2016

У меня такая же проблема с spring4.2.1+hibernate5.0.2+jersey2.23.1. Мое решение такое же: исключить org.glassfish.hk2.external:bean-validator из jersy-spring-3 и добавить org.glassfish.jersey.ext:jersey-bean-validation.

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring3</artifactId>
  <version>2.23.1</version>
  <exclusions>
    <exclusion>
      <groupId>org.glassfish.hk2.external</groupId>
      <artifactId>bean-validator</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-bean-validation</artifactId>
  <version>2.23.1</version>
</dependency>

В среде моего продукта просто удалите bean-validator-2.4.0-b34.jar и добавьте jersey-bean-validation-2.23.1.jar

person RJ.Hwang    schedule 28.07.2016

Это может быть вызвано тем, что зависимость включает

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.6.2</version>
</dependency>

Исключите его, используя элемент exclusions в dependency.

person Karl Richter    schedule 18.08.2016

JBoss 6.1+??

Я установил org.jboss.logging для jboss-logging-3.3.0.Final-redhat-1.jar в модулях jboss.

Это работает для меня.

Атт.,

person Tiago Pereira    schedule 28.09.2017

Вы можете использовать Eclipse, чтобы узнать, какая банка вызывает проблему:

  • Настройте проект со всеми вашими jar-файлами в пути к классам.
  • Навигация -> Открыть тип...
  • Введите org.jboss.logging.Logger

Это даст вам список банок, которые включают класс. Один из них устарел и должен быть исключен (обратитесь к другим ответам на этот вопрос).

person WW.    schedule 02.05.2019