2015-07-21 94 views
29

我有一個問題,當我與休眠5休眠5 java.lang.NoSuchMethodError org.jboss.logging.Logger.debugf

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 

部署web應用程序使用Hibernate 4萬事OK。

我看了一下類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] ------------------------------------------------------------------------ 

回答

14

嘗試將jboss-logging.jar升級到更新版本。您正在使用的那個似乎與Hibernate 5不兼容。

+3

這是一個更好的解決方案。我將jboss-logging.jar升級到3.3.0(在widlfly安裝文件夾中搜索它),更改了module.xml中的文件名,現在所有東西都可以使用。我使用Wildfly 8與休眠5。 – tggm

+3

3.3.0.Final已經在使用,這是今天(一年後)的最新版本,所以沒有什麼可升級的。 –

+0

上面的mvn-tree表明OP已經在使用'org.jboss.logging:jboss-logging:jar:3.3.0.Final'。問題在於另一個工件帶來了相同的類,並且在類路徑中找到。 –

1

很可能您在應用程序的類路徑中有過時的JBoss日誌記錄JAR。 Logger API是...f方法的一個相對較新的方法。 Hibernate 5直接依賴於Logging版本3.3.0,但有可能你的pom.xml中有一些依賴於早期版本。另一種可能性是您正在部署到日誌API由容器提供的JBoss容器。然後你可能需要升級JBoss服務器,或者引入一個解決方法來更喜歡你的應用程序提供的類。

+0

實際上,我使用的是maven,而jboss-logging是休眠5的直接依賴。 –

+0

沒錯。我的答案解釋了錯誤的JAR如何參與_儘管如此。由於您的dep樹顯示了正確版本的JBoss日誌記錄,另一個選項是從容器繼承的類,它覆蓋了您的應用程序的類。這是BTW日誌類的一個非常常見的問題。 –

15

在我的情況下,罪魁禍首是澤西豆驗證器工件。 出於某種原因,它的一個依賴關係bean-validation-2.4.0-b06.jar包含Jboss日誌記錄類。 我不得不排除彈簧引導起動球衣依賴的球衣豆驗證和豆驗證文物:

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

編輯:隨着春天的引導1.3.0,這是固定的,上述排除不再是必要的。

+1

這對我來說非常合適,我需要將它添加到org.glassfish.ext - > jersey-spring3依賴項中。 –

+0

@danieln我想知道你是如何知道有問題的jar文件的。 mvn依賴項插件只顯示1級深度,jboss級別深度2級。 –

+1

@FrancisZabala你可以使用你的IDE來解決這個問題,以及類似的問題。我正在使用Eclipse,並在搜索字段中使用Open Type對話框(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日誌記錄jar。 –

26

在玻璃魚這個問題是由玻璃魚模塊的相關性碰撞造成的。如果你在glassfishdir/modules中檢查lib列表,你會看到boss-logging.jar。你可以刪除它並替換爲最新的,比如org.jboss.logging:jboss-logging:jar:3.3.0.Final。它爲我工作。

0

我也遇到過這個問題。這是固定的,對我來說

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

我用得到同樣的錯誤球衣彈簧-3和休眠5.0.1.Final.Excluding org.glassfish.hk2.external:從jersy彈簧豆驗證-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> 
3

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

我有spring4.2.1相同的一點改進+ hibernate5.0.2 + jersey2.23.1 我的解決方法是一樣的:從jersy-spring-3剔除org.glassfish.hk2.external:bean-validator並添加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

0

這可以導致當依賴包括

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

dependency使用exclusions元件排除它。

0

檢查我的答案在NoSuchMethodError: org.jboss.logging.Logger.debugf

即使我有問題升級到Hibernate 5.2後,而罪魁禍首是「的jboss-記錄3.3.0.Final」這是我看到出現在您的依賴了。 按照答案中共享鏈接的步驟,可以將jboss-logging的依賴關係減少到具有所需功能的3.2級別。

0

在我的情況下,問題是由即將從休眠-的Ehcache,我發現通過查看Maven依賴關係樹作爲傳遞依賴的是舊版本的jboss-伐木造成的。我通過增加排除來解決它:

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

JBoss 6.1+ ??

我設置在JBoss中的模塊org.jboss.logging對於JBoss-測井3.3.0.Final-紅帽-1.jar。

它爲我工作。

Att。,