costin 01/04/21 11:36:08 Modified: src/share/org/apache/tomcat/core ContextManager.java Request.java Log: Core changes !!! engineShutdown() hook is supposed to be called when tomcat is shut down ( and modules must clean up resources ). The interceptor can be added/removed at any time - it must clean after itself on removeInterceptor - but it shouldn't get a shutdown notification when it's removed ( since the server will still work ). Also, shutdown will no longer remove contexts - since init() didn't add them. Whoever adds the contexts ( i.e. config modules ) should also remove them - if they want - on server stop/restart. ( the context should be cleaned up on contextShutdown, but it may remain added - the server will report "application unavailable" instead of not found ). Also, shutdown will not remove interceptors - since it didn't add them. A init->start->stop->shutdown whould return to the same state as before init ( i.e. the configuration hardcoded in context manager like modules and settings must remain ). A shutdown->init should bring the server in ready state, and after start it should work as before. Revision Changes Path 1.177 +33 -7 jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java Index: ContextManager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java,v retrieving revision 1.176 retrieving revision 1.177 diff -u -r1.176 -r1.177 --- ContextManager.java 2001/04/07 06:50:55 1.176 +++ ContextManager.java 2001/04/21 18:36:07 1.177 @@ -482,7 +482,6 @@ } } - ri.engineShutdown( this ); } // -------------------- Server functions -------------------- @@ -577,22 +576,49 @@ */ public final void shutdown() throws TomcatException { if( state==STATE_START ) stop(); - while (!contextsV.isEmpty()) { + + Enumeration enum = getContexts(); + while (enum.hasMoreElements()) { + Context ctx = (Context)enum.nextElement(); try { - removeContext((Context)contextsV.firstElement()); - } catch(Exception ex ) { - log( "shutdown.removeContext" , ex ); + ctx.shutdown(); + } catch( TomcatException ex ) { + log( "Error shuting down context " +ctx ); } } + // No need to remove - since init() doesn't add the contexts. + // Modules could remove contexts ( and add them in init() ), but who + // adds should also remove + // while (!contextsV.isEmpty()) { + // try { + // Context ctx=(Context)contextsV.firstElement(); + // removeContext(ctx); + // } catch(Exception ex ) { + // log( "shutdown.removeContext" , ex ); + // } + // } + + // Notify all modules that the server will shutdown, + // let them clean up all resources BaseInterceptor cI[]=defaultContainer.getInterceptors(); for( int i=0; i< cI.length; i++ ) { try { - removeInterceptor( cI[i] ); + cI[i].engineShutdown( this ); } catch( Exception ex ) { - log( "shutdown.removeInterceptor" , ex ); + log( "shutdown.engineShutdown" , ex ); } } + + setState( STATE_NEW ); + // remove the modules ( XXX do we need that ? ) + // for( int i=0; i< cI.length; i++ ) { + // try { + // removeInterceptor( cI[i] ); + // } catch( Exception ex ) { + // log( "shutdown.removeInterceptor" , ex ); + // } + // } } // -------------------- Contexts -------------------- 1.100 +4 -0 jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java Index: Request.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java,v retrieving revision 1.99 retrieving revision 1.100 diff -u -r1.99 -r1.100 --- Request.java 2001/04/10 06:26:14 1.99 +++ Request.java 2001/04/21 18:36:07 1.100 @@ -298,6 +298,10 @@ return uriMB; } + public MessageBytes query() { + return queryMB; + } + public MessageBytes queryString() { return queryMB; }