Aby
という名前のEJBメソッドは、Bob
という名前の別のEJBメソッドを呼び出します
Bob
は@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
でマークされます
bob
トランザクションはいつコミットしますか?:a)bob
呼び出しが終了したとき
b)aby
呼び出しが終了するとき
c)その他。いつ?
Aは正しいと思います。メソッドBobが呼び出されると、メソッドBobが新しいトランザクションを作成し、BobトランザクションがコミットされるまでメソッドAbyが中断されます。
また、トランザクションにするには他のBeanのメソッドである必要があり、同じBeanから呼び出されたメソッドはビジネスメソッドとして機能しないことに注意してください。
詳細については、この素晴らしい 記事 を参照してください。
実際、代替案aが正しいと思います。見る:
EJB 3.0-ネストされたトランザクション!=新規が必要?
また、いくつかの調査を行い、db(Hyper Sonic)ログを調べて、dbでコミットされた日時とREQUIRES_NEWメソッドが終了したときにコミットされた日時を実際に確認しました。しかし、トランザクションを処理するのはコンテナ次第であるため、コンテナに応じて変更される可能性があります。これをデバッグしている間にJBossを使用しました。そして、Hibernate(dbログをチェックしてこれをテストしたので言及する価値があります)。トランザクションについて尋ねるので、データベースの書き込みが関係していると思います。
私の考えは以前の答えとは異なるので、説得されるのは楽しいでしょう。