diff --git a/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java b/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java
index 5772f53..601da8e 100644
--- a/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java
+++ b/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java
@@ -110,7 +110,13 @@ public class DefaultScriptingProvider implements ScriptingProvider {
* Looks-up a {@link ScriptEngine} based on the MIME-type provided by the given {@link Script}.
*/
private ScriptEngine lookupScriptEngineFor(ScriptModel script) {
- return scriptEngineManager.getEngineByMimeType(script.getMimeType());
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(DefaultScriptingProvider.class.getClassLoader());
+ return scriptEngineManager.getEngineByMimeType(script.getMimeType());
+ } finally {
+ Thread.currentThread().setContextClassLoader(cl);
+ }
}
@Override
diff --git a/services/src/main/java/org/keycloak/scripting/DefaultScriptingProviderFactory.java b/services/src/main/java/org/keycloak/scripting/DefaultScriptingProviderFactory.java
index b00a058..4ed1efd 100644
--- a/services/src/main/java/org/keycloak/scripting/DefaultScriptingProviderFactory.java
+++ b/services/src/main/java/org/keycloak/scripting/DefaultScriptingProviderFactory.java
@@ -29,9 +29,13 @@ public class DefaultScriptingProviderFactory implements ScriptingProviderFactory
static final String ID = "script-based-auth";
+ private ScriptEngineManager scriptEngineManager;
+
@Override
public ScriptingProvider create(KeycloakSession session) {
- return new DefaultScriptingProvider(ScriptEngineManagerHolder.SCRIPT_ENGINE_MANAGER);
+ lazyInit();
+
+ return new DefaultScriptingProvider(scriptEngineManager);
}
@Override
@@ -54,11 +58,14 @@ public class DefaultScriptingProviderFactory implements ScriptingProviderFactory
return ID;
}
- /**
- * Holder class for lazy initialization of {@link ScriptEngineManager}.
- */
- private static class ScriptEngineManagerHolder {
-
- private static final ScriptEngineManager SCRIPT_ENGINE_MANAGER = new ScriptEngineManager();
+ private void lazyInit() {
+ if (scriptEngineManager == null) {
+ synchronized (this) {
+ if (scriptEngineManager == null) {
+ scriptEngineManager = new ScriptEngineManager();
+ }
+ }
+ }
}
+
}