注:Javaブロックでは例外をスローしてはならないことを知っfinally
ています。そうしないと、[非常に、非常に、非常に]悪い習慣になります。
私は、すべての例外を処理し(たとえば、ログに記録するか無視する)、それらが伝播するのを防ぐために内部を使用する必要があることを知っています。Java 7のThrowableにメソッドがあることは知っています
が、 Java5と6をターゲットにしています。try-catch
finally
getSuppressed
問題:Javaでは、try-finally
例外(名前はA)がブロックによってスローされた場合try
、制御はfinally
ブロックに到達します(例外がない場合はブロックにも到達しますが、この質問では面白くありません)。次に、finally
ブロックが例外をスローすると(名前はB)、例外Aは抑制されるか、マスク/飲み込まれ、例外Bが呼び出し元に伝播されます。
質問:ある例外が別の例外によって抑制されている状況を何らかの方法で検出し、最初の例外をログに記録/記録できますか?
...特定の例外がスローされた理由を推論し、実際に何が起こったのかわからないことに多くの時間を費やしました。
理論的根拠:問題のあるtry-finally
ブロックはライブラリにコード化されていることが多いため(現在はHibernateでした)、変更することはできません。
ソリューションの制約:最初に述べたように、考えられるソリューションはJava 7で中継するべきではありませんが、一方で、実稼働グレードである必要はありません(そうすることはボーナスになります)。AOPはここでのオプションです。
( 「開発にJava7を使用する」のような些細な答えを投稿しないでください:)