This is an automated email from the ASF dual-hosted git repository. fhanik pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push: new 44c8234 Add in an ability to configure a custom class loader 44c8234 is described below commit 44c82344ecb1d436d4e88a81fc3788981d3bad6f Author: Filip Hanik <fha...@pivotal.io> AuthorDate: Wed Aug 12 11:14:13 2020 -0700 Add in an ability to configure a custom class loader without using reflection beneficial for programmatic usage and building native images using GraalVM --- java/org/apache/catalina/loader/WebappLoader.java | 16 +++++++++++++ .../catalina/loader/TestVirtualWebappLoader.java | 27 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/java/org/apache/catalina/loader/WebappLoader.java b/java/org/apache/catalina/loader/WebappLoader.java index 95d70c2..7076c20 100644 --- a/java/org/apache/catalina/loader/WebappLoader.java +++ b/java/org/apache/catalina/loader/WebappLoader.java @@ -243,6 +243,18 @@ public class WebappLoader extends LifecycleMBeanBase this.loaderClass = loaderClass; } + /** + * Set the ClassLoader instance, without relying on reflection + * This method will also invoke {@link #setLoaderClass(String)} with + * {@code loaderInstance.getClass().getName()} as an argument + * + * @param loaderInstance The new ClassLoader instance to use + */ + public void setLoaderInstance(WebappClassLoaderBase loaderInstance) { + this.classLoader = loaderInstance; + setLoaderClass(loaderInstance.getClass().getName()); + } + /** * Return the reloadable flag for this Loader. @@ -507,6 +519,10 @@ public class WebappLoader extends LifecycleMBeanBase private WebappClassLoaderBase createClassLoader() throws Exception { + if (classLoader != null) { + return classLoader; + } + if (parentClassLoader == null) { parentClassLoader = context.getParentClassLoader(); } else { diff --git a/test/org/apache/catalina/loader/TestVirtualWebappLoader.java b/test/org/apache/catalina/loader/TestVirtualWebappLoader.java index afcd8a3..11d840e 100644 --- a/test/org/apache/catalina/loader/TestVirtualWebappLoader.java +++ b/test/org/apache/catalina/loader/TestVirtualWebappLoader.java @@ -37,6 +37,33 @@ public class TestVirtualWebappLoader extends TomcatBaseTest { } @Test + public void testLoaderInstance() throws Exception { + WebappLoader loader = new WebappLoader(); + Assert.assertNull(loader.getClassLoader()); + WebappClassLoader cl = new WebappClassLoader(); + loader.setLoaderInstance(cl); + Assert.assertSame(cl, loader.getClassLoader()); + Assert.assertEquals(WebappClassLoader.class.getName(), loader.getLoaderClass()); + + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp"); + StandardContext ctx = (StandardContext) tomcat.addContext("", + appDir.getAbsolutePath()); + + loader.setContext(ctx); + ctx.setLoader(loader); + + + loader.start(); + Assert.assertSame(cl, loader.getClassLoader()); + Assert.assertEquals(WebappClassLoader.class.getName(), loader.getLoaderClass()); + loader.stop(); + Assert.assertNull(loader.getClassLoader()); + Assert.assertEquals(WebappClassLoader.class.getName(), loader.getLoaderClass()); + } + + @Test public void testStartInternal() throws Exception { Tomcat tomcat = getTomcatInstance(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org