You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by is...@apache.org on 2019/12/25 04:27:50 UTC

[tomcat] 01/03: BZ-63691 Skip all jar scanning if wildcard pattern is used

This is an automated email from the ASF dual-hosted git repository.

isapir pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 21d08e1952d6612da9a712a173c81174958f4b8b
Author: Igal Sapir <is...@apache.org>
AuthorDate: Tue Dec 24 16:41:29 2019 -0800

      BZ-63691 Skip all jar scanning if wildcard pattern is used
---
 java/org/apache/tomcat/JarScanFilter.java                   | 9 +++++++++
 java/org/apache/tomcat/util/scan/StandardJarScanFilter.java | 8 ++++++++
 java/org/apache/tomcat/util/scan/StandardJarScanner.java    | 9 +++++++++
 3 files changed, 26 insertions(+)

diff --git a/java/org/apache/tomcat/JarScanFilter.java b/java/org/apache/tomcat/JarScanFilter.java
index d7f6738..d3aeb45 100644
--- a/java/org/apache/tomcat/JarScanFilter.java
+++ b/java/org/apache/tomcat/JarScanFilter.java
@@ -28,4 +28,13 @@ public interface JarScanFilter {
      *             <code>false</code> if it should be excluded
      */
     boolean check(JarScanType jarScanType, String jarName);
+
+    /**
+     *
+     * @return <code>true</code> if all of the scans should be skipped which
+     * can improve startup performance. The default is <code>false</code>.
+     */
+    default boolean isSkipAll() {
+        return false;
+    }
 }
diff --git a/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java b/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java
index 84d3725..6e942a2 100644
--- a/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java
+++ b/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java
@@ -36,11 +36,13 @@ public class StandardJarScanFilter implements JarScanFilter {
     private static final String defaultScan;
     private static final Set<String> defaultSkipSet = new HashSet<>();
     private static final Set<String> defaultScanSet = new HashSet<>();
+    private static final boolean defaultSkipAll;
 
     static {
         // Initialize defaults. There are no setter methods for them.
         defaultSkip = System.getProperty(Constants.SKIP_JARS_PROPERTY);
         populateSetFromAttribute(defaultSkip, defaultSkipSet);
+        defaultSkipAll = defaultSkipSet.contains("*") || defaultSkipSet.contains("*.jar");
         defaultScan = System.getProperty(Constants.SCAN_JARS_PROPERTY);
         populateSetFromAttribute(defaultScan, defaultScanSet);
     }
@@ -132,6 +134,12 @@ public class StandardJarScanFilter implements JarScanFilter {
     }
 
 
+    @Override
+    public boolean isSkipAll() {
+        return defaultSkipAll;
+    }
+
+
     public boolean isDefaultTldScan() {
         return defaultTldScan;
     }
diff --git a/java/org/apache/tomcat/util/scan/StandardJarScanner.java b/java/org/apache/tomcat/util/scan/StandardJarScanner.java
index 9b12ce9..16a2396 100644
--- a/java/org/apache/tomcat/util/scan/StandardJarScanner.java
+++ b/java/org/apache/tomcat/util/scan/StandardJarScanner.java
@@ -171,6 +171,10 @@ public class StandardJarScanner implements JarScanner {
             log.trace(sm.getString("jarScan.webinflibStart"));
         }
 
+        if (jarScanFilter.isSkipAll()) {
+            return;
+        }
+
         Set<URL> processedURLs = new HashSet<>();
 
         // Scan WEB-INF/lib
@@ -282,6 +286,11 @@ public class StandardJarScanner implements JarScanner {
 
     protected void processURLs(JarScanType scanType, JarScannerCallback callback,
             Set<URL> processedURLs, boolean isWebapp, Deque<URL> classPathUrlsToProcess) {
+
+        if (jarScanFilter.isSkipAll()) {
+            return;
+        }
+
         while (!classPathUrlsToProcess.isEmpty()) {
             URL url = classPathUrlsToProcess.pop();
 


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