让我们假设您的公司要求开发一个实时聊天应用程序,并希望它能在几小时内完成。由于你已经知道Node.js很容易实现它,所以你在Node.js中开发它,但是公司使用Java应用服务器(如WebSphere,JBoss或WebLogic)。
因此服务器管理员希望部署.EAR文件。
有没有办法提供运行Node.js应用程序的.EAR文件?
答案 0 :(得分:1)
这是如此肮脏,以至于对释放的EAR的任何理智的检查都应该杀死你。那就是说,是的,它是可能的。你必须先了解一些事情。
是目标JVM足够专用于在执行权上运行进程或安全性足够松散,以使JVM能够使用它的API方法执行shell进程。 (我说的是Java安全性,而不是操作系统安全性)
您必须亲自了解耳塞所运行的操作系统类型。
EAR / WAR必须"扩展"到操作系统已知的真实文件系统。
您必须知道ear容器具有足够权限执行OS命令的凭据。
一旦你确切地知道这四点,使用Process java API执行Node.js进程并不是一件大事,因为可执行文件(静态链接和OS兼容)可以方便地处于已知位置......
即使Bruno Grieder说,共享端口是不可能的,因此您只需要将Web应用程序作为"真实"的正面代理。在Node.js上运行的应用程序,HTTP或HTTPS根本不相关,因为Web应用程序容器和Web应用程序本身之间的最终通信不再加密。
awwww ......太可爱...... :)但是,你必须知道在公司环境中使用像这样的偷偷摸摸的方法,并不是一件好事。
答案 1 :(得分:0)
没有
您无法正确打包预先安装的" nodeJS在耳内。
NodeJS安装在Windows和Linux之间有所不同; EAR不会便携。
另一方面,如果服务器管理员了解到您打算在EAR内部打包不能在JVM上运行的可执行文件,我不想参与其中。
(注1:正如上面评论中提到的@mlan,在JVM和nodejs进程之间共享端口是不可能的 - 伪装它需要一个前端反向代理调度HTTP请求,假设所有流量都是HTTP)
(注意2:不要误解,你可以在EAR中放置任何内容,包括使用ProcessBuilder
从Java触发的可执行文件,但这是最后的解决方法)