Custom Tomcat Valve contained in web app WAR file

2020-03-19 01:46发布

问题:

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.

回答1:

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.