2016-05-19 4 views
1

osgiのすべてのバンドルには独自のクラスローダーがあります。 3つのバンドルがあるとしましょう:1,2,3。バンドル1にはシングルトンクラスがあります。バンドル2はシングルトンをロードし、シングルトンに変更を加えます。そして、私が理解する限り、バンドル3がシングルトンを読み込んでも、そのシングルトンのバージョンは異なります。したがって、バンドル2のシングルトン!=バンドル3のシングルトン3.OSGi環境でシングルトンを実装できます

私の声明は正しいですか?彼らが正しい場合、それはシングルトンではありません、そうですか?

答えて

4

各バンドルには独自のクラスローダーがありますが、マニフェストimport-package宣言に応じて、クラスローダーは「共有」されています。各バンドルクラスローダーは、どのクラスローダーが特定のパッケージからクラスを提供するかを指示するプライベートマッピングテーブルを保持します。 あなたの場合、バンドル2がシングルトンを読み込むと、シングルトンは単独でロードされません。バンドル1のクラスローダーにそのクラスを問い合わせます。

+3

シングルトンは上記の例の場合に有効です。欠点は、バンドル間の緊密な結合を作り出すことである。したがって、OSGiの方法は、OSGiサービスをbundle1で公開し、それを他のバンドルで使用することです。これはシングルトンのようにも動作しますが、各バンドルを更新することができます。 –

+0

同じパッケージを複数のバンドルにエクスポートすることもできます。あなたは "シングルトン"の複数のインスタンスを持つことができます。 –

関連する問題