Hibernate 5 java.lang.NoSuchMethodError org.jboss.logging.Logger.debugf
hibernate-5.x (12)
Tengo un problema cuando despliegue una aplicación web con 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
Con Hibernate 4, todo está bien.
NamedQueryRepository
un vistazo a la clase NamedQueryRepository
en la línea 149. Esa clase llama al método debugf de esta manera
log.debugf( "Checking %s named HQL queries", namedQueryDefinitionMap.size() );
No puedo ver el problema
Aquí está mi árbol de dependencia
[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] ------------------------------------------------------------------------
Con toda probabilidad, tienes un JAR de JBoss Logging obsoleto en el classpath de la aplicación. Los ...f
métodos son una adición relativamente nueva a Logger API. Hibernate 5 depende directamente de la versión de registro 3.3.0, pero es posible que haya alguien en su pom.xml
que tenga una dependencia primordial a una versión anterior. Otra posibilidad es que se esté desplegando en un contenedor JBoss donde la API de registro está provista de contenedores. Entonces puede necesitar actualizar el servidor de JBoss, o introducir una solución para preferir las clases contribuidas por su aplicación.
En mi caso, el culpable fue el artefacto validador Jersey Bean. Una de sus dependencias, bean-validation-2.4.0-b06.jar contiene clases de registro de Jboss, por algún motivo. Tuve que excluir los artefactos jersey-bean-validation y bean-validator de la dependencia 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>
EDITAR: A partir de spring-boot 1.3.0, esto se soluciona y las exclusiones anteriores ya no son necesarias.
En mi caso, el problema fue causado por una versión anterior de jboss-logging que viene como dependencia transitiva de hibernate-ehcache, que encontré al buscar en el árbol de dependencias maven. Lo resolví agregando la exclusión:
<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>
En peces de vidrio Este problema es causado por la colisión con las dependencias de los módulos de Glassfish. Si compruebas la lista de lib en glassfishdir / modules verás boss-logging.jar. Puede eliminarlo y reemplazarlo con lo último, como org.jboss.logging: jboss-logging: jar: 3.3.0.Final. Funcionó para mí
Estaba obteniendo el mismo error usando jersey-spring-3 e hibernate 5.0.1.Final. Excluyendo org.glassfish.hk2.external: bean-validator de jersy-spring-3 y agregando org.glassfish.jersey.ext: jersey- bean-validation funcionó para mí. Aquí está mi dependencia final.
<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>
de :
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.22.2</version>
</dependency>
Esto puede ser causado si una dependencia incluye
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.2</version>
</dependency>
Excluir utilizando un elemento de exclusions
en la dependency
.
Intente actualizar jboss-logging.jar
a una versión más reciente. El que está utilizando no parece ser compatible con Hibernate 5.
JBoss 6.1+ ??
Establecí org.jboss.logging para jboss-logging-3.3.0.Final-redhat-1.jar en módulos de jboss.
Funciona para mí
Att.,
También me enfrenté a ese tipo de problema cuando estaba desplegado en un servidor weblogic. Aparentemente, weblogic también usa el sistema de registro jboss, y usa una versión anterior del mismo.
Mi solución:
Agregue "weblogic-application.xml" a la carpeta META-INF con este contenido:
<?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>
Tengo el mismo problema con spring4.2.1 + hibernate5.0.2 + jersey2.23.1. Mi solución es la misma: excluyendo org.glassfish.hk2.external:bean-validator
de jersy-spring-3
y agregando 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>
En mi entorno de producto, simplemente elimine bean-validator-2.4.0-b34.jar
y añada jersey-bean-validation-2.23.1.jar
Verifique mi respuesta en NoSuchMethodError: org.jboss.logging.Logger.debugf
Incluso tenía problemas después de actualizar a Hibernate 5.2, y el culpable fue "jboss-logging 3.3.0.Final", que también veo presente en sus dependencias. Siguiendo los pasos del enlace compartido en la respuesta, puede reducir la dependencia jboss-logging al nivel 3.2 que tiene la función requerida.
Yo también enfrenté este problema. Esto es lo que me solucionó
<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>