Make script engine thread local.

This commit is contained in:
James Roseborough
2010-05-14 05:13:39 +00:00
parent 0acd42ce84
commit 36845ba1b4

View File

@@ -29,12 +29,11 @@ import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineFactory;
/** /**
* * Jsr 223 scripting engine factory
* @author jim_roseborough
*/ */
public class LuaScriptEngineFactory implements ScriptEngineFactory { public class LuaScriptEngineFactory implements ScriptEngineFactory {
private static final String FILEEXT = ".lua"; private static final String FILEEXT = ".lua";
private static final String [] MIMETYPES = { private static final String [] MIMETYPES = {
"text/plain", "text/plain",
@@ -47,13 +46,14 @@ public class LuaScriptEngineFactory implements ScriptEngineFactory {
"luaj", "luaj",
}; };
private ScriptEngine myScriptEngine; private static final ThreadLocal<ScriptEngine> engines
= new ThreadLocal<ScriptEngine>();
private List<String> extensions; private List<String> extensions;
private List<String> mimeTypes; private List<String> mimeTypes;
private List<String> names; private List<String> names;
public LuaScriptEngineFactory() { public LuaScriptEngineFactory() {
myScriptEngine = new LuaScriptEngine();
extensions = Collections.nCopies(1, FILEEXT); extensions = Collections.nCopies(1, FILEEXT);
mimeTypes = Arrays.asList(MIMETYPES); mimeTypes = Arrays.asList(MIMETYPES);
names = Arrays.asList(NAMES); names = Arrays.asList(NAMES);
@@ -122,6 +122,11 @@ public class LuaScriptEngineFactory implements ScriptEngineFactory {
} }
public ScriptEngine getScriptEngine() { public ScriptEngine getScriptEngine() {
return myScriptEngine; ScriptEngine eng = engines.get();
if ( eng == null ) {
eng = new LuaScriptEngine();
engines.set(eng);
}
return eng;
} }
} }