3

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() を使用して呼び出しを行っています。これが質問です。データベースがダウンしたときにどのような例外がスローされるかを知るにはどうすればよいですか?

4

1 に答える 1

0

おそらく複雑さは、「データベースを停止する」ことができるさまざまな方法によって引き起こされます。例えば:

  • テーブルの削除
  • データベース全体の削除
  • db ユーザー アカウントの無効化
  • データベース サーバーのシャットダウン

すべて「データベースをダウンさせる」と見なすことができますが、それぞれが異なる例外をスローする可能性があります

spring javadoc の次のセクションを参照すると、スローされる可能性のある例外のリストがあります。

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/dao/package-frame.html

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/transaction/package-frame.html

于 2013-01-23T00:31:34.197 に答える