OSGI 環境で動作するアプリケーションを作成しています。今、いくつかのコードを抽出し、別のバンドル/jar ファイルに入れて、他のアプリケーション (OSGI または非 OSGI の両方) でも再利用したいと考えています。
私の目標は、OSGI 環境クラスへの依存関係を取り除くことです。これは、さまざまな OSGI フレームワーク (Equinox など) のすべての jar を持たない他のアプリでも実行する必要があるためです。しかし同時に、アプリケーションがOSGIアプリである場合、OSGI環境にOSGIサービスを登録したいと思います。
私はすでにコードを分離しており、OSGI に依存するコードの唯一の残りの部分は、現在、いくつかのクラスを OSGI サービスとして登録する Activator クラスです。
context.registerService(MyServiceInterface.class.getName(), new MyServiceImpl(), new Hashtable());
依存関係を削除するには、次のことを考えます。
- bundle1 から Activator と OSGI の依存関係を削除します
- Activator を移動する別の bundle2 を作成します
最後に、OSGI 対応にするための Manifest.mf ファイルのみを持つ bundle1.jar がありますが、OSGI フレームワーク クラスに依存するコードはもうありません。bundle1.jar をインポートする現在のアプリケーションにのみ属する別のバンドルがあり、アクティベーターを使用して OSGI コンテナーに MyService.class を登録することのみを目的としています。
- このアプローチは問題ありませんか、それとも他にベスト プラクティスはありますか?
- OSGI環境でサービスを登録することは良い習慣ですか、それともこれは常にホストアプリケーションが責任を負うべきものですか?