0



ここにコンテキストがあります:私は2つのosgi製品を実行しています。1つはメインソフトウェア(「ソフトウェア」と呼びましょう)であり、もう1つはp2を使用して最初のソフトウェアの更新/インストール/アンインストールを管理します。(2番目のものを「アップデーター」と呼びましょう)

アップデーターに機能をソフトウェアにインストールさせることができました。つまり、機能が機能ディレクトリに正常にインストールされ、そのバンドルがプラグインディレクトリにインストールされました。p2 に関してはすべて問題なく、プロファイルが新しい変更で更新されます。

ただし、ソフトウェアにはまったく影響がなく、新しい機能を気にしませんでした。
そのため、installBundle 命令を使用してプラグインにいくつかの p2.inf ファイルを追加しました。これにより、ロードするバンドルのリストを含む config.ini ファイルに新しいバンドルが追加されました。
ソフトウェアを再起動すると、新しいプラグインがフレームワークによって読み込まれるため、これで勝利に大きく近づきます。しかし..再起動したくありません.osgiはライブでインストールできるので、再起動する必要はありません。

まだ戦っていますが、検索の結果、ファイルからバンドルのリストをロードし、必要なすべてを実行するフレームワークに渡す責任がある simpleconfigurator を発見しました。しかし、それは起動時にのみ行われ、実行時にリストを更新するように依頼する方法やドキュメントが見つかりません。
これまでに行った唯一の解決策は、バンドル org.eclipse.equinox.simpleconfigurator で update() メソッドを呼び出すことです。これにより、バンドルが認識され、完全に機能します。

だから今、私は何かが働いていますが、より良い解決策を見つけたいと思っています.p2との戦いの後、私も戦う必要があるという事実に驚いているからです. osgiを使用して、新しいバンドルをロードできるようにします..

助けてくれてありがとう:)

4

2 に答える 2

0

私はp2にあまり詳しくありません。しかし、2 つの問題があるように思えます。実行時に OSGi コンテナーにバンドルをプログラムでデプロイし、メイン アプリケーションがそれらのバンドルの機能を認識して使用できるようにする何らかの方法が必要です

最初の問題については、 Programmatically Start OSGi (Equinox)?で選択した回答をご覧ください。

2 番目の部分では、ServiceListener ( http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/ServiceListener.html ) をメイン アプリケーションで使用して、事前定義されたサービスを実装するサービスをリッスンできます。インターフェース。メイン アプリケーションは、実行時にサービスが登録または登録解除されるたびに通知を受け取る必要があり、それに応じて対応できます。

于 2014-04-04T10:22:20.680 に答える
0

バンドルを見つけて、bundle.update(InputStream 入力) を呼び出すことができます。 http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/Bundle.html#update(java.io.InputStream)

于 2014-08-21T15:49:49.767 に答える