5

Avevo creato una semplice app che utilizza Spring Data 3.1.0.RELEASE e Eclipselink 2.4 sul lato server - che è ospitato in Tomcat 7.0.27. In mywebapp/META-INF/context.xml ho classloader PrimaveraCome far funzionare Tomcat con TomcatInstrumentableClassLoader definito in META-INF/context.xml insieme a WEB-INF/lib/spring-instrument-tomcat.jar

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/> 

Se metto spring-instrument-tomcat.jar in $TOMCAT_HOME/lib poi Tomcat corre mywebapp bene, ma se ho messo spring-instrument-tomcat.jar nella $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib - Tomcat muore con l'eccezione

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:org.springframework.instrument.jar 

Il parametro del caricatore di contesto useSystemClassLoaderAsParent impostato su false non è di aiuto.

Non voglio avere alcuna lib (globale) globale in Tomcat (e non sarà facile avere quello globale nel nostro sistema di produzione della vita reale), quindi sto cercando di localizzare tutto il necessario roba in un semplice (ma grande) file di guerra. Qualche idea su come ottenere tale incapsulamento?

risposta

5

Beh, se non si vuole vasetti in più nella cartella lib di Tomcat, l'unica opzione (di avere ancora/AspectJ LTW lavoro primavera) è quello di modificare lo script di corsa del gatto per aggiungere -javaagent :. ..instrument.jar ai suoi JAVA_OPTS o CATALINA_OPTS e rimuove il file context.xml (non avrai più bisogno di TomcatInstrumentableClassLoad er).

+0

Devo trattare la tua risposta come corretta perché è la soluzione migliore trovata finora. Grazie! –

0

Potrebbe essere il tuo context.xml non è giusto. Prova questo:

<?xml version="1.0" encoding="UTF-8" ?> 
<Context> 
    <Loader 
    loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" 
    useSystemClassLoaderAsParent="false" /> 
</Context> 
+1

Ho provato il tuo suggerimento con ** useSystemClassLoaderAsParent ** ma su Tomcat 7 ho ottenuto 'ATTENZIONE: [SetPropertiesRule] {Context/Loader} L'impostazione della proprietà 'useSystemClassLoaderAsParent' su 'false' non ha trovato una proprietà corrispondente. E, come atteso, il 'java.lang.ClassNotFoundException: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader' è stato il prossimo errore. –

+0

Anche io uso tomcat7, ma ho avuto successo.la molla-strumento-tomcat.jar dovrebbe mettere in tomcat/lib.Non credo che tu metta il posto giusto.e io dico, io uso l'idea intellij per sviluppare, io metto il context.xml nel tomcat7utf8 \ conf \ Catalina \ localhost \ yourwebappnameDirectory \ qui, e in questo modo: ' ' web app non nella directory \ webapp tomcat . – flym

+0

Ok, se ho capito bene, suggerisci di mettere tomcat-instrumental.jar in Tomcat/lib ma questo è esattamente quello che non voglio fare (ma non ho altri modi per farlo funzionare per il momento. la domanda è come lasciare Tomcat/lib intatto e soddisfare la mia app con le sue librerie. –