GraalVM + Nashorn无法扩展类

时间:2018-02-11 03:45:56

标签: nashorn graalvm

我正在尝试使用graal + nashorn interop来编写与Java交互的nodejs。我正在用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的java代码的类加载器问题(即2个不同的类加载器)。有没有办法在使用graal / nodejs时将其关闭?

1 个答案:

答案 0 :(得分:3)

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

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

谢谢, 基督教