2012-01-14 13 views
0

バンドルがosgiで例外をスローすると、スタックトレースがosgiコンソールに出力されます。バンドルが例外をスローした場合は、通知を受けたい。私はosgiロギングサービスを使用してそれについて助けることができると思った。しかし、私はそれをヘリオスの下で働かせることはできませんでした。バンドルがosgi実行時に例外をスローすると、どのように通知されますか?

  • 質問は、バンドルがosgi Heliosで例外をスローする場合、どのように通知することができますか?

  • osgi loggingが作業を行う場合、どのようにosgiのログをHeliosで動作させることができますか?私が検索したところでは、明らかに現在ヘリオスに統合されているosgiロギングサービスの実装はありません。私は、org.eclipse.equinox.logというバンドルを含むeclipseサイトからequinox skd 3.6をダウンロードしましたが、プラグインへの依存として追加したり、osgiランタイムにインストールすることができました。

本当にありがとうございます。

答えて

1

が呼び出されたときにバンドルが例外をスローすることができるのは、です。これは、ほとんどの場合、他のバンドルが公開されたサービスの1つを呼び出すとき、またはバンドルがフレームワークからBundleActivator.start()のようなコールバックを受信したときです。

最初のケースでは、OSGiは例外が発生したことを絶対に知る方法がありません。サービス呼び出しは、2つのオブジェクト間の直接メソッド呼び出しであり、OSGiフレームワークによって仲介またはプロキシされません。したがって、例外について知りたい場合は、呼び出しコードで例外を捕捉する必要があります。

2番目のケースでは、一部のバンドルが原因でコールバックが発生するため、コールバックが発生します。たとえば、Bundle.start()という別のバンドルがあるため、バンドルが開始されます。この場合、BundleActivator.start()メソッドからスローされた例外は、呼び出しコードによってキャッチされるBundleExceptionにラップされます。

サービスを呼び出すバンドル(WebコンソールやGoGoのようなシェル)を起動または停止するサードパーティのバンドルがない限り、実際にはあなたのコードはすべてダウンします。この場合は、サードパーティのコードになります。ほとんどの場合、がLogServiceにメッセージを送信する必要があるため、ログバンドルをフレームワークにインストールする必要があります。

あなたはログバンドルをインストールすることはできませんが、失敗した理由、エラーメッセージの内容などは述べていません。問題の解決に役立つ情報が必要な場合は、この種の情報を入力してください。

+0

はい、バンドルが例外をスローするかどうかを知る方法はありません。実際には、私は仕事にヘリオスでログインしているosgiを持って来ることができました。私はhttp://eclipse.org/equinox/からequinox-skd 3.6をダウンロードし、解凍してEclipseのdropinsフォルダに入れました。私の考えは、osgiログバンドルのLogReaderServiceの実装が、バンドルがクラッシュしたときに何らかの形で通知されるということでした。 – zardosht

0

Pax Loggingcustom Log4J appenderを試すことができます - Pax Loggingは、OSGi LogServiceなどの実装と、共通ロギングフレームワーク用のラッパーを提供します。

これを実行して例外をログに記録/通知するか、その他の理由がありますか? UncaughtExceptionHandlerは、自分のコードやラップされたコードを管理する場合に必要なものかもしれません。

関連する問題