Приведенный ниже код выполняет скрипт Nashorn / Javascript в Play (2.5) для контроллера Scala.Я внедряю класс, чтобы получить движок, который запускает скрипт.
Я проводил исследования в Интернете, и существуют разные мнения в отношении безопасности потоков Нэшорна, поэтому я неясен.Является ли приведенный ниже метод getEngine
, вызываемый из контроллера Play, потокобезопасным?
@Singleton
class JavascriptEngine {
val factory = new NashornScriptEngineFactory
def getEngine = { // <-- thread safe?
factory.getScriptEngine()
}
}
class Test @Inject()(je: JavascriptEngine) extends Controller {
def test = Action { request =>
val script = "var x = 'this is script 1'; "
runJS(script)
Ok("some response")
}
def runJS (script: String) = {
val engine = je.getEngine
engine.eval(script)
val x = engine.get("x")
println(x)
}
}