如何将我的 java 代码的结果传递给 nodeJs?

How to pass a result from my java code to nodeJs?

我正在编写一个算法来分析 Java 中的市场数据,为了可视化我的数据,我想利用来自 tradingview 的现有图表库。这个免费的图表库在 nodeJS 上运行。

我很难理解如何用我的算法生成的数据填充它。

例如我的 Java 代码 returns 一个“List< Candlestick >”对象,我如何将它发送到 nodeJs 上的 Java 脚本代码 运行 ?

如果有人愿意就如何处理这个问题提供一些全球指导,我们将不胜感激。

我这里的假设是你有java代码并且你想要显示的结果在nodejs上。

虽然此时建议从 API 调用数据,但我们还可以使用另一种方法来解决您的问题。这是多语言编程的一个很好的例子。我用过graalvm.

通过sdkman安装 GraalVM

sdk install java 21.1.0.r11-grl

NodeJS

gu install nodejs

两个主要项目都位于此处https://gitlab.com/graalvm-java-to-nodejs

  • Java 项目(有 return 列表的方法)
  • NodeJS 项目(在 NodeJS 中加载 Java Class 并调用 class 引用上的方法以获取列表)

将任何代码添加到 java 库,在我的例子中,我有一个 class,它只是 return 点列表,如下所示:

public class GraphData {
    public List<Point> getPoints() {
        return List.of(new Point(1, 1), new Point(3, 5));
    }
}

其中 Point 是一个 POJO class 来保存 (x, y) 值。

克隆这个 java 项目 https://gitlab.com/graalvm-java-to-nodejs/graalvm-simple-java 并执行 ./gradlew clean build 这应该会给你一个可以执行 java -jar file.jar 命令的可执行 jar。

现在,克隆 https://gitlab.com/graalvm-java-to-nodejs 并安装依赖项 npm install 然后执行 node --jvm --vm.cp=/home/ashish/IdeaProjects/graavlvm/java-lib-gvm/build/libs/java-lib-gvm-1.0-SNAPSHOT.jar bin/www

与java交互的相关代码如下:

var GraphDataJavaRef = Java.type('in.silentsudo.GraphData');
var graphData = new GraphDataJavaRef();
var data = graphData.getPoints();

in.silentsudo.GraphData class 从提供给节点程序的 jar 文件加载,参数名为 --jvm --vm.cp path/to/file.jar

导航至 localhost:3000 后,您应该会看到

Express Tutorial
Welcome to Express Tutorial

Response from Java class
[Point{x=1, y=1}, Point{x=3, y=5}]