いくつかのカスタムJTA実装を開発するとしましょう。
次の方法を検討してください。
@Transactional
public void foo() {
em.save(...); // some interaction with EntityManager
throw new IllegalStateException("Foo");
}
その
em.save(...)
と言ってみましょう例外をスローせずに正常に動作します。したがって、常に
throw new IllegalStateException("Foo")
になります
。この場合、トランザクションをロールバックする必要があることは明らかです。
問題は、実行時に、JTA標準に従って、
foo()
を呼び出す必要があることです。メソッドは
RollbackException
をスローしますまたは元の
IllegalStateException
?
言い換えると:
try {
foo();
} catch (Exception e) {
// What type of exception we should expect here?
}
私の個人的な観点は、元の例外(
IllegalStateException("Foo")
この場合)が期待されるはずです。ただし、JTA文書またはその他の従来の契約に厳密に基づいた回答を受け取りたいと思います。
回答 1 件
関連記事
- 1つ以上のエラーが発生しました。 (タイプ 'SystemOutOfMemoryException'の例外がスローされました。)
- 形状抽出にはどの損失関数を使用する必要がありますか?
- Watsonのパッケージの問題によりスローされた例外
- 「タイプ」に使用するキーワード
- コンシューマの起動中に例外がスローされました:(マイクロサービスの異なるチャネルに同じグループ名を割り当てることはできません)
- 呼び出しxamarinのターゲットによって例外がスローされました
- 2つのボックスが衝突した場合、どの軸を変更する必要がありますか?
- ジェネレータからスローされた例外をキャッチし、反復を再開する方法は?
- 複数のデータセットに同じ列名が存在する場合、どのマージコマンドを使用してマージする必要がありますか?
RollbackException
のドキュメント (https://docs.oracle.com/javaee/7/api/javax/persistence/RollbackException.html)言及:あなたの場合、
EntityTransaction.commit()
決して呼び出されるべきではないため、この例外はスローされません。