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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]