37

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

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

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

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

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

c) その他。いつ?

4

2 に答える 2

49

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

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

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

于 2012-07-23T14:32:23.373 に答える
6

実際には、選択肢 a が正しいと思います。見る:

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

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

前回の回答とは私の考えが違うので、説得されると楽しいです。

于 2013-03-30T10:20:34.123 に答える