クラス AbstractReactiveTransactionManager

java.lang.ObjectSE
org.springframework.transaction.reactive.AbstractReactiveTransactionManager
実装されたすべてのインターフェース:
SerializableSEReactiveTransactionManagerTransactionManager
既知の直属サブクラス
R2dbcTransactionManager

public abstract class AbstractReactiveTransactionManager extends ObjectSE implements ReactiveTransactionManager, SerializableSE
Spring の標準的なリアクティブトランザクションワークフローを実装する抽象基本クラス。具体的なプラットフォームトランザクションマネージャーの基盤として機能します。

この基本クラスは、次のワークフロー処理を提供します。

  • 既存のトランザクションがあるかどうかを判断します。
  • 適切な伝播動作を適用します。
  • 必要に応じてトランザクションを中断および再開します。
  • コミット時にロールバック専用フラグをチェックします。
  • ロールバックに適切な変更を適用します(実際のロールバックまたはロールバックのみの設定)。
  • 登録された同期コールバックをトリガーします。

サブクラスは、トランザクションの特定の状態(開始、一時停止、再開、コミット、ロールバックなど)に特定のテンプレートメソッドを実装する必要があります。それらの最も重要なものは抽象的であり、具体的な実装によって提供される必要があります。残りについては、デフォルトが提供されるため、オーバーライドはオプションです。

トランザクションの同期は、トランザクションの補完時に呼び出されるコールバックを登録するための一般的なメカニズムです。これは主に、R2DBC、MongoDB などのデータアクセスサポートクラスによって内部的に使用されます。同じメカニズムは、アプリケーションのカスタム同期のニーズにも活用できます。

このクラスの状態は直列化可能で、トランザクションインターセプターを運ぶプロキシとともにトランザクション戦略を直列化できます。状態も直列化できるようにする場合は、サブクラス次第です。その場合は、java.io.Serializable マーカーインターフェースを実装する必要があります。また、一時的な状態を復元する必要がある場合は、Java シリアライゼーションルールに従ってプライベート readObject() メソッドを実装する必要があります。

導入:
5.2
作成者:
Mark Paluch, Juergen Hoeller
関連事項:
  • フィールドの詳細

    • logger

      protected transient Log logger
  • コンストラクターの詳細

    • AbstractReactiveTransactionManager

      public AbstractReactiveTransactionManager()
  • メソッドの詳細

    • getReactiveTransaction

      public final reactor.core.publisher.Mono<ReactiveTransaction> getReactiveTransaction(@Nullable TransactionDefinition definition) throws TransactionException
      この実装は、伝播動作を処理します。doGetTransactionisExistingTransactiondoBegin への委譲。
      次で指定:
      インターフェース ReactiveTransactionManagergetReactiveTransaction 
      パラメーター:
      definition - TransactionDefinition インスタンス。伝播動作、分離レベル、タイムアウトなどを記述します。
      戻り値:
      新規または現在のトランザクションを表すトランザクションステータスオブジェクト
      例外:
      TransactionException - ルックアップ、作成、システムエラーの場合
      IllegalTransactionStateException - 指定されたトランザクション定義を実行できない場合 (たとえば、現在アクティブなトランザクションが指定された伝播動作と競合している場合)
      関連事項:
    • commit

      public final reactor.core.publisher.Mono<VoidSE> commit(ReactiveTransaction transaction) throws TransactionException
      この commit の実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。isRollbackOnlydoCommitrollback への委譲。
      次で指定:
      インターフェース ReactiveTransactionManagercommit 
      パラメーター:
      transaction - getTransaction メソッドによって返されるオブジェクト
      例外:
      UnexpectedRollbackException - トランザクションコーディネーターが開始した予期しないロールバックの場合
      HeuristicCompletionException - トランザクションコーディネーター側のヒューリスティックな決定が原因でトランザクションが失敗した場合
      TransactionSystemException - コミットまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)
      IllegalTransactionStateException - 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)
      TransactionException
      関連事項:
    • rollback

      public final reactor.core.publisher.Mono<VoidSE> rollback(ReactiveTransaction transaction) throws TransactionException
      このロールバックの実装は、既存のトランザクションへの参加を処理します。doRollback および doSetRollbackOnly へのデリゲート。
      次で指定:
      インターフェース ReactiveTransactionManagerrollback 
      パラメーター:
      transaction - getTransaction メソッドによって返されるオブジェクト
      例外:
      TransactionSystemException - ロールバックまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)
      IllegalTransactionStateException - 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)
      TransactionException
      関連事項:
    • doGetTransaction

      protected abstract ObjectSE doGetTransaction(TransactionSynchronizationManager synchronizationManager) throws TransactionException
      現在のトランザクション状態のトランザクションオブジェクトを返します。

      返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有であり、対応するトランザクション状態を変更可能な形で保持します。このオブジェクトは、直接または DefaultReactiveTransactionStatus インスタンスの一部として、他のテンプレートメソッド(doBegin や doCommit など)に渡されます。

      返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の getTransaction 呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction 実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。

      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      戻り値:
      現在のトランザクションオブジェクト
      例外:
      CannotCreateTransactionException - トランザクションサポートが利用できない場合
      TransactionException - ルックアップまたはシステムエラーの場合
      関連事項:
    • isExistingTransaction

      protected boolean isExistingTransaction(ObjectSE transaction) throws TransactionException
      指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。

      結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(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 - システムエラーの場合
      関連事項:
    • doCleanupAfterCompletion

      protected reactor.core.publisher.Mono<VoidSE> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction)
      トランザクション完了後にリソースをクリーンアップします。

      doCommit および doRollback の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。

      例外をスローするべきではなく、エラーに対して警告を発行するだけです。

      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      transaction - doGetTransaction によって返されるトランザクションオブジェクト