larryi      01/01/23 05:17:07

  Modified:    src/share/org/apache/tomcat/modules/config AutoSetup.java
  Log:
  If an expanded context is already defined, try to reload the context instead
  of recreate it.  This has a better chance of preserving the context settings. :-)
  
  Note: Context reloading is not currently successful at completely avoiding
  the bug.  If you try to execute the admin/test/test.jsp when the admin.war
  wasn't already expaned, the request will result in a 500 error. The
  ServletContext for the JspServlet is still carrying a reference to the
  old context and its old classloader.  This old classloader doesn't have
  WEB-INF/classes in its urls[] array. If this problem occurs, restart Tomcat.
  Since the admin.war is already expanded, the problem is avoided.
  
  Revision  Changes    Path
  1.4       +21 -6     
jakarta-tomcat/src/share/org/apache/tomcat/modules/config/AutoSetup.java
  
  Index: AutoSetup.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/config/AutoSetup.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AutoSetup.java    2001/01/22 21:37:29     1.3
  +++ AutoSetup.java    2001/01/23 13:17:07     1.4
  @@ -148,15 +148,30 @@
                    path="";
   
            Context ctx = (Context)definedContexts.get(path);
  -            // if context not defined or was expanded
  -         if( ctx  == null || expanded ) {
  +         // if context is defined and was expanded
  +         if( ctx != null && expanded ) {
  +             // we need to reload the context since it was initialized
  +             // before its directories existed. At minimum, its classloader
  +             // needs updating.
  +             if ( ctx.getReloadable() ) {
  +                 ctx.setReload( true );
  +                 if( debug > 0 )
  +                     log("setting context " + ctx.toString() + "to reload");
  +             } else {
  +                 log("Warning: predefined context " + ctx.toString() +
  +     " is not reloadable, recreating instead. Some settings may be lost!");
  +                 cm.removeContext(ctx);
  +                 // XXX Make sure ctx is destroyed - we may have
  +                 // undetected leaks 
  +                 ctx=null;
  +             }
  +         }
  +
  +            // if context not defined
  +         if( ctx  == null ) {
                // if no explicit set up and is a directory
                File f=new File( webappD, name);
                if (f.isDirectory()) {
  -                 // If the context is already defined and was expanded,
  -                 // we need to remove it since it was initialized before
  -                 // its directories existed. At minimum, its classloader
  -                 // needs updating.
                    if ( ctx != null )
                        cm.removeContext(ctx);
                    ctx=new Context();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to