私は特に Java に慣れていないので、私の質問は完全な BS になる可能性がありますが、既存の Java アプリケーションにアップデータ ラッパー (Java アプリ) を作成するという課題に直面しています。私が直面している問題は、新しい jar を開始する必要があるたびに 2 番目と 3 番目の JVM をスピンアップしたくないということですが、ステップ 5) の終了はアップデーターのスレッドによってブロックされます。 Updater.jar の Classloader から起動します。
概念:
- アプリの現在のバージョンは、更新を確認するためにトリガーされます
- Updater.jar を起動します
- OnUpdateAvailable -> 着信接続を閉じ、アプリケーションの状態とそのオブジェクトを保存します
- ReadyForUpdate シグナルをソケットのアップデーターに送信します
- 現在のアプリケーションは終了します。
- アップデータは、アプリケーションの実行可能ファイルとリソースを置き換えます
- アップデーターは Application.jar の新しいバージョンを起動し、引数を使用して以前の状態に戻します
- アップデーターはアプリケーションを待機します -> 正常に初期化します
- アップデーターが終了します
- アプリケーションの新しいバージョンが稼働中です
質問: 同じ仮想マシンを使用して、最初にアップデーターを開始し、次にアップデーターからアプリケーションの新しいバージョンを開始する方法はありますか?それとも、別個の JVM を使用する必要がありますか?
Java バージョン: 1.7.0_05-icedtea OpenJDK 64 ビット サーバー VM (ビルド 23.0-b21、混合モード)