From 5de3aee17848932038e30887273c4abf247eaeff Mon Sep 17 00:00:00 2001 From: PickavetAndreas <62283888+PickavetAndreas@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:21:43 +0200 Subject: [PATCH] using ThreadLocal to make the hashmap cachedScriptEngines thread safe (#398) Co-authored-by: PickavetAndreas --- .../camunda/community/connector/script/ScriptEvaluator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/connector/src/main/java/io/camunda/community/connector/script/ScriptEvaluator.java b/connector/src/main/java/io/camunda/community/connector/script/ScriptEvaluator.java index 962c023..572c980 100644 --- a/connector/src/main/java/io/camunda/community/connector/script/ScriptEvaluator.java +++ b/connector/src/main/java/io/camunda/community/connector/script/ScriptEvaluator.java @@ -29,7 +29,7 @@ public class ScriptEvaluator { private final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); - private final Map cachedScriptEngines = new HashMap<>(); + private final ThreadLocal> cachedScriptEngines = ThreadLocal.withInitial(HashMap::new); private final Map scriptEvaluatorExtensions = new HashMap<>(); public ScriptEvaluator() { @@ -62,7 +62,7 @@ private Object evalWithScriptEngine( String language, String script, Map variables) { try { final ScriptEngine scriptEngine = - cachedScriptEngines.computeIfAbsent(language, scriptEngineManager::getEngineByName); + cachedScriptEngines.get().computeIfAbsent(language, scriptEngineManager::getEngineByName); if (scriptEngine == null) { final String msg = String.format("No script engine found with name '%s'", language); throw new RuntimeException(msg);