システム全体をダウンさせることなく定期的に「更新」する予定の OSGi ベースのシステムを開発しています。バンドルの変更を容易にするために「更新」を使用するつもりであり、理論を証明するために小さなアプリ (2 バンドル) を作成しました。
私の最終目標: OSGi を使用してバンドルを動的に更新できるプラットフォームを実装しようとしています。
これまでのところ: 2 つのバンドルを作成しました。数学バンドル (加算と乗算が可能な 2 つのメソッドがあります) と、毎秒実行されるスレッドを持ち、2 つの乱数を生成し、前述の数学バンドルを使用してそれらを加算および乗算 (および結果を表示) する表示バンドルです。私は宣言型サービスを使用しているため、インターフェイス IMath によって定義されたサービスをエクスポートする数学バンドルにコンポーネント定義があります。同様に、IMath インターフェイスで定義されたサービスにサブスクライブする (1:1 静的)ディスプレイバンドルにコンポーネント定義があります。各コンポーネントの起動/シャットダウンの各段階で典型的なデバッグ メッセージが表示されます。
プロジェクトが開始されると、通常は次のように表示されます。
Starting up Math...
Starting up Display...
Running the Display thread...
その後、毎秒、表示スレッドが計算を行っていることがわかります。さらに、次のことができます (数学がバンドル 1 で、ディスプレイがバンドル 2 であると仮定します)。
> stop 1
Stopping the Display thread...
Display bundle has been shut down.
Math bundle has been shut down
> start 1
Starting up Math...
Starting up Display...
Running the Display thread...
問題:ここまでは順調ですよね? 「更新」コマンドを使用しようとするまで、すべてが順調に進んでいます。この場合、乗算計算でエラーが発生したため、数学バンドルを更新したいと考えています。
> update 1
Stopping the Display thread...
Display bundle has been shut down.
Math bundle has been shut down
Starting up Math...
何?ds がスタートアップ メソッドを呼び出してディスプレイバンドルを再起動しなかったのはなぜですか? ディスプレイバンドルも更新してみましたが、問題なく動作しているようです。バンドルを更新すると再起動するような気がしますが、更新されたバンドルのサービスにサブスクライブするバンドルは、宙ぶらりんのままです。
さらに悪いことに、ディスプレイバンドルを停止して開始しても、まだ起動しません。
私は何かを間違った方法で見ていると確信しているので、誰かが私の問題に光を当てることができればいいと思います. ソース コードが必要な場合はお知らせください。基本的な Java ファイルをいくつか添付して、問題のデモを行います。
私の問題について十分に具体的でない場合は、お知らせください。推定します。
読んでくれてありがとう!アーロン