2011-07-12 1 views
0

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

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 

答えて

0

に枠組み何バンドルを伝えるための標準的な方法がないので、これを行うには、標準のOSGi方法はありませんインストールする(これはランチャーまで)。このイベントを通知する標準的な方法もないため、あなたはそれを実行できます。 Knopflerfishが特定のシステムプロパティやそれに類するものを提供していない場合、私はあなたが取ることができる2つのルートを見ています。

  • 独自のランチャーをビルドします。 org.knopflerfish.framework.Mainをインスタンシエートし、それを設定し(readmeにいくつかの情報があります)、フレームワークからBundleContextを取得してバンドルをインストールしてください。バンドルのstart()メソッドから来たBundleExceptionをキャッチし、タイプがRESOLVE_ERRORのときに起動を中止できます。
  • 特定の時間だけ待機するバンドルを作成し、フレームワークを調べてすべてのバンドルが起動しているかどうかを確認します(現在インストールされているすべてのバンドルの一覧をBundleContextから取得できます)。いずれかが状態INSTALLEDにない場合は、システムバンドル(バンドル0)を停止してフレームワークを停止できます。
関連する問題