2016-12-06 16 views
2

アクティベーション手続きに他のバンドルへの依存性があるため、いくつかのOSGiバンドルの特定の開始順序をプログラムで保証する必要があります。バンドルのライフサイクルをJavaコードから管理します。ここで、バンドルの配線を判断して正しい開始順序を計算します。すべてのバンドルが正しくインストールされています。コードからOSGiバンドルを解決する

解決済みの状態で初期化されるバンドル配線の継ぎ目があるため、プログラムでバンドルを解決する方法を探しています。私はbundle.start()が解決されただけでなく、バ​​ンドルも開始することがわかりました。スタートなしで解決する方法はありますか?私がOSGiシェルを手動で使用すると、これはresolve <bundle-id>で実現できます。

+0

ダミーサービスを登録するなどの方法を使用して注文を解決することはできませんか? –

答えて

1

FrameworkWiring.resolveBundlesでバンドルのセットを解決できます。しかし、バンドルを解決することは、バンドルを開始するために必要な前兆ですが、順序付けとは関係ありません。すべてのバンドルを一度に解決し、バンドルをランダムな順序で開始することができます。

Peterが言うように、バンドルを特定の順序で起動する必要がある場合は、システムに問題があります。バンドルの更新はどのように処理されますか?

+0

私はバンドルの配線を判断して正しいスタート順を計算しようとするJavaコードがどのようなものか想像しています!あなたはそれがOSGiフレームワーク自体があなたのために何をしているのか正確に分かりますか? –

4

信頼性が高く堅牢な方法でこれを行う方法はありません。 OSGiは開始順序がありません。期間。でる。それを乗り越える。

理由は簡単ですが、バンドルを停止して起動時に発明した独創的な注文を投げ捨てる可能性があります。

動作する唯一の順序付けは、サービスの依存関係です。各コンポーネントは、依存するサービスを指定し、必要なサービスが登録される前に開始しないようにする必要があります。それが注文を得るための唯一の確実な方法です。

これはもちろん、DSを使用することができます。

関連する問題