5

Apache procrun 経由で Wi​​ndows サービスとして実行しようとしている Java アプリケーションで問題が発生しています。

アプリケーションは、アプリケーションの主要部分が存在する Java コンポーネントの 2 つのコンポーネントで構成されています。また、Java アプリケーションが一部のハードウェアと通信できるようにする C コンポーネント。この 2 つの間のインターフェースは、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 サービスは、サービスが安全にシャットダウンされたと見なし、サービス回復イベントを使用してサービスを再起動しようとしません。

理想的には、JVM がクラッシュしたことを検出できるように procrun が必要です。そして適切なエラーコードを返します。これにより、Windows がエラーを検出し、サービスを再起動できるようになります。

Procrun のドキュメントを確認しましたが、Procrun に対して内部的に JVM を再起動できることについては言及されていません。ただし、彼らの発券システムには、そのような機能についての言及があります。

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

この機能がまだ実装されていないかどうかは誰にもわかりませんか? またはそれは存在し、単に文書化されていませんか?

この問題に関する他のアドバイスも大歓迎です。

4

0 に答える 0