web-dev-qa-db-ja.com

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)はいつコミットしますか?

Abyという名前のEJBメソッドは、Bobという名前の別のEJBメソッドを呼び出します

Bob@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)でマークされます

bobトランザクションはいつコミットしますか?:

a)bob呼び出しが終了したとき

b)aby呼び出しが終了するとき

c)その他。いつ?

29
SDReyes

Aは正しいと思います。メソッドBobが呼び出されると、メソッドBobが新しいトランザクションを作成し、BobトランザクションがコミットされるまでメソッドAbyが中断されます。

また、トランザクションにするには他のBeanのメソッドである必要があり、同じBeanから呼び出されたメソッドはビジネスメソッドとして機能しないことに注意してください。

詳細については、この素晴らしい 記事 を参照してください。

37
Petr Mensik

実際、代替案aが正しいと思います。見る:

EJB 3.0-ネストされたトランザクション!=新規が必要?

また、いくつかの調査を行い、db(Hyper Sonic)ログを調べて、dbでコミットされた日時とREQUIRES_NEWメソッドが終了したときにコミットされた日時を実際に確認しました。しかし、トランザクションを処理するのはコンテナ次第であるため、コンテナに応じて変更される可能性があります。これをデバッグしている間にJBossを使用しました。そして、Hibernate(dbログをチェックしてこれをテストしたので言及する価値があります)。トランザクションについて尋ねるので、データベースの書き込みが関係していると思います。

私の考えは以前の答えとは異なるので、説得されるのは楽しいでしょう。

6
Mike