- TransactionAttribute.REQUIRES_NEW で注釈が付けられた EJB メソッド methodA() があります。
- methodA() は、リモート サーバーで実行されている 2 つの EJB メソッド (たとえば、methodB()、methodC()) を呼び出します (IIOP 通信)
- methodB() はデータベースの挿入をほとんど実行しません.. methodB には TransactionAttribute.REQUIRED の注釈も付けられています
- methodC() にも TransactionAttribute.REQUIRED の注釈が付けられており、トランザクション管理をテストするためにランタイム例外をスローさせています。
- トランザクション管理のために methodA をテストすると、次のことに気付きました..
OpenEJB ログでは、
TX Requires_New: 中断するトランザクションはありません。
TX Requires_New : 開始されたトランザクション ... gerenimo TransactionImpl ....
methodBの実行からのログ...完了。
methodC はいくつかの RuntimeException をスローします
TX Requires_New : トランザクションをロールバックしています...
============
トランザクションがロールバックされていると表示されていても、methodA() を介して保存されたデータベース レコードは引き続きデータベースに表示されます。データベースの挿入もロールバックする必要があります。
何が問題なのかを理解するのを手伝ってもらえますか?