Eclipseプラグイン拡張機能またはOSGI DS(宣言型サービス)のどちらも、拡張機能固有のAPIまたはOSGI固有のAPIが存在する必要があるという点で、「現在の」アプローチの問題(eclipse3.4のような3.5M5以前の問題)あなたのプラグインで
このPowerpointプレゼンテーションのDeclarative Servicesのこの優れた紹介:EclipseCON2009の Component Oriented Development in OSGi with Declarative Services, Spring Dynamic Modules and Apache iPOJOをぜひお試しください。ここで
味です:
モジュール層は、静的な依存関係を最小限に抑えることができますし、少ない静的な依存関係は、仕事へのコンポーネントのために存在している必要があります以下ものを意味します。
サービスでは、コンポーネントが他のコンポーネントとやりとりすることができます。
コンポーネントは、POJO(Plain Old Java Objects)としてOSGiサービスと一緒に接着されているとして実装する必要があります。
宣言型サービス(DS)は、リリース4.0で導入されたとエクステンダーモデルに基づいているOSGiの大要、セクション112
から仕様です。
すべてのエクステンダと同様に、DSは他のバンドルの代わりにというタスクを実行します。 DS仕様ではこのエクステンダが定義されており、フレームワークによって実装されています。
エクステンダバンドル自体はService Component RuntimeまたはSCRと呼ばれます。
用語のDSとSCRは時々混乱している:
DS仕様であり、SCRは、OSGi R4.2でDSの大幅な改善があります仕様
を実装し、実際のバンドルです。
これらの変更の多くは、Equinox 3.5M5 +でサポートされています。
SCR(新とOSGi R4.2 DSが改善を実現する「延長束」である「サービスコンポーネントの実行時」 - 宣言サービス - 仕様)ます
をコンポーネントを公開してい
org.eclipse.equinox.ds <version>.jar
org.eclipse.equinox.util <version>.jar
SCRが自動的にメソッドを有効/無効にするでしょう。
XML宣言に属性を追加することで、別のものを呼び出すことができます。
R4.2より前では、メソッド名を変更できず、DS APIからメソッドComponentContext
のパラメータを取らなければなりませんでした。これはコンポーネントのポーズを破った。
だからではなく、 "BundleActivator
"(コンポーネントでOSGI-specifc API:BAD)をwrintingの:あなたは、単にが、他のサービスへご参照を宣言します
public class PollingComponent {
private static final int DEFAULT_PERIOD = 2000;
private PollingThread thread ;
protected void activate (Map<String , Object> config) {
System.out.println(" Polling Component Activated ");
Integer period = (Integer)config.get(" period ");
thread = new PollingThread(
period!=null ? period : DEFAULT_PERIOD);
thread.start();
}
protected void deactivate() {
System.out.println(" Polling Component Deactivated ");
thread.interrupt();
}
}
、あなたはプレーンなPOJOのオブジェクトを書き込みます:
<reference name="LOG"
interface="org.osgi.service.log.LogService "
bind="setLog" unbind="unsetLog"
cardinality="0..1"/>
そして、あなたは、サービス自体としてあなたのコンポーネントをpublisことができます。
これは私たちのXML記述子で<service>
要素で行われます。
<service>
<provide interface="net ... ContactRepository"/>
<property name="foo" value="bar"
</service>
<provide>
要素を追加するだけで複数のサービスを提供できます。
<property>
要素を使用してサービスプロパティを指定します。これらのプロパティは、アクティブ化時にコンポーネントに渡され、サービスレジストリに公開されます。
これは両方のアプローチに関する興味深い記事です。それぞれの利点と短所のいくつかがあります。 – Jon