nashorn - GraalVM + Nashorn 无法扩展类

标签 nashorn graalvm

我正在尝试使用 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.extendJava.extend 是您设置 NashornJavaInterop 标志的唯一原因吗?

谢谢, 基督徒

关于nashorn - GraalVM + Nashorn 无法扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728080/

相关文章:

graalvm - 你可以在浏览器中嵌入 GraalVM 应用程序吗?

graalvm - 带 'muslib' 前缀标记的 GraalVM native 镜像与不带 0x104567910 前缀的 GraalVM native 镜像有什么区别?

java - 相当于 graal.js 脚本引擎中 Nashorn 的 importPackage

graalvm - 从宿主语言注入(inject)成员以到达客体语言作为客体语言类型

java - 如何将 JavaScript 字符串而不是 Java 字符串传递给 Nashorn 引擎?

javascript - 如何调用 Nashorn CompiledScript 中的方法?

java - Java < 15 和 >= 15 的不同 Nashorn 引擎?

ruby - 为什么 truffleruby 需要 C 扩展?

java - 如何使用 GraalVM 在现有的 grails 或 spring 应用程序中运行 javascript?

java - Nashorn 是否有类似于 Groovy metaClass 的元编程?