Java 8 – nashorn


Java 8 – nashorn

Mechanizm nashorn to mechanizm który pozwala uruchomić skrypty JavaScript z poziomu języka Java. Przed wersją Javy 8 mechanizm ten nosił nazwę Rhino ale ze względu na wydajność starego mechanizmu postanowiono przepisać Rhino na rozwiązanie Nashorn. Poniżej przykład wykorzystania:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
try {
    engine.eval("print('Hello World!');");
} catch (ScriptException e) {
    e.printStackTrace();
}

Wynik:

Hello World!

Porównanie wydajności obydwu mechanizmów poniżej:

speedtest

[źródło] https://ariya.io/2014/03/nashorn-the-new-rhino-on-the-block

  • Uruchomienie skryptu JS z poziomu Javy:

Plik ./resources/script.js

var hello = function(){
        print("Hello Nashorn");
};
 
hello();

Wczytanie skryptu z katalogu ./resources i uruchomienie go z użyciem mechanizmu Nashorn:

InputStream inputStream = NashornDemo.class.getClassLoader().getResourceAsStream("script.js");
Reader targetReader     = new InputStreamReader(inputStream);
 
try {
         engine.eval(targetReader);
} catch (ScriptException e) {
         e.printStackTrace();
}
  • Uruchomienie funkcji zdefiniowanej w pliku JS:
var info = function() {
    return "javaleader.pl";
};
Invocable invocable = (Invocable) engine;
Object result       = null;
 
try {
        result = invocable.invokeFunction("info");
} catch (ScriptException e) {
        e.printStackTrace();
} catch (NoSuchMethodException e) {
        e.printStackTrace();
}
System.out.println(result);
  • Uruchomienie ze skryptu JS metod klasy Javy:
var MyJavaClass = Java.type('pl.javaleader.nashorn.NashornDemo');
 
var result = MyJavaClass.info();
print(result);
public static String info() {
    return "pl.javaleader.pl";
}

Ważne jest aby klasa *.java była wcześniej skompilowana, wydajemy z poziomu terminala komendę:

JavaLeader.pl\java-8\src\main\resources>jrunscript -cp . ./script.js

lub:

JavaLeader.pl\java-8\src\main\resources>jjs -cp . ./script.js

Wynik:

JavaLeader.pl\java-8\src\main\resources>jjs -cp . ./script.js


Leave a comment

Your email address will not be published.


*