クラス TransactionSynchronizationManager
上書きせずにキーごとに 1 つのリソースをサポートします。つまり、同じキーに新しいリソースを設定する前にリソースを削除する必要があります。同期がアクティブな場合、トランザクション同期のリストをサポートします。
リソース管理コードは、getResource を介して、JDBC 接続や Hibernate セッションなどのスレッドにバインドされたリソースをチェックする必要があります。通常、このようなコードはスレッドにリソースをバインドすることは想定されていません。これはトランザクションマネージャーの責任です。さらに、トランザクション同期がアクティブな場合は、最初の使用時に遅延バインドして、任意の数のリソースにまたがるトランザクションを実行するというオプションもあります。
トランザクション同期は、initSynchronization() および clearSynchronization() を介してトランザクションマネージャーによってアクティブ化および非アクティブ化される必要があります。これは AbstractPlatformTransactionManager によって、JtaTransactionManager や DataSourceTransactionManager などのすべての標準 Spring トランザクションマネージャーによって自動的にサポートされます。
リソース管理コードは、このマネージャーがアクティブな場合にのみ同期を登録する必要があります。これは、isSynchronizationActive() を介して確認できます。それ以外の場合は、すぐにリソースのクリーンアップを実行する必要があります。トランザクションの同期がアクティブでない場合、現在のトランザクションがないか、トランザクションマネージャーがトランザクションの同期をサポートしていません。
同期は、たとえば、JTA トランザクション内で常に同じリソース (それぞれ、指定された DataSource または SessionFactory の JDBC 接続または Hibernate セッションなど) を返すために使用されます。
- 導入:
- 02.06.2003
- 作成者:
- Juergen Hoeller
- 関連事項:
コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明static voidbindResource(ObjectSE key, ObjectSE value) 指定されたキーの指定されたリソースを現在のスレッドにバインドします。static voidbindSynchronizedResource(ObjectSE key, ObjectSE value) 指定されたキーの指定されたリソースを現在のスレッドにバインドし、現在のトランザクションと同期して、トランザクションの完了後に自動的にバインドを解除します。static voidclear()現在のスレッドのトランザクション同期状態全体を登録します。登録された同期とさまざまなトランザクション特性です。static void現在のスレッドのトランザクション同期を非アクティブ化します。存在する場合、現在のトランザクションの分離レベルを返します。現在のトランザクションの名前、または何も設定されていない場合はnullを返します。getResource(ObjectSE key) 現在のスレッドにバインドされている特定のキーのリソースを取得します。現在のスレッドにバインドされているすべてのリソースを返します。static ListSE<TransactionSynchronization> 現在のスレッドに登録されているすべての同期の変更不可能なスナップショットリストを返します。static booleanhasResource(ObjectSE key) 現在のスレッドにバインドされた特定のキーのリソースがあるかどうかを確認します。static void現在のスレッドのトランザクション同期をアクティブにします。static boolean現在アクティブな実際のトランザクションがあるかどうかを返します。static boolean現在のトランザクションが読み取り専用としてマークされているかどうかを返します。static boolean現在のスレッドでトランザクション同期がアクティブな場合に返されます。static voidregisterSynchronization(TransactionSynchronization synchronization) 現在のスレッドの新しいトランザクション同期を登録します。static voidsetActualTransactionActive(boolean active) 現在アクティブな実際のトランザクションがあるかどうかを公開します。static voidsetCurrentTransactionIsolationLevel(@Nullable IntegerSE isolationLevel) 現在のトランザクションの分離レベルを公開します。static void存在する場合、現在のトランザクションの名前を公開します。static voidsetCurrentTransactionReadOnly(boolean readOnly) 現在のトランザクションの読み取り専用フラグを公開します。static ObjectSEunbindResource(ObjectSE key) 現在のスレッドから指定されたキーのリソースをアンバインドします。現在のスレッドから指定されたキーのリソースをアンバインドします。
コンストラクターの詳細
TransactionSynchronizationManager
public TransactionSynchronizationManager()
メソッドの詳細
getResourceMap
hasResource
現在のスレッドにバインドされた特定のキーのリソースがあるかどうかを確認します。- パラメーター:
key- チェックするキー (通常、リソースファクトリ)- 戻り値:
- 現在のスレッドにバインドされた値がある場合
- 関連事項:
getResource
bindResource
指定されたキーの指定されたリソースを現在のスレッドにバインドします。メモ: バインドされたリソースは、
unbindResource(Object)を介して明示的にアンバインドする必要があります。トランザクション完了後に自動的にアンバインドするには、代わりにbindSynchronizedResource(Object, Object)を使用してください。- パラメーター:
key- 値をバインドするキー (通常、リソースファクトリ)value- バインドする値 (通常、アクティブなリソースオブジェクト)- 例外:
IllegalStateExceptionSE- すでにスレッドにバインドされている値がある場合- 関連事項:
bindSynchronizedResource
public static void bindSynchronizedResource(ObjectSE key, ObjectSE value) throws IllegalStateExceptionSE 指定されたキーの指定されたリソースを現在のスレッドにバインドし、現在のトランザクションと同期して、トランザクションの完了後に自動的にバインドを解除します。これは実質的に、BeanFactory 駆動型の
SimpleTransactionScopeと同様に、トランザクションスコープのリソースをプログラム的に登録する方法です。指定されたキーにバインドされた既存の値は保存され、トランザクションの完了後に再バインドされ、このバインド呼び出し前の状態が復元されます。
- パラメーター:
key- 値をバインドするキー (通常、リソースファクトリ)value- バインドする値 (通常、アクティブなリソースオブジェクト)- 例外:
IllegalStateExceptionSE- トランザクション同期がアクティブでない場合- 導入:
- 7.0
- 関連事項:
unbindResource
現在のスレッドから指定されたキーのリソースをアンバインドします。この明示的な手順は
bindResource(Object, Object)の場合にのみ必要です。自動的なアンバインドを行うには、bindSynchronizedResource(Object, Object)を検討してください。- パラメーター:
key- バインドを解除するキー (通常、リソースファクトリ)- 戻り値:
- 以前にバインドされた値 (通常、アクティブなリソースオブジェクト)
- 例外:
IllegalStateExceptionSE- スレッドにバインドされた値がない場合- 関連事項:
unbindResourceIfPossible
現在のスレッドから指定されたキーのリソースをアンバインドします。この明示的な手順は
bindResource(Object, Object)の場合にのみ必要です。自動的なアンバインドを行うには、bindSynchronizedResource(Object, Object)を検討してください。- パラメーター:
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
getCurrentTransactionName
setCurrentTransactionReadOnly
public static void setCurrentTransactionReadOnly(boolean readOnly) 現在のトランザクションの読み取り専用フラグを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。- パラメーター:
readOnly- 現在のトランザクションを読み取り専用としてマークするtrue。このような読み取り専用マーカーをリセットするfalse- 関連事項:
isCurrentTransactionReadOnly
public static boolean isCurrentTransactionReadOnly()現在のトランザクションが読み取り専用としてマークされているかどうかを返します。新しく作成されたリソース(Hibernate セッションなど)を準備するときに、リソース管理コードによって呼び出されます。トランザクション同期は、
beforeCommitコールバックの引数として読み取り専用フラグを受け取り、コミット時の変更検出を抑制できることに注意してください。現在のメソッドは、たとえば Hibernate セッションのフラッシュモードを "FlushMode.MANUAL" に事前に設定するなど、以前の読み取り専用チェックに使用することを目的としています。- 関連事項:
setCurrentTransactionIsolationLevel
getCurrentTransactionIsolationLevel
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()現在のスレッドのトランザクション同期状態全体を登録します。登録された同期とさまざまなトランザクション特性です。- 関連事項: