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

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


The following commit(s) were added to refs/heads/master by this push:
     new 787639a01 RANGER-3636: updated plugin classloader to use classloader 
of shim class as parent (#548)
787639a01 is described below

commit 787639a0183f7ddaacf1fbaa91d711584615cc2d
Author: Madhan Neethiraj <mad...@apache.org>
AuthorDate: Thu Jun 26 20:22:10 2025 +0530

    RANGER-3636: updated plugin classloader to use classloader of shim class as 
parent (#548)
---
 .../classloader/RangerPluginClassLoader.java       | 28 ++++++++++++----------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git 
a/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
 
b/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
index 18bf15f85..befd591d3 100644
--- 
a/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
+++ 
b/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
@@ -41,13 +41,13 @@ public class RangerPluginClassLoader extends URLClassLoader 
{
 
     private static final Map<String, RangerPluginClassLoader> 
PLUGIN_CLASS_LOADERS = new HashMap<>();
 
-    private final MyClassLoader            componentClassLoader;
+    private final ComponentClassLoader     componentClassLoader;
     private final ThreadLocal<ClassLoader> preActivateClassLoader = new 
ThreadLocal<>();
 
     public RangerPluginClassLoader(String pluginType, Class<?> pluginClass) 
throws Exception {
         
super(RangerPluginClassLoaderUtil.getInstance().getPluginFilesForServiceTypeAndPluginclass(pluginType,
 pluginClass), null);
 
-        componentClassLoader = 
AccessController.doPrivileged((PrivilegedAction<MyClassLoader>) () -> new 
MyClassLoader(Thread.currentThread().getContextClassLoader()));
+        componentClassLoader = 
AccessController.doPrivileged((PrivilegedAction<ComponentClassLoader>) () -> 
new ComponentClassLoader(pluginClass));
     }
 
     public static RangerPluginClassLoader getInstance(final String pluginType, 
final Class<?> pluginClass) throws Exception {
@@ -104,7 +104,7 @@ public Class<?> findClass(String name) throws 
ClassNotFoundException {
             // Use the Component ClassLoader findClass to load when 
childClassLoader fails to find
             LOG.debug("RangerPluginClassLoader.findClass({}): calling 
componentClassLoader.findClass()", name);
 
-            MyClassLoader savedClassLoader = getComponentClassLoader();
+            ComponentClassLoader savedClassLoader = getComponentClassLoader();
 
             if (savedClassLoader != null) {
                 ret = savedClassLoader.findClass(name);
@@ -125,7 +125,7 @@ public URL findResource(String name) {
         if (ret == null) {
             LOG.debug("RangerPluginClassLoader.findResource({}): calling 
componentClassLoader.getResources()", name);
 
-            MyClassLoader savedClassLoader = getComponentClassLoader();
+            ComponentClassLoader savedClassLoader = getComponentClassLoader();
 
             if (savedClassLoader != null) {
                 ret = savedClassLoader.getResource(name);
@@ -165,7 +165,7 @@ public synchronized Class<?> loadClass(String name) throws 
ClassNotFoundExceptio
             // Use the Component ClassLoader loadClass to load when 
childClassLoader fails to find
             LOG.debug("RangerPluginClassLoader.loadClass({}): calling 
componentClassLoader.loadClass()", name);
 
-            MyClassLoader savedClassLoader = getComponentClassLoader();
+            ComponentClassLoader savedClassLoader = getComponentClassLoader();
 
             if (savedClassLoader != null) {
                 ret = savedClassLoader.loadClass(name);
@@ -198,7 +198,7 @@ public Enumeration<URL> 
findResourcesUsingComponentClassLoader(String name) {
         try {
             
LOG.debug("RangerPluginClassLoader.findResourcesUsingComponentClassLoader({}): 
calling componentClassLoader.getResources()", name);
 
-            MyClassLoader savedClassLoader = getComponentClassLoader();
+            ComponentClassLoader savedClassLoader = getComponentClassLoader();
 
             if (savedClassLoader != null) {
                 ret = savedClassLoader.getResources(name);
@@ -232,7 +232,7 @@ public void deactivate() {
         if (classLoader != null) {
             preActivateClassLoader.remove();
         } else {
-            MyClassLoader savedClassLoader = getComponentClassLoader();
+            ComponentClassLoader savedClassLoader = getComponentClassLoader();
 
             if (savedClassLoader != null && savedClassLoader.getParent() != 
null) {
                 classLoader = savedClassLoader.getParent();
@@ -252,7 +252,7 @@ public ClassLoader getPrevActiveClassLoader() {
         ClassLoader ret = preActivateClassLoader.get();
 
         if (ret == null) {
-            MyClassLoader savedClassLoader = getComponentClassLoader();
+            ComponentClassLoader savedClassLoader = getComponentClassLoader();
 
             if (savedClassLoader != null && savedClassLoader.getParent() != 
null) {
                 ret = savedClassLoader.getParent();
@@ -262,20 +262,24 @@ public ClassLoader getPrevActiveClassLoader() {
         return ret;
     }
 
-    private MyClassLoader getComponentClassLoader() {
+    private ComponentClassLoader getComponentClassLoader() {
         return componentClassLoader;
         //return componentClassLoader.get();
     }
 
-    static class MyClassLoader extends ClassLoader {
-        public MyClassLoader(ClassLoader realClassLoader) {
-            super(realClassLoader);
+    static class ComponentClassLoader extends ClassLoader {
+        public ComponentClassLoader(Class<?> pluginShimClass) {
+            super(getClassLoaderOfShimClassOrCurrentThread(pluginShimClass));
         }
 
         @Override
         public Class<?> findClass(String name) throws ClassNotFoundException { 
//NO PMD
             return super.findClass(name);
         }
+
+        private static ClassLoader 
getClassLoaderOfShimClassOrCurrentThread(Class<?> pluginShimClass) {
+            return pluginShimClass != null ? pluginShimClass.getClassLoader() 
: Thread.currentThread().getContextClassLoader();
+        }
     }
 
     static class MergeEnumeration implements Enumeration<URL> { //NO PMD

Reply via email to