0

OSGi でシステムの再起動後もバンドル配線を維持することは可能ですか?新しいバージョンが利用可能になったとしても、古いバージョンをそのまま使用できますか? 要点は、何かがうまくいったとしても、古いバンドルを新しい依存関係に結び付けてリスクを冒したくないということです。言い換えれば、コンポーネントの更新が他のすべてのコンポーネントに影響を与えないように、可能な限り更新を分離しようとしています (既に配線された依存関係を満たすために古いバンドルが引き続き使用されるため)。

例として、A が [1.0.0, 2.0.0) の範囲で B に依存しているとします。B のバージョン 1.0.0 を展開するので、A は B_1.0.0 に接続されます
。ここで、論理変更に依存するバンドル C を作成し、範囲 [1.0.1, 2.0.0) の B に依存します。したがって、B_1.0.1 をデプロイします。システムを再起動すると、C と A は 1.0.1 に接続されます。これは、C と A が両方の依存範囲内にあり、理論的には 1.0.0 よりも A の方が「より適切に」一致するためです。OSGi にこれを行わないように指示し、できるだけ長く配線を維持する方法はありますか (たとえば、古いバンドルが実際に削除されるまで。その場合、範囲内の最高のバージョンを使用しても問題ありません)。

現在行っていることは、範囲を許可しないことです。そのため、依存関係は [1.0.0, 1.0.0] のようになります。これにより、必要な更新の分離が得られますが、基本的にモジュール性が失われます。依存関係を更新するには、依存関係のコードが変更されていなくても、依存関係を更新する必要があります。範囲を許可しないことは大きなアンチパターンだと思うので、範囲を使用したより良い代替案を提案しようとしていますが、それは私たちが必要とする更新の分離を提供し、私の最初のアイデアは、セッション間でも再配線を禁止することです

問題がある場合は、OSGi サービスを使用していません。それらはすべてプレーンバンドルです

4

1 に答える 1

2

最初の段落の質問に対する答えは簡単です。はい、これが OSGi のデフォルトの動作です。バンドルの更新またはパッケージの更新操作を実行せずにフレームワークを停止して再起動すると、次回の起動時にワイヤリング状態が同じになります。

ただし、2 番目の段落で変更します。現在、異なるバージョンの B の 2 つのエクスポートがあり、A と C の両方がそれに依存しており、同一ではありませんが範囲が重複しています。ここではオーバーラップが重要です。OSGi は常に、同じパッケージの独立したエクスポートの数を最小限に抑えようとします。そのため、重複する範囲でインポートする 2 つのバンドルがある場合、フレームワークはそれらを 2 つの別々のバージョンではなく、同じバージョンに接続しようとします。ここで重複するバージョンは 1.0.1 であるため、A と C の両方が 1.0.0 に配線されます。

これを変更しようとしないでください。バンドル A が実際に範囲と互換性がある場合[1.0.0, 2.0.0)、バージョン 1.0.1 に接続することに反対する理由は何ですか?? 一方、A が実際にバージョン 1.0.0 とのみ互換性があり、1.0.1 と互換性がない場合は、非常に狭い範囲を指定する必要があります[1.0.0, 1.0.1)

最後に...あなたの最後の段落は私を悲しくさせます。プレーンバンドル利用サービス!

于 2013-08-12T19:21:07.873 に答える