クラス TransactionSynchronizationManager

java.lang.ObjectSE
org.springframework.transaction.support.TransactionSynchronizationManager

public abstract class TransactionSynchronizationManager extends ObjectSE
スレッドごとにリソースとトランザクションの同期を管理する主要デリゲート。リソース管理コードで使用されますが、一般的なアプリケーションコードでは使用されません。

上書きせずにキーごとに 1 つのリソースをサポートします。つまり、同じキーに新しいリソースを設定する前にリソースを削除する必要があります。同期がアクティブな場合、トランザクション同期のリストをサポートします。

リソース管理コードは、スレッドにバインドされたリソースをチェックする必要があります。getResource を介した JDBC 接続または Hibernate セッション。このようなコードは通常、リソースをスレッドにバインドすることを想定していません。これはトランザクションマネージャーの責任であるためです。もう 1 つのオプションは、トランザクション同期がアクティブな場合に、最初の使用に遅延バインドして、任意の数のリソースにまたがるトランザクションを実行することです。

トランザクション同期は、initSynchronization() および clearSynchronization() を介してトランザクションマネージャーによってアクティブ化および非アクティブ化される必要があります。これは AbstractPlatformTransactionManager によって、JtaTransactionManagerDataSourceTransactionManager などのすべての標準 Spring トランザクションマネージャーによって自動的にサポートされます。

リソース管理コードは、このマネージャーがアクティブな場合にのみ同期を登録する必要があります。これは、isSynchronizationActive() を介して確認できます。それ以外の場合は、すぐにリソースのクリーンアップを実行する必要があります。トランザクションの同期がアクティブでない場合、現在のトランザクションがないか、トランザクションマネージャーがトランザクションの同期をサポートしていません。

たとえば、同期は、JTA トランザクション内で常に同じリソースを返すために使用されます。特定の DataSource または SessionFactory の JDBC 接続または Hibernate セッション。

導入:
02.06.2003
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • TransactionSynchronizationManager

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

    • getResourceMap

      public static MapSE<ObjectSE,ObjectSE> getResourceMap()
      現在のスレッドにバインドされているすべてのリソースを返します。

      主にデバッグを目的としています。リソースマネージャーは、関心のある特定のリソースキーに対して常に hasResource を呼び出す必要があります。

      戻り値:
      リソースキー(通常はリソースファクトリ)とリソース値(通常はアクティブなリソースオブジェクト)を持つ Map、または現在バインドされているリソースがない場合は空の Map
      関連事項:
    • hasResource

      public static boolean hasResource(ObjectSE key)
      現在のスレッドにバインドされた特定のキーのリソースがあるかどうかを確認します。
      パラメーター:
      key - チェックするキー (通常、リソースファクトリ)
      戻り値:
      現在のスレッドにバインドされた値がある場合
      関連事項:
    • getResource

      @Nullable public static ObjectSE getResource(ObjectSE key)
      現在のスレッドにバインドされている特定のキーのリソースを取得します。
      パラメーター:
      key - チェックするキー (通常、リソースファクトリ)
      戻り値:
      現在のスレッド(通常はアクティブなリソースオブジェクト)にバインドされた値、または存在しない場合は null 
      関連事項:
    • bindResource

      public static void bindResource(ObjectSE key, ObjectSE value) throws IllegalStateExceptionSE
      指定されたキーの指定されたリソースを現在のスレッドにバインドします。
      パラメーター:
      key - 値をバインドするキー (通常、リソースファクトリ)
      value - バインドする値 (通常、アクティブなリソースオブジェクト)
      例外:
      IllegalStateExceptionSE - すでにスレッドにバインドされている値がある場合
      関連事項:
    • unbindResource

      public static ObjectSE unbindResource(ObjectSE key) throws IllegalStateExceptionSE
      現在のスレッドから指定されたキーのリソースをアンバインドします。
      パラメーター:
      key - バインドを解除するキー (通常、リソースファクトリ)
      戻り値:
      以前にバインドされた値 (通常、アクティブなリソースオブジェクト)
      例外:
      IllegalStateExceptionSE - スレッドにバインドされた値がない場合
      関連事項:
    • unbindResourceIfPossible

      @Nullable public static ObjectSE unbindResourceIfPossible(ObjectSE key)
      現在のスレッドから指定されたキーのリソースをアンバインドします。
      パラメーター:
      key - バインドを解除するキー (通常、リソースファクトリ)
      戻り値:
      以前にバインドされた値、またはバインドされていない場合は null 
    • isSynchronizationActive

      public static boolean isSynchronizationActive()
      現在のスレッドでトランザクション同期がアクティブな場合に返されます。不要なインスタンスの作成を回避するために、登録前に呼び出すことができます。
      関連事項:
    • initSynchronization

      public static void initSynchronization() throws IllegalStateExceptionSE
      現在のスレッドのトランザクション同期をアクティブにします。トランザクションの開始時にトランザクションマネージャーによって呼び出されます。
      例外:
      IllegalStateExceptionSE - 同期がすでにアクティブな場合
    • registerSynchronization

      public static void registerSynchronization(TransactionSynchronization synchronization) throws IllegalStateExceptionSE
      現在のスレッドの新しいトランザクション同期を登録します。通常、リソース管理コードによって呼び出されます。

      同期により Ordered インターフェースを実装できることに注意してください。それらは、オーダー値に応じた順序で実行されます(ある場合)。

      パラメーター:
      synchronization - 登録する同期オブジェクト
      例外:
      IllegalStateExceptionSE - トランザクション同期がアクティブでない場合
      関連事項:
    • getSynchronizations

      public static ListSE<TransactionSynchronization> getSynchronizations() throws IllegalStateExceptionSE
      現在のスレッドに登録されているすべての同期の変更不可能なスナップショットリストを返します。
      戻り値:
      TransactionSynchronization インスタンスの変更不可能なリスト
      例外:
      IllegalStateExceptionSE - 同期がアクティブでない場合
      関連事項:
    • clearSynchronization

      public static void clearSynchronization() throws IllegalStateExceptionSE
      現在のスレッドのトランザクション同期を非アクティブ化します。トランザクションのクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      例外:
      IllegalStateExceptionSE - 同期がアクティブでない場合
    • setCurrentTransactionName

      public static void setCurrentTransactionName(@Nullable StringSE name)
      存在する場合、現在のトランザクションの名前を公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      name - トランザクションの名前、またはそれをリセットする null 
      関連事項:
    • getCurrentTransactionName

      @Nullable public static StringSE getCurrentTransactionName()
      現在のトランザクションの名前、または何も設定されていない場合は null を返します。特定の名前付きトランザクションのフェッチ戦略を最適化するなど、ユースケースごとの最適化のためにリソース管理コードによって呼び出されます。
      関連事項:
    • setCurrentTransactionReadOnly

      public static void setCurrentTransactionReadOnly(boolean readOnly)
      現在のトランザクションの読み取り専用フラグを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      readOnly - 現在のトランザクションを読み取り専用としてマークする true。このような読み取り専用マーカーをリセットする false 
      関連事項:
    • isCurrentTransactionReadOnly

      public static boolean isCurrentTransactionReadOnly()
      現在のトランザクションが読み取り専用としてマークされているかどうかを返します。新しく作成されたリソース(Hibernate セッションなど)を準備するときに、リソース管理コードによって呼び出されます。

      トランザクション同期は、beforeCommit コールバックの引数として読み取り専用フラグを受け取り、コミット時の変更検出を抑制できることに注意してください。現在のメソッドは、たとえば Hibernate セッションのフラッシュモードを "FlushMode.MANUAL" に事前に設定するなど、以前の読み取り専用チェックに使用することを目的としています。

      関連事項:
    • setCurrentTransactionIsolationLevel

      public static void setCurrentTransactionIsolationLevel(@Nullable IntegerSE isolationLevel)
      現在のトランザクションの分離レベルを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      isolationLevel - JDBC 接続定数(対応する Spring TransactionDefinition 定数に相当)に従って公開する分離レベル、またはリセットする null 
      関連事項:
    • getCurrentTransactionIsolationLevel

      @Nullable public static IntegerSE getCurrentTransactionIsolationLevel()
      現在のトランザクションの分離レベルがある場合は、それを返します。新しく作成されたリソース(JDBC 接続など)を準備するときに、リソース管理コードによって呼び出されます。
      戻り値:
      JDBC 接続定数(対応する Spring TransactionDefinition 定数に相当)による、現在公開されている分離レベル。存在しない場合は null 
      関連事項:
    • setActualTransactionActive

      public static void setActualTransactionActive(boolean active)
      現在アクティブな実際のトランザクションがあるかどうかを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      active - 現在のスレッドを実際のトランザクションに関連付けられているものとしてマークする true。そのマーカーをリセットする false 
    • isActualTransactionActive

      public static boolean isActualTransactionActive()
      現在アクティブな実際のトランザクションがあるかどうかを返します。これは、現在のスレッドがアクティブなトランザクション同期だけでなく実際のトランザクションに関連付けられているかどうかを示します。

      アクティブなトランザクション同期 (バッキングリソーストランザクションの有無にかかわらず、PROPAGATION_SUPPORTS 上でも) とアクティブな実際のトランザクション (バッキングリソーストランザクションあり、PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW など) を区別するリソース管理コードによって呼び出されます。

      関連事項:
    • clear

      public static void clear()
      現在のスレッドのトランザクション同期状態全体を登録します。登録された同期とさまざまなトランザクション特性です。
      関連事項: