0

特定のバンドルの初期化に失敗した場合にKnoplerfishの起動を中止する方法はありますか?デフォルトでは、FrameworkErrorEventがコンソールに出力され、フレームワークは引き続きロードされます。

init.xargs

-initlevel 80
-istart my-required-bundle.jar

コンソール出力

[stdout] Installed and started: file:jars/my-required-bundle.jar (id#34)
[stdout] ## DEBUG: errors - FrameworkErrorEvent bundle #34
[stdout] ## DEBUG: errors - FrameworkErrorEvent throwable:
[stderr] org.osgi.framework.BundleException: BundleActivator start failed
4

1 に答える 1

0

これを行うための標準的なOSGiの方法はありません。これは、フレームワークにインストールするバンドル(ランチャーまで)を指示する標準的な方法がないためです。また、このイベントの通知を受け取る標準​​的な方法がないため、それに基づいて行動することができます。Knopflerfishが特定のシステムプロパティまたはこれを処理するための類似のものを提供しない場合、私はあなたが取ることができる2つのルートを見ます。

  • 独自のランチャーを作成します。をインスタンス化してorg.knopflerfish.framework.Main構成し(これに関するreadmeにいくつかの情報があります)、BundleContextフレームワークからを取得してバンドルをインストールします。BundleException次に、バンドルのメソッドからのsをキャッチしstart()、タイプがの場合に起動を中止できRESOLVE_ERRORます。
  • 特定の時間待機するバンドルを作成し、フレームワークを調べて、すべてのバンドルが開始されているかどうかを確認します(現在インストールされているすべてのバンドルのリストはから取得できますBundleContext)。それらの1つが状態INSTALLEDにない場合は、システムバンドル(つまり、バンドル0)を停止することでフレームワークを停止できます。
于 2011-07-13T17:42:05.243 に答える