1

OSGiに基づいてApache Karafコンテナーを実行するApache ServiceMix 4 ESBを実行しています。OSGi は、コンテナにインストールされたバンドルの状態に関する情報を報告する、ServiceMix コンソールで公開される機能を提供します。

osgi:list

私は高低を検索しました。今、私は尋ねています: ESB で実行されているコード内からこの情報にアクセスするための、実際の例、API の使用に関するガイド、またはその他のガイダンスを知っている人はいますか? 理想的には、私はしたいと思います:

  1. インストールされているバンドルを特定します。
  2. 特定されたバンドルの状態を監視します。そして、少なくとも、
  3. 特定されたバンドルを動的に停止/アンインストールし、開始/再インストールします。

これについて入手可能な情報、またはより良い調査を開始するための手段を共有してください.

ありがとう。

4

1 に答える 1

2

ブループリントは定義上宣言型であり、プログラムで何かを実行したいため、ブループリントの用途は限られています。ただし、ブループリントはbundle contextを注入することで、あなたを道に導くことができます。バンドル コンテキストを取得したら、org.osgi.frameworkAPIを使用してすべてのバンドル ( context.getBundles()) を取得したり、バンドルの状態を照会したり、バンドルを開始および停止したりできます。

要件 3)、バンドルをロードすることは、OSGi コンテキストでは実際には意味がありません。それらのライフサイクルは、インストールされてから開始されるためです。バンドルがインストールされていない場合、getBundles() には含まれませんが、コンテキストを使用してインストールできます。

コンテキストをブループリント Bean に注入するには、特別なプロパティを使用します。

<bean class="SomeClass">
    <property name="context" ref="blueprintBundleContext"/>
</bean>

この例はEnterprise OSGi in Actionから借りてきましたが、developerWorks には非常に優れたブループリントのチュートリアルがあります: http://www.ibm.com/developerworks/opensource/library/os-osgiblueprint/

同様の質問が最近寄せられましたが、これも役立つかもしれません: OSGi コンソールをバンドルに実装するにはどうすればよいですか? (ssに似てbundle:listいますが、ブループリント固有の情報は提供されません)。

于 2012-02-26T21:21:46.657 に答える