【问题标题】:java.lang.IncompatibleClassChangeError using Spring and hibernate in glassfishjava.lang.IncompatibleClassChangeError 在 glassfish 中使用 Spring 和休眠
【发布时间】:2012-02-01 15:05:56
【问题描述】:

我正在使用 spring(3.0.4.RELEASE) 和 hibernate (3.4.0.GA) 并部署到 glassfish (web_3.1) 容器中。

我有 2 场战争,我希望它们通过 JNDI 共享相同的缓存(这对我来说非常重要,我已经使用了 terracotta,但它对我们的需求来说太重了),所以我添加了 hibernate和 ehcache jar 到 domain/domain1/lib/ext/

antlr-2.7.6.jar dom4j-1.6.1.jar ejb3-persistence-1.0.2.GA.jar hibernate-commons-annotations-3.1.0.GA.jar hibernate-entitymanager-3.4.0.GA.jar jta-1.1.jar postgresql-8.4-701.jdbc4.jar slf4j-log4j12-1.6.1.jar commons-collections-3.1.jar ehcache-core-2.4.2.jar hibernate-annotations-3.4.0.GA.jar hibernate-core-3.3.0.SP1.jar javassist-3.4.GA.jar log4j-1.2.16.jar slf4j-api-1.6.1.jar xml-apis-1.0.b2.jar

spring 库和依赖项都包含在两个战争中,使用 maven 来管理依赖项。

激活-1.1.jar cglib-nodep-2.2.2.jar commons-validator-1.3.1.jar hsqldb-2.2.4.jar jsp-api-2.2.jar slf4j-api-1.6.0.jar spring-orm-3.0.4.RELEASE.jar aopalliance-1.0.jar commons-beanutils-1.8.3.jar dwr-2.0.3.jar itext-2.1.7.jar jstl-1.2.jar spring-aop-3.0.4.RELEASE.jar spring-oxm-3.0.4.RELEASE.jar aspectjweaver-1.6.9.jar commons-codec-1.3.jar ehcache-core-2.2.0.jar itransact.jar jta-1.1.jar spring-asm-3.0.4.RELEASE.jar spring-tx-3.0.4.RELEASE.jar bcmail-jdk14-1.38.jar commons-collections-3.2.1.jar ehcache-spring-annotations-1.1.3.jar 雅加达-oro-2.0.8.jar jtelnet-1.0.jar spring-beans-3.0.4.RELEASE.jar spring-web-3.0.4.RELEASE.jar bcmail-jdk14-138.jar commons-digester-1.7.jar eodsql-2.1.jar jasperreports-3.7.6.jar 邮件 1.4.3.jar spring-context-3.0.4.RELEASE.jar spring-webmvc-3.0.4.RELEASE.jar bcmail-jdk16-1.46.jar commons-fileupload-1.2.1.jar freemarker-2.3.17.jar jcommon-1.0.15.jar netty-3.2.5.Final.jar spring-context-support-3.0.6.RELEASE.jar terracotta-toolkit-1.3-runtime-3.2.0.jar bcprov-jdk14-1.38.jar commons-io-2.1.jar 番石榴-r07.jar jdtcore-3.1.0.jar postgresql-8.4-701.jdbc4.jar spring-core-3.0.4.RELEASE.jar webappenhance-0.0.0.20.jar bcprov-jdk14-138.jar commons-lang-2.5.jar hornetq-core-2.2.7.Final.jar jfreechart-1.0.12.jar 石英-1.8.5.jar spring-expression-3.0.4.RELEASE.jar xml-apis-1.3.02.jar bcprov-jdk16-1.46.jar commons-logging-1.1.1.jar hornetq-jms-2.2.7.Final.jar jms-1.1.jar 自述文件.txt spring-jdbc-3.0.4.RELEASE.jar xpp3_min-1.1.4c.jar bctsp-jdk14-1.38.jar commons-pool-20030825.183949.jar hornetq-spring-integration-2.2.7.Final.jar js-1.7R2.jar satso-core.jar spring-jms-3.0.4.RELEASE.jar xstream-1.3.1.jar

当我部署任何一场战争时,我都会遇到以下异常:

org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: 在类路径资源 [core-application-context-jpa.xml] 中定义名称为“entityManagerFactory”的 bean 创建错误:调用 init 方法失败;嵌套异常是 java.lang.IncompatibleClassChangeError: Class org.hibernate.ejb.HibernatePersistence 没有实现请求的接口 javax.persistence.spi.PersistenceProvider 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:5328) 在 com.sun.enterprise.web.WebModule.start(WebModule.java:500) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:755) 在 com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1980) 在 com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1630) 在 com.sun.enterprise.web.WebApplication.start(WebApplication.java:100) 在 org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 在 org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 在 org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:286) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.access $1200(CommandRunnerImpl.java:96) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235) 在 com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465) 在 com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 在 com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:662) 原因:org.springframework.beans.factory.BeanCreationException:在类路径资源[core-application-context-jpa.xml]中定义名称为“entityManagerFactory”的bean创建错误:调用init方法失败;嵌套异常是 java.lang.IncompatibleClassChangeError: Class org.hibernate.ejb.HibernatePersistence 没有实现请求的接口 javax.persistence.spi.PersistenceProvider 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 在 org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4690) 在 com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:534) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:5305) ... 38 更多 引起:java.lang.IncompatibleClassChangeError: Class org.hibernate.ejb.HibernatePersistence 没有实现请求的接口 javax.persistence.spi.PersistenceProvider 在 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225) 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) ... 53 更多

我搜索了网络,大部分问题都涉及 ejb3-persistence-1.0.2.GA.jar 和应用程序服务器提供的 javax.persistence.jar 之间的冲突。

但是我在部署的战争或我的类路径上的任何 lib 文件夹中找不到任何其他 javax.persistence.jar。为了仔细检查这个错误不是由类路径上的重复类引起的,我从 lib/ext 目录中删除了 ejb3-persistence-1.0.2.GA.jar 并得到以下错误:

org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: 在类路径资源 [core-application-context-jpa.xml] 中定义名称为“entityManagerFactory”的 bean 创建错误:无法创建内部 bean 'org. springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#104bc3' 类型 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] 同时设置 bean 属性'jpaVendorAdapter';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [core-application-context-jpa.xml] 中定义的名称为“org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#104bc3”的 bean 创建错误: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:5328) 在 com.sun.enterprise.web.WebModule.start(WebModule.java:500) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:755) 在 com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1980) 在 com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1630) 在 com.sun.enterprise.web.WebApplication.start(WebApplication.java:100) 在 org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 在 org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 在 org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:286) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.access $1200(CommandRunnerImpl.java:96) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235) 在 com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465) 在 com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 在 com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:662) 原因:org.springframework.beans.factory.BeanCreationException:创建类路径资源[core-application-context-jpa.xml]中定义的名称为“entityManagerFactory”的bean时出错:无法创建内部bean'org.springframework.orm.jpa .vendor.HibernateJpaVendorAdapter#104bc3' 类型 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] 同时设置 bean 属性 'jpaVendorAdapter';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [core-application-context-jpa.xml] 中定义的名称为“org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#104bc3”的 bean 创建错误: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:120) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 在 org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4690) 在 com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:534) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:5305) ... 38 更多 原因:org.springframework.beans.factory.BeanCreationException:在类路径资源 [core-application-context-jpa.xml] 中定义名称为“org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#104bc3”的 bean 创建错误: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:965) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270) ... 56 更多 引起:org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958) ... 60 更多 引起:java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:615) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 在 java.net.URLClassLoader.access$000(URLClassLoader.java:58) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:197) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:295) 在 com.sun.enterprise.v3.server.APIClassLoaderServiceImpl$APIClassLoader.loadClass(APIClassLoaderServiceImpl.java:196) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:295) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:295) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247) 在 org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1465) 在 org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1368) 在 org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter.(HibernateJpaVendorAdapter.java:57) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) ... 62 更多 引起:java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceProvider 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 86 更多

这让我假设前面的错误不是由类路径上的重复 javax/persistence/spi/PersistenceProvider 类引起的。我玩弄了 spring 和 hibernate 是用不同版本的 javax.persistence.spi.PersistenceProvider 编译的想法,但是这个理论似乎不正确,因为我使用的是 maven 存储库站点上所述的版本:

http://mvnrepository.com/artifact/org.springframework/spring-orm/3.0.4.RELEASE

但是使用 spring-orm-3.1.0 并不能解决问题,我想如果 maven 存储库上的文档不正确,我会找到更多有类似问题的人。

任何有关如何解决此问题的有用建议将不胜感激。

【问题讨论】:

  • 由于类加载问题,我尝试使用 JNDI 在 2 场战争之间共享 ehcache 的方式不起作用。特别是实体需要在一个共同的位置。有兴趣的人应该看看:link 和其他建议link

标签: java hibernate spring glassfish


【解决方案1】:

GF + Hibernate + Spring = 许多不好的回忆(至少对我来说)。你可以做的是去 GF 管理页面,然后更新工具,然后选择 Hibernate 框架。它将被安装。当然,删除您添加的所有休眠库。我记得做过这样的事情..

干杯,尤金。

【讨论】:

  • 这确实解决了问题,但是也可以通过将所需的 jar 放在 domain/domain1/lib 中来解决问题。似乎将库放在 domain/domain1/lib/ext 中会导致类加载器问题。此外,通过将库放在域/域 1/lib 中,我可以使用任何版本的休眠,而使用更新工具会强制我使用 3.5。感谢您的建议。
  • 在阅读您所写的内容时,我记得做过同样的事情:)。抱歉,好久没碰GF了。很高兴它成功了。
猜你喜欢
  • 1970-01-01
  • 2014-03-21
  • 2015-08-07
  • 1970-01-01
  • 2011-03-14
  • 2012-08-11
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多