2016-04-15 106 views
0

我的应用程序由Spring + Hibernate组成,并且在Tomcat下运行良好。 我在Jboss AS 7.1.3下部署了我的应用程序(WAR),但Jboss似乎接管了Hibernate持久性。 我试着改变一些设置来禁用Jboss的JPA,但没有更多的成功:休眠/弹出jboss

<property name="jpaProperties"> 
<props> 
    <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
    <prop key="show_sql">true</prop> 
    <prop key="jboss.as.jpa.managed">false</prop> 
    <prop key="jboss.as.jpa.providerModule">hibernate3-bundled</prop> 
</props> 

当我尝试我的REST调用,我得到了以下异常。 任何人都可以帮忙吗?我搜索了半天没有完整的解决方案。

javax.servlet.ServletException: Servlet.init() for servlet spring threw exception 
     org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
     org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) 
     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) 
     org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
     org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) 
     org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) 
     java.lang.Thread.run(Unknown Source) 

<b>root cause</b> org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactoryBean' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;II)V 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    javax.servlet.GenericServlet.init(GenericServlet.java:242) 
    org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
    org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) 
    java.lang.Thread.run(Unknown Source) 
</pre></p><p><b>root cause</b> <pre>java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;II)V 
    org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:94) 
    org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) 
    org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) 
    org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234) 
    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208) 
    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189) 
    org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) 
    org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 
    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217) 
    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189) 
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) 
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) 
    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:848) 
    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:876) 
    org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) 
    org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343) 
    org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    javax.servlet.GenericServlet.init(GenericServlet.java:242) 
    org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
    org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) 
    java.lang.Thread.run(Unknown Source) 
+1

'NoSuchMethodError'表明您可能正在混合来自Hibernate的不同版本的不兼容JAR。确保你所有的Hibernate JAR都来自同一个版本。也许一些JBoss通用lib目录包含Hibernate文件,这些文件会与您的应用程序需要的文件冲突。 – Jesper

+0

如果您打算只部署到JBoss,您可以尝试从war文件中删除任何与JPA相关的库。以便JBoss处理持久性。如果您使用任何构建工具(maven | ivy | gradle),则可以轻松地将这些库的范围设置为提供 – WeMakeSoftware

+0

我不想使用Jboss库。我想依靠我的WAR嵌入库。我尝试了许多在Spring/Hibernate/JBoss网站上提供的解决方案,但没有人工作:( – ptitjuju69

回答

0

最后,我们改变了我们项目中使用的hibernate版本以匹配JBoss hibernate嵌入式版本。

0

对于JBoss,你可以尝试把一个文件jboss-app.xml中的EAR

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE jboss-app 
    PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN" 
    "http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd"> 
<jboss-app> 
    <loader-repository> 
    com.company:loader=xxx-ear-loader 
    <loader-repository-config> 
     java2ParentDelegation=false 
    </loader-repository-config> 
    </loader-repository> 
</jboss-app> 

META-INF文件夹如果您使用WAR只有你可以尝试调整jboss-web.xml

<jboss-web> 
     <class-loading java2ClassLoadingCompliance="false"> 
      <loader-repository> 
      com.company:loader=xxx-ear-loader 
      <loader-repository-config>java2ParentDelegation=false</loader-repository-config> 
      </loader-repository> 
     </class-loading> 
</jboss-web> 

你需要指定com.company:loader=xxx-ear-loader

注意事项AS 4.2.x版和版本5.x的钱柜:作为至少的JBoss 4.2.1, 标签似乎不再被支持作为隔离 被忽略。相反,下面的配置似乎完成 同一个目标:

<jboss-web> 
    <loader-repository> 
     com.example:archive=unique-archive-name 
    </loader-repository> 
</jboss-web> 

请参阅本 ClassLoadingConfiguration

您必须在WAREAR Hibernate库,当然。

您也可以删除或替换JBoss lib文件夹中的Hibernate库。

+0

感谢您的快速回答。我没有打包我的应用程序在EAR,但WAR。 – ptitjuju69

+0

@ ptitjuju69我更新 –

+0

类加载元素不是有效的xml元素... – ptitjuju69