10.2.13. ネストされたトランザクションについて
ネストされたトランザクションは、一部の参加者がトランザクションでもあるトランザクションです。
ネストされたトランザクションの利点
- 障害の分離
- サブトランザクションがロールバックされた場合に、使用しているオブジェクトが失敗したため、エンクローズトランザクションはロールバックする必要がありません。
- モジュール性
- 新しいトランザクションが開始されるときにトランザクションがすでに呼び出しに関連付けられている場合は、新しいトランザクションがそのトランザクション内にネストされます。したがって、オブジェクトでトランザクションが必要なことがわかっている場合は、オブジェクト内でトランザクションを開始できます。オブジェクトのメソッドがクライアントトランザクションなしで呼び出された場合は、オブジェクトのトランザクションは最上位レベルです。それ以外の場合、これらのトランザクションはクライアントのトランザクションのスコープ内でネストされます。同様に、クライアントはオブジェクトがトランザクション対応であるかどうかを知る必要がありません。クライアントは、独自のトランザクションを開始できます。
ネストされたトランザクションは、Java トランザクション API (JTA) の一部ではなく Java トランザクションサービス (JTS) API の一部としてのみサポートされます。(非分散) JTA トランザクションをネストしようとすると、例外が発生します。