You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bi...@apache.org on 2002/08/21 06:07:35 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/modules/mappers ReloadInterceptor.java
billbarker 2002/08/20 21:07:35
Modified: src/share/org/apache/tomcat/modules/mappers
ReloadInterceptor.java
Log:
Support for reloading session.
Also synchronized reloading, to prevent a double-adding bug.
Reported by: Hugh J.L. hughjlee@yahoo.com
Revision Changes Path
1.15 +61 -53 jakarta-tomcat/src/share/org/apache/tomcat/modules/mappers/ReloadInterceptor.java
Index: ReloadInterceptor.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/mappers/ReloadInterceptor.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ReloadInterceptor.java 2 Oct 2001 05:50:30 -0000 1.14
+++ ReloadInterceptor.java 21 Aug 2002 04:07:35 -0000 1.15
@@ -160,7 +160,6 @@
context.setAttribute( "org.apache.tomcat.classloader", loader);
}
-
public int contextMap( Request request ) {
Context ctx=request.getContext();
if( ctx==null) return 0;
@@ -184,59 +183,68 @@
ContextManager cm=ctx.getContextManager();
if( fullReload ) {
- Vector sI=new Vector(); // saved local interceptors
- BaseInterceptor[] eI; // all exisiting interceptors
-
- // save the ones with the same context, they are local
- eI=ctx.getContainer().getInterceptors();
- for(int i=0; i < eI.length ; i++)
- if(ctx == eI[i].getContext()) sI.addElement(eI[i]);
-
- Enumeration e;
- // Need to find all the "config" that
- // was read from server.xml.
- // So far we work as if the admin interface was
- // used to remove/add the context.
- // Or like the deploytool in J2EE.
- Context ctx1=cm.createContext();
- ctx1.setContextManager( cm );
- ctx1.setPath(ctx.getPath());
- ctx1.setDocBase(ctx.getDocBase());
- ctx1.setReloadable( ctx.getReloadable());
- ctx1.setDebug( ctx.getDebug());
- ctx1.setHost( ctx.getHost());
- ctx1.setTrusted( ctx.isTrusted());
- e=ctx.getHostAliases();
- while( e.hasMoreElements())
- ctx1.addHostAlias( (String)e.nextElement());
-
- cm.removeContext( ctx );
-
- cm.addContext( ctx1 );
-
- // put back saved local interceptors
- e=sI.elements();
- while(e.hasMoreElements()){
- BaseInterceptor savedI=(BaseInterceptor)e.nextElement();
-
- ctx1.addInterceptor(savedI);
- savedI.setContext(ctx1);
- savedI.reload(request,ctx1);
+ synchronized(ctx) {
+ if(ctx.getState() == Context.STATE_NEW)
+ return 0; // Already reloaded.
+ Vector sI=new Vector(); // saved local interceptors
+ BaseInterceptor[] eI; // all exisiting interceptors
+
+ // save the ones with the same context, they are local
+ eI=ctx.getContainer().getInterceptors();
+ for(int i=0; i < eI.length ; i++)
+ if(ctx == eI[i].getContext()) sI.addElement(eI[i]);
+
+ Enumeration e;
+ // Need to find all the "config" that
+ // was read from server.xml.
+ // So far we work as if the admin interface was
+ // used to remove/add the context.
+ // Or like the deploytool in J2EE.
+ Context ctx1=cm.createContext();
+ ctx1.setContextManager( cm );
+ ctx1.setPath(ctx.getPath());
+ ctx1.setDocBase(ctx.getDocBase());
+ ctx1.setReloadable( ctx.getReloadable());
+ ctx1.setDebug( ctx.getDebug());
+ ctx1.setHost( ctx.getHost());
+ ctx1.setTrusted( ctx.isTrusted());
+ e=ctx.getHostAliases();
+ while( e.hasMoreElements())
+ ctx1.addHostAlias( (String)e.nextElement());
+
+ BaseInterceptor ri[] =
+ cm.getContainer().getInterceptors(Container.H_copyContext);
+ int i;
+ for( i=0; i < ri.length; i++) {
+ ri[i].copyContext(request, ctx, ctx1);
+ }
+ cm.removeContext( ctx );
+
+ cm.addContext( ctx1 );
+
+ // put back saved local interceptors
+ e=sI.elements();
+ while(e.hasMoreElements()){
+ BaseInterceptor savedI=(BaseInterceptor)e.nextElement();
+
+ ctx1.addInterceptor(savedI);
+ savedI.setContext(ctx1);
+ savedI.reload(request,ctx1);
+ }
+
+ ctx1.init();
+
+ // remap the request
+ request.setAttribute("tomcat.ReloadInterceptor", this);
+ ri = cm.getContainer().getInterceptors(Container.H_contextMap);
+
+ for( i=0; i< ri.length; i++ ) {
+ if( ri[i]==this ) break;
+ int status=ri[i].contextMap( request );
+ if( status!=0 ) return status;
+ }
}
-
- ctx1.init();
-
- // remap the request
- request.setAttribute("tomcat.ReloadInterceptor", this);
- BaseInterceptor ri[]=
- cm.getContainer().getInterceptors(Container.H_contextMap);
-
- for( int i=0; i< ri.length; i++ ) {
- if( ri[i]==this ) break;
- int status=ri[i].contextMap( request );
- if( status!=0 ) return status;
- }
-
+
} else {
// This is the old ( buggy) behavior
// ctx.reload() has some fixes - it removes most of the
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>