2012-03-05 3 views
2

私のアプリケーションでは、サービスを単独で使用するのはかなり役に立たない。サービスを使用できるようにするには、常に外部構成情報が必要です。OSGiのコンポーネントをプログラムで使用

ConfigurationAdminと組み合わされたコンポーネントは意味があります。作成する各設定に対して、コンポーネントインスタンスが作成されるからです。これは私のユースケースにはちょうど完璧です。

ここで、別のバンドルのコンポーネントをプログラムで使用したいのですがどうしたらいいですか?これは理にかなっていますか?

もう一度サービスとしてコンポーネントをエクスポートして他のBeanから消費することができますが、ユーザーが設定を作成できるサーブレットがあり、設定されているインスタンスごとにリストがあります行動;彼がアクションをクリックすると、適切なコンポーネントを見つけてそのアクションを実行する必要があります。

OSGiの上にこの機能を実装するにはどうすればよいでしょうか?

答えて

5

「プログラムで別のバンドルのコンポーネントを使用する」は、私にとってOSGiサービスのように、正確にと発音します。どこでもDSを使用していない既存のプロジェクトにおけるDSを導入するとき、私はこれを使用

public class ServiceLocator { 

    public static <T extends Object> T getService(final Class<T> clazz) { 
    final BundleContext bundleContext = FrameworkUtil.getBundle(clazz).getBundleContext(); 
    // OSGI uses the order of registration if multiple services are found 
    final ServiceReference<T> ref =  bundleContext.getServiceReference(clazz); 
    return bundleContext.getService(ref); 
    } 

}

+0

は構成データから自動的に構築されたコンポーネントを共通のものに再エクスポートしていますか? – Zoltan

+0

私はあなたが尋ねていることを理解していない、あなたは明確にできますか? –

+0

私が正しく理解していれば、DSを使用して、使用可能な各構成に対してコンポーネントを作成する必要があることを指定できます。 (私はシリアル接続とテルネット接続を利用したいと思っています)、次に2つのコンポーネントを構築するためにDSを得ることができますか?そうであれば、別のインターフェース(Connectedと言う)でサービスを登録することもできます。これは現在、設定データも注入されたサービスです。申し訳ありませんが、愚かな例のために:) – Zoltan

0

この方法は、OSGiサービス(OSGiコンテナーワイヤに依存関係を有するイソ)を検索します。プロジェクトのすべてのコンポーネントがosgi DSコンポーネントとしてインスタンス化されているわけではありません。どこでも私はこのメソッドを使った他の手段でインスタンス化されたクラスでDSコンポーネントにアクセスする必要があります...

関連する問題