costin      01/07/18 22:55:30

  Modified:    src/share/org/apache/tomcat/core ContextManager.java
  Log:
  Load trusted apps first.
  
  Revision  Changes    Path
  1.184     +56 -21    
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.183
  retrieving revision 1.184
  diff -u -r1.183 -r1.184
  --- ContextManager.java       2001/07/13 06:04:30     1.183
  +++ ContextManager.java       2001/07/19 05:55:30     1.184
  @@ -544,44 +544,79 @@
   
        // deal with contexts that were added before init()
        // ( by user or modules during engineInit )
  +
  +     // first trusted apps - they may do special actions
        Enumeration enum = getContexts();
        while (enum.hasMoreElements()) {
            Context ctx = (Context)enum.nextElement();
  -         ctx.setContextManager( this );
  -         try {
  -             for( int i=0; i<existingI.length; i++ ) {
  -                 existingI[i].addContext( this, ctx );
  +         if( ctx.isTrusted() )
  +             fireAddContext(ctx, existingI );
  +     }
  +     
  +     // Initialize the contexts
  +     enum = getContexts();
  +     while (enum.hasMoreElements()) {
  +         Context ctx = (Context)enum.nextElement();
  +         if( ctx.isTrusted() ) {
  +             try {
  +                 ctx.init();
  +             } catch( TomcatException ex ) {
  +                 // just log the error - the context will not serve requests
  +                 log( "Error initializing " + ctx , ex );
  +                 continue; 
                }
  -         } catch( TomcatException ex ) {
  -             log( "Error adding context " + ctx , ex );
  -             continue; 
  -         }
  -         try {
  -             // set state may throw exception
  -             ctx.setState( Context.STATE_ADDED );
  -             log("Adding  " +  ctx.toString());
  -         } catch( TomcatException ex ) {
  -             log( "Error adding context " + ctx , ex );
  -             continue; 
            }
        }
   
  +     // again - it may change
  +     existingI=defaultContainer.getInterceptors();
  +
  +     // Same thing for untrusted apps 
  +     enum = getContexts();
  +     while (enum.hasMoreElements()) {
  +         Context ctx = (Context)enum.nextElement();
  +         if( ! ctx.isTrusted() )
  +             fireAddContext(ctx, existingI );
  +     }
  +
        // Initialize the contexts
        enum = getContexts();
        while (enum.hasMoreElements()) {
            Context ctx = (Context)enum.nextElement();
  -         try {
  -             ctx.init();
  -         } catch( TomcatException ex ) {
  -             // just log the error - the context will not serve requests
  -             log( "Error initializing " + ctx , ex );
  -             continue; 
  +         if( ! ctx.isTrusted() ) {
  +             try {
  +                 ctx.init();
  +             } catch( TomcatException ex ) {
  +                 // just log the error - the context will not serve requests
  +                 log( "Error initializing " + ctx , ex );
  +                 continue; 
  +             }
            }
        }
   
        setState( STATE_INIT );
       }
   
  +    private void fireAddContext(Context ctx, BaseInterceptor existingI[] ) {
  +     ctx.setContextManager( this );
  +     try {
  +         for( int i=0; i<existingI.length; i++ ) {
  +             existingI[i].addContext( this, ctx );
  +         }
  +     } catch( TomcatException ex ) {
  +         log( "Error adding context " + ctx , ex );
  +         return; 
  +     }
  +     try {
  +         // set state may throw exception
  +         ctx.setState( Context.STATE_ADDED );
  +         log("Adding  " +  ctx.toString());
  +     } catch( TomcatException ex ) {
  +         log( "Error adding context " + ctx , ex );
  +         return; 
  +     }
  +    }
  +    
       /** Will start the connectors and begin serving requests.
        *  It must be called after init.
        */
  
  
  

Reply via email to