I'm having an issue with Tomcat 8.0.12 when undeploying contexts. I have autoDeploy turned off, and am pushing WARs+context.xmls through the Tomcat manager's deploy command.
I have several ServletContextListeners that handle proper context shutdown. The ones that cause the issue look like this: @Override public synchronized void contextInitialized( ServletContextEvent event ) { if( enabled ) { MyClass.initialize(); } } @Override public synchronized void contextDestroyed( ServletContextEvent event ) { MyClass.release(); } If the 'enabled' flag is not set, and MyClass was not loaded anywhere else in the app, the webapp ClassLoader tries to load the class while the context is shutting down. It throws this exception: java.lang.NoClassDefFoundError: some/package/MyClass at some.package.MyListener.contextDestroyed(SingletonCleaner.java:na) at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4792) at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5392) at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3768) at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1306) at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1238) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1493) at sun.reflect.GeneratedMethodAccessor574.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) -- Caused by: java.lang.ClassNotFoundException: some.package.MyClass at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1320) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1173) ... 45 more I set WebappClassLoader logging levels to FINE, and got this output: 21-Mar-2015 14:59:46.493 FINE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoader.loadClass loadClass(some.package.MyClass, false) 21-Mar-2015 14:59:46.493 FINE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoader.findClass findClass(some.package.MyClass) Any ideas why the class loader is throwing the errors?