bugfix> java > 投稿

いくつかのカスタム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文書またはその他の従来の契約に厳密に基づいた回答を受け取りたいと思います。