3

我正在尝试使用 graal + nashorn interop 来编写与 Java 交互的 nodejs。我从 graal 开始node --jvm --jvm.Xss2m --jvm.Dtruffle.js.NashornJavaInterop=true --jvm.classpath=libs/ --polyglot app.js。我不能扩展一个类。javascript代码是

const GraaljsgrpcServiceImpl = Java.type('com.thing.GraaljsgrpcServiceImpl');
const HelloReply = Java.type('com.thing.HelloReply');
var GrpcImpl = Java.extend(GraaljsgrpcServiceImpl, {
    sayHello: function(request, responseObserver) {
        responseObserver.onNext(HelloReply.newBuilder().setMessage("Hello " + request.getName()).build());
        responseObserver.onCompleted();
    }
});

我的错误是 TypeError: Could not determine a class loader with access to the JS engine and class com.thing.GraaljsgrpcServiceImpl这似乎指向我引用的java代码的类加载器问题以及javascript运行的位置(即2个不同的类加载器)。使用 graal/nodejs 时有没有办法解决这个问题?

4

1 回答 1

3

感谢您报告这个类加载器问题。我们正在研究这个问题,并且应该能够在我们的下一个版本中解决这个问题(预计 3 月初为 0.32)。

关于--jvm.Dtruffle.js.NashornJavaInterop=true标志:我们强烈建议不要使用它,而是取决于 GraalVM 的内置互操作性。然而,在这种模式下,Graal.js 并不是 100% 兼容 Nashorn/Rhino;例如,我们不支持Java.extend该模式。是你设置标志Java.extend的唯一原因吗?NashornJavaInterop

谢谢,克里斯蒂安

于 2018-02-13T14:00:21.310 回答