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

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


The following commit(s) were added to refs/heads/ranger-2.7 by this push:
     new ff00c3492 RANGER-5174: fix for script engine instantiation failure 
(#546)
ff00c3492 is described below

commit ff00c3492cd57e30e593cec95a733e9dc171f842
Author: Madhan Neethiraj <mad...@apache.org>
AuthorDate: Mon Mar 24 07:46:46 2025 -0700

    RANGER-5174: fix for script engine instantiation failure (#546)
    
    (cherry picked from commit e68e4ad221387d3f02c3d73fb5a43c5e8d5b085a)
---
 .../ranger/plugin/util/GraalScriptEngineCreator.java       |  2 +-
 .../apache/ranger/plugin/util/JavaScriptEngineCreator.java |  2 +-
 .../ranger/plugin/util/NashornScriptEngineCreator.java     |  2 +-
 .../org/apache/ranger/plugin/util/ScriptEngineCreator.java | 14 ++++++++++++++
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/GraalScriptEngineCreator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/GraalScriptEngineCreator.java
index 512d8d3ca..57175389a 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/GraalScriptEngineCreator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/GraalScriptEngineCreator.java
@@ -70,7 +70,7 @@ public ScriptEngine getScriptEngine(ClassLoader clsLoader) {
         ScriptEngine ret = null;
 
         if (clsLoader == null) {
-            clsLoader = Thread.currentThread().getContextClassLoader();
+            clsLoader = getDefaultClassLoader();
         }
 
         try {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/JavaScriptEngineCreator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/JavaScriptEngineCreator.java
index 4a0081579..2656b239b 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/JavaScriptEngineCreator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/JavaScriptEngineCreator.java
@@ -35,7 +35,7 @@ public ScriptEngine getScriptEngine(ClassLoader clsLoader) {
         ScriptEngine ret = null;
 
         if (clsLoader == null) {
-            clsLoader = Thread.currentThread().getContextClassLoader();
+            clsLoader = getDefaultClassLoader();
         }
 
         try {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/NashornScriptEngineCreator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/NashornScriptEngineCreator.java
index db620df92..4af3d5c63 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/NashornScriptEngineCreator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/NashornScriptEngineCreator.java
@@ -37,7 +37,7 @@ public ScriptEngine getScriptEngine(ClassLoader clsLoader) {
         ScriptEngine ret = null;
 
         if (clsLoader == null) {
-            clsLoader = Thread.currentThread().getContextClassLoader();
+            clsLoader = getDefaultClassLoader();
         }
 
         try {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/ScriptEngineCreator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/ScriptEngineCreator.java
index a4a35d313..75e10d107 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/ScriptEngineCreator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/ScriptEngineCreator.java
@@ -19,8 +19,22 @@
 
 package org.apache.ranger.plugin.util;
 
+import org.apache.ranger.plugin.classloader.RangerPluginClassLoader;
+
 import javax.script.ScriptEngine;
 
 public interface ScriptEngineCreator {
     ScriptEngine getScriptEngine(ClassLoader clsLoader);
+
+    default ClassLoader getDefaultClassLoader() {
+        ClassLoader ret = Thread.currentThread().getContextClassLoader();
+
+        // Most Ranger plugins use a shim layer and RangerPluginClassLoader 
for isolation of libraries
+        // loaded by the plugin implementation. The shim ensures that all 
calls to the plugin would have
+        // RangerPluginClassLoader as current thread classloader.
+        // Some plugins, like Trino, use their own isolation mechanism. In 
these plugins, current thread's
+        // classloader may not load libraries in the plugin directory, which 
can result in failure in
+        // creation of the script engine. Using the classloader of current 
class to resolve this issue.
+        return ret instanceof RangerPluginClassLoader ? ret : 
this.getClass().getClassLoader();
+    }
 }

Reply via email to