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

How to migrate Spring/Hibernate JPA application from Tomcat 7 to Tomee plus 1.7.2?

如果我在tomcat 7内部署war,但我正在成功运行Spring 3 Hibernate 4 jpa和mysql,但是如果我在Tomee plus 1.7.2内部署相同的war,则会出现以下异常。

1
2
3
4
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,hibernate-commons-annotations-4.0.1.Final.jar,hibernate-entitymanager-4.2.0.Final.jar,hibernate-validator-4.2.0.Final.jar,ehcache-core-2.4.3.jar ,spring-data-commons-core-1.3.0.RELEASE.jar,spring-data-jpa-1.1.0.RELEASE.jar,spring-jdbc-3.0.7.RELEASE.jar,spring-orm-3.1.2将.RELEASE.jar也放到/ lib文件夹中。这些罐子也是战争的一部分。

persistence.xml是:

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


当WebappClassLoader实现尝试启动您的Web项目时,应用程序或引用的第三方库中的

仍在引用org.hibernate.cache.QueryResultsRegion类。

最可能的原因是spring-orm-3.1.2.RELEASE.jar的过时JAR。您应该可以通过将Spring版本升级到至少4.0来克服这一问题,但从长远来看,最好还是升级到4.1 / 4.2。

在检查spring-data-commons-core-1.3.0.jar的依赖项时,我发现它应该与Spring 4.0.x兼容-不能保证4.1 / 4.2。

另一种棘手的JAR可能是spring-data-jpa-1.1.0.RELEASE.jar,因为它已经过时(2012年5月发布),并且已经在1.9.x版本中可用。尝试找出至少在2014年或2015年以后的星座。

我的建议是:

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