You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2001/05/09 08:56:16 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core StandardWrapper.java

remm        01/05/08 23:56:16

  Modified:    catalina/src/share/org/apache/catalina/core
                        StandardWrapper.java
  Log:
  - Set context class loader during init / destroy.
    Based on a patch submitted by Kyle F. Downey <kdowney at amberarcher.com>
  
  Revision  Changes    Path
  1.20      +21 -7     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
  
  Index: StandardWrapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- StandardWrapper.java	2001/04/25 02:20:48	1.19
  +++ StandardWrapper.java	2001/05/09 06:56:14	1.20
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.19 2001/04/25 02:20:48 craigmcc Exp $
  - * $Revision: 1.19 $
  - * $Date: 2001/04/25 02:20:48 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.20 2001/05/09 06:56:14 remm Exp $
  + * $Revision: 1.20 $
  + * $Date: 2001/05/09 06:56:14 $
    *
    * ====================================================================
    *
  @@ -104,7 +104,7 @@
    * make them efficient are counter-productive.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.19 $ $Date: 2001/04/25 02:20:48 $
  + * @version $Revision: 1.20 $ $Date: 2001/05/09 06:56:14 $
    */
   
   public final class StandardWrapper
  @@ -759,6 +759,9 @@
   	    throw new ServletException
   		(sm.getString("standardWrapper.missingLoader", getName()));
   	}
  +
  +        ClassLoader oldCtxClassLoader = 
  +            Thread.currentThread().getContextClassLoader();
   	ClassLoader classLoader = loader.getClassLoader();
   
           // Special case class loader for a Catalina internal servlet
  @@ -811,6 +814,7 @@
   	try {
   	    instanceSupport.fireInstanceEvent(InstanceEvent.BEFORE_INIT_EVENT,
   					      servlet);
  +            Thread.currentThread().setContextClassLoader(classLoader);
   	    servlet.init((ServletConfig) this);
   	    instanceSupport.fireInstanceEvent(InstanceEvent.AFTER_INIT_EVENT,
   					      servlet);
  @@ -832,7 +836,10 @@
   	    // said so, so do not call unavailable(null).
   	    throw new ServletException
   		(sm.getString("standardWrapper.initException", getName()), f);
  -	}
  +	} finally {
  +            // restore the context ClassLoader
  +            Thread.currentThread().setContextClassLoader(oldCtxClassLoader);
  +        }
   
   	// Register our newly initialized instance
   	instance = servlet;
  @@ -959,12 +966,16 @@
                   }
               }
           }
  -              
  +        
  +        ClassLoader oldCtxClassLoader = 
  +            Thread.currentThread().getContextClassLoader();
  +        ClassLoader classLoader = loader.getClassLoader();
   
   	// Call the servlet destroy() method
   	try {
   	    instanceSupport.fireInstanceEvent
   	      (InstanceEvent.BEFORE_DESTROY_EVENT, instance);
  +            Thread.currentThread().setContextClassLoader(classLoader);
   	    instance.destroy();
   	    instanceSupport.fireInstanceEvent
   	      (InstanceEvent.AFTER_DESTROY_EVENT, instance);
  @@ -977,7 +988,10 @@
   	    throw new ServletException
   		(sm.getString("standardWrapper.destroyException", getName()),
   		 t);
  -	}
  +	} finally {
  +            // restore the context ClassLoader
  +            Thread.currentThread().setContextClassLoader(oldCtxClassLoader);
  +        }
   
   	// Deregister the destroyed instance
   	instance = null;