J'ai un problème lorsque je déploie une application Web avec 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
Avec Hibernate 4, tout va bien.
J'ai jeté un coup d'œil à la classe NamedQueryRepository
à la ligne 149. Cette classe appelle la méthode debugf de cette façon.
log.debugf( "Checking %s named HQL queries", namedQueryDefinitionMap.size() );
Je ne vois pas le problème
Voici mon arbre de dépendance
[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] ------------------------------------------------------------------------
Dans le poisson de verre Ce problème est dû à une collision avec des dépendances de modules de Glassfish. Si vous vérifiez la liste des bibliothèques dans glassfishdir/modules, vous verrez boss-logging.jar. Vous pouvez le supprimer et le remplacer par le dernier, tel que org.jboss.logging: jboss-logging: jar: 3.3.0.Final. Cela a fonctionné pour moi.
Dans mon cas, le coupable était l'artefact du validateur de beans Jersey ... .. Une de ses dépendances, bean-validation-2.4.0-b06.jar contient des classes de journalisation Jboss, pour une raison quelconque. Je devais exclure les artefacts jersey-bean-validation et bean-validator de la dépendance 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>
EDIT: A partir de spring-boot 1.3.0, ceci est corrigé et les exclusions ci-dessus ne sont plus nécessaires.
Essayez de mettre à jour jboss-logging.jar
vers une version plus récente. Celui que vous utilisez ne semble pas être compatible avec Hibernate 5.
J'ai également été confronté à ce genre de problème lorsque déployé ear sur un serveur weblogic . Apparemment, weblogic utilise également le système de journalisation jboss et utilise l'ancienne version de celui-ci.
Mon correctif:
Ajoutez "weblogic-application.xml" au dossier META-INF avec ce contenu:
<?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>
J'avais la même erreur en utilisant jersey-spring-3 et hibernate 5.0.1.Final.Excluding org.glassfish.hk2.external: bean-validator de jersy-spring-3 et en ajoutant org.glassfish.jersey.ext: jersey- La validation de haricot a fonctionné pour moi. Voici ma dernière dépendance.
<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>
Vérifier ma réponse sur NoSuchMethodError: org.jboss.logging.Logger.debugf
Même si je rencontrais des problèmes après la mise à niveau vers Hibernate 5.2, le coupable était "jboss-logging 3.3.0.Final", que je vois aussi dans vos dépendances. réduire la dépendance jboss-logging au niveau 3.2 qui a la fonction requise.
Probablement que vous avez un fichier JAR obsolète JBoss Logging sur le chemin d'accès aux classes de l'application. Les méthodes ...f
constituent un ajout relativement récent à l'API Logger. Hibernate 5 dépend directement de Logging version 3.3.0, mais il est possible que, dans votre pom.xml
, vous ayez une dépendance primordiale par rapport à une version antérieure. Une autre possibilité est que vous déployez sur un conteneur JBoss où l'API de journalisation est fournie par le conteneur. Ensuite, vous devrez peut-être mettre à niveau le serveur JBoss ou introduire une solution de contournement pour préférer les classes fournies par votre application.
Moi aussi j'ai fait face à ce problème. C'est ce qui l'a corrigé pour moi
<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>
JBoss 6.1+ ??
Je règle org.jboss.logging pour jboss-logging-3.3.0.Final-redhat-1.jar dans les modules de jboss.
Cela fonctionne pour moi.
Att.,
Cela peut être causé si une dépendance inclut
<dependency>
<groupId>org.Eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.2</version>
</dependency>
Excluez-le à l'aide d'un élément exclusions
dans dependency
.
J'ai le même problème avec spring4.2.1 + hibernate5.0.2 + jersey2.23.1 . Ma solution est la même: Exclure org.glassfish.hk2.external:bean-validator
de jersy-spring-3
et ajouter 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>
Dans mon environnement de produit, supprimez simplement bean-validator-2.4.0-b34.jar
et ajoutez jersey-bean-validation-2.23.1.jar
J'ai eu la même erreur, elle est résolue par Ajoutez d’abord la dépendance de jboss logging jar comme suit
<!-- 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>
Et si l'erreur persiste, ajoutez ensuite l'exclusion suivante à la dépendance 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>
Après avoir fait ces deux choses, cela fonctionne bien pour moi. J'espère que cela fonctionnera pour vous.
Dans mon cas, le problème était dû à une ancienne version de jboss-logging provenant de hibernate-ehcache en tant que dépendance transitive, que j'ai trouvée en consultant l'arbre de dépendances maven. Je l'ai résolu en ajoutant l'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>
Erreur que j'ai eu était "
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"
j'ai supprimé le dossier jboss-logging <.m2\repository\org\jboss\logging\jboss-logging
> et redémarré le serveur jboss.
Les bocaux ont été ajoutés et l'erreur a disparu. (J'ai eu une autre erreur après cela, mais au moins cette erreur a disparu)