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