クラス AbstractReactiveTransactionManager
- 実装されたすべてのインターフェース:
SerializableSE
、ReactiveTransactionManager
、TransactionManager
- 既知の直属サブクラス
R2dbcTransactionManager
この基本クラスは、次のワークフロー処理を提供します。
- 既存のトランザクションがあるかどうかを判断します。
- 適切な伝播動作を適用します。
- 必要に応じてトランザクションを中断および再開します。
- コミット時にロールバック専用フラグをチェックします。
- ロールバックに適切な変更を適用します(実際のロールバックまたはロールバックのみの設定)。
- 登録された同期コールバックをトリガーします。
サブクラスは、トランザクションの特定の状態(開始、一時停止、再開、コミット、ロールバックなど)に特定のテンプレートメソッドを実装する必要があります。それらの最も重要なものは抽象的であり、具体的な実装によって提供される必要があります。残りについては、デフォルトが提供されるため、オーバーライドはオプションです。
トランザクションの同期は、トランザクションの補完時に呼び出されるコールバックを登録するための一般的なメカニズムです。これは主に、R2DBC、MongoDB などのデータアクセスサポートクラスによって内部的に使用されます。同じメカニズムは、アプリケーションのカスタム同期のニーズにも活用できます。
このクラスの状態は直列化可能で、トランザクションインターセプターを運ぶプロキシとともにトランザクション戦略を直列化できます。状態も直列化できるようにする場合は、サブクラス次第です。その場合は、java.io.Serializable
マーカーインターフェースを実装する必要があります。また、一時的な状態を復元する必要がある場合は、Java シリアライゼーションルールに従ってプライベート readObject()
メソッドを実装する必要があります。
- 導入:
- 5.2
- 作成者:
- Mark Paluch, Juergen Hoeller
- 関連事項:
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明protected static final class
中断されたリソースのホルダー。フィールドサマリー
フィールドコンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明final reactor.core.publisher.Mono<VoidSE>
commit
(ReactiveTransaction transaction) このコミットの実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。protected abstract reactor.core.publisher.Mono<VoidSE>
doBegin
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, TransactionDefinition definition) 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。protected reactor.core.publisher.Mono<VoidSE>
doCleanupAfterCompletion
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) トランザクション完了後にリソースをクリーンアップします。protected abstract reactor.core.publisher.Mono<VoidSE>
doCommit
(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) 指定されたトランザクションの実際のコミットを実行します。protected abstract ObjectSE
doGetTransaction
(TransactionSynchronizationManager synchronizationManager) 現在のトランザクション状態のトランザクションオブジェクトを返します。protected reactor.core.publisher.Mono<VoidSE>
doResume
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, ObjectSE suspendedResources) 現在のトランザクションのリソースを再開します。protected abstract reactor.core.publisher.Mono<VoidSE>
doRollback
(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) 指定されたトランザクションの実際のロールバックを実行します。protected reactor.core.publisher.Mono<VoidSE>
doSetRollbackOnly
(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) 指定されたトランザクションをロールバックのみに設定します。protected reactor.core.publisher.Mono<ObjectSE>
doSuspend
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) 現在のトランザクションのリソースを一時停止します。final reactor.core.publisher.Mono<ReactiveTransaction>
getReactiveTransaction
(TransactionDefinition definition) この実装は、伝播動作を処理します。protected boolean
isExistingTransaction
(ObjectSE transaction) 指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。protected reactor.core.publisher.Mono<VoidSE>
prepareForCommit
(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) beforeCommit
同期コールバックが発生する前に実行されるコミットの準備をします。protected reactor.core.publisher.Mono<VoidSE>
registerAfterCompletionWithExistingTransaction
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, ListSE<TransactionSynchronization> synchronizations) 指定されたトランザクション同期のリストを既存のトランザクションに登録します。final reactor.core.publisher.Mono<VoidSE>
rollback
(ReactiveTransaction transaction) このロールバックの実装は、既存のトランザクションへの参加を処理します。
フィールドの詳細
logger
コンストラクターの詳細
AbstractReactiveTransactionManager
public AbstractReactiveTransactionManager()
メソッドの詳細
getReactiveTransaction
public final reactor.core.publisher.Mono<ReactiveTransaction> getReactiveTransaction(@Nullable TransactionDefinition definition) throws TransactionException この実装は、伝播動作を処理します。doGetTransaction
、isExistingTransaction
、doBegin
への委譲。- 次で指定:
- インターフェース
ReactiveTransactionManager
のgetReactiveTransaction
- パラメーター:
definition
- TransactionDefinition インスタンス。伝播動作、分離レベル、タイムアウトなどを記述します。- 戻り値:
- 新規または現在のトランザクションを表すトランザクションステータスオブジェクト
- 例外:
TransactionException
- ルックアップ、作成、システムエラーの場合IllegalTransactionStateException
- 指定されたトランザクション定義を実行できない場合 (たとえば、現在アクティブなトランザクションが指定された伝播動作と競合している場合)- 関連事項:
commit
public final reactor.core.publisher.Mono<VoidSE> commit(ReactiveTransaction transaction) throws TransactionException この commit の実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。isRollbackOnly
、doCommit
、rollback
への委譲。- 次で指定:
- インターフェース
ReactiveTransactionManager
のcommit
- パラメーター:
transaction
-getTransaction
メソッドによって返されるオブジェクト- 例外:
UnexpectedRollbackException
- トランザクションコーディネーターが開始した予期しないロールバックの場合HeuristicCompletionException
- トランザクションコーディネーター側のヒューリスティックな決定が原因でトランザクションが失敗した場合TransactionSystemException
- コミットまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException
- 関連事項:
rollback
public final reactor.core.publisher.Mono<VoidSE> rollback(ReactiveTransaction transaction) throws TransactionException このロールバックの実装は、既存のトランザクションへの参加を処理します。doRollback
およびdoSetRollbackOnly
へのデリゲート。- 次で指定:
- インターフェース
ReactiveTransactionManager
のrollback
- パラメーター:
transaction
-getTransaction
メソッドによって返されるオブジェクト- 例外:
TransactionSystemException
- ロールバックまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException
- 関連事項:
doRollback(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
doSetRollbackOnly(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
doGetTransaction
protected abstract ObjectSE doGetTransaction(TransactionSynchronizationManager synchronizationManager) throws TransactionException 現在のトランザクション状態のトランザクションオブジェクトを返します。返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有のものであり、対応するトランザクション状態を変更可能な形式で保持します。このオブジェクトは、他のテンプレートメソッド (doBegin や doCommit など) に直接、または DefaultReactiveTransactionStatus インスタンスの一部として渡されます。
返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の
getTransaction
呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction
実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー- 戻り値:
- 現在のトランザクションオブジェクト
- 例外:
CannotCreateTransactionException
- トランザクションサポートが利用できない場合TransactionException
- ルックアップまたはシステムエラーの場合- 関連事項:
doBegin(org.springframework.transaction.reactive.TransactionSynchronizationManager, java.lang.Object, org.springframework.transaction.TransactionDefinition)
doCommit(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
doRollback(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
GenericReactiveTransaction.getTransaction()
isExistingTransaction
指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。
デフォルト実装は
false
を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。- パラメーター:
transaction
- doGetTransaction によって返されるトランザクションオブジェクト- 戻り値:
- 既存のトランザクションがある場合
- 例外:
TransactionException
- システムエラーの場合- 関連事項:
doBegin
protected abstract reactor.core.publisher.Mono<VoidSE> doBegin(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, TransactionDefinition definition) throws TransactionException 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。伝播動作の適用を気にする必要はありません。これは、この抽象マネージャーによってすでに処理されているためです。このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。
特別なシナリオはネストされたトランザクションです。このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。
- パラメーター:
synchronizationManager
- 新しいトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクトdefinition
- 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス- 例外:
TransactionException
- 作成またはシステムエラーの場合NestedTransactionNotSupportedException
- 基になるトランザクションがネストをサポートしていない場合 (たとえばセーブポイントを介して)
doSuspend
protected reactor.core.publisher.Mono<ObjectSE> doSuspend(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) throws TransactionException 現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクト- 戻り値:
- 中断されたリソースを保持するオブジェクト (doResume に渡すために検査されないままになります)
- 例外:
TransactionSuspensionNotSupportedException
- トランザクションマネージャーの実装が中断をサポートしていない場合TransactionException
- システムエラーの場合- 関連事項:
doResume
protected reactor.core.publisher.Mono<VoidSE> doResume(TransactionSynchronizationManager synchronizationManager, @Nullable ObjectSE transaction, ObjectSE suspendedResources) throws TransactionException 現在のトランザクションのリソースを再開します。トランザクションの同期はその後再開されます。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクトsuspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト- 例外:
TransactionSuspensionNotSupportedException
- トランザクションマネージャーの実装が中断をサポートしていない場合TransactionException
- システムエラーの場合- 関連事項:
prepareForCommit
protected reactor.core.publisher.Mono<VoidSE> prepareForCommit(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) beforeCommit
同期コールバックが発生する前に実行されるコミットの準備をします。例外はコミット呼び出し元に伝播され、トランザクションのロールバックが発生することに注意してください。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現- 例外:
RuntimeExceptionSE
- エラーの場合 ; 呼び出し元に伝播されます (注意: ここで TransactionException サブクラスをスローしないでください! )
doCommit
protected abstract reactor.core.publisher.Mono<VoidSE> doCommit(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException 指定されたトランザクションの実際のコミットを実行します。実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現- 例外:
TransactionException
- コミットまたはシステムエラーの場合- 関連事項:
doRollback
protected abstract reactor.core.publisher.Mono<VoidSE> doRollback(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException 指定されたトランザクションの実際のロールバックを実行します。実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現- 例外:
TransactionException
- システムエラーの場合- 関連事項:
doSetRollbackOnly
protected reactor.core.publisher.Mono<VoidSE> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException 指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現- 例外:
TransactionException
- システムエラーの場合
registerAfterCompletionWithExistingTransaction
protected reactor.core.publisher.Mono<VoidSE> registerAfterCompletionWithExistingTransaction(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, ListSE<TransactionSynchronization> synchronizations) throws TransactionException 指定されたトランザクション同期のリストを既存のトランザクションに登録します。Spring トランザクションマネージャーの制御、すべての Spring トランザクションの同期が終了し、トランザクションがまだ完了していないときに呼び出されます。これは、たとえば、既存の JTA または EJB CMT トランザクションに参加する場合です。
デフォルトの実装は、"STATUS_UNKNOWN" を渡して、すぐに
afterCompletion
メソッドを呼び出すだけです。これは、外部トランザクションの実際の結果を判断する機会がない場合にできる最善の方法です。- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクトsynchronizations
- TransactionSynchronization オブジェクトのリスト- 例外:
TransactionException
- システムエラーの場合- 関連事項:
invokeAfterCompletion(TransactionSynchronizationManager, List, int)
TransactionSynchronization.afterCompletion(int)
TransactionSynchronization.STATUS_UNKNOWN
doCleanupAfterCompletion
protected reactor.core.publisher.Mono<VoidSE> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) トランザクション完了後にリソースをクリーンアップします。doCommit
およびdoRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。例外をスローするべきではなく、エラーに対して警告を発行するだけです。
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクト