非常に基本的な JTA の質問があります。
Spring の AOP を使用して、WebLogicJtaTransactionManager ポイントカットをサービス クラスの任意のメソッドに適用しています...そして、tx:method timeout="60" を設定します。
興味深いのは、そのサービス内で、(Hibernate/JPA を使用して) データベースからレコードを取得するために select ステートメントを実行してから、データベース/トランザクションに関連しないいくつかの作業を実行することです。このメソッドの実行には 60 秒以上かかり、タイムアウト例外はスローされず、トランザクションはロールバックされません。永続化するために新しいオブジェクトを更新または作成することはありません。
それに加えて、WebLogic Server で 180 秒後にタイムアウトするように JTA を構成しましたが、アプリケーションはまだタイムアウトしません。
WLS ドキュメントには、「秒単位のトランザクション タイムアウト。この時間 (begin() から数えて) が経過してもトランザクションがまだ「アクティブ」状態にある場合、トランザクションは自動的にロールバックされます。ただし、トランザクションが準備済み状態に移行すると、 、このタイムアウト パラメータは適用されません。トランザクションは、すべてのリソースがコミットされるまで再試行されます。」
この動作は、JTA がコミットするものが何もないため、タイムアウトが必ずしも適用されないという事実に関連していますか?
それとも、実際のデータベース (挿入/更新/削除) がないため、トランザクションが真のアクティブ状態にならないという事実に関連していますか?