Bug 50826

Summary: (Embedded) Tomcat.destroy() throws java.lang.IllegalArgumentException
Product: Tomcat 7 Reporter: Maxim Valyanskiy <max.valjanski>
Component: CatalinaAssignee: Tomcat Developers Mailing List <dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: 7.0.8   
Target Milestone: ---   
Hardware: PC   
OS: Linux   

Description Maxim Valyanskiy 2011-02-24 08:47:47 UTC
Embedded Tomcat sometimes throws this exception when calling destroy() method:

java.lang.IllegalArgumentException: null source
	at java.util.EventObject.<init>(EventObject.java:56)
	at javax.management.Notification.<init>(Notification.java:184)
	at org.apache.catalina.core.StandardContext.destroyInternal(StandardContext.java:5433)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:285)
	at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:969)
	at org.apache.catalina.core.ContainerBase.destroyInternal(ContainerBase.java:1108)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:285)
	at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:969)
	at org.apache.catalina.core.ContainerBase.destroyInternal(ContainerBase.java:1108)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:285)
	at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:593)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:285)
	at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:786)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:285)
	at org.apache.catalina.startup.Tomcat.destroy(Tomcat.java:323)
	at su.msk.jet.nioproxy.rule.config.EmbeddedWebserver.stop(EmbeddedWebserver.java:26)

I think that StandardContext.destroyInternal() misses check that this.getObjectName()!=null
Comment 1 Mark Thomas 2011-02-24 12:26:54 UTC
Thanks for the report. This has been fixed in 7.0.x and will be included in 7.0.9 onwards.

To avoid it in the meantime, ensure that the embedded Tomcat instance is started before you destroy it.