2009-04-23 14 views
3

プロジェクトのプラグインを管理する手段としてOSGIを使用することに興味があります。それは私のインターフェイスの多くの実装者がある可能性があります、それぞれは独自の/独立したOSGIバンドルにエクスポートされた実装クラスで表示されます...インタフェースの複数の実装者。 OSGiはどうですか?

答えて

1

Declarative Service行くべき道があります。

あなたは、そのインターフェイスの各実装がバンドルの活性化および非活性化の方法を定義することができservice

<service> 
    <provide interface="my.Interface"/> 
    <property name="foo" value="bar" 
</service> 

としてあなたのインターフェイスを宣言することができます。
しかし、本当にきれいなのはその性質です。あなたが最新のSCR(「拡張コンポーネントバンドル」である「サービスコンポーネントランタイム」を使用していれば、新しいOSGi R4.2 DS - 宣言型サービス仕様を実装しています)クラスはOSGIモデルから何もインポートしません。彼らは純粋なPOJOのままです。

<reference name="myInterfaceServiceName" 
    interface="my.Interface" 
    bind="myActivationMethod" unbind="myDeactivationMethod" 
    cardinality="0..n"/> 

サービスを検出して一覧表示し、あなたの最初のサービスのすべてのあなたの具体的な事例をとの意思あなたとそれらに対処します:

その後、あなたの最初のサービスに依存別のサービスを定義します。

詳細については、Eclipse Extensions and Declarative Servicesの質問をご覧ください。

プレゼンテーション:Component Oriented Development in OSGi with Declarative Services, Spring Dynamic Modules and Apache iPOJO、EclipseCON2009からは、具体的な例が示されます。

+0

このモデルには1つの障害があります。このモデルは非常にパッシブなように見えます。これは、一度起動するとバンドルが見つかるだけです。私は利用可能なバンドルのディレクトリとそのエクスポートされたタイプがアクティブになる前に入手できることを期待していました。これは可能かどうか? –

+0

バンドルについて学ぶためにはトラッカーでなければならないが、それは遅すぎることを意味し、どのブーンがアクティブ/非アクティブであるかを制御できないため、これは完全に可能ではない。 –

1

これは、宣言的に(VonCのように)、標準サービスレジストリを使用して実行時に詳細に、または動的に実行できます。

実装者は、実装をサービスとして簡単に登録でき、消費者はレジストリから取得できます。これはかなり基本的なOSGiです。サービスはプロパティで登録することもできるため、サービスを検索する際にコンシューマはこれらのプロパティを使用して実装を区別できます。

+1

はい、私はそれを得る - しかし、私は "インストール"や "活性化"せずに、バンドルからエクスポートされたwhtクラスのようなメタデータを読んでみたいです...これは可能です。 –

関連する問題