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, waitSE
protected transient Log logger
public final reactor.core.publisher.Mono<ReactiveTransaction> getReactiveTransaction(@Nullable TransactionDefinition definition) throws TransactionException
doGetTransaction
、isExistingTransaction
、doBegin
への委譲。ReactiveTransactionManager
の getReactiveTransaction
definition
- TransactionDefinition インスタンス。伝播動作、分離レベル、タイムアウトなどを記述します。TransactionException
- ルックアップ、作成、システムエラーの場合 IllegalTransactionStateException
- 指定されたトランザクション定義を実行できない場合 (たとえば、現在アクティブなトランザクションが指定された伝播動作と競合している場合)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) throws TransactionException
isRollbackOnly
、doCommit
、rollback
への委譲。ReactiveTransactionManager
の commit
transaction
- getTransaction
メソッドによって返されるオブジェクト UnexpectedRollbackException
- トランザクションコーディネーターが開始した予期しないロールバックの場合 HeuristicCompletionException
- トランザクションコーディネーター側のヒューリスティックな決定が原因でトランザクションが失敗した場合 TransactionSystemException
- コミットまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException
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) 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)
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()
protected boolean isExistingTransaction(ObjectSE transaction) throws TransactionException
結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。
デフォルト実装は false
を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
transaction
- doGetTransaction によって返されるトランザクションオブジェクト TransactionException
- システムエラーの場合 doGetTransaction(org.springframework.transaction.reactive.TransactionSynchronizationManager)
protected abstract reactor.core.publisher.Mono<VoidSE> doBegin(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, TransactionDefinition definition) throws TransactionException
このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。
特別なシナリオはネストされたトランザクションです。このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。
synchronizationManager
- 新しいトランザクションにバインドされた同期マネージャー transaction
- doGetTransaction
によって返されるトランザクションオブジェクト definition
- 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス TransactionException
- 作成またはシステムエラーの場合 NestedTransactionNotSupportedException
- 基になるトランザクションがネストをサポートしていない場合 (たとえばセーブポイント経由)protected reactor.core.publisher.Mono<ObjectSE> doSuspend(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) throws TransactionException
トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー transaction
- doGetTransaction
によって返されるトランザクションオブジェクト TransactionSuspensionNotSupportedException
- トランザクションマネージャーの実装が中断をサポートしていない場合 TransactionException
- システムエラーの場合 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) throws TransactionException
トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー transaction
- doGetTransaction
によって返されるトランザクションオブジェクト suspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト TransactionSuspensionNotSupportedException
- トランザクションマネージャーの実装が中断をサポートしていない場合 TransactionException
- システムエラーの場合 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) throws TransactionException
実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー status
- トランザクションのステータス表現 TransactionException
- コミットまたはシステムエラーの場合 GenericReactiveTransaction.getTransaction()
protected abstract reactor.core.publisher.Mono<VoidSE> doRollback(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException
実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー status
- トランザクションのステータス表現 TransactionException
- システムエラーの場合 GenericReactiveTransaction.getTransaction()
protected reactor.core.publisher.Mono<VoidSE> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException
既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー status
- トランザクションのステータス表現 TransactionException
- システムエラーの場合 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
protected reactor.core.publisher.Mono<VoidSE> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction)
doCommit
および doRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。
例外をスローするべきではなく、エラーに対して警告を発行するだけです。
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー transaction
- doGetTransaction
によって返されるトランザクションオブジェクト