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 <[email protected]>
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();
+ }
}