diff --git a/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java b/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java index 5772f53055..601da8e5d5 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 b00a058eee..4ed1efd2da 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(); + } + } + } } + }