2010-03-29 12 views
9

OK, esto probablemente se supone que es la cosa más fácil del mundo, pero he estado intentando durante todo el día, y todavía no funciona ... Cualquier ayuda es muy apreciado!Cómo ejecutar Spring 3.0 PetClinic en tomcat con JPA respaldado por Hibernate

EDIT: Para conocer el procedimiento correcto, consulte la respuesta de Pascal.

Mi procedimiento equivocado (ya lo hice LoadTimeWeaving no discapacitados) se deja para referencia ..:

Lo que hice:

  1. descargados Tomcat 6.0.26 & primavera 3.0.1
  2. Se descargó PetClinic desde https://src.springframework.org/svn/spring-samples/petclinic
  3. Construido & desplegado petclinic.war. Funcionó bien con la persistencia JDBC predeterminada.
  4. Edita webapps/WEB-INF/spring/applicationContext-jpa.xml y establece jpaVendorAdaptor para Hibernate.
  5. aplicaciones web editadas/WEB-INF/web.xml y cambiado context-param de applicationContext-jdbc.xml a applicationContext-jpa.xml
  6. copiado todo en la distribución de primavera 3.0.1 a TOMCAT_HOME/lib.
  7. Tomcat lanzado. Sierra

    Causado por: java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] NO proporciona un método 'addTransformer (ClassFileTransformer)'. Especifique un LoadTimeWeaver personalizado o inicie su máquina virtual Java con el agente de Spring: -javaagent: spring-agent.jar

  8. Línea no confirmada <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/> en webapps/META-INF/context.xml.

  9. Mismo error. Se agregó esa línea a TOMCAT_HOME/context.xml
  10. Implementado sin error. Sin embargo, cuando hago algo que emitirá un error diciendo

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

    alcance 11.Changed de javax.transaction de prueba por defecto (prueba simplemente suprimido), según lo sugerido por scaffman.

    12.Runs multa !! ¡Gracias!

+0

estoy adivinando el problema está en (3). ¿La WAR que se genera contiene algo de 'javax.transaction' en su directorio' lib'? – skaffman

+0

No usaste TopLink en 3, usaste JDBC –

+0

@Pascal: Tienes razón, arreglé la publicación ... –

Respuesta

9

Ok, esto es lo Carné de identidad id:

  1. Obtenga Tomcat 6.0.26
  2. Pedido la muestra petclinic:

    svn co https://src.springframework.org/svn/spring-samples/petclinic/trunk/ petclinic 
    
  3. cd en el directorio petclinic

  4. Modificar src/main/webapp/WEB-INF/spring/applicationContext-jpa.xml utilizar Hibernate:
  5. Modificar el src/main/webapp/WEB-INF/web.xml utilizar el applicationContext-jpa.xml
  6. Modificar la pom.xml para agrupar jta.jar en la guerra (como se ha señalado por @skaffman):

    <dependency> 
        <groupId>javax.transaction</groupId> 
        <artifactId>com.springsource.javax.transaction</artifactId> 
        <version>1.1.0</version> 
        <!--scope>test</scope--> 
    </dependency> 
    
  7. Construir la guerra

    mvn install 
    
  8. implementarlo en Tomcat

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

    http://localhost:8080/petclinic 
    
+0

¡Gracias! Me preguntaba por qué el manual dice "LTW no es necesario con Hibernate". ¡Esto me ayuda MUCHO! –

Cuestiones relacionadas