public abstract class TransactionSynchronizationManager
extends java.lang.Object上書きせずにキーごとに 1 つのリソースをサポートします。つまり、同じキーに新しいリソースを設定する前にリソースを削除する必要があります。同期がアクティブな場合、トランザクション同期のリストをサポートします。
リソース管理コードは、スレッドにバインドされたリソースをチェックする必要があります。getResource を介した JDBC 接続または Hibernate セッション。このようなコードは通常、リソースをスレッドにバインドすることを想定していません。これはトランザクションマネージャーの責任であるためです。もう 1 つのオプションは、トランザクション同期がアクティブな場合に、最初の使用に遅延バインドして、任意の数のリソースにまたがるトランザクションを実行することです。
トランザクション同期は、initSynchronization() および clearSynchronization() を介してトランザクションマネージャーによってアクティブ化および非アクティブ化される必要があります。これは AbstractPlatformTransactionManager によって、JtaTransactionManager や DataSourceTransactionManager などのすべての標準 Spring トランザクションマネージャーによって自動的にサポートされます。
リソース管理コードは、このマネージャーがアクティブな場合にのみ同期を登録する必要があります。これは、isSynchronizationActive() を介して確認できます。それ以外の場合は、すぐにリソースのクリーンアップを実行する必要があります。トランザクションの同期がアクティブでない場合、現在のトランザクションがないか、トランザクションマネージャーがトランザクションの同期をサポートしていません。
たとえば、同期は、JTA トランザクション内で常に同じリソースを返すために使用されます。特定の DataSource または SessionFactory の JDBC 接続または Hibernate セッション。
isSynchronizationActive(), registerSynchronization(org.springframework.transaction.support.TransactionSynchronization), TransactionSynchronization, AbstractPlatformTransactionManager.setTransactionSynchronization(int), JtaTransactionManager, DataSourceTransactionManager, DataSourceUtils.getConnection(javax.sql.DataSource)| コンストラクターと説明 |
|---|
TransactionSynchronizationManager() |
| 修飾子と型 | メソッドと説明 |
|---|---|
static void | bindResource(java.lang.Object key, java.lang.Object value) 指定されたキーの指定されたリソースを現在のスレッドにバインドします。 |
static void | clear() 現在のスレッドのトランザクション同期状態全体を登録します。登録された同期とさまざまなトランザクション特性です。 |
static void | clearSynchronization() 現在のスレッドのトランザクション同期を非アクティブ化します。 |
static java.lang.Integer | getCurrentTransactionIsolationLevel() 存在する場合、現在のトランザクションの分離レベルを返します。 |
static java.lang.String | getCurrentTransactionName() 現在のトランザクションの名前、または何も設定されていない場合は null を返します。 |
static java.lang.Object | getResource(java.lang.Object key) 現在のスレッドにバインドされている特定のキーのリソースを取得します。 |
static java.util.Map<java.lang.Object,java.lang.Object> | getResourceMap() 現在のスレッドにバインドされているすべてのリソースを返します。 |
static java.util.List<TransactionSynchronization> | getSynchronizations() 現在のスレッドに登録されているすべての同期の変更不可能なスナップショットリストを返します。 |
static boolean | hasResource(java.lang.Object key) 現在のスレッドにバインドされた特定のキーのリソースがあるかどうかを確認します。 |
static void | initSynchronization() 現在のスレッドのトランザクション同期をアクティブにします。 |
static boolean | isActualTransactionActive() 現在アクティブな実際のトランザクションがあるかどうかを返します。 |
static boolean | isCurrentTransactionReadOnly() 現在のトランザクションが読み取り専用としてマークされているかどうかを返します。 |
static boolean | isSynchronizationActive() 現在のスレッドでトランザクション同期がアクティブな場合に返されます。 |
static void | registerSynchronization(TransactionSynchronization synchronization) 現在のスレッドの新しいトランザクション同期を登録します。 |
static void | setActualTransactionActive(boolean active) 現在アクティブな実際のトランザクションがあるかどうかを公開します。 |
static void | setCurrentTransactionIsolationLevel(java.lang.Integer isolationLevel) 現在のトランザクションの分離レベルを公開します。 |
static void | setCurrentTransactionName(java.lang.String name) 存在する場合、現在のトランザクションの名前を公開します。 |
static void | setCurrentTransactionReadOnly(boolean readOnly) 現在のトランザクションの読み取り専用フラグを公開します。 |
static java.lang.Object | unbindResource(java.lang.Object key) 現在のスレッドから指定されたキーのリソースをアンバインドします。 |
static java.lang.Object | unbindResourceIfPossible(java.lang.Object key) 現在のスレッドから指定されたキーのリソースをアンバインドします。 |
public static java.util.Map<java.lang.Object,java.lang.Object> getResourceMap()
主にデバッグを目的としています。リソースマネージャーは、関心のある特定のリソースキーに対して常に hasResource を呼び出す必要があります。
hasResource(java.lang.Object)public static boolean hasResource(java.lang.Object key)
key - チェックするキー (通常、リソースファクトリ)ResourceTransactionManager.getResourceFactory()@Nullable public static java.lang.Object getResource(java.lang.Object key)
key - チェックするキー (通常、リソースファクトリ)null ResourceTransactionManager.getResourceFactory()public static void bindResource(java.lang.Object key,
java.lang.Object value)
throws java.lang.IllegalStateExceptionkey - 値をバインドするキー (通常、リソースファクトリ)value - バインドする値 (通常、アクティブなリソースオブジェクト)java.lang.IllegalStateException - すでにスレッドにバインドされている値がある場合 ResourceTransactionManager.getResourceFactory()public static java.lang.Object unbindResource(java.lang.Object key)
throws java.lang.IllegalStateExceptionkey - バインドを解除するキー (通常、リソースファクトリ)java.lang.IllegalStateException - スレッドにバインドされた値がない場合 ResourceTransactionManager.getResourceFactory()@Nullable public static java.lang.Object unbindResourceIfPossible(java.lang.Object key)
key - バインドを解除するキー (通常、リソースファクトリ)null public static boolean isSynchronizationActive()
public static void initSynchronization()
throws java.lang.IllegalStateExceptionjava.lang.IllegalStateException - 同期がすでにアクティブな場合 public static void registerSynchronization(TransactionSynchronization synchronization) throws java.lang.IllegalStateException
同期により Ordered インターフェースを実装できることに注意してください。それらは、オーダー値に応じた順序で実行されます(ある場合)。
synchronization - 登録する同期オブジェクト java.lang.IllegalStateException - トランザクション同期がアクティブでない場合 Orderedpublic static java.util.List<TransactionSynchronization> getSynchronizations() throws java.lang.IllegalStateException
java.lang.IllegalStateException - 同期がアクティブでない場合 TransactionSynchronizationpublic static void clearSynchronization()
throws java.lang.IllegalStateExceptionjava.lang.IllegalStateException - 同期がアクティブでない場合 public static void setCurrentTransactionName(@Nullable java.lang.String name)
name - トランザクションの名前、またはそれをリセットする null TransactionDefinition.getName()@Nullable public static java.lang.String getCurrentTransactionName()
null を返します。特定の名前付きトランザクションのフェッチ戦略を最適化するなど、ユースケースごとの最適化のためにリソース管理コードによって呼び出されます。public static void setCurrentTransactionReadOnly(boolean readOnly)
readOnly - 現在のトランザクションを読み取り専用としてマークする true。このような読み取り専用マーカーをリセットする false TransactionDefinition.isReadOnly()public static boolean isCurrentTransactionReadOnly()
トランザクション同期は、beforeCommit コールバックの引数として読み取り専用フラグを受け取り、コミット時の変更検出を抑制できることに注意してください。現在のメソッドは、以前の読み取り専用チェック、たとえば Hibernate セッションのフラッシュモードを "FlushMode.NEVER" に事前に設定するために使用することを目的としています。
public static void setCurrentTransactionIsolationLevel(@Nullable java.lang.Integer isolationLevel)
isolationLevel - JDBC 接続定数(対応する Spring TransactionDefinition 定数に相当)に従って公開する分離レベル、またはリセットする null Connection.TRANSACTION_READ_UNCOMMITTED、Connection.TRANSACTION_READ_COMMITTED、Connection.TRANSACTION_REPEATABLE_READ、Connection.TRANSACTION_SERIALIZABLE, TransactionDefinition.ISOLATION_READ_UNCOMMITTED, TransactionDefinition.ISOLATION_READ_COMMITTED, TransactionDefinition.ISOLATION_REPEATABLE_READ, TransactionDefinition.ISOLATION_SERIALIZABLE, TransactionDefinition.getIsolationLevel()@Nullable public static java.lang.Integer getCurrentTransactionIsolationLevel()
null Connection.TRANSACTION_READ_UNCOMMITTED、Connection.TRANSACTION_READ_COMMITTED、Connection.TRANSACTION_REPEATABLE_READ、Connection.TRANSACTION_SERIALIZABLE, TransactionDefinition.ISOLATION_READ_UNCOMMITTED, TransactionDefinition.ISOLATION_READ_COMMITTED, TransactionDefinition.ISOLATION_REPEATABLE_READ, TransactionDefinition.ISOLATION_SERIALIZABLE, TransactionDefinition.getIsolationLevel()public static void setActualTransactionActive(boolean active)
active - 現在のスレッドを実際のトランザクションに関連付けられているものとしてマークする true。そのマーカーをリセットする false public static boolean isActualTransactionActive()
アクティブなトランザクション同期(バッキングリソーストランザクションの有無に関係なく、PROPAGATION_SUPPORTS でも)とアクティブな実際のトランザクション(バッキングリソーストランザクションで、PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW など)を区別するリソース管理コードによって呼び出されます。
public static void clear()