如何在使用Hibernate支持的JPA的Tomcat中运行Spring 3.0 PetClinic

9

好的,这可能是世界上最容易的事情,但是我已经试了整整一天,还是不起作用...非常感谢任何帮助!

编辑:有关正确的程序,请参见Pascal的答案。

我的错误(因为我没有禁用LoadTimeWeaving)程序仅供参考..:

我做了什么:

  1. 下载Tomcat 6.0.26和Spring 3.0.1
  2. https://src.springframework.org/svn/spring-samples/petclinic下载PetClinic
  3. 构建和部署petclinic.war。默认使用JDBC持久性运行良好。
  4. 编辑webapps / WEB-INF / spring / applicationContext-jpa.xml并将设置为Hibernate。
  5. 编辑webapps / WEB-INF / web.xml,并将从applicationContext-jdbc.xml更改为applicationContext-jpa.xml
  6. 复制Spring 3.0.1分发中的所有内容到TOMCAT_HOME / lib中。
  7. 启动tomcat。看到

    Caused by:java.lang.IllegalStateException:ClassLoader [org.apache.catalina.loader.WebappClassLoader]没有提供“addTransformer(ClassFileTransformer)”方法。指定自定义LoadTimeWeaver或使用Spring的代理启动您的Java虚拟机:-javaagent:spring-agent.jar

  8. 取消注释webapps / META-INF / context.xml中的一行。

  9. 相同的错误。将该行添加到TOMCAT_HOME / context.xml中
  10. 无错误部署。但是,当我做某事时,它会发出一个错误,说

    java.lang.NoClassDefFoundError:javax/transaction/SystemException在org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:39)

    11.按scaffman建议将javax.transaction的范围从测试更改为默认值(仅删除了测试)。

    12.运行正常!谢谢!


我猜问题可能出现在(3)。构建出的WAR包中的lib目录是否包含任何来自javax.transaction的内容? - skaffman
你在3号没有使用 TopLink,而是使用了JDBC。 - Pascal Thivent
@Pascal:你说得对,我已经修复了这篇文章。 - Enno Shioji
@skaffman:我检查了pom.xml,javax.transaction在测试范围内。我会尝试将其包含进来。谢谢! - Enno Shioji
2个回答

9

好的,这是我所做的:

  1. Get Tomcat 6.0.26
  2. Checkout the petclinic sample:

    svn co https://src.springframework.org/svn/spring-samples/petclinic/trunk/ petclinic
    
  3. cd into the petclinic directory

  4. Modify src/main/webapp/WEB-INF/spring/applicationContext-jpa.xml to use Hibernate:
  5. Modify the src/main/webapp/WEB-INF/web.xml to use the applicationContext-jpa.xml
  6. Modify the pom.xml to bundle jta.jar in the war (as pointed out by @skaffman):

    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>com.springsource.javax.transaction</artifactId>
      <version>1.1.0</version>
      <!--scope>test</scope-->
    </dependency>
    
  7. Build the war

    mvn install
    
  8. Deploy it to Tomcat

    cp target/petclinic.war $TOMCAT_HOME/webapps
    
  9. Browse

    http://localhost:8080/petclinic
    

谢谢!我一直在想为什么手册上说“与Hibernate一起使用LTW并非必要”。这对我帮助很大! - Enno Shioji

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接