Return-Path: Delivered-To: apmail-jakarta-tomcat-dev-archive@www.apache.org Received: (qmail 14519 invoked from network); 31 Oct 2003 21:45:32 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 31 Oct 2003 21:45:32 -0000 Received: (qmail 65498 invoked by uid 500); 31 Oct 2003 21:45:14 -0000 Delivered-To: apmail-jakarta-tomcat-dev-archive@jakarta.apache.org Received: (qmail 65448 invoked by uid 500); 31 Oct 2003 21:45:14 -0000 Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Developers List" Reply-To: "Tomcat Developers List" Delivered-To: mailing list tomcat-dev@jakarta.apache.org Received: (qmail 65435 invoked by uid 500); 31 Oct 2003 21:45:14 -0000 Received: (qmail 65432 invoked from network); 31 Oct 2003 21:45:13 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 31 Oct 2003 21:45:13 -0000 Received: (qmail 14464 invoked by uid 1135); 31 Oct 2003 21:45:25 -0000 Date: 31 Oct 2003 21:45:25 -0000 Message-ID: <20031031214525.14463.qmail@minotaur.apache.org> From: remm@apache.org To: jakarta-tomcat-catalina-cvs@apache.org Subject: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core ContainerBase.java StandardContext.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N remm 2003/10/31 13:45:25 Modified: catalina/src/share/org/apache/catalina/core ContainerBase.java StandardContext.java Log: - Modify the MBean lifecycle for the containers. - The MBeans will now be removed only on destroy, rather than on stop. - The use case is this: * Assume a started host exists * Add a context by instantiating a MBean * Then call init (addChild will be called, which will start the context) * If there's an error starting the context, its MBean would have been removed right away, preventing further operations on the context (at least through JMX), and preventing redeploying it again (the host still has it as a child, so trying the same sequence again after fixing the issue would fail). I have deterrmined there's no way to properly handle this case through JMX, so the clean fix seems to do JMX unregistration only on destroy (so that the MBean has the same lifecycle as the context itself, which seems logical). Revision Changes Path 1.30 +14 -13 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ContainerBase.java Index: ContainerBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ContainerBase.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- ContainerBase.java 15 Oct 2003 17:24:16 -0000 1.29 +++ ContainerBase.java 31 Oct 2003 21:45:25 -0000 1.30 @@ -1213,18 +1213,6 @@ } } - // unregister this component - if( oname != null ) { - try { - if( controller == oname ) { - Registry.getRegistry().unregisterComponent(oname); - log.debug("unregistering " + oname); - } - } catch( Throwable t ) { - log.error("Error unregistering ", t ); - } - } - // Notify our interested LifecycleListeners lifecycle.fireLifecycleEvent(AFTER_STOP_EVENT, null); @@ -1253,7 +1241,7 @@ mserver.invoke(parentName, "addChild", new Object[] { this }, new String[] {"org.apache.catalina.Container"}); } - } + } initialized=true; } @@ -1266,6 +1254,19 @@ stop(); } initialized=false; + + // unregister this component + if ( oname != null ) { + try { + if( controller == oname ) { + Registry.getRegistry().unregisterComponent(oname); + log.debug("unregistering " + oname); + } + } catch( Throwable t ) { + log.error("Error unregistering ", t ); + } + } + if (parent != null) { parent.removeChild(this); } 1.98 +32 -18 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java Index: StandardContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v retrieving revision 1.97 retrieving revision 1.98 diff -u -r1.97 -r1.98 --- StandardContext.java 21 Oct 2003 00:18:25 -0000 1.97 +++ StandardContext.java 31 Oct 2003 21:45:25 -0000 1.98 @@ -4059,6 +4059,7 @@ if (ok) { + boolean mainOk = false; try { started = true; @@ -4084,7 +4085,7 @@ // Set JMX object name for proper pipeline registration preRegisterJMX(); - + // Start our child containers, if any Container children[] = findChildren(); for (int i = 0; i < children.length; i++) { @@ -4123,9 +4124,16 @@ // Start ContainerBackgroundProcessor thread super.threadStart(); + mainOk = true; + } finally { // Unbinding thread unbindThread(oldCCL); + if (!mainOk) { + // An exception occurred + // Register with JMX anyway, to allow management + registerJMX(); + } } } @@ -4190,9 +4198,9 @@ } // JMX registration - if (ok) { - registerJMX(); + registerJMX(); + if (ok) { // Notify our interested LifecycleListeners lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null); } @@ -4206,13 +4214,18 @@ sequenceNumber++); broadcaster.sendNotification(notification); } - + // Close all JARs right away to avoid always opening a peak number // of files on startup if (getLoader() instanceof WebappLoader) { ((WebappLoader) getLoader()).closeJARs(true); } + // Reinitializing if something went wrong + if (!ok && started) { + stop(); + } + //cacheContext(); } @@ -4403,6 +4416,13 @@ * */ public void destroy() throws Exception { + if( oname != null ) { + // Send j2ee.object.deleted notification + Notification notification = + new Notification("j2ee.object.deleted", this.getObjectName(), + sequenceNumber++); + broadcaster.sendNotification(notification); + } super.destroy(); } @@ -4411,17 +4431,6 @@ // If you extend this - override this method and make sure to clean up children=new HashMap(); log.debug("resetContext " + oname + " " + mserver); - if( oname != null ) { - Registry.getRegistry().unregisterComponent(oname); - - // Send j2ee.object.deleted notification - Notification notification = - new Notification("j2ee.object.deleted", this.getObjectName(), - sequenceNumber++); - broadcaster.sendNotification(notification); - oname = null; - } - } /** @@ -5233,8 +5242,13 @@ this.addLifecycleListener(config); log.debug( "AddChild " + parentName + " " + this); - mserver.invoke(parentName, "addChild", new Object[] { this }, - new String[] {"org.apache.catalina.Container"}); + try { + mserver.invoke(parentName, "addChild", new Object[] { this }, + new String[] {"org.apache.catalina.Container"}); + } catch (Exception e) { + destroy(); + throw e; + } } super.init(); --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org