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:
[źródło] http://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