40

I have a problem when I deploy a webapp with hibernate 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

With Hibernate 4 everything is OK.

I had a look at the class NamedQueryRepository at line 149. That class is calling the method debugf in this way

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

I can not see the problem

Here is my dependency tree

[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] ------------------------------------------------------------------------
Bacteria
  • 7,810
  • 10
  • 47
  • 61
Jago Satori
  • 411
  • 1
  • 4
  • 6

15 Answers15

32

In glass fish This problem is caused by collision with dependencies of glassfish modules. If you check lib list in glassfishdir/modules you would see boss-logging.jar. You can delete it and replace with latest such as org.jboss.logging:jboss-logging:jar:3.3.0.Final. It worked for me.

Ekrem Kucuk
  • 481
  • 4
  • 4
17

In my case the culprit was the Jersey bean validator artifact. One of its dependencies, bean-validation-2.4.0-b06.jar contains Jboss logging classes, for some reason. I had to exclude the jersey-bean-validation and bean-validator artifacts from the spring-boot-starter-jersey dependency:

<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>

EDIT: As of spring-boot 1.3.0, this is fixed and the exclusions above are not necessary anymore.

Daniel Nitzan
  • 1,397
  • 2
  • 12
  • 31
  • 1
    This worked perfectly for me, I needed to add it to the org.glassfish.ext -> jersey-spring3 dependency. – Chris Hinshaw Sep 22 '15 at 22:42
  • @danieln I would like to know how you were able to know the offending jar file. mvn dependency plugin only displays 1 level deep and the jboss class is 2 levels deep. – Francis Zabala Oct 17 '15 at 17:13
  • 2
    @FrancisZabala you can use your IDE to troubleshoot this, and similar issues. I'm working with Eclipse, and using the Open Type dialog (ctrl-shift-T) and pasting org.jboss.logging.Logger (the class from the exception) in the search field, the offending bean-validator-2.4.0-b31.jar is shown in the results under .m2\repository\org\glassfish\hk2\external\bean-validator\2.4.0-b31, among other results, which are the original jboss-logging jar. – Daniel Nitzan Oct 18 '15 at 02:58
  • Then I used the POM Dependency Hierarchy tab in Eclipse to search for this artifact, and it does show you that it's under jersey-spring3. – Daniel Nitzan Oct 18 '15 at 03:06
  • @danieln Thanks! Open Type dialog worked. This tip is really really helpful. Never thought that I can use Open Type dialog. Special thanks for the shortcut key. – Francis Zabala Oct 18 '15 at 04:10
  • Also notice the order of the listing in the Open Type dialog. In case where there is issue, the first listed one is coming from "org.glassfish.ext". Usually if there is something like "L/V", it might be conflict that there are more than one jars. (Ljava/lang/String;I)V – jai Dec 08 '15 at 22:13
  • 3
    I am not using spring-boot. But using spring-core 4.2.4, hibernate 5.0.7 and jersey-spring3 2.22.1. But still ran into this error. Fixed it by excluding `org.glassfish.hk2.external:bean-validator` from `org.glassfish.jersey.ext:jersey-spring3:2.22.1` and then adding `org.glassfish.jersey.ext:jersey-bean-validation:2.22.1` as a direct dependency. – Sathish Feb 04 '16 at 04:24
  • @Sathish Awesome catch! Exactly what I was looking for! – sschrass Mar 14 '16 at 10:28
15

Try upgrading jboss-logging.jar to a more recent version. The one you are using does not seem to be compatible with Hibernate 5.

David Levesque
  • 20,680
  • 8
  • 62
  • 78
  • 4
    This is a better solution. I upgrades the jboss-logging.jar to 3.3.0 (search for it inside widlfly installation folders), changed the filename on the module.xml and now everythings works. I'm using Wildfly 8 with hibernate 5. – tggm Oct 01 '15 at 22:39
  • 3
    3.3.0.Final is already in use which is the most up-to-date version as of today (one year later), so there's nothing to upgrade. – Karl Richter Aug 18 '16 at 21:34
  • The mvn-tree above indicates that the OP is already using `org.jboss.logging:jboss-logging:jar:3.3.0.Final`. The problem is that another artifact brings the same classes, and is found earlier in the classpath. – Michael Piefel Oct 31 '16 at 13:59
4

I also faced with such kind of problem when deployed ear on weblogic server. Apparently, weblogic also use jboss logging system, and use old version of it.
My fix:
Add "weblogic-application.xml" to META-INF folder with this content:

    <?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>
Evgeniy
  • 347
  • 1
  • 4
  • 13
3

I was getting the same error using jersey-spring-3 and hibernate 5.0.1.Final.Excluding org.glassfish.hk2.external:bean-validator from jersy-spring-3 and adding org.glassfish.jersey.ext:jersey-bean-validation worked for me.Here is my final dependency.

<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>

from :

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.22.2</version>
</dependency>
Karl Richter
  • 6,271
  • 17
  • 57
  • 120
Sudhir Kumar
  • 133
  • 1
  • 12
2

In all probability you've got an outdated JBoss Logging JAR on the application's classpath. The ...f methods are a relatively new addition to the Logger API. Hibernate 5 directly depends on Logging version 3.3.0, but it is possible that somehwere in your pom.xml you have an overriding dependency to an earlier version. Another possibility is that you are deploying to a JBoss container where the logging API is container-provided. Then you may need to upgrade the JBoss server, or introduce a workaround to prefer classes contributed by your application.

Marko Topolnik
  • 179,046
  • 25
  • 276
  • 399
  • In fact, I'm using maven and the jboss-logging is a direct dependency of hibernate 5. – Jago Satori Jul 21 '15 at 20:41
  • Exactly. My answer explains how a wrong JAR could be involved _despite_ that. Since your dep tree shows the proper version of JBoss logging, the other option is a class inherited from the container which overrides your application's class. This is BTW a very common problem for logging classes. – Marko Topolnik Jul 22 '15 at 08:41
2

Check my answer at NoSuchMethodError: org.jboss.logging.Logger.debugf

Even I was having issues after upgrading to Hibernate 5.2 , and the culprit was "jboss-logging 3.3.0.Final" which I see present in your dependencies too. Following the steps on the link shared in the answer, you can reduce the dependency jboss-logging to 3.2 level which has the required function.

Community
  • 1
  • 1
Keshav
  • 121
  • 2
  • 5
1

In my case the issue was caused by an older version of jboss-logging coming as transitive dependency from hibernate-ehcache, which I found by looking into the maven dependencies tree. I solved it by adding the exclusion:

    <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>
raspacorp
  • 4,173
  • 8
  • 32
  • 48
1

I had the same error, it is solved by First add the dependency of jboss logging jar as follows

<!-- 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>

And if the error still exists then add following exlcusion to the maven dependency.

<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>

After doing these two things, it is working fine for me.I hope it will work for you also.

Prakhar Agrawal
  • 105
  • 1
  • 6
1

Error that i got was "

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"

i deleted the jboss-logging folder <.m2\repository\org\jboss\logging\jboss-logging> and restarted the jboss server.

The jars got addedback and the error was gone. (i got some other error after that, but atleast this error was gone)

Barani r
  • 1,403
  • 1
  • 16
  • 20
0

I too faced this issue. This is what fixed it for me

       <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>
himangshuj
  • 710
  • 5
  • 9
0

I have the same problen with spring4.2.1+hibernate5.0.2+jersey2.23.1. My solution is the same: Excluding org.glassfish.hk2.external:bean-validator from jersy-spring-3 and adding 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>

In my product environment, just delete bean-validator-2.4.0-b34.jar and add jersey-bean-validation-2.23.1.jar

RJ.Hwang
  • 1,170
  • 11
  • 19
0

This can be caused if a dependency includes

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

Exclude it using an exclusions element in dependency.

Karl Richter
  • 6,271
  • 17
  • 57
  • 120
0

JBoss 6.1+??

I set org.jboss.logging for jboss-logging-3.3.0.Final-redhat-1.jar in modules of jboss.

Its works for me.

Att.,

0

You can use Eclipse to find out which jar is causing the problem:

  • Setup a project with all your jars on the classpath
  • Navigate -> Open Type...
  • Type in org.jboss.logging.Logger

This will give you a list of jars which include the class. One of these is out of date and needs to be excluded (refer to other answers for variations on this).

WW.
  • 22,289
  • 13
  • 86
  • 116