我正在尝试使用 graal + nashorn 互操作来编写与 Java 交互的 nodejs。我从 node --jvm --jvm.Xss2m --jvm.Dtruffle.js.NashornJavaInterop=true --jvm.classpath=libs/--polyglot app.js
开始 graal。我不能扩展类。 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 时有没有办法解决这个问题?
最佳答案
感谢您报告这个类加载器问题。我们正在研究这个问题,应该能够在我们的下一个版本中解决这个问题(预计 3 月初为 0.32)。
关于 --jvm.Dtruffle.js.NashornJavaInterop=true
标志:我们强烈建议不要使用它,而是取决于 GraalVM 的内置互操作性。但是,在这种模式下,Graal.js 并不是 100% 兼容 Nashorn/Rhino;例如,我们不支持该模式下的 Java.extend
。 Java.extend
是您设置 NashornJavaInterop
标志的唯一原因吗?
谢谢, 基督徒
关于nashorn - GraalVM + Nashorn 无法扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728080/