Classloader problems Tomcat 6 javagent

I am using Salve Dependency Injection library that instruments the byte code of the web application. I specified -javaagent in Tomcat VM options and pointed it to the Salve agent jar.

The agent jar gets loaded, but then it throws a java.lang.NoClassDefFoundError unable to find classes that are in other Salve jars which are located in WEB-INF/lib folder of my web app.

I can solve this problem by putting those JARs in Tomcat/endorsed folder. However, some of those jars depend on third-party libraries, such as Spring and servlet-api.jar. Therefore, I am forced to put all these dependencies in Tomcat/endorsed as well.

Could anybody suggest a better way for handling dependencies of a Tomcat javaagent?

Thanks.

Answer

Salve library consists of several JARs. Some of them depend on third-party libraries, such as Spring. I ended up moving those JARs from tomcat/endorsed to my webapp’s WEB-INF/lib. My findings and the final working directory structure are documented here?

Leave a Reply

Your email address will not be published. Required fields are marked *