如何在Tomcat中使用Hibernate支持的JPA运行Spring 3.0 PetClinic
好吧,这可能应该是世界上最简单的事情,但我一整天都在努力,而且它仍然无法工作..任何帮助都非常感谢!
编辑: 有关正确的程序,请参阅Pascal的答案。
我的错(因为我没有禁用LoadTimeWeaving)程序留待参考..:
我做了什么:
- 下载了Tomcat 6.0.26和Spring 3.0.1
- 从https://src.springframework.org/svn/spring-samples/petclinic下载了PetClinic
- 建立并部署了petclinic.war。 使用默认的JDBC持久性很好。
- 编辑了webapps / WEB-INF / spring / applicationContext-jpa.xml并将
jpaVendorAdaptor
设置为Hibernate。 - 编辑了webapps / WEB-INF / web.xml,并将
context-param
从applicationContext-jdbc.xml更改为applicationContext-jpa.xml - 将Spring 3.0.1发行版中的所有内容复制到TOMCAT_HOME / lib。
-
推出了tomcat。 锯
引起:java.lang.IllegalStateException:ClassLoader [org.apache.catalina.loader.WebappClassLoader]不提供’addTransformer(ClassFileTransformer)’方法。 指定自定义LoadTimeWeaver或使用Spring的代理启动Java虚拟机:-javaagent:spring-agent.jar
-
webapps / META-INF / context.xml中未注释的行
。
- 同样的错误。 将该行添加到TOMCAT_HOME / context.xml
-
部署没有错误。 但是,当我做某事时会发出错误说
java.lang.NoClassDefFoundError: javax/transaction/SystemException at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:39)
11.根据scaffman的建议,将javax.transaction的范围从测试更改为默认(刚删除的测试)。
12.Run很好!! 谢谢!
好的,这就是我做的:
- 获取Tomcat 6.0.26
-
查看petclinic样本:
svn co https://src.springframework.org/svn/spring-samples/petclinic/trunk/ petclinic
-
进入petclinic目录
- 修改
src/main/webapp/WEB-INF/spring/applicationContext-jpa.xml
以使用Hibernate:- 注释
( 加载时weaver 不应该与Hibernate一起使用 ,这是用于Toplink) - 将Hibernate声明为
jpaVendorAdapter
(注释Toplink部分,取消注释Hibernate部分)
- 注释
- 修改
src/main/webapp/WEB-INF/web.xml
以使用applicationContext-jpa.xml
-
修改
pom.xml
以在战争中捆绑jta.jar (由@skaffman指出):javax.transaction com.springsource.javax.transaction 1.1.0 看起来像PetClinic包装有问题:
http://forum.springsource.org/showthread.php?t=85042
和
http://jira.springframework.org/browse/SPR-6880
那里有针对
pom.xml
的修复程序