4

私はOSGiを初めて使用します。私が読んだチュートリアルが何であれ、サービスとバンドルの間でデータがどのように交換されるかを見つけることができません。他のバンドルがそれらを使用できるように、1つのバンドルがサービスレジストリに登録されている必要があることを私は知っています。ただし、サービスとバンドル間のデータ交換方法を取得できません。Webサービスと同様に、データはXML形式などとして、Httpプロトコルを使用して交換されます。つまり、サービスとそれを使用するバンドルの間でデータがどのように交換されるか。それはまた、いくつかのプロトコルを介してですか、それともどのようにですか?また、オーバーヘッドも伴います。助けてください

ありがとう

4

4 に答える 4

8

プロトコルは関与しません。標準の Java メソッド呼び出しを行います。

それがどのように機能するかは、基本的に次のようになります。

  1. サービスの Java インターフェースを定義します。通常のインターフェイスであり、特別な実装は必要ありません。例えば

    インターフェイス TimeService { public String getCurrentTime(); }

  2. インターフェイスを実装します(バンドルからエクスポートしない別のパッケージで)

  3. このインターフェースを OSGi Service Registry に登録します。

    timeServReg = bc.registerService(TimeService.class.getName(), new TimeServiceSimple(), props);

  4. 2 番目のバンドル (それを使用したいバンドル) で、このサービスを検索します。

    timeRef = bc.getServiceReference(TimeService.class.getName()); if (timeRef != null) { timeService = (TimeService) bc.getService(timeRef); }

  5. 取得したばかりの Java オブジェクトを使用するだけでサービスを使用できます。メソッドを呼び出します。

    System.out.println("現在の時刻: " + timeService.getCurrentTime());

もちろん、ServiceTracker を使用してサービスを検索するなど、多くの詳細と優れたプラクティスがありますが、これが基本です。

ここで多くの例を見つけることができます。

于 2012-06-27T08:32:03.407 に答える
4

OSGi サービス レジストリは、オブジェクト レジストリに似ています。単純化しすぎて、文字列キーとオブジェクト値を持つマップのようなものです。どのバンドルも、サービス オブジェクトによって実装されたインターフェイスの名前を使用して、サービス オブジェクトをそのマップに配置できます。他のバンドルは、インターフェイス名を使用してサービス オブジェクトをルックアップできます。すべてが同じ Java VM プロセス内で実行されます。したがって、オブジェクトを直接操作する以外にコミュニケーションはありません。OSGi サービス レジストリに、Java ジェネリックとクラス リテラルを操作するための新しい API が追加されました。これにより、OSGi サービス レジストリの操作がよりタイプ セーフになりました。

追加機能は OSGi リモート サービスです。これにより、異なる Java プロセス (通常は異なるホスト) で実行されている他の OSGi フレームワークにサービスを公開できます。利用可能な通信には複数の実装があります。Web サービス (xml/http) を使用するものもあれば、直接 RPC を使用するものもあります。

于 2012-06-27T08:30:17.377 に答える
0

データは、サービス プロデューサーとサービス コンシューマーの両方がインポートする必要があるサービス インターフェイス (Java インターフェイス .class ファイル) に基づいて、JVM 内で内部的に交換されます。オーバーヘッドは、標準の Java 呼び出しとほぼ同じである必要があります (ただし、間違っている場合は誰か訂正してください)。

このようなサービスを見つけるには、OSGi サービス レジストリとサービス トラッカーを使用するのが 1 つの方法ですが、これを処理する方法として、宣言型サービス、または Maven SCRであるそのラッパーとその注釈を調べることをお勧めします。簡単に、そしてサービス注入機能を提供します

于 2012-06-27T07:35:54.153 に答える