How to make Tomcat work with TomcatInstrumentableClassLoader defined in META-INF/context.xml together with WEB-INF/lib/spring-instrument-tomcat.jar

StackOverflow https://stackoverflow.com/questions/11246598

Pergunta

I'd built a simple app which uses Spring Data 3.1.0.RELEASE and Eclipselink 2.4 on the server side - which is hosted in the Tomcat 7.0.27. In mywebapp/META-INF/context.xml I have Spring classloader

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

If I put spring-instrument-tomcat.jar into $TOMCAT_HOME/lib then Tomcat runs mywebapp well but if I put spring-instrument-tomcat.jar into the $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib - Tomcat dies with 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

Context loader parameter useSystemClassLoaderAsParent set to false does not help either.

I don't want to have any (custom) global lib in Tomcat (and it won't be easy to have the global one in our real-life production system) thus I'm trying to localize all the needed stuff in simple (yet big) war file. Any thoughts on how to achieve such encapsulation?

Foi útil?

Solução

Well, if you do not want extra jars in Tomcat's lib folder, the only option (to still have Spring / AspectJ LTW work) is to edit the tomcat's run script to add -javaagent:...instrument.jar to its JAVA_OPTS or CATALINA_OPTS, and remove the context.xml file (you won't need TomcatInstrumentableClassLoad‌​er anymore).

Outras dicas

May be your context.xml is not right. Try this:

<?xml version="1.0" encoding="UTF-8" ?>
<Context>
  <Loader
    loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"
    useSystemClassLoaderAsParent="false" />
</Context>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top