keycloak-aplcache

Merge pull request #4049 from stianst/KEYCLOAK-4738 KEYCLOAK-4738

4/20/2017 5:02:23 AM

Details

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