我正在尝试使用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时将其关闭?
答案 0 :(得分:3)
感谢您报告此类加载器问题。我们正在研究这个问题,并且应该能够在我们的下一个版本中解决这个问题(预计3月初会有0.32)。
关于--jvm.Dtruffle.js.NashornJavaInterop=true
标志:我们强烈建议不要使用它,但取决于GraalVM的内置互操作性。但是,在这种模式下,Graal.js与Nashorn / Rhino不是100%兼容;例如,我们不支持该模式中的Java.extend
。 Java.extend
是设置NashornJavaInterop
标志的唯一原因吗?
谢谢, 基督教