5

我在尝试通过 Apache procrun 作为 Windows 服务运行的 Java 应用程序时遇到问题。

该应用程序由 2 个组件组成,一个 Java 组件,应用程序的主要部分所在的位置。还有一个 C 组件,它使 java 应用程序能够与某些硬件进行通信。两者之间的接口使用Java Native Interface (JNI)。

如果 C 组件发生崩溃,整个 JVM 也会被关闭。然而,在 procrun 中,这将作为“VM 退出代码:0”返回。(见下文)

[2013-06-27 11:55:47] [debug] ( prunsrv.c:1528) [ 8488] Waiting for worker to finish...
[2013-06-27 11:55:55] [debug] ( javajni.c:964 ) [ 5716] Java Worker thread finished applicationName/core/applicationNameCore:main with status=0
[2013-06-27 11:55:55] [debug] ( prunsrv.c:1533) [ 8488] Worker finished.
[2013-06-27 11:55:55] [debug] ( prunsrv.c:1559) [ 8488] Waiting for all threads to exit
[2013-06-27 11:56:46] [debug] ( prunsrv.c:919 ) [10160] Start exit hook called ...
[2013-06-27 11:56:46] [debug] ( prunsrv.c:920 ) [10160] VM exit code: 0
[2013-06-27 11:56:46] [debug] ( prunsrv.c:844 ) [10160] reportServiceStatusE: 1, 0, 0, 0

这意味着 Windows 服务认为服务已安全关闭,并且不会尝试使用服务恢复事件重新启动服务。

理想情况下,我需要 procrun 才能检测到 JVM 已崩溃。并返回合适的错误代码。这将使 Windows 能够检测到错误,并能够重新启动服务。

我已经阅读了 Procrun 文档,并没有提到能够在内部将 JVM 重新启动到 Procrun。但是在他们的票务系统中提到了这样一个功能:

https://issues.apache.org/jira/browse/DAEMON-301

有谁知道这个功能是否还没有实现?还是它存在并且根本没有记录?

有关此问题的任何其他建议也将不胜感激。

4

0 回答 0