J2EE アプリケーションを Java アプリ サーバー (現在 weblogic を使用) で実行し、ネイティブ実行可能プロセスを開始して使用することは可能ですか?この Java アプリケーションのライフサイクルの一部として停止しましたか? (注: これはJNI ではなく、実際には別のネイティブ プロセスです。これは unix/linux ですが、Windows でも実行する必要があります。) この件に関するドキュメントは見つかりませんでした。おそらく正当な理由があります。
背景: ネイティブ プロセスは、実際にはハッキング不可能なモノリシックなサードパーティ ソフトウェア パッケージであり、stdin/stdout 以外の API はありません。Java アプリでは、特定のサービスを実行するためにネイティブ アプリが必要です。ProcessBuilder を介してネイティブ プロセスを簡単にラップし、(stdin/stdout を使用して) 開始/停止して通信することができます。テスト目的で、stdin/stdout 経由で通信し、「開始」、「シャットダウン」を受け取り、単純な「エコー」サービスを実行できる単純な exe (C++) があります。(「start」はノーオペレーションですが、ネイティブ プロセスが正常に開始された場合は単に「ok」を返します。)
したがって、理想的には、アプリ サーバーが起動/シャットダウンされたとき、および/またはデプロイされた Java アプリが起動/シャットダウンされたときに、関連付けられたネイティブ プロセスも起動/シャットダウンできます。そして理想的には、これはクリーンかつ確実に発生します (シャットダウン後にプロセスが長引くことはなく、すべての起動エラーがログに記録され、ライフサイクルのタイミングの問題が同期されます)。
これが実際に機能した場合、質問の「パート 2」は、これがクラスター/フェイルオーバー環境で実際に機能するかどうかです。ネイティブ プロセスは、プラットフォームおよびソフトウェア固有の監視および管理サービスに関連付けることができますが、可能であれば、Java アプリですべてをバンドルして管理したいと考えています。
Glassfish やその他の OSGi タイプの環境でこれがより簡単になる場合は、お気軽にお知らせください (オプションになる可能性があります... Glassfish の方が望ましいですが、WLS は包括的な義務です)。
私は概念実証をまとめようとしていますが、「はい、やった」または「いいえ、うまくいかない」という明確な答えは大歓迎です. doc リンクがある場合)。
編集:明確にするために(件名は誤解を招く可能性があります):かなりのJavaアプリケーションも実行されています(私が書いたもので、必要に応じて自由に変更できます)。サードパーティのネイティブ プロセスは、Java アプリケーションが必要とするサービスを実行するだけです。アプリ サーバーを介してネイティブ プロセスを管理しようとしているだけではありません。