Author: markt
Date: Sun May  1 20:56:02 2016
New Revision: 1741892

URL: http://svn.apache.org/viewvc?rev=1741892&view=rev
Log:
Traverse StandardJarScanner's class loader hierarchy once rather than once per 
scan. Marginally improves start times.

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java?rev=1741892&r1=1741891&r2=1741892&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Sun 
May  1 20:56:02 2016
@@ -23,6 +23,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.URLConnection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
@@ -60,8 +61,21 @@ public class StandardJarScanner implemen
     /**
      * The string resources for this package.
      */
-    private static final StringManager sm =
-        StringManager.getManager(Constants.Package);
+    private static final StringManager sm = 
StringManager.getManager(Constants.Package);
+
+    private static final Set<ClassLoader> CLASSLOADER_HIERARCHY;
+
+    static {
+        Set<ClassLoader> cls = new HashSet<>();
+
+        ClassLoader cl = StandardJarScanner.class.getClassLoader();
+        while (cl != null) {
+            cls.add(cl);
+            cl = cl.getParent();
+        }
+
+        CLASSLOADER_HIERARCHY = Collections.unmodifiableSet(cls);
+    }
 
     /**
      * Controls the classpath scanning extension.
@@ -282,16 +296,8 @@ public class StandardJarScanner implemen
      *   the system class loader is not an application class loader
      *   the bootstrap class loader is not an application class loader
      */
-    private boolean isWebappClassLoader(ClassLoader classLoader) {
-        ClassLoader nonWebappLoader = 
StandardJarScanner.class.getClassLoader();
-
-        while (nonWebappLoader != null) {
-            if (nonWebappLoader == classLoader) {
-                return false;
-            }
-            nonWebappLoader = nonWebappLoader.getParent();
-        }
-        return true;
+    private static boolean isWebappClassLoader(ClassLoader classLoader) {
+        return !CLASSLOADER_HIERARCHY.contains(classLoader);
     }
 
 



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

Reply via email to