Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom Tomcat Valve contained in web app WAR file

I'm looking to implement a custom Valve and configuring it using META-INF/context.xml.

At the moment though, when context.xml is parsed during deployment, Tomcat (6.0.32) dies with a ClassNotFoundException on my custom Valve implementation.

I'm under the impression that I'm running into a class loading context issue and I'm not 100% sure I understand it.

Is my class not found because it is located in the WEB-INF/classes file and the Context level class loader is unable to locate the class because of the hierarchy?

Thanks in advance.

like image 973
Dave G Avatar asked May 26 '11 12:05

Dave G


1 Answers

You can not load Valves from inside the webapp class loader. If you look at http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html it shows the available class loaders. You must use one of the Bootstrap, System or Common classloaders because Valve definitions are processed BEFORE the individual webapp classloaders are created: the Context has to be processed before the webapp is available.

Package your Valve in a jar by itself and copy it into the $CATALINA_HOME/lib folder and you should be all set.

like image 173
Femi Avatar answered Oct 23 '22 12:10

Femi