ultra mother hacker
ultra mother hacker

Reputation: 181

How To Initialize Nashorn Context and engine directly?

I am trying to initialize Oracle's javascript nashorn engine directy from jdk.nashorn.* namespace. (nashorn library is a beta version of 2013 Jan).

There is a web sample which calles Nashorn engine instance of engine, using javax.script.ScriptEngineManager utility class.

var engine = ScriptEngineManager.getEngineByName(*)

However, I like to keep away from ScriptEngineManager, so i need to call engine directly in the same way Rhino can.

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

How can I create nashorn engine instance directly?

Upvotes: 3

Views: 3194

Answers (2)

ultra mother hacker
ultra mother hacker

Reputation: 181

I found the way to init engine directly using .NET without "

    "javax.script.ScriptEngineManager"

Environment: IKVM.NET Version 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);
    }

This allows me directly interact with nashorn context methods mot more directly.

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

Upvotes: 1

Peter
Peter

Reputation: 699

javax script engine by type application/javascript Hashorn, get back a script engine and tell it to do stuff, it also provides invokable and compilable interfaces.

Yout might be interested to read this : How can I start coding with Oracle's Nashorn JS Engine and when will it replace Rhino in the OpenJDK?

Example usage:

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 ?
}

Upvotes: 3

Related Questions