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);