You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2020/04/02 12:40:01 UTC

[tomee] 01/05: TOMEE-2785 add basic config to allow classes to skip to be configured with a system property

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

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

commit 2268fe8c852c0c8b364a6df488309359c22c6d4b
Author: Jonathan Gallimore <jo...@jrg.me.uk>
AuthorDate: Tue Mar 24 15:02:01 2020 +0000

    TOMEE-2785 add basic config to allow classes to skip to be configured with a system property
---
 .../apache/tomee/catalina/TomEEWebappClassLoader.java   | 17 ++++++++++++++++-
 .../org/apache/tomee/catalina/TomEEWebappLoader.java    |  9 ++++-----
 .../tomee/catalina/WebAppFirstEarClassLoader.java       |  5 -----
 3 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
index 1a1208a..1ddf303 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
@@ -81,6 +81,7 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
     }
 
     public static final String CLASS_EXTENSION = ".class";
+    protected String[] forceSkip;
 
     private boolean restarting;
     private boolean forceStopPhase = Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.webappclassloader.force-stop-phase", "false"));
@@ -164,7 +165,7 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
         }
 
         // avoid to redefine classes from server in this classloader is it not already loaded
-        if (URLClassLoaderFirst.shouldDelegateToTheContainer(this, name)) { // dynamic validation handling overriding
+        if (URLClassLoaderFirst.shouldDelegateToTheContainer(this, name) || shouldForceLoadFromTheContainer(name)) { // dynamic validation handling overriding
             try {
                 return OpenEJB.class.getClassLoader().loadClass(name); // we could use containerClassLoader but this is server loader so cut it even more
             } catch (final ClassNotFoundException e) {
@@ -209,6 +210,16 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
         }
     }
 
+    private boolean shouldForceLoadFromTheContainer(final String name) {
+        for (final String p : forceSkip) {
+            if (name.startsWith(p)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     private Class<?> loadWithDelegate(final boolean delegate, final boolean resolve, final String name) throws ClassNotFoundException {
         setDelegate(delegate);
         try {
@@ -549,6 +560,10 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
         this.webResourceRoot = webResourceRoot;
     }
 
+    void setForceSkip(final String[] forceSkip) {
+        this.forceSkip = forceSkip;
+    }
+
     private static class NoClassClassLoader extends ClassLoader {
         private static final NoClassClassLoader INSTANCE = new NoClassClassLoader();
 
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
index 956e055..bb19d55 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
@@ -39,11 +39,10 @@ import java.io.File;
  * </Context>
  */
 public class TomEEWebappLoader extends WebappLoader {
-    public static final boolean SKIP_BACKGROUND_PROCESS = "true".equals(SystemInstance.get().getProperty("tomee.classloader.skip-background-process", "false"));
+    private static final boolean SKIP_BACKGROUND_PROCESS = "true".equals(SystemInstance.get().getProperty("tomee.classloader.skip-background-process", "false"));
+    private static final String FORCE_SKIP = SystemInstance.get().getProperty("tomee.webapp.classloader.forced-skip", "");
 
     private volatile ClassLoader loader;
-    private String forceSkip;
-    private String[] forceSkipRuntime;
 
     @Override
     public void backgroundProcess() {
@@ -113,8 +112,8 @@ public class TomEEWebappLoader extends WebappLoader {
             TomEEWebappClassLoader.cleanContext();
         }
 
-        if (forceSkip != null && WebAppFirstEarClassLoader.class.isInstance(getClassLoader())) {
-            WebAppFirstEarClassLoader.class.cast(getClassLoader()).setForceSkip(forceSkip.split(" *, *"));
+        if (FORCE_SKIP != null && TomEEWebappClassLoader.class.isInstance(getClassLoader())) {
+            TomEEWebappClassLoader.class.cast(getClassLoader()).setForceSkip(FORCE_SKIP.split(" *, *"));
         }
     }
 
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebAppFirstEarClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebAppFirstEarClassLoader.java
index 327f58d..63f24bb 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebAppFirstEarClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebAppFirstEarClassLoader.java
@@ -24,8 +24,6 @@ public class WebAppFirstEarClassLoader extends TomEEWebappClassLoader {
         ClassLoader.registerAsParallelCapable();
     }
 
-    private String[] forceSkip;
-
     public WebAppFirstEarClassLoader() {
         super();
     }
@@ -56,7 +54,4 @@ public class WebAppFirstEarClassLoader extends TomEEWebappClassLoader {
         return false;
     }
 
-    void setForceSkip(final String[] forceSkip) {
-        this.forceSkip = forceSkip;
-    }
 }