2

コードからApacheFelixを起動し、独自のバンドルを登録することに成功しました。

OSGIプロジェクト間の次の関係が必要です。

[OsgiInterface]--インターフェイスを提供します。

[OsgiModuleA]--(バンドル)は、これらのインターフェースの実装を提供します。
知っている[OsgiInterface]

[OsgiUsage]--1つ以上のバンドルを利用します。
知っている[OsgiInterface][OsgiModuleA]

現在、インターフェースを実装するサービスの登録に問題があります。manifest.mfファイルのエントリが間違っていると思います。

追加情報

誰かが私の前の質問のコードを見ることができれば、それはとても親切です

この質問を参照させてください:

パッケージにインターフェイスを提供する3番目のプロジェクトOsgiInterfacesを作成しようとしました。このプロジェクトは、OsgiModuleAOsgiUsageの両方で知られています。SomeInterfaceinterfaces

OsgiModuleA: エントリにmanifest.mf追加の値が追加されました。さらに、アクティベーターに提供されるインスタンスがあります。interfacesImport-Package:SomeInterface

バンドルが開始されると、次のことNoClassDefFoundErrorが発生します。インターフェースSomeInterfaceが不明です。

編集:

これで、エラーが修正されたので、最も重要な部分は次のとおりでした。

map.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
    "my.interfaces; version=1.0.0");

これがなければ、私は得ClassCastExceptionました。

4

4 に答える 4

5

最も基本的な形式では、サービスはマニフェストやその他のファイルを使用せずにJavaコードで登録されます。これは通常、BundleActivatorで発生します。

Long      i     = new Long(20);    // the service implementation
Hashtable props = new Hashtable();
props.put("description", "This an long value");
bundleContext.registerService(Long.class.getName(), i, props);

Knopflerfishのようなチュートリアルを読むことをお勧めします

別の方法は、宣言型サービス、または新しいブループリント機能を使用することです。これら(または他の標準化されていないシステム)のいずれかを使用して、サービスレジストリと対話するコードを記述する代わりに、(通常はXML)ファイルでサービスを宣言します。

ただし、最初に基本を手動で理解する必要があります。

[OsgiUsage]-1つ以上のバンドルを利用します。[OsgiInterface]と[OsgiModuleA]を知っています

サービスを使用するバンドルが、サービスを提供するバンドルについて知る必要はありません。どちらも、サービスインターフェイスを知っている必要があります。実際、バンドルは他のバンドルについてまったく知る必要はありません。パッケージをインポートし、サービスを利用または提供するだけで済みます。

于 2009-12-14T07:11:08.723 に答える
2

別のバンドルにSomeInterfaceがあることを理解していますよね?次に、そのバンドルのマニフェストでそのパッケージをエクスポートする必要があります。

Export-Bundle: interfaces

しかし、あなたは本当に別の答えで言及されたbndツールを見る必要があります。これにより、標準のOSGiマニフェストが生成されます。

于 2009-12-13T01:50:18.003 に答える
1

iPOJOプロジェクトをご覧になることをお勧めします。これにより、Felixの使用がはるかに簡単になります。
https://felix.apache.org/documentation/subprojects/apache-felix-ipojo.html

于 2009-12-13T15:19:26.003 に答える
0

bndを直接使用するか、 maven-bundle-pluginを使用してOSGI対応のjarを作成します。

OSGIマニフェストを自分で作成するよりも簡単です(タイプミス、間違い、インポート/エクスポートの欠落)

開始としてbndでjarファイルをラップしてみます。

于 2009-12-12T15:41:34.280 に答える