2012-03-14 4 views

答えて

5

バンドル 'B'は、バンドル 'A'がlog4jパッケージをエクスポートしていて、バンドル 'B'がそれらをインポートすると、バンドル 'A'のlog4jを使用できます。

実際にはlog4j bundle(log4j 1.2.16はOSGi準拠のリリースです)を使用し、 'A'と 'B'をインポートすることをお勧めします。リンクしたlog4j.jarを調べて、OSGiマニフェストエントリがあることを確認できます。

0

バンドルを共有する場合、グローバル状態は1つしかありません(静的フィールドなど)。

通常、log4jを再利用できますが、あるアプリケーションではパッケージをDEBUGレベルにし、別のアプリケーションではINFOを使用する場合は、2つのバンドルを維持する必要があります。

3

他の人の意見に同意します。 log4j jarファイルを1つだけコピーできるだけでなく、非常に望ましいコピーです。このようなJARの重複を避けることは、OSGiの主な使用例の1つです。バンドル内のライブラリを徹底的にパッケージ化してクラスパス上に確実にパッケージする代わりに、各バンドルはライブラリパッケージ(この場合はlog4j)に依存することを明示的に宣言することができます。これにより膨らみを防ぎ、必要に応じて共有ライブラリを更新するのがずっと簡単になります。

0

のOSGiの全体的なアイデアを共有できるようにすることです...

上記、共有がカップリングを作成し、一般的には、公開APIの夫婦のみにしたいです。悪いバンドルは、無限の数の依存関係の中で推移するように見えるバンドルです。 OSGiサービスの考え方全体は、他のバンドルとあまりにも多くを結びつけたときに人々が作り出す大きな泥の球を最小限に抑えることです。

0

Devがあなたに答えを与えました。 OSGiの考え方は、バンドル間の依存関係を最小限に抑えることができるようにすることです。

  • 両方のバンドルにlog4jがある場合、実際には OSGiのすべての利点を無駄にしています。
  • log4jが1つのバンドルにある場合、f.e:Bundle Aは、バンドルAとBの間に直接依存します.Bは常にAを必要とするためです。 Aが何らかの理由で停止した場合、Bは動作しません。
  • 新しいバンドル「Bundle_Log4j」を作成し、そのパッケージをインポートするためにAとBを宣言すると、バンドルAとバンドルBを個別に扱うことができるので、理想的なソリューションです。
関連する問題