10

現在、OSGiサービスに取り組んでいますが、OSGiでのサービスの使用について質問があります。ユーザーサービスを登録するには、いくつかの異なる方法があります。OSGiサービストラッカーと宣言型サービスの違いを誰かが説明できますか?どちらがいいですか?

4

5 に答える 5

14

OSGi では、ServiceTracker は、サービスへの参照を取得するプログラムによる方法です。つまり、別のサービスへの参照を「追跡」する ServiceTracker コードを作成し、それが利用可能になったときにそれを使用できるようにします。

対照的に、Declarative Services (DS) では、コンポーネントに注入される依存関係を宣言できます。DS は、依存性注入の一種です。サービス間の依存関係グラフとその開始順序によって、サービスの開始時期が決まります。DS 定義のカーディナリティ プロパティを使用すると、関係が必須 (1..1)、少なくとも 1 つの複数 (1..n)、オプション (0..1)、複数のオプション (0..n) のいずれであるかを宣言できます。 )。必須の関係を宣言すると、すべての依存関係が満たされるまでサービスは開始されません。オプションの関係を宣言すると、依存関係の状態に関係なくサービスが開始されますが、サービスへの参照が null になる可能性があることに注意する必要があります。

実用的な観点からすると、ServiceTracker は多くのボイラープレート コードを作成して維持する必要があります。OSGi サービスの動的な性質を考えると、OSGi 仕様で許可されている多くの状態を考慮する必要があります。DS は、依存関係を明確に宣言して維持する方法を提供します。明確に定義された依存関係は、ランタイム環境の一貫性を維持するのに役立ちます。

于 2012-06-11T16:18:03.920 に答える
4

宣言型サービス (DS) は非常に使いやすく、ServiceTracker の使用に関連するボイラープレート コードの一部を回避できます。ServiceTracker のみを使用して単純な OSGI を使用する場合は、OSGI サービスの動的な性質のいくつかの側面に注意する必要があります。サービスは行き来する可能性があり、コンポーネントはそれに対処する必要があります。DS を使用している場合、この作業のほとんどは既に完了しています。他のサービスへの参照を定義するだけで、DS はそれらの参照が利用可能になったときに挿入します。コンポーネントの要件が満たされると、DS はコンポーネントを有効にします。

Apache Felix SCR アノテーションまたは bndlib によって提供されるアノテーションを使用すると、Declarative Services に必要な xml の記述を回避することもできます。最近、OSGI グループも 1 つの注釈を公開しました。bndlib が提供するものと OSGI が提供するものは非常に似ていると思います。bnd ツールが両方を処理できることはほぼ確実です。

以前は Apache SCR アノテーションを使用していましたが、現在は bndlib を使用することを好みます。これには、マネージド サービスの実装をより簡単にするメタタイプといくつかのクラスのアノテーションが含まれているためです。メタタイプはマネージド サービスに関する仕様です。基本的に、構成管理実装で使用できるメタデータを提供して、コンポーネントの構成のためのよりユーザーフレンドリーなインターフェースを提供します。

iPojo と Blueprint です。

iPojo は非常に強力で機能が豊富です。OSGI のほとんどが抽象化されており、EventAdmin サポートや ConfigAdmin サポートなどの優れた機能が含まれています。

Blueprint を少し使いましたが、xml を使いすぎたのであまり好きではありません。Blueprint は OSGI の Spring のようなものだと言うかもしれません。

于 2012-06-12T11:28:25.530 に答える
3

OSGi Service Tracker を使用すると、特定のサービスのリスナーを登録できるため、そのサービスが利用可能になったときに対応できます。

一方、宣言型サービスは、暗黙的にサービス トラッカーを使用して、サービスの依存関係が解決されるまでバンドル アクティベーション コードの実行を遅らせます。

于 2012-06-11T15:58:39.923 に答える
0

そしてどちらが良いですか?

特にApacheFelixSCRアノテーションとApacheFelixSCR Mavenプラグインを使用すると、いくつかの宣言型サービスを作成して使用するのは非常に簡単です。

https://felix.apache.org/site/scr-annotations.html

https://felix.apache.org/site/apache-felix-maven-scr-plugin-use.html

于 2012-06-11T16:11:54.593 に答える