2010-03-29 10 views
9

OK, questa probabilmente dovrebbe essere la cosa più semplice del mondo, ma ho provato per tutto il giorno e non funziona ancora. Qualsiasi aiuto è molto apprezzato!Come eseguire Spring 3.0 PetClinic in tomcat con Hibernate con supporto JPA

MODIFICA: Per la procedura corretta, vedere la risposta di Pascal.

My procedura sbagliata (da quando ho fatto LoadTimeWeaving non disattivato) viene lasciato come riferimento ..:

Quello che ho fatto:

  1. scaricato Tomcat 6.0.26 & Primavera 3.0.1
  2. PetClinic scaricato da https://src.springframework.org/svn/spring-samples/petclinic
  3. Costruito & distribuito petclinic.war. Ha funzionato bene con la persistenza JDBC predefinita.
  4. Webapp modificati/WEB-INF/molla/applicationContext-jpa.xml e impostare jpaVendorAdaptor su Hibernate.
  5. webapps modificate/WEB-INF/web.xml e cambiato context-param da applicationContext-jdbc.xml a applicationContext-jpa.xml
  6. copiato tutto nella distribuzione primavera 3.0.1 per TOMCAT_HOME/lib.
  7. Tomcat avviato. Sega

    Causato da: java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] NON fornisce un metodo 'addTransformer (ClassFileTransformer)'. Specificare un LoadTimeWeaver personalizzato o avviare la macchina virtuale Java con l'agente di Spring: -javaagent: spring-agent.jar

  8. Riga non presidiata <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/> in webapps/META-INF/context.xml.

  9. Stesso errore. Aggiunta di quella riga a TOMCAT_HOME/context.xml
  10. Distribuito senza errori. Tuttavia, quando faccio qualcosa che emetterà un errore che dice

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

    11.Changed ambito di javax.transaction da prova di default (test appena eliminata), come suggerito da scaffman.

    12.Run bene !! Grazie!

+0

Sto indovinando il problema è a (3). Il WAR che viene creato contiene qualcosa da 'javax.transaction' nella sua directory' lib'? – skaffman

+0

Non hai usato TopLink a 3, hai usato JDBC –

+0

@Pascal: hai ragione, ho corretto il post .. –

risposta

9

Ok, ecco cosa Io d id:

  1. Ottieni Tomcat 6.0.26
  2. Checkout campione petclinic:

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

  4. Modifica src/main/webapp/WEB-INF/spring/applicationContext-jpa.xml da usare Hibernate:
  5. Modificare il src/main/webapp/WEB-INF/web.xml di utilizzare la applicationContext-jpa.xml
  6. Modificare il pom.xml raggruppare jta.jar nella guerra (come sottolineato da @skaffman):

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

    mvn install 
    
  8. distribuirlo a Tomcat

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

    http://localhost:8080/petclinic 
    
+0

Grazie! Mi chiedevo perché il manuale dice "LTW non è necessario con Hibernate". Questo mi aiuta MOLTO! –

Problemi correlati