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