Return-Path: Delivered-To: apmail-jakarta-avalon-cvs-archive@apache.org Received: (qmail 5379 invoked from network); 19 Sep 2002 05:41:16 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 19 Sep 2002 05:41:16 -0000 Received: (qmail 6191 invoked by uid 97); 19 Sep 2002 05:42:04 -0000 Delivered-To: qmlist-jakarta-archive-avalon-cvs@jakarta.apache.org Received: (qmail 6138 invoked by uid 97); 19 Sep 2002 05:42:03 -0000 Mailing-List: contact avalon-cvs-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Avalon CVS List" Reply-To: "Avalon Developers List" Delivered-To: mailing list avalon-cvs@jakarta.apache.org Received: (qmail 6127 invoked by uid 97); 19 Sep 2002 05:42:02 -0000 X-Antivirus: nagoya (v4218 created Aug 14 2002) Date: 19 Sep 2002 05:41:10 -0000 Message-ID: <20020919054110.84556.qmail@icarus.apache.org> From: leif@apache.org To: jakarta-avalon-excalibur-cvs@apache.org Subject: cvs commit: jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet AbstractComponentManagerServlet.java ExcaliburComponentManagerServlet.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N leif 2002/09/18 22:41:10 Modified: component/src/java/org/apache/avalon/excalibur/component/servlet AbstractComponentManagerServlet.java ExcaliburComponentManagerServlet.java Log: Fix a problem where Tomcat would kick out the following message on shutdown because it was invalidating the application class loader before the ECMServet could completely dispose of all of its objects: WebappClassLoader: Lifecycle error : CL stopped Revision Changes Path 1.3 +25 -3 jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet/AbstractComponentManagerServlet.java Index: AbstractComponentManagerServlet.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet/AbstractComponentManagerServlet.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- AbstractComponentManagerServlet.java 16 Sep 2002 07:42:47 -0000 1.2 +++ AbstractComponentManagerServlet.java 19 Sep 2002 05:41:10 -0000 1.3 @@ -103,8 +103,6 @@ public void init( ServletConfig config ) throws ServletException { - //System.out.println( "AbstractComponentManagerServlet.init( config )" ); - ServletContext context = config.getServletContext(); // Initialize logging for the servlet. @@ -118,6 +116,11 @@ Logger logger = loggerManager.getLoggerForCategory( "servlet" ); m_logger = logger.getChildLogger( m_referenceName ); + if ( getLogger().isDebugEnabled() ) + { + getLogger().debug( "servlet.init( config )" ); + } + // Obtain a reference to the ComponentManager m_componentManager = (ComponentManager)context.getAttribute( ComponentManager.class.getName() ); @@ -155,11 +158,30 @@ */ public void destroy() { + if ( getLogger().isDebugEnabled() ) + { + getLogger().debug( "servlet.destroy()" ); + } + //System.out.println( "AbstractComponentManagerServlet.destroy()" ); // Release the ComponentManager by removing its reference. m_componentManager = null; super.destroy(); + + // Make sure that the component manager gets collected. + System.gc(); + + // Give the system time for the Gc to complete. This is necessary to make sure that + // the ECMServlet has time to dispose all of its managers before the Tomcat server + // invalidates the current class loader. + try + { + Thread.sleep(250); + } + catch ( InterruptedException e ) + { + } } /** 1.3 +16 -1 jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet/ExcaliburComponentManagerServlet.java Index: ExcaliburComponentManagerServlet.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet/ExcaliburComponentManagerServlet.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ExcaliburComponentManagerServlet.java 21 Aug 2002 12:45:11 -0000 1.2 +++ ExcaliburComponentManagerServlet.java 19 Sep 2002 05:41:10 -0000 1.3 @@ -109,6 +109,21 @@ * The ExcaliburComponentManagerServlet makes use of a proxy system to manage * reference to the above managers, so it is not necessary to release them * when a servlet is done using them. + *

+ * It may be necessary to add the following code to the end of the dispose method of any + * servlets referencing any of the above proxies. This is because on some containers, + * like Tomcat, the classloader is immediately invalidated after the last servlet is + * disposed. If this happens before the managers have all been disposed, then you may + * see errors in the console like: WebappClassLoader: Lifecycle error : CL stopped + *

  + *  System.gc();
  + *  try
  + *  {
  + *      Thread.sleep(250);
  + *  }
  + *  catch ( InterruptedException e ) {}
  + * 
+ * Note that servlets which extend the AbstractComponentManagerServlet will behave correctly. * * @author Leif Mortenson * @version CVS $Revision$ $Date$ -- To unsubscribe, e-mail: For additional commands, e-mail: