Как использовать движок Nashorn для вызова объектов Java - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу использовать консоль Nashorn в качестве альтернативы Rails c.Например, я хотел бы вызвать методы Java для импорта данных из удаленной системы и выполнения миграции данных.Я нашел это очень интересным:

https://www.baeldung.com/java-nashorn

$JAVA_HOME/bin/jjs
jjs> print("test"); 
test
jjs> 

Как я могу, например, вызвать некоторый метод Java из пакета WAR, развернутого на сервере Wildfly, и передать некоторые аргументы?

Есть ли лучшая альтернатива, которую вы можете предложить?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

См. Главу 3 Oracle «Руководство по программированию сценариев Java», « Использование Java из сценариев »:

Чтобы получить доступ к примитивным и ссылочным типам Java из JavaScript, вызовите JavaФункция .type (), которая возвращает объект типа, который соответствует полному имени класса, переданного в виде строки.В следующем примере показано, как получить различные объекты типа:

var ArrayList = Java.type("java.util.ArrayList");
var intType = Java.type("int");
var StringArrayType = Java.type("java.lang.String[]");
var int2DArrayType = Java.type("int[][]");

Объект типа, возвращаемый функцией Java.type (), можно использовать в коде JavaScript, аналогично тому, как имя класса используется в Java.Например, вы можете использовать его для создания новых объектов следующим образом:

var anArrayList = new Java.type("java.util.ArrayList");

Хотя ваш вопрос немного расплывчат в том, что именно вы пытаетесь сделать.Если вы используете Nashorn в своем приложении, скрипты, которые вы выполняете с его помощью, будут иметь доступ к классам Java, которые есть в вашем приложении.

0 голосов
/ 27 сентября 2018

Поскольку nashorn устарела в Java 11, я бы предложил использовать Groovy в качестве языка сценариев.Это похоже на Java, а также поддерживается Spring Framework - для случая, когда это не должно быть JavaScript.В противном случае вам следует следить за обсуждением в области Java - возможно, GraalVM будет следующим движком JavaScript для Java - также я читал, что они работают над Nashorn - поэтому будущее здесь пока не определено.

0 голосов
/ 21 сентября 2018

Из учебника Nashorn .

Java:

package com.stackoverflow;
public class Foo {
 public static String bar(String name) {
    System.out.format("Hi there from Java, %s", name);
    return "greetings from java";
 }
}

JavaScript:

var javaFooClazz = Java.type('com.stackoverflow.Foo');
var result =javaFooClazz.bar('John Doe');
print(result);
...