问题标签 [graalvm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
984 浏览

requirejs - 将 RequireJS 与 Graal 一起使用

我正在尝试将 requireJS 与 GraalVM(Polyglot API)一起使用,以在我的来宾语言脚本中加载外部 JS 代码。我要解决的方法是首先在上下文中运行 requirejs:

这导致 require 被添加到 JS 全局,这允许我在以下运行相同上下文的 JS 脚本中使用它。然后我只需运行我的来宾脚本:

我的来宾脚本如下所示:

在浏览器中运行此脚本时,它可以正常工作并打印 moment.now() 的值。但是,当从 Polyglot API 运行它时,JS 运行,require 设置正确,但 function(mom){} 永远不会被调用。基本上我从来没有看到“inside require function”消息和 moment.now() 的值。

我有一种感觉,这是因为加载外部资源时发生错误(我也尝试加载文件而不是远程 URL,但没有运气)。但是,即使在启用了检查选项的情况下运行 chrome devtools,我也看不到任何错误。

可能是什么问题呢?谢谢。

0 投票
2 回答
7187 浏览

java - 使用 GraalVM 在 AWS Lambda 中运行 Java

是否可以使用 GraalVM 在 AWS Lambda 函数中运行 Java?我阅读了很多关于使用 GraalVM AOT(提前)编译功能和减少持续时间的 Java 应用程序冷启动的文章,我想尝试在我的 AWS Lambda 项目中使用它。

0 投票
5 回答
3576 浏览

java - 如何让 Graal SDK 包在没有 Maven 的情况下工作?

我正在开发一个需要执行 JavaScript 的 Java 应用程序。Nashorn JS 引擎即将被弃用,取而代之的是使用 GraalVM 的 Graal SDK 提供的一组 API。本质上执行多种语言的虚拟机。

至少我是这么认为的。所以我花了一天时间试图让它工作。我下载了使用 JDK 8 的 GraalVM rc6。我使用 IntelliJ IDEA 并将 GraalVM 添加为新的 JDK。我觉得很奇怪我应该添加一个虚拟机作为开发工具包,但我知道它是基于 JDK 8 的,所以我可以接受。

而且问题与其他问题不同,我无法让新软件包正常工作。我的 IDE 告诉我它无法解决它们。

实际上,没有一个 org.graalvm 包可以解决。

所以我下载了 JDK 11 build 28,因为据我所知,自 build 20 起 JDK 11 就带有 GraalVM。

实际上,在这种情况下,可以找到一些包,但远远少于预期:例如 org.graalvm.polyglot 仍然无法解析。

最后,我尝试从 Maven 添加 Graal SDK 并解决了这些包。现在我在运行时遇到异常:

在类路径上找不到语言和多语言实现。确保 truffle-api.jar 在类路径中。

我认为前两种情况的问题实际上是没有获取 GraalVM JDK,但即使这样它也会抛出异常。

有经验的能解释一下吗?

0 投票
1 回答
852 浏览

javascript - 如何在 Graal.js 中使用自定义 java 类型

我已经将一个电话类存储在一个 java 文件中,并将它添加到一个静态 Web 项目的IntelliJ想法中。另外,我在项目中创建了 App.js 文件并尝试node js使用以下方法在 GraalVM 下调用纯函数: graalvm/.../node -jvm -polyglot ~/source/graalvm_samples/graal_vm_sample_js/app.js 但GraalVM下的 nodejs 失败以下错误:“不允许访问主机类电话或不存在。”

应用程序.js

javascript 与 JavaCode 的混合

电话类:

Sametime,以下具有标准 java 类型的代码可以正常工作。从这里借用Graal.js 中的 java 类

应用程序.js

0 投票
2 回答
631 浏览

java - 用于 JVM 的沙盒脚本语言?

我想为我们的用户提供在服务器端编写脚本的能力。(我们的应用程序是面向开发人员的)。我希望他们能够在我们的应用程序中调用一些函数,创建变量,并进行基本的循环和分支。不过,我希望他们的脚本被沙盒化,这样他们就无法破解并写入磁盘或打开网络连接或弄脏我们应用程序的内部结构。把它想象成一个 SQL 存储过程:你可以与服务器交互,但不能与外界交互。

是否有任何用于 JVM 的预构建脚本语言可以做到这一点?我可以编写自己的 DSL,但工作量很大。

几年前,我开始使用 Rhino 进行类似的操作,但结果证明我无法正确地对其进行沙箱处理。很乐意使用 GraalJS,但我不知道它是否可沙盒。有一些关于停止恶意代码的参考(https://www.graalvm.org/docs/graalvm-as-a-platform/embed/#reliable-timeouts-for-malicious-code),但它看起来像一个 JS 脚本仍然可以访问宿主应用程序中的各种东西。

0 投票
2 回答
4467 浏览

java - 通过标准 JDK 11 使用 graalvm

我的项目使用了 Nashorn Javascript 引擎。我正在尝试迁移到 java11 并从 Nashorn 迁移到 Graal。我在这里读到,我可以通过从 JDK 11 开始的标准 JDK 安装使用 graal。我还在那里读到 Graal-SDK 已上传到 Maven 中心,并且有 Java 标志polyglot.js.nashorn-compat以便于迁移。所以我使用了 jdk11,将 maven 依赖项添加到 pom.xml 并使用了 java 标志,但是当我试图通过名称“graal.js”获取引擎时,我在这里得到了 null:

我错过了什么?如何让它发挥作用?

0 投票
1 回答
1072 浏览

javascript - 使用 GraalVM 评估 Java 中的 JavaScript

到目前为止,我们已经使用 Nashorn 来评估 Java 项目中的 JS 代码。Nashorn 有几个已知的缺点,我们想迁移到 GraalVM。

所以我们做了一个小的 POC 并遇到了几个问题,我希望你能帮助我们:)

我们的业务用例:我们为用户提供了一个平台,可以根据以下接口编写自定义js代码:

record 代表我们的内部模型,它是一个 Java Map。

我们想从我们的 Java 代码中调用“进程”函数并提供参数。

几个问题问你:

  1. 根据最佳实践,最好的方法是什么?'record' 参数是一个 Java Map 对象,代表我们的内部模型。当我们将它发送到 process 函数时,我们希望它作为标准 js 对象处理,以便我们的用户可以根据 ECMA 编写标准 js 代码。正确的方法是什么?
  2. 当我们运行几个测试时,我们注意到 Nashorn 的性能优于 Graalvm,这是有道理的还是我们可能做错了什么?

我们非常感谢您的帮助,并希望很快搬到 Graalvm。

0 投票
1 回答
439 浏览

javascript - 使用 GraalVM 从 javascript 将变量参数传递给 java 函数

我正在尝试调用 Corda RPC 中可用的函数,该函数 startTrackedFlowDynamic接受 2 个参数: startTrackedFlowDynamic(logicType: Class<out FlowLogic<T>>, vararg args: Any?)打包在 JAR 中

对此函数的调用是从Javascript 上下文进行的(使用 GraalVM 来实现),我想调用此函数并将从请求对象(例如,来自 REST API)获得的参数传递给它

示例:如果请求包含一个数组[::InitiatorA, iouValue],我想调用 startTrackedFlowDynamic 像: startTrackedFlowDynamic(::InitiatorA, iouValue)

如果请求包含一个数组[::InitiatorB, abc, xyz] ,我想调用 startTrackedFlowDynamic ,例如: startTrackedFlowDynamic(::InitiatorB, abc, xyz)

如果请求包含一个数组[::InitiatorC] ,我想调用 startTrackedFlowDynamic ,例如: startTrackedFlowDynamic(::InitiatorC)

TLDR:我想让它成为一个通用 API,而不是为每个不同的 Flow 调用重写。我希望能够将来自请求对象的动态数量的参数传递给这个函数,而不是硬编码固定数量的参数,并且在参数数量发生变化时必须更新它

我要复制的行为示例

有什么建议么?

0 投票
1 回答
269 浏览

graalvm - nashorn CompiledScript graalvm 等效

我有一个相当大的文件需要经常评估,

与 nashorn 我曾经做过类似的事情:

后来,我可以多次拨打以下电话:

这是相当快的。

使用新的 Polyglot API,我这样做:

然后 :

使用jmh,我两者之间的性能差异很大

如果我eval在相同的上下文中执行此操作,它可以正常工作,但我不想在两个连续的上下文之间共享上下文eval(除非 Graal 上下文的概念与 Nashorn 的上下文不同)。

0 投票
1 回答
462 浏览

javascript - 在 Springboot 中初始化 Graal 时出现 FileSystemNotFoundException

我在我的项目中添加了 graal 库以在 Java 中执行 JavaScript。我的项目在 spingboot 框架上工作。

  1. 如果我直接用“gradle bootRun”或IDEA运行我的项目,graal init成功并且工作正常;
  2. 如果我将我的项目构建到一个包含所有库的胖 jar 中,graal init 会失败并抛出 FileSystemNotFoundException。

    /li>

我在异常堆栈中调试了 ponit,发现 graal 想要在 js-1.0.0-rc9.jar 中初始化“lauguage”配置文件。但在上述场景中,它使用了不同的 URI 模式。

那么,我怎样才能在springboot fat jar中初始化graal?