如何将Spring / Hibernate JPA应用程序从Tomcat 7迁移到Tomee plus 1.7.2?

时间:2015-11-13 07:39:58

标签: hibernate jpa tomcat7 spring-data tomee

如果我在tomcat 7中部署war,我正在运行Spring 3 + Hibernate 4 jpa和mysql但是如果我在Tomee和1.7.2中部署相同的战争,那么我得到以下异常。

Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.QueryResultsRegion
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.tomee.catalina.LazyStopWebappClassLoader.loadClass(LazyStopWebappClassLoader.java:171)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

我发现此类是hibernate 3.3的一部分,但我使用的是hibernate 4.2

我复制了hibernate-core-4.2.0.Final.jar,hibernate-ehcache-4.2.0.Final.jar,cglib-2.2.2.jar,hibernate-jpa-2.0-api-1.0.1.Final的.jar,休眠公地的注解 - 4.0.1.Final.jar,休眠-的EntityManager-4.2.0.Final.jar,休眠 - 验证 - 4.2.0.Final.jar,ehcache的核心 - 2.4.3.jar的,弹簧数据公地芯1.3.0.RELEASE.jar,弹簧 - 数据 - JP-A-1.1.0.RELEASE.jar,弹簧JDBC-3.0.7.RELEASE.jar,弹簧ORM-3.1.2 .RELEASE.jar到/ lib文件夹也。这些罐子也是战争的一部分。

persistence.xml是:

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">      <provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>

1 个答案:

答案 0 :(得分:1)

当WebappClassLoader实现尝试启动Web项目时,应用程序或引用的第三方库中的某些内容仍引用r1 0 r1 child 100 类。

这很可能是由于org.hibernate.cache.QueryResultsRegion过时的JAR造成的。您应该能够通过将Spring版本升级到至少4.0来克服这个问题,但从长远来看,最好是4.1 / 4.2。

在检查我发现的spring-orm-3.1.2.RELEASE.jar的依赖关系时,它应该与Spring 4.0.x兼容 - 不保证4.1 / 4.2。

另一个棘手的JAR可能是spring-data-commons-core-1.3.0.jar,因为它已过时(2012年5月发布),并且已经在版本1.9.x中提供。试着找出至少从2014年或更好的2015年开始的星座。

我的建议是:

  1. 将Spring升级至至少4.0.x版。
  2. 检查您自己的类文件,以获取该冲突运行时类的直接导入的引用。
  3. 检查项目中可能存在的其他配置文件,例如使用ORM类的Spring应用程序/模块上下文(如ehcache)。
  4. (可选)如果类加载错误应该已经解决,请尝试逐步升级到Spring 4.1 / 4.2。以功能的方式测试您的设置。
  5. 希望它有所帮助。