我可以通过 JNI 从 Node.js 调用 Java 吗?如何调用?

2024-03-11

我可以通过 Node.js 调用 JavaJNI?有例子吗?


你应该尝试节点java https://github.com/nearinfinity/node-javanpm 模块是一个编写良好的 JNI 包装器。

Node-jave 似乎还没有被广泛采用,但是在使用它时,我对它的简单和强大印象深刻。

很简单:

var list = java.newInstanceSync("java.util.ArrayList");
list.addSync("item1");
list.addSync("item2");
console.log(list.getSync(1)); // prints "item2"

您可以使用嵌入式 JVM 执行任何操作 - 创建对象、调用方法、访问字段等。

Node 和 Java 之间存在轻微的阻抗不匹配,因此,如果您要与复杂的东西进行交互,我建议您用 Java 编写大部分交互,并跨 Node/Java 屏障公开一个更简单的接口。这样调试起来就更容易了。

--- Dave

p.s.,RealWorldUseCase(tm):我工作的地方在多个浏览器客户端和基于 Java 的服务之间有一个相当复杂(并且是意大利面条式编码)的协议。我写了一个非常漂亮的测试工具,它使用了jsdom https://github.com/tmpvar/jsdom/托管 N 个模拟浏览器并使用节点java https://github.com/nearinfinity/node-java作为 Java 服务代码的包装器。无论是在客户端的 JS 中还是在 Java 中的服务,填充传输接口都是微不足道的,因此每当这些东西发送消息时,我都会捕获该消息并将其放入队列中,以便概率性地传递到预期目标(即,我虚拟化了网络)。通过这种方式,我可以对多个客户端与 Java 服务交互并通过 Java 服务进行交互进行全面模拟,并在单个进程内运行整个过程,而无需任何有线通信。然后我可以做一些有趣的事情,比如故意重新排序消息传递,以确保代码能够适应计时错误。当发现错误时,我会记录消息顺序并可以重现它们以重现该错误。哦,整个过程设置并运行了一个非常复杂的场景,有几千行日志记录,每次运行不到 1 秒就完成了。 2周的时间过得很值。好玩的东西。

现实世界用例#2:硒-inproc https://github.com/ddopson/node-selenium-inproc- 包装 SeleniumRC JAR 文件的模块,为浏览器自动化测试提供节点接口Selenium http://seleniumhq.org/无需运行另一个本地主机服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以通过 JNI 从 Node.js 调用 Java 吗?如何调用? 的相关文章

  • Node.js:无法从同一网络上的不同设备访问服务器

    注意 还有其他一些人也遇到过类似的问题 但这些问题是通过修复代码中涉及服务器如何侦听的小花絮来解决的 在我看到的示例中 他们将 127 0 0 1 作为参数放在http createServer listen 但是 我没有同样的问题 当我尝
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 在 Node.js 中,什么是“on”?

    In 官方文档 http nodejs org docs v0 6 3 api http html http ClientResponse 有一些示例代码 var req http request options function res
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • aws - 将字符串作为文件上传到 S3 存储桶

    我尝试使用适用于 NodeJS 的 AWS 开发工具包将字符串作为文件保存到 AWS S3 存储桶 PUT 请求成功 但文件未在 S3 存储桶中创建 以下是我的代码片段 const s3 new S3 apiVersion 2006 03
  • 如何在机器人框架中的两条消息之间设置延迟 - Node.js

    我正在开发一个机器人 它使用 botbuilder JS V4 使用 Direct Line 连接到我们的客户端应用程序 由于某些原因 消息以错误的顺序发送给机器人 例如 用户 你好 机器人 我能帮你什么忙吗 机器人 嗨 我是机器人 作为解
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 如何正确使用 Angular 5 中的 FileSaver?

    我正在尝试使用文件上传功能将文件保存到文件系统 由于该文件是 Angular 应用程序所必需的 而不是后端 rest api java 所必需的 所以我决定将其保存在前端应用程序中 这意味着内部的某处 角度应用程序中的资产文件夹 我已经安装
  • useRef() 与仅声明变量相比有哪些优点?

    查看 hooks 文档和一些博客 我们了解到 当使用 useRef 时 我们存储了一个可变值 Docs https reactjs org docs hooks reference html useref 您可能熟悉 ref 主要作为访问
  • 将数据从 Activity 发送到 Service

    如何从当前发送数据Activity到背景Service在特定时间运行的课程 我尝试进入Intent putExtras 但我没有把它放进去Service class Code in Activity调用的类Service Intent mS
  • 在 iOS 中创建包含行和列的表格

    I would like to create a table in iOS that have some rows and columns We also have an option to add amounts to the table
  • 无法在 Mac 上安装图表/arithmoi

    我正在尝试安装diagrams 在阴谋集团沙箱中 并且它在期间失败arithmoi安装 给出以下消息 Preprocessing library arithmoi 0 4 1 1 no location info gt Warning Co
  • Android Studio预览片段

    我有以下布局文件
  • C#-Excel 互操作性

    我想从 C 4 0 VS 2010 Express Edition 调用 Excel Sheet 当我宣布 Microsoft Office Interop Excel ApplicationClass excel new Microsof
  • 将应用服务器从 GCM 迁移到 FCM 时,旧客户端会发生什么情况?

    我正在考虑迁移到 FCM 客户端的事情相当简单 您移动一些代码并完成它 但是 在应用程序服务器上 出于显而易见的原因 我还需要支持较旧的客户端 我需要知道将 GCM 项目迁移到 FCM 时会发生什么 FCM 是否也会自动将消息转发到基于 G
  • 如何从opencv中的图像中删除多余的空白? [复制]

    这个问题在这里已经有答案了 我有以下图像 这是一张收据图像 收据周围有很多空白区域 我想裁剪空白区域 我无法手动裁剪它 所以我正在寻找一种可以做到这一点的方法 剪了一张 从以下帖子中尝试了此代码 如何在 OpenCV 中删除图像中的空白 h
  • PHP 的同步 AMQP

    PHP 能否像 RPC 服务一样对待 AMQP 发送消息并阻塞直到返回回复 是否有任何好的示例 是否有任何库以易于使用的方式包装此类功能 我希望拥有代理消息传递系统的灵活性 但避免 Web 层需要了解其异步性质 当然 绝对 看看 RPC 风
  • Automapper:手动映射属性

    我刚刚开始使用 automapper 来映射 DTO实体 它似乎工作得很好 在某些特殊情况下 我只想映射某些属性并执行额外的检查 如果没有自动映射器 代码如下所示 使用fasterflect的PropertyExtensions objec
  • 显示提交 A 已打开且提交 B 未打开的所有分支?

    我有多个分支 并且发现了一个提交 A 它向系统引入了一个错误 随后 这个问题被其中一个分支上的提交 B 修复并合并回 master 但当时它并没有被挑选到所有有问题的分支 我想知道是否有一个命令可以显示所有有提交 A 但没有提交 B 的违规
  • CodeIgniter DB 会话问题:sess_expire_on_close

    当 CI 的会话存储在数据库中时 我遇到了一个非常奇怪的问题 我使用会话来存储有关用户是否登录我的网站的信息 由于某种原因 我的一个来自立陶宛的朋友 我提到了这个国家 以防它以某种方式相关 无法登录 当我监视会话表时 她似乎正在为她访问的每
  • Ruby 可以与 r 交互吗?

    一位朋友需要为她的博士学位做一些 R 编程 由于我是一名程序员 所以请我帮助她 所以我看了一些r http www r project org related http www programmingr com webstuff http
  • 如何在Spring Boot测试中强制事务提交?

    如何在 Spring Boot 中强制事务提交 使用 Spring Data 运行方法时 and not方法之后 我读过这里应该可以 Transactional propagation Propagation REQUIRES NEW 在另
  • 如何对浮点数和复数进行近似结构模式匹配

    我读过并理解浮点数舍入问题 https docs python org 3 tutorial floatingpoint html例如 gt gt gt sum 0 1 10 1 0 False gt gt gt 1 1 2 2 3 3 F
  • Django - 自定义 403 模板

    我正在尝试在 Django 1 5 中使用我的 403 404 500 自定义模板 404 和 500 工作完美 但 403 仍然向我展示内置的 Django 403 模板 我将所有三个模板都放在项目的根模板目录中 它们被命名为 403 h
  • 无法在使用 Arquillian 和 WildFly 的 JPA 集成测试中注入 EntityManager

    我正在尝试使用以下堆栈进行集成测试 App server Embedded WildFly CDI container Weld Database In memory H2 ORM Hibernate JPA Platform Java 8
  • 哪些 C++ 编译器(如果有)进行尾递归优化?

    在我看来 在 C 和 C 中进行尾递归优化都可以很好地工作 但在调试时我似乎从未看到表明这种优化的帧堆栈 这很好 因为堆栈告诉我递归的深度 不过 优化也会很好 有 C 编译器进行此优化吗 为什么 为什么不 我该如何告诉编译器去做呢 对于 M
  • 我可以通过 JNI 从 Node.js 调用 Java 吗?如何调用?

    我可以通过 Node js 调用 JavaJNI 有例子吗 你应该尝试节点java https github com nearinfinity node javanpm 模块是一个编写良好的 JNI 包装器 Node jave 似乎还没有被