You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/06/14 16:14:01 UTC

svn commit: r1493080 - in /tomcat/trunk/java/org/apache/catalina: deploy/WebXml.java startup/ContextConfig.java

Author: markt
Date: Fri Jun 14 14:14:00 2013
New Revision: 1493080

URL: http://svn.apache.org/r1493080
Log:
Always process container JARs for SCIs
Order of SCI processing for container JARs compared to web application JARs should be the same as class loading order.

Modified:
    tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java

Modified: tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java?rev=1493080&r1=1493079&r2=1493080&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java Fri Jun 14 14:14:00 2013
@@ -600,12 +600,13 @@ public class WebXml {
     // Is this JAR part of the application or is it a container JAR? Assume it
     // is.
     private boolean webappJar = true;
-    public void setWebappJar(boolean webappJar) {
-        this.webappJar = webappJar;
-    }
-    public boolean getWebappJar() {
-        return webappJar;
-    }
+    public void setWebappJar(boolean webappJar) { this.webappJar = webappJar; }
+    public boolean getWebappJar() { return webappJar; }
+
+    // Does this web application delegate first for class loading?
+    private boolean delegate = false;
+    public boolean getDelegate() { return delegate; }
+    public void setDelegate(boolean delegate) { this.delegate = delegate; }
 
     @Override
     public String toString() {
@@ -2109,9 +2110,21 @@ public class WebXml {
             orderFragments(orderedFragments, afterSet);
         }
 
+        // Container fragments are always included
+        Set<WebXml> containerFragments = new LinkedHashSet<>();
+        // Find all the container fragments and remove any present from the
+        // ordered list
+        for (WebXml fragment : fragments.values()) {
+            if (!fragment.getWebappJar()) {
+                containerFragments.add(fragment);
+                orderedFragments.remove(fragment);
+            }
+        }
+
         // Avoid NPE when unit testing
         if (servletContext != null) {
-            // Publish the ordered fragments
+            // Publish the ordered fragments. The app does not need to know
+            // about container fragments
             List<String> orderedJarFileNames = null;
             if (orderingPresent) {
                 orderedJarFileNames = new ArrayList<>();
@@ -2123,7 +2136,21 @@ public class WebXml {
                     orderedJarFileNames);
         }
 
-        return orderedFragments;
+        // The remainder of the processing needs to know about container
+        // fragments
+        if (containerFragments.size() > 0) {
+            Set<WebXml> result = new LinkedHashSet<>();
+            if (containerFragments.iterator().next().getDelegate()) {
+                result.addAll(containerFragments);
+                result.addAll(orderedFragments);
+            } else {
+                result.addAll(orderedFragments);
+                result.addAll(containerFragments);
+            }
+            return result;
+        } else {
+            return orderedFragments;
+        }
     }
 
     private static void decoupleOtherGroups(Set<WebXml> group) {

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=1493080&r1=1493079&r2=1493080&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri Jun 14 14:14:00 2013
@@ -2737,6 +2737,9 @@ public class ContextConfig implements Li
             WebXml fragment = new WebXml();
 
             fragment.setWebappJar(isWebapp);
+            if (context instanceof StandardContext) {
+                fragment.setDelegate(((StandardContext) context).getDelegate());
+            }
 
             try {
                 // Only web application JARs are checked for web-fragment.xml



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