2013-02-19 5 views
3

Я пытаюсь инициализировать javacript-движок ядра javacript для Oracle от jdk.nashorn.* пространства имен. (nashorn library - бета-версия 2013 года).Как инициализировать контекст и движок Nashorn напрямую?

Существует веб-образец, который вызывает машинный экземпляр двигателя Nashorn, используя служебный класс javax.script.ScriptEngineManager.

var engine = ScriptEngineManager.getEngineByName(*) 

Однако, я хотел бы держаться подальше от ScriptEngineManager, так что мне нужно позвонить двигатель непосредственно таким же образом, Rhino может.

Context cx = Context.enter(); 
Scriptable scope = cx.initStandardObjects(); 

Как я могу создать экземпляр двигателя nashorn напрямую?

+0

да, мы можем увидеть «NashornScriptEngine» в Javadoc, но выглядит, как вы можете получить только двигатель, запустив класс Eval с «> Java -cp nashorn.jar :. EvalFile .js – theMarceloR

+0

Спасибо для комментария. theMarceloR. Я пытаюсь использовать nashorn из .net. API ScriptEngineManager.getEngineByName ('nashorn') возвращает null в .NET. Это может быть проблема jvm и IKVM, поскольку nashorn использует новейший JVM API dynamicinvoke, который отличается от что .NET имеет. –

+0

В Java, если «ScriptEngineManager.getEngineByName (« nashorn »)» возвращает null, nashorn.jar не находится в пути к классам. Не знаю, что вам нужно делать в .NET для решения этой проблемы. – theMarceloR

ответ

3

javax script engine по типу приложения/javascript Hashorn, вернуть движок скрипта и сообщить ему, чтобы он делал что-то, он также предоставляет скрытые и компилируемые интерфейсы.

Yout может быть интересно прочитать: How can I start coding with Oracle's Nashorn JS Engine and when will it replace Rhino in the OpenJDK?

Пример использования:

import javax.*; //lib imports 
// we should use the javax.script API for Nahsorn 
ScriptEngineManager m = new ScripteEngineManager(); 
ScriptEngine e = m.getEngineByname("nashorn"); 
try { 
    e.eval("print('hello nashorn !')"); 
} catch(Exception e) { 
    // using jdk lower then version 8 maybe ? 
} 
+0

Спасибо за полезная информация, Питер, будет изучать исходный код jrunscript. –

+0

Лучший способ узнать это на самом деле - прочитать исходный код Nashorn, который в основном находится на C, а затем делать ваши вещи. – Peter

+2

@Peter Nashorn - это 100% -ная реализация на Java http://parleys.com/play/5148922b0364bc17fc56c90e/chapter50/about Лучший способ опереться на это будет узнать jsr223 apis http://download.oracle.com/otn-pub/ JCP/java_scripting-1,0-FR-Eval-дру-JSpec/java_scripting-1_0-FR-spec.pdf –

1

Я нашел способ INIT двигатель непосредственно с помощью .NET без "

"javax.script.ScriptEngineManager" 

среды: IKVM.NET Версии 8 + .NET Framework 4.52

static void Main(string[] args) 
    { 

     jdk.nashorn.api.scripting.NashornScriptEngineFactory fact = new jdk.nashorn.api.scripting.NashornScriptEngineFactory(); 
     jdk.nashorn.api.scripting.NashornScriptEngine nashornengine = fact.getScriptEngine() as jdk.nashorn.api.scripting.NashornScriptEngine; 

     nashornengine.eval("var x = 1/3;"); 
     object result = nashornengine.get("x"); 
     Console.WriteLine("{0}", result); 
    } 

Это позволяет мне напрямую взаимодействовать с методами nashorn context mot более непосредственно.

compile() 
getFactory() 
invokeMethod() 
invokeFunction()