5

J'ai construit une application simple qui utilise Spring Data 3.1.0.RELEASE et Eclipselink 2.4 sur le serveur - qui est hébergé dans Tomcat 7.0.27. Dans mywebapp/META-INF/context.xml Je Spring classloaderComment faire fonctionner Tomcat avec TomcatInstrumentableClassLoader défini dans META-INF/context.xml avec WEB-INF/lib/spring-instrument-tomcat.jar

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

Si je mets spring-instrument-tomcat.jar dans $TOMCAT_HOME/lib alors Tomcat fonctionne bien mywebapp mais si je mets spring-instrument-tomcat.jar dans le $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib - Tomcat meurt à l'exception

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 

paramètre Contexte chargeur useSystemClassLoaderAsParent set à false ne permet pas non plus. Je ne veux pas avoir de lib global (custom) dans Tomcat (et il ne sera pas facile d'avoir le global dans notre système de production réel) donc j'essaye de localiser tout ce dont j'ai besoin des choses dans un fichier de guerre simple (mais gros). Des réflexions sur la façon de réaliser une telle encapsulation?

Répondre

5

Eh bien, si vous ne voulez pas des pots supplémentaires dans le dossier lib de Tomcat, la seule option (d'avoir encore printemps/AspectJ travail LTW) consiste à modifier le script d'exécution du tomcat ajouter -javaagent :. ..instrument.jar à ses JAVA_OPTS ou CATALINA_OPTS, et supprimer le fichier context.xml (vous ne plus besoin TomcatInstrumentableClassLoad er).

+0

Je dois traiter votre réponse comme la bonne cause, c'est la meilleure solution trouvée jusqu'à présent. Merci! –

0

Peut-être context.xml est pas juste. Essayez ceci:

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

J'ai essayé votre suggestion avec ** useSystemClassLoaderAsParent ** mais sur Tomcat 7 j'ai eu 'WARNING: [SetPropertiesRule] {Context/Loader} La propriété de réglage 'useSystemClassLoaderAsParent' à 'false' n'a pas trouvé de propriété correspondante. attendu, le 'java.lang.ClassNotFoundException: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader' était l'erreur suivante. –

+0

J'utilise tomcat7 aussi, mais je successed.the ressort instrument tomcat.jar devrait mettre en tomcat/lib.I ne pense pas que vous mettez le droit place.and je dis, j'utilise l'idée de développer IntelliJ, je mets le context.xml dans le répertoire tomcat7utf8 \ conf \ Catalina \ localhost \ yourwebappnameDirectory \ ici, et complètement comme ceci: ' ' application web pas dans le tomcat \ répertoire webapp . – flym

+0

Ok, si je vous ai bien compris, vous proposez de mettre tomcat-instrumental.jar dans Tomcat/lib mais c'est exactement ce que je ne veux pas faire (mais je n'ai pas d'autre moyen de le faire fonctionner pour le moment. question est de savoir comment laisser Tomcat/lib intacte et satisfaire mon application avec ses propres libs. –

Questions connexes