2009-03-27 12 views
3

私は、Eclipseアーキテクチャの拡張機能/サービスへのアプローチについて少し混乱しています。 - http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html Eclipseの拡張機能と宣言的サービス

  • 宣言型サービスの利用 - http://www.eclipse.org/equinox/bundles/
  • あなたが他と何の上で1つを使用することになり

    1. Eclipseプラグインの拡張機能の使用: 開発者に利用可能な2つのオプションがあります。それぞれのアプローチの利点と欠点は ですか?また、どのアプローチが優先されていますか?

    答えて

    3

    EclipseZoneにはかなり良い比較があります(2007年、私は思う):A Comparison of Eclipse Extensions and OSGi Services

    ターゲットプラットフォームの規則に従います。ですからEclipse 3.4用のプラグインを作成している場合は、Eclipse 3.4プラグインを作成してください(依存関係の場合はMANIFEST.MF、拡張/拡張ポイントの場合はプラグイン) Eclipse 2.x用です)。 プラグインディレクトリの内容を調べて確認することができます。

    +0

    これは両方のアプローチに関する興味深い記事です。それぞれの利点と短所のいくつかがあります。 – Jon

    1

    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が改善を実現する「延長束」である「サービスコンポーネントの実行時」 - 宣言サービス - 仕様)ます

    • コンポーネントを作成します。
    • は、サービスと設定
    • から彼らが出入りバインドサービスに応じて、コンポーネントのライフサイクルを管理バインドします。

      Bundle-SymbolicName : mybundle 
      Bundle-Version : 1.0.0 
      Service-Component : OSGI-INF/minimal. xml 
      

      あなたが使用します。:

    • 必要に応じて、あなたはまだMANIFEST.MFを持って自分たちのサービスとして

    をコンポーネントを公開してい

    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>要素を使用してサービスプロパティを指定します。これらのプロパティは、アクティブ化時にコンポーネントに渡され、サービスレジストリに公開されます。

    +0

    ありがとうございます。 DSを使用してサービスを作成する方法を理解していますが、それぞれの長所と短所を探していました。 – Jon

    +0

    @ジョン:私は理解しています。最新のDS仕様を使用していない限り、両方のアプローチ(明示的な依存関係)で見つけられる1つの欠点を指摘したいだけでした。 – VonC