How to run Spring 3.0 PetClinic in tomcat with Hibernate backed JPA
OK, this probably is supposed to be the easiest thing in the world, but I've been trying for the entire day, and it's still not working.. Any help is highly appreciated!
EDIT: For the correct procedure, please see Pascal's answer.
My wrong (since I did not disabled LoadTimeWeaving) procedure is left for reference..:
What I did:
- Downloaded Tomcat 6.0.26 & Spring 3.0.1
- Downloaded PetClinic from https://src.springframework.org/svn/spring-samples/petclinic
- Built & deployed petclinic.war. Ran fine with default JDBC persistence.
- Edited webapps/WEB-INF/spring/applicationContext-jpa.xml and set
jpaVendorAdaptor
to Hibernate. - Edited webapps/WEB-INF/web.xml and changed
context-param
from applicationContext-jdbc.xml to applicationContext-jpa.xml - Copied everything in the Spring 3.0.1 distribution to TOMCAT_HOME/lib.
Launched tomcat. Saw
Caused by: java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-agent.jar
Uncommented line
<Loader loaderClass="org.sp开发者_JAVA技巧ringframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
in webapps/META-INF/context.xml.- Same error. Added that line to TOMCAT_HOME/context.xml
Deployed without error. However, when I do something it will issue an error saying
java.lang.NoClassDefFoundError: javax/transaction/SystemException at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:39)
11.Changed scope of javax.transaction from test to default (just deleted test), as suggested by scaffman.
12.Runs fine!! Thank you!
Ok, here is what I did:
- Get Tomcat 6.0.26
Checkout the petclinic sample:
svn co https://src.springframework.org/svn/spring-samples/petclinic/trunk/ petclinic
cd
into the petclinic directory- Modify
src/main/webapp/WEB-INF/spring/applicationContext-jpa.xml
to use Hibernate:- COMMENT the
<context:load-time-weaver>
(load-time weaver SHOULD NOT be used with Hibernate, this is for Toplink) - Declare Hibernate as
jpaVendorAdapter
(comment the Toplink part, uncomment the Hibernate part)
- COMMENT the
- Modify the
src/main/webapp/WEB-INF/web.xml
to use theapplicationContext-jpa.xml
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>
Build the war
mvn install
Deploy it to Tomcat
cp target/petclinic.war $TOMCAT_HOME/webapps
Browse
http://localhost:8080/petclinic
Looks like a problem with PetClinic packaging:
http://forum.springsource.org/showthread.php?t=85042
and
http://jira.springframework.org/browse/SPR-6880
There's fix in there for the pom.xml
精彩评论