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 e68e4ad22 RANGER-5174: fix for script engine instantiation failure
(#546)
e68e4ad22 is described below
commit e68e4ad221387d3f02c3d73fb5a43c5e8d5b085a
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Mon Mar 24 07:46:46 2025 -0700
RANGER-5174: fix for script engine instantiation failure (#546)
---
.../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 0375932b6..b4a37960d 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
@@ -72,7 +72,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 07c54a35c..dadf08d7e 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
@@ -33,7 +33,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 bb3ca35c4..b890fe85d 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();
+ }
}