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(); + } }