Author: pero
Date: Fri May 14 15:00:06 2010
New Revision: 944304

URL: http://svn.apache.org/viewvc?rev=944304&view=rev
Log:
Fix change fragment absolute-ordering at web.xml with manager redeploy!

Modified:
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
    tomcat/trunk/java/org/apache/naming/resources/BaseDirContext.java
    tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java

Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=944304&r1=944303&r2=944304&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri May 14 
15:00:06 2010
@@ -1171,7 +1171,7 @@ public class ContextConfig
      * web.xml file.
      */
     protected void webConfig() {
-        WebXml webXml = new WebXml();
+        WebXml webXml = createWebXml();
 
         // Parse global web.xml if present
         InputSource globalWebXml = getGlobalWebXmlSource();
@@ -1281,7 +1281,10 @@ public class ContextConfig
         }
     }
 
-    
+    protected WebXml createWebXml() {
+        return new WebXml();
+    }
+
     /**
      * Scan JARs for ServletContainerInitializer implementations.
      * Implementations will be added in web-fragment.xml priority order.

Modified: tomcat/trunk/java/org/apache/naming/resources/BaseDirContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/naming/resources/BaseDirContext.java?rev=944304&r1=944303&r2=944304&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/naming/resources/BaseDirContext.java (original)
+++ tomcat/trunk/java/org/apache/naming/resources/BaseDirContext.java Fri May 
14 15:00:06 2010
@@ -375,7 +375,16 @@ public abstract class BaseDirContext imp
      * Release any resources allocated for this directory context.
      */
     public void release() {
-        // No action taken by the default implementation
+        for(BaseDirContext bcontext: this.aliases.values()) {
+            bcontext.release();
+        }
+        this.aliases.clear();
+        for(DirContext dcontext: this.altDirContexts) {
+            if(dcontext instanceof BaseDirContext) {
+                ((BaseDirContext)dcontext).release();
+            }
+        }
+        this.altDirContexts.clear();        
     }
 
     

Modified: 
tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java?rev=944304&r1=944303&r2=944304&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java 
(original)
+++ 
tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java 
Fri May 14 15:00:06 2010
@@ -29,8 +29,12 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.deploy.WebXml;
+import org.apache.catalina.startup.ContextConfig;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.catalina.startup.Tomcat.DefaultWebXmlListener;
 import org.apache.tomcat.util.buf.ByteChunk;
 
 public class TestStandardContextResources extends TomcatBaseTest {
@@ -70,14 +74,69 @@ public class TestStandardContextResource
                 "<p>resourceE.jsp in the web application</p>");
     }
 
-    public void testResources2() throws Exception {
+    public void testResourcesAbsoluteOrdering() throws Exception {
         Tomcat tomcat = getTomcatInstance();
 
         File appDir = new File("test/webapp-3.0-fragments");
         // app dir is relative to server home
         StandardContext ctx = (StandardContext) tomcat.addWebapp(null, "/test",
                 appDir.getAbsolutePath());
+        LifecycleListener[] listener = ctx.findLifecycleListeners();
+        assertEquals(3,listener.length);
+        assertTrue(listener[1] instanceof ContextConfig);
+        ContextConfig config = new ContextConfig() {
+            protected WebXml createWebXml() {
+                WebXml wxml = new WebXml();
+                wxml.addAbsoluteOrdering("resources");
+                wxml.addAbsoluteOrdering("resources2");
+                return wxml;
+            }
+        };
+        // prevent it from looking ( if it finds one - it'll have dup error )
+        config.setDefaultWebXml("org/apache/catalin/startup/NO_DEFAULT_XML");
+        listener[1] = config;
+        Tomcat.addServlet(ctx, "getresource", new GetResourceServlet());
+        ctx.addServletMapping("/getresource", "getresource");
+
+        tomcat.start();
+        assertPageContains("/test/getresource?path=/resourceF.jsp",
+        "<p>resourceF.jsp in resources2.jar</p>");
+        assertPageContains("/test/getresource?path=/resourceB.jsp",
+        "<p>resourceB.jsp in resources.jar</p>");
+
+        ctx.stop();
+        
+        LifecycleListener[] listener1 = ctx.findLifecycleListeners();
+        // change ordering and reload
+        ContextConfig config1 = new ContextConfig() {
+            protected WebXml createWebXml() {
+                WebXml wxml = new WebXml();
+                wxml.addAbsoluteOrdering("resources2");
+                wxml.addAbsoluteOrdering("resources");
+                return wxml;
+            }
+        };
+        // prevent it from looking ( if it finds one - it'll have dup error )
+        config1.setDefaultWebXml("org/apache/catalin/startup/NO_DEFAULT_XML");
+        listener1[1] = config1;
 
+        ctx.start();
+        
+        assertPageContains("/test/getresource?path=/resourceF.jsp",
+        "<p>resourceF.jsp in resources2.jar</p>");
+        assertPageContains("/test/getresource?path=/resourceB.jsp",
+        "<p>resourceB.jsp in resources2.jar</p>");
+ 
+    }
+    
+    public void testResources2() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = new File("test/webapp-3.0-fragments");
+        // app dir is relative to server home
+        StandardContext ctx = (StandardContext) tomcat.addWebapp(null, "/test",
+                appDir.getAbsolutePath());
+        
         Tomcat.addServlet(ctx, "getresource", new GetResourceServlet());
         ctx.addServletMapping("/getresource", "getresource");
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to