Spring DefaultMessageListenerContainer を使用して、キューからメッセージを消費しています。その後、メッセージは Oracle データベースに保存されます。
データベースがダウンすると、onMessage メソッドから例外がスローされ、再処理のためにメッセージがキューに残されます。以下に示すように、DataAccessResourceFailureException および CannotCreateTransactionException 例外では、メソッドから例外をスローし、キューに戻します。他の例外はメッセージを保存しません。データトラブルなどに対応します。
public void onMessage(javax.jms.Message mqMessage) {
...get the message blah, blah, blah
try {
this.theService.doMessage(tmaticMessage, theHandler);
} catch (DataAccessResourceFailureException e) {
this.slowDown(mqMessage);
throw e;
} catch (CannotCreateTransactionException e) {
this.slowDown(mqMessage);
throw e;
} catch (DataAccessException e) {
...
} catch (TmUnusableMessageException e) {
...
} catch (Exception e) {
...
}
}
Spring のドキュメントを読んで、DataAccessResourceFailureException をスローする必要があることを発見しました。問題は、DBA にデータベースを停止させるテストを行ったところ、新しい例外、CannotCreateTransactionException が発生したことです。これは、スローされる可能性のあるもう 1 つの例外です。他にもあるのか気になります。
Spring Connections と getHibernateTemplate() を使用して呼び出しを行っています。これが質問です。データベースがダウンしたときにどのような例外がスローされるかを知るにはどうすればよいですか?