是否有可能(......完全清楚这是疯狂和严重不明智......)让 J2EE 应用程序在 Java 应用程序服务器中运行(目前使用 weblogic),并启动、使用本机可执行进程,并作为该 Java 应用程序生命周期的一部分而停止?(注意:这不是JNI,它实际上是一个单独的本机进程。它是 unix/linux,但也应该在 Windows 上运行。)我还没有找到任何关于该主题的文档——并且可能有充分的理由。
背景:本机进程实际上是一些不可破解的单体 3rd 方软件包,除了 stdin/stdout 之外没有其他 API。Java 应用程序需要本机应用程序来执行某些服务。我可以通过 ProcessBuilder 轻松包装本机进程并启动/停止并与之通信(使用标准输入/标准输出)。出于测试目的,我有一个简单的 exe (C++),它通过标准输入/标准输出进行通信,可以接收“启动”、“关闭”并执行一个简单的“回声”服务。(“start”是一个无操作,但如果本机进程成功启动,则简单地返回“ok”。)
因此,理想情况下,当应用程序服务器启动/关闭,和/或部署的 Java 应用程序启动/关闭时,关联的本机进程也可以启动/关闭。理想情况下,这可以干净而可靠地发生(关闭后没有挥之不去的进程,记录所有启动失败,同步生命周期时间问题)。
如果这确实有效,那么问题的“第 2 部分”将是这是否真的可以在集群/故障转移环境中工作。本机进程可以绑定到平台和特定于软件的监视和管理服务,但如果可能的话,我希望将所有内容与 Java 应用程序捆绑和管理。
如果 Glassfish 或任何其他 OSGi 类型的环境会使这变得更简单,请随时告诉我(这可能是一种选择......我更喜欢 Glassfish,但 WLS 是一揽子授权。)
我正在尝试组合一个概念验证,但任何明确的答案“是的,我已经完成了”或“不,它不会工作”将不胜感激并节省大量时间(支持文档链接,如果有的话)。
编辑:只是为了澄清(主题可能具有误导性):还有一个相当大的Java应用程序正在运行(我已经编写了它并且可以根据需要自由修改);第 3 方本机进程只执行 Java 应用程序所需的服务。我不只是试图通过应用服务器管理本机进程。