You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/13 20:11:39 UTC

svn commit: r1243658 - in /openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli: CliRunnable.java OpenEJBScripter.java

Author: rmannibucau
Date: Mon Feb 13 19:11:38 2012
New Revision: 1243658

URL: http://svn.apache.org/viewvc?rev=1243658&view=rev
Log:
managing engines in a better way to be able to keep affectations

Modified:
    openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
    openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java

Modified: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java?rev=1243658&r1=1243657&r2=1243658&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java Mon Feb 13 19:11:38 2012
@@ -152,7 +152,13 @@ public class CliRunnable implements Runn
         // no-op
     }
 
+    public void clean() {
+        scripter.clearEngines();
+    }
+
     public void run() {
+        clean();
+
         try {
             final StreamManager streamManager = new StreamManager(out, err, lineSep);
 
@@ -219,7 +225,10 @@ public class CliRunnable implements Runn
                     streamManager.writeErr("sorry i don't understand '" + line + "'");
                 }
             }
+
+            clean();
         } catch (IOException e) {
+            clean();
             throw new CliRuntimeException(e);
         }
     }

Modified: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java?rev=1243658&r1=1243657&r2=1243658&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/OpenEJBScripter.java Mon Feb 13 19:11:38 2012
@@ -28,11 +28,18 @@ import javax.script.ScriptEngineFactory;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
 import javax.script.SimpleBindings;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class OpenEJBScripter {
     private static final Map<String, ScriptEngineFactory> ENGINE_FACTORIES = new ConcurrentHashMap<String, ScriptEngineFactory>();
+    private static final ThreadLocal<Map<String, ScriptEngine>> ENGINES = new ThreadLocal<Map<String, ScriptEngine>>() {
+        @Override
+        protected Map<String, ScriptEngine> initialValue() {
+            return new HashMap<String, ScriptEngine>();
+        }
+    };
 
     static {
         final ScriptEngineManager mgr = new ScriptEngineManager();
@@ -50,12 +57,25 @@ public class OpenEJBScripter {
             throw new IllegalArgumentException("can't find factory for language " + language + ". You probably need to add the jar to openejb libs.");
         }
 
-        final ScriptEngineFactory factory = ENGINE_FACTORIES.get(language);
-        final ScriptEngine engine = factory.getScriptEngine();
-        engine.setBindings(binding(), ScriptContext.ENGINE_SCOPE);
+        final ScriptEngine engine = engine(language);
         return engine.eval(script);
     }
 
+    private static ScriptEngine engine(String language) {
+        ScriptEngine engine = ENGINES.get().get(language);
+        if (engine == null) {
+            final ScriptEngineFactory factory = ENGINE_FACTORIES.get(language);
+            engine = factory.getScriptEngine();
+            engine.setBindings(binding(), ScriptContext.ENGINE_SCOPE);
+            ENGINES.get().put(language, engine);
+        }
+        return engine;
+    }
+
+    public static void clearEngines() {
+        ENGINES.get().clear();
+    }
+
     private static Bindings binding() {
         final Bindings bindings = new SimpleBindings();
         final ContainerSystem cs = SystemInstance.get().getComponent(ContainerSystem.class);