Comment faire de travail de Tomcat avec TomcatInstrumentableClassLoader définis dans META-INF/context.xml avec WEB-INF/lib/spring-instrument-tomcat.jar
J'avais construit une application simple qui utilise les Données du Printemps 3.1.0.LIBÉRATION et Eclipselink 2.4 sur le côté serveur qui est hébergé dans le serveur Tomcat 7.0.27. Dans mywebapp/META-INF/context.xml je Ressort du chargeur de classe
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
Si j'ai mis spring-instrument-tomcat.jar
en $TOMCAT_HOME/lib
puis Tomcat fonctionne mywebapp bien, 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
Contexte chargeur paramètre useSystemClassLoaderAsParent
ensemble de false
n'aide pas non plus.
Je ne veux pas avoir des (personnalisé) global lib de Tomcat (et ce ne sera pas facile d'avoir la mondiale dans notre vie réelle système de production) donc je suis en train d'essayer de localiser tous les matériaux nécessaires en simple (mais gros) fichier war. Toute réflexion sur la façon de parvenir à une telle encapsulation?
OriginalL'auteur aka_sh | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
Bien, si vous ne voulez plus de pots dans le dossier lib de Tomcat, la seule option (pour avoir encore le Printemps /AspectJ LTW de travail) est de modifier le tomcat exécuter le script à ajouter javaagent:...instrument.jar à son JAVA_OPTS ou CATALINA_OPTS, et de supprimer les context.xml fichier (vous n'aurez pas besoin TomcatInstrumentableClassLoader plus).
OriginalL'auteur rodche
Peut être votre
context.xml
n'est pas droit. Essayez ceci:WARNING: [SetPropertiesRule]{Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.
Et, comme prévu, lejava.lang.ClassNotFoundException: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader
a la prochaine erreur.J'utilise tomcat7 aussi,mais j'ai reussi.l'spring-instrument-tomcat.jar devrait mettre dans tomcat/lib.Je ne pense pas que vous le mettez au bon endroit.et je le dis,j'utilise le intellij idée à développer,j'ai mis le context.xml dans le tomcat7utf8\conf\Catalina\localhost\yourwebappnameDirectory\ ici,et il a complètement comme ceci: "<?xml version="1.0" encoding="UTF-8"?> <Context path="" docBase="votre web app path"> <Chargeur loaderClass="org.springframework.de l'instrument.classloading.tomcat.TomcatInstrumentableClassLoader" useSystemClassLoaderAsParent="false" /> </Contexte> " web app pas dans le tomcat\webapp répertoire.
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 le faire (mais je n'ai pas d'autres moyens pour qu'elle fonctionne pour le moment. Ma question est comment laisser Tomcat/lib intacte et satisfaire mon appli avec ses propres libs.
ok,vous ne voulez rien ajouter à tomcat.le seul moyen est que vous devez éditer le fichier tomcat.de démarrage.chauve-souris pour ajouter le suivi de chose(c'est le printemps en proposer): -javaagent:E:/spring-instrument.jar(peut-autre lieu) le spring-instrument.jar n'est pas spring-instrument-tomcat.jar! et de laisser context.xml rien en elle.et de cette façon pourrait aussi fonctionner. oui,presque une chose que vous devez faire.peut ajouter un peu de pot dans tomcat ou de modifier le script de démarrage. c'est la façon de printemps et d'aspectj le suggèrent,je pense que vous l'habitude de tisser des classes de première utilisez uniquement aspectj,donc c'est le seul moyen.
OriginalL'auteur flym