【问题标题】:Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/hibernateContext.xml]在 ServletContext 资源 [/WEB-INF/hibernateContext.xml] 中创建名称为“sessionFactory”的 bean 时出错
【发布时间】:2016-08-20 00:49:37
【问题描述】:

我已升级到 Tomcat 8,但在 Linux 中部署我的应用程序时遇到此异常。

但在 Windows 7 中,应用程序已成功部署。

hibernate 依赖在不同操作系统下的行为是否不同?

在我的 pom.xml 中:

<properties>
    <versionPackageName>com.translations.globallink.connect.core</versionPackageName>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss.SSSZ</maven.build.timestamp.format>         
    <spring.security.groupId>org.springframework.security</spring.security.groupId>
    <spring.security.version>3.1.3.RELEASE</spring.security.version>
    <spring.version>3.1.4.RELEASE</spring.version>
    <hibernate.version>3.3.0.GA</hibernate.version>
    <releaseControl.version>2.0.43</releaseControl.version>
</properties>

和依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-annotations</artifactId>
    <version>${hibernate.version}</version>
    <exclusions>
        <exclusion>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </exclusion>                
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-commons-annotations</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

在目标/战争中,我在构建后看到了这些库:

hibernate-3.2.1.ga.jar

hibernate-annotations-3.3.0.GA.jar

hibernate-c3p0-3.3.0.GA.jar

hibernate-core-3.3.0.GA.jar

hibernate-validator-5.1.0.Final.jar

hibernate-ehcache-4.1.12.Final.jar

hibernate-commons-annotations-3.3.0.GA.jar

这些依赖项在 Linux 中不兼容吗?

添加堆栈跟踪:

ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/hibernateContext.xml]: Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: Implementing class
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:589)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:388)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4729)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1101)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1786)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2476)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:857)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1282)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
    at java.lang.Class.getConstructor0(Class.java:3075)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newConfiguration(LocalSessionFactoryBean.java:818)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:549)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 25 more

【问题讨论】:

  • 什么是完整的堆栈跟踪?除了贴出的错误,你能不能也提供错误的根本原因?
  • 从不,重复 从不,混合一个框架的版本,不管是哪个框架。您正在混合使用 hibernate 3.2、3.3 和 4.1 jar 并希望它能够正常工作。那永远不会发生。此外,休眠验证器甚至与休眠 3 不兼容,因此也无法正常工作。清理你的依赖并使用兼容的版本。
  • 你能推荐我使用兼容的版本吗?我添加了 3.3.0.GA 之类的属性并使用 ${hibernate.version} 我不知道看到的不匹配的原因。

标签: java spring hibernate maven tomcat8


【解决方案1】:

您也可以显示您的 web.xml 吗? 我认为这是您的配置文件的问题,即 hibernate.cfg.xml 不正确/必需。 我认为您的代码的问题在于它使用了不同版本的hibernate jar。强烈推荐使用相同版本的hibernate jars,可能会解决你的问题。

【讨论】:

  • 在 windows 7 操作系统中,我的应用程序无一例外地部署。在centOS(Linux)中,应用程序部署在tomcat 7上。只有当我尝试在Linux中的tomcat 8上部署时,我才会遇到上述异常。我的 web.xml 文件和 hibernate.cfg.xml 文件在 /WEB-INF 里面
  • 如果您没有在 web.xml 中输入配置路径。然后试一试:让 hibernate.cfg.xml 文件与包平行,即在 /src 文件夹中,并尝试将 jdk-1.8.0 与 tomcat 8 一起使用。
  • 还有一件事使用相同版本的hibernate的jar。
【解决方案2】:

运行mvn dependency:tree -Dverbose -Dincludes=commons-collections

你有一个依赖冲突。

【讨论】:

  • 排除冲突完成了这项工作。谢谢。使用 eclipse 依赖层次结构来解决冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2021-03-28
  • 2017-08-28
  • 1970-01-01
  • 2021-09-20
  • 2014-07-18
  • 1970-01-01
相关资源
最近更新 更多