larryi 02/03/11 03:40:05 Modified: src/share/org/apache/tomcat/modules/config TrustedLoader.java Log: Track modules that need to be removed by context and update them to be current after reloading. Revision Changes Path 1.5 +34 -23 jakarta-tomcat/src/share/org/apache/tomcat/modules/config/TrustedLoader.java Index: TrustedLoader.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/config/TrustedLoader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- TrustedLoader.java 17 Dec 2001 05:24:09 -0000 1.4 +++ TrustedLoader.java 11 Mar 2002 11:40:05 -0000 1.5 @@ -86,10 +86,10 @@ } // -------------------- Properties -------------------- - + // -------------------- Hooks -------------------- - Vector allModules=new Vector(); - + Hashtable allModules=new Hashtable(); + /** Called when the server is configured - all base modules are added, some contexts are added ( explicitely or by AutoDeploy/AutoAdd ). No addContext callback has been called. @@ -115,11 +115,11 @@ File modules=getModuleFile( context ); if( modules==null ) continue; - + /* We'll create a temporary loader for this context, and use it * to create a module. The module will be notified for all * contexts that were added so far, as with any normal module. - * + * * What's special is that at init stage, the module will be * removed and loaded again, with the real class loader. * Same thing will happen when the application is reloaded. @@ -139,13 +139,16 @@ loadInterceptors( context, modules, modV ); cm.setNote( "trustedLoader.currentContext", context ); + Vector ctxModules=new Vector(); + allModules.put( context, ctxModules ); + // Now add all modules to cm for( int i=0; i< modV.size(); i++ ) { BaseInterceptor bi=(BaseInterceptor)modV.elementAt( i ); if(debug>0) log( "Add dummy module, for configuration " + context.getDocBase() + " " + context); cm.addInterceptor( bi ); - allModules.addElement( bi ); - } + ctxModules.addElement( bi ); + } cm.setNote( "trustedLoader.currentContext", null ); context.setClassLoader( null ); } @@ -170,14 +173,21 @@ throws TomcatException { if(debug>0) log("reInit " + modules ); - // remove modules - for( int i=0; i< allModules.size(); i++ ) { - BaseInterceptor bi=(BaseInterceptor)allModules.elementAt( i ); - cm.removeInterceptor( bi ); - } - - // The real loader is set. + Vector ctxModules = (Vector)allModules.get( ctx ); + if( ctxModules != null ) { + // remove modules + for( int i=0; i< ctxModules.size(); i++ ) { + BaseInterceptor bi=(BaseInterceptor)ctxModules.elementAt( i ); + cm.removeInterceptor( bi ); + } + ctxModules.removeAllElements(); + } else { + ctxModules = new Vector(); + allModules.put( ctx, ctxModules ); + } + + // The real loader is set. Vector modV=new Vector(); if( debug > 0 ) log( "Loading the real module " + ctx + " " + modules); loadInterceptors( ctx, modules, modV ); @@ -187,7 +197,8 @@ for( int i=0; i< modV.size(); i++ ) { BaseInterceptor bi=(BaseInterceptor)modV.elementAt( i ); cm.addInterceptor( bi ); - } + ctxModules.addElement( bi ); + } cm.setNote( "trustedLoader.currentContext", null ); } @@ -206,11 +217,11 @@ } - + public void loadInterceptors( Context ctx, File modulesF, Vector modulesV ) throws TomcatException { - + XmlMapper xh=new XmlMapper(); xh.setClassLoader( ctx.getClassLoader()); //xh.setDebug( debug ); @@ -219,7 +230,7 @@ // with <module> definition and the module itself setTagRules( xh ); - // then load the actual config + // then load the actual config ServerXmlReader.loadConfigFile(xh,modulesF,modulesV); } @@ -239,7 +250,7 @@ }); } - + public static void setTagRules( XmlMapper xh ) { xh.addRule( "module", new XmlAction() { public void start(SaxContext ctx ) throws Exception { @@ -254,11 +265,11 @@ }); } - - + + private File getModuleFile(Context ctx ) { // PathSetter is the first module in the chain, we shuld have - // a valid path by now + // a valid path by now String dir=ctx.getAbsolutePath(); File f=new File(dir); @@ -273,7 +284,7 @@ return null; } } - + }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>