クラス AbstractPlatformTransactionManager
- 実装されたすべてのインターフェース:
SerializableSE
、PlatformTransactionManager
、TransactionManager
- 既知の直属サブクラス
DataSourceTransactionManager
、HibernateTransactionManager
、JmsTransactionManager
、JpaTransactionManager
、JtaTransactionManager
JtaTransactionManager
などの具体的なプラットフォームトランザクションマネージャーの基盤として機能します。この基本クラスは、次のワークフロー処理を提供します。
- 既存のトランザクションがあるかどうかを判断します。
- 適切な伝播動作を適用します。
- 必要に応じてトランザクションを中断および再開します。
- コミット時にロールバック専用フラグをチェックします。
- ロールバックに適切な変更を適用します(実際のロールバックまたはロールバックのみの設定)。
- 登録された同期コールバックをトリガーします(トランザクション同期がアクティブな場合)。
サブクラスは、トランザクションの特定の状態(開始、一時停止、再開、コミット、ロールバックなど)に特定のテンプレートメソッドを実装する必要があります。それらの最も重要なものは抽象的であり、具体的な実装によって提供される必要があります。残りについては、デフォルトが提供されるため、オーバーライドはオプションです。
トランザクションの同期は、トランザクションの補完時に呼び出されるコールバックを登録するための一般的なメカニズムです。これは主に、JTA トランザクション内で実行する場合、JDBC、Hibernate、JPA などのデータアクセスサポートクラスによって内部的に使用されます。トランザクション完了時に閉じるために、トランザクション内で開かれているリソースを登録します。トランザクション内で同じ Hibernate セッションを再利用するため。同じメカニズムは、アプリケーションのカスタム同期のニーズにも活用できます。
このクラスの状態は直列化可能で、トランザクションインターセプターを運ぶプロキシとともにトランザクション戦略を直列化できます。状態も直列化できるようにする場合は、サブクラス次第です。その場合は、java.io.Serializable
マーカーインターフェースを実装する必要があります。また、一時的な状態を復元する必要がある場合は、Java シリアライゼーションルールに従ってプライベート readObject()
メソッドを実装する必要があります。
- 導入:
- 28.03.2003
- 作成者:
- Juergen Hoeller
- 関連事項:
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明protected static final class
中断されたリソースのホルダー。フィールドサマリー
フィールド修飾子と型フィールド説明protected Log
static final int
既存のバックエンドトランザクションのない PROPAGATION_SUPPORTS から生じる「空の」トランザクションであっても、常にトランザクション同期をアクティブにします。static final int
実際のトランザクションでさえも、決してアクティブなトランザクション同期を行わないでください。static final int
実際のトランザクションに対してのみトランザクション同期をアクティブにします。つまり、既存のバックエンドトランザクションのない PROPAGATION_SUPPORTS から生じる空のトランザクションに対してはアクティブにしません。コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明final void
commit
(TransactionStatus status) このコミットの実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。protected int
determineTimeout
(TransactionDefinition definition) 特定の定義に使用する実際のタイムアウトを決定します。protected abstract void
doBegin
(ObjectSE transaction, TransactionDefinition definition) 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。protected void
doCleanupAfterCompletion
(ObjectSE transaction) トランザクション完了後にリソースをクリーンアップします。protected abstract void
doCommit
(DefaultTransactionStatus status) 指定されたトランザクションの実際のコミットを実行します。protected abstract ObjectSE
現在のトランザクション状態のトランザクションオブジェクトを返します。protected void
現在のトランザクションのリソースを再開します。protected abstract void
doRollback
(DefaultTransactionStatus status) 指定されたトランザクションの実際のロールバックを実行します。protected void
指定されたトランザクションをロールバックのみに設定します。protected ObjectSE
現在のトランザクションのリソースを一時停止します。final int
トランザクションレベルで指定されたタイムアウトがない場合、このトランザクションマネージャーが適用するデフォルトのタイムアウトを秒単位で返します。final TransactionStatus
getTransaction
(TransactionDefinition definition) この実装は、伝播動作を処理します。final int
このトランザクションマネージャーがスレッドバインドトランザクション同期サポートをアクティブにする必要がある場合に戻ります。protected final void
invokeAfterCompletion
(ListSE<TransactionSynchronization> synchronizations, int completionStatus) 指定された Spring TransactionSynchronization オブジェクトのafterCompletion
メソッドを実際に呼び出します。protected boolean
isExistingTransaction
(ObjectSE transaction) 指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。final boolean
トランザクションがロールバック専用としてグローバルにマークされている場合、早期に失敗するかどうかを返します。final boolean
参加しているトランザクションが失敗した後に、既存のトランザクションをロールバック専用としてグローバルにマークするかどうかを返します。final boolean
ネストされたトランザクションが許可されているかどうかを返します。final boolean
doCommit
呼び出しの失敗時にdoRollback
を実行する必要があるかどうかを返します。final boolean
既存のトランザクションに参加する前に検証する必要があるかどうかを返します。protected DefaultTransactionStatus
newTransactionStatus
(TransactionDefinition definition, ObjectSE transaction, boolean newTransaction, boolean newSynchronization, boolean debug, ObjectSE suspendedResources) 指定された引数の TransactionStatus インスタンスを作成します。protected void
beforeCommit
同期コールバックが発生する前に実行されるコミットの準備をします。protected void
prepareSynchronization
(DefaultTransactionStatus status, TransactionDefinition definition) 必要に応じて、トランザクションの同期を初期化します。protected final DefaultTransactionStatus
prepareTransactionStatus
(TransactionDefinition definition, ObjectSE transaction, boolean newTransaction, boolean newSynchronization, boolean debug, ObjectSE suspendedResources) 指定された引数に対して新しい TransactionStatus を作成し、必要に応じてトランザクションの同期も初期化します。protected void
registerAfterCompletionWithExistingTransaction
(ObjectSE transaction, ListSE<TransactionSynchronization> synchronizations) 指定されたトランザクション同期のリストを既存のトランザクションに登録します。protected final void
resume
(ObjectSE transaction, AbstractPlatformTransactionManager.SuspendedResourcesHolder resourcesHolder) 指定されたトランザクションを再開します。final void
rollback
(TransactionStatus status) このロールバックの実装は、既存のトランザクションへの参加を処理します。final void
setDefaultTimeout
(int defaultTimeout) トランザクションレベルで指定されたタイムアウトがない場合に、このトランザクションマネージャーが適用するデフォルトのタイムアウトを秒単位で指定します。final void
setFailEarlyOnGlobalRollbackOnly
(boolean failEarlyOnGlobalRollbackOnly) トランザクションがグローバルにロールバック専用としてマークされている場合、早期に失敗するかどうかを設定します。final void
setGlobalRollbackOnParticipationFailure
(boolean globalRollbackOnParticipationFailure) 参加しているトランザクションが失敗した後に、既存のトランザクションをロールバック専用としてグローバルにマークするかどうかを設定します。final void
setNestedTransactionAllowed
(boolean nestedTransactionAllowed) ネストされたトランザクションを許可するかどうかを設定します。final void
setRollbackOnCommitFailure
(boolean rollbackOnCommitFailure) doCommit
呼び出しの失敗時にdoRollback
を実行するかどうかを設定します。final void
setTransactionSynchronization
(int transactionSynchronization) このトランザクションマネージャーがスレッドバインドトランザクション同期サポートをアクティブにするタイミングを設定します。final void
setTransactionSynchronizationName
(StringSE constantName) このクラスの対応する定数の名前でトランザクションの同期を設定します。final void
setValidateExistingTransaction
(boolean validateExistingTransaction) 既存のトランザクションを参加する前に検証するかどうかを設定します。protected boolean
グローバルな方法でロールバック専用としてマークされたトランザクションでdoCommit
を呼び出すかどうかを返します。protected final AbstractPlatformTransactionManager.SuspendedResourcesHolder
指定されたトランザクションを中断します。protected final void
beforeCommit
コールバックをトリガーします。protected final void
beforeCompletion
コールバックをトリガーします。protected boolean
ネストされたトランザクションにセーブポイントを使用するかどうかを返します。
フィールドの詳細
SYNCHRONIZATION_ALWAYS
public static final int SYNCHRONIZATION_ALWAYS既存のバックエンドトランザクションのない PROPAGATION_SUPPORTS から生じる「空の」トランザクションであっても、常にトランザクション同期をアクティブにします。SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
public static final int SYNCHRONIZATION_ON_ACTUAL_TRANSACTION実際のトランザクションに対してのみトランザクション同期をアクティブにします。つまり、既存のバックエンドトランザクションのない PROPAGATION_SUPPORTS から生じる空のトランザクションに対してはアクティブにしません。SYNCHRONIZATION_NEVER
public static final int SYNCHRONIZATION_NEVER実際のトランザクションでさえも、決してアクティブなトランザクション同期を行わないでください。- 関連事項:
logger
コンストラクターの詳細
AbstractPlatformTransactionManager
public AbstractPlatformTransactionManager()
メソッドの詳細
setTransactionSynchronizationName
このクラスの対応する定数の名前でトランザクションの同期を設定します。"SYNCHRONIZATION_ALWAYS"。- パラメーター:
constantName
- 定数の名前- 関連事項:
setTransactionSynchronization
public final void setTransactionSynchronization(int transactionSynchronization) このトランザクションマネージャーがスレッドバインドトランザクション同期サポートをアクティブにするタイミングを設定します。デフォルトは「常に」です。トランザクション同期は、異なるトランザクションマネージャーによる複数の同時トランザクションではサポートされていないことに注意してください。一度にアクティブにできるトランザクションマネージャーは 1 つだけです。
getTransactionSynchronization
public final int getTransactionSynchronization()このトランザクションマネージャーがスレッドバインドトランザクション同期サポートをアクティブにする必要がある場合に戻ります。setDefaultTimeout
public final void setDefaultTimeout(int defaultTimeout) トランザクションレベルで指定されたタイムアウトがない場合に、このトランザクションマネージャーが適用するデフォルトのタイムアウトを秒単位で指定します。デフォルトは、基盤となるトランザクションインフラストラクチャのデフォルトタイムアウトです。
TransactionDefinition.TIMEOUT_DEFAULT
値で示される JTA プロバイダーの場合、通常 30 秒。getDefaultTimeout
public final int getDefaultTimeout()トランザクションレベルで指定されたタイムアウトがない場合、このトランザクションマネージャーが適用するデフォルトのタイムアウトを秒単位で返します。基になるトランザクションインフラストラクチャのデフォルトタイムアウトを示す
TransactionDefinition.TIMEOUT_DEFAULT
を返します。setNestedTransactionAllowed
public final void setNestedTransactionAllowed(boolean nestedTransactionAllowed) ネストされたトランザクションを許可するかどうかを設定します。デフォルトは "false" です。通常、具体的なトランザクションマネージャーサブクラスによって適切なデフォルトで初期化されます。
isNestedTransactionAllowed
public final boolean isNestedTransactionAllowed()ネストされたトランザクションが許可されているかどうかを返します。setValidateExistingTransaction
public final void setValidateExistingTransaction(boolean validateExistingTransaction) 既存のトランザクションを参加する前に検証するかどうかを設定します。既存のトランザクションに参加する場合(たとえば、PROPAGATION_REQUIRED または PROPAGATION_SUPPORTS が既存のトランザクションに遭遇した場合)、この外部トランザクションの特性は内部トランザクションスコープにも適用されます。検証では、互換性のない分離レベルと内部トランザクション定義の読み取り専用設定を検出し、対応する例外をスローすることにより、参加を拒否します。
デフォルトは "false" で、内側のトランザクション設定を寛大に無視し、外側のトランザクションの特性で単純にオーバーライドします。厳密な検証を実施するには、このフラグを "true" に切り替えます。
- 導入:
- 2.5.1
isValidateExistingTransaction
public final boolean isValidateExistingTransaction()既存のトランザクションに参加する前に検証する必要があるかどうかを返します。- 導入:
- 2.5.1
setGlobalRollbackOnParticipationFailure
public final void setGlobalRollbackOnParticipationFailure(boolean globalRollbackOnParticipationFailure) 参加しているトランザクションが失敗した後に、既存のトランザクションをロールバック専用としてグローバルにマークするかどうかを設定します。デフォルトは「true」: 参加しているトランザクション(既存のトランザクションに遭遇した PROPAGATION_REQUIRED または PROPAGATION_SUPPORTS など)が失敗した場合、トランザクションはグローバルにロールバックのみとしてマークされます。このようなトランザクションの唯一の可能な結果は、ロールバックです: トランザクションの発信者は、トランザクションをコミットできなくなりました。
これを "false" に切り替えて、トランザクションのオリジネーターがロールバックの決定を行えるようにします。参加しているトランザクションが例外で失敗した場合でも、呼び出し側はトランザクション内の別のパスで続行することを決定できます。ただし、これは、すべての参加リソースがデータアクセス障害の後でもトランザクションコミットに向かって継続できる場合にのみ機能することに注意してください。たとえば、Hibernate セッションの場合は一般にそうではありません。一連の JDBC 挿入 / 更新 / 削除操作についても同様です。
注 : このフラグは、通常、データアクセス操作(TransactionInterceptor がロールバックルールに従って
PlatformTransactionManager.rollback()
呼び出しをトリガーする)によってスローされた例外によって引き起こされる、サブトランザクションの明示的なロールバック試行にのみ適用されます。フラグがオフの場合、呼び出し元は例外を処理し、サブトランザクションのロールバックルールに関係なく、ロールバックを決定できます。ただし、このフラグはTransactionStatus
での明示的なsetRollbackOnly
呼び出しには適用されません。TransactionStatus
は常に最終的なグローバルロールバックを引き起こします(ロールバックのみの呼び出しの後に例外をスローしない場合があるため)。サブトランザクションの失敗を処理するための推奨ソリューションは、グローバルトランザクションをサブトランザクションの開始時に取得したセーブポイントにロールバックできる「ネストトランザクション」です。PROPAGATION_NESTED は、これらのセマンティクスを正確に提供します。ただし、ネストされたトランザクションのサポートが利用可能な場合にのみ機能します。これは DataSourceTransactionManager の場合ですが、JtaTransactionManager の場合はそうではありません。
isGlobalRollbackOnParticipationFailure
public final boolean isGlobalRollbackOnParticipationFailure()参加しているトランザクションが失敗した後に、既存のトランザクションをロールバック専用としてグローバルにマークするかどうかを返します。setFailEarlyOnGlobalRollbackOnly
public final void setFailEarlyOnGlobalRollbackOnly(boolean failEarlyOnGlobalRollbackOnly) トランザクションがグローバルにロールバック専用としてマークされている場合、早期に失敗するかどうかを設定します。デフォルトは "false" で、一番外側のトランザクション境界でのみ UnexpectedRollbackException が発生します。このフラグをオンに切り替えると、内部のトランザクション境界内からでも、グローバルロールバック専用マーカーが最初に検出されるとすぐに UnexpectedRollbackException が発生します。
Spring 2.0 以降、グローバルロールバックのみのマーカーのフェイルアーリー動作が統合されました。すべてのトランザクションマネージャーは、デフォルトで UnexpectedRollbackException を最も外側のトランザクション境界でのみ発生させます。これにより、たとえば、操作が失敗してトランザクションが完了しない場合でも、ユニットテストを続行できます。このフラグが明示的に "true" に設定されている場合、すべてのトランザクションマネージャーは以前にのみ失敗します。
- 導入:
- 2.0
- 関連事項:
isFailEarlyOnGlobalRollbackOnly
public final boolean isFailEarlyOnGlobalRollbackOnly()トランザクションがロールバック専用としてグローバルにマークされている場合、早期に失敗するかどうかを返します。- 導入:
- 2.0
setRollbackOnCommitFailure
public final void setRollbackOnCommitFailure(boolean rollbackOnCommitFailure) doCommit
呼び出しの失敗時にdoRollback
を実行するかどうかを設定します。通常は不要であり、回避する必要があります。これは、コミット例外を後続のロールバック例外でオーバーライドする可能性があるためです。デフォルトは「false」。
isRollbackOnCommitFailure
public final boolean isRollbackOnCommitFailure()doCommit
呼び出しの失敗時にdoRollback
を実行する必要があるかどうかを返します。getTransaction
public final TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException この実装は、伝播動作を処理します。doGetTransaction
、isExistingTransaction
、doBegin
への委譲。- 次で指定:
- インターフェース
PlatformTransactionManager
のgetTransaction
- パラメーター:
definition
- TransactionDefinition インスタンス(デフォルトではnull
にすることができます)、伝播動作、分離レベル、タイムアウトなどを記述します- 戻り値:
- 新規または現在のトランザクションを表すトランザクションステータスオブジェクト
- 例外:
TransactionException
- ルックアップ、作成、システムエラーの場合IllegalTransactionStateException
- 指定されたトランザクション定義を実行できない場合 (たとえば、現在アクティブなトランザクションが指定された伝播動作と競合している場合)- 関連事項:
prepareTransactionStatus
protected final DefaultTransactionStatus prepareTransactionStatus(TransactionDefinition definition, @Nullable ObjectSE transaction, boolean newTransaction, boolean newSynchronization, boolean debug, @Nullable ObjectSE suspendedResources) 指定された引数に対して新しい TransactionStatus を作成し、必要に応じてトランザクションの同期も初期化します。newTransactionStatus
protected DefaultTransactionStatus newTransactionStatus(TransactionDefinition definition, @Nullable ObjectSE transaction, boolean newTransaction, boolean newSynchronization, boolean debug, @Nullable ObjectSE suspendedResources) 指定された引数の TransactionStatus インスタンスを作成します。prepareSynchronization
protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) 必要に応じて、トランザクションの同期を初期化します。determineTimeout
特定の定義に使用する実際のタイムアウトを決定します。トランザクション定義でデフォルト以外の値が指定されていない場合、このマネージャーのデフォルトのタイムアウトにフォールバックします。- パラメーター:
definition
- トランザクション定義- 戻り値:
- 使用する実際のタイムアウト
- 関連事項:
suspend
@Nullable protected final AbstractPlatformTransactionManager.SuspendedResourcesHolder suspend(@Nullable ObjectSE transaction) throws TransactionException 指定されたトランザクションを中断します。最初にトランザクションの同期を一時停止し、次にdoSuspend
テンプレートメソッドに委譲します。- パラメーター:
transaction
- 現在のトランザクションオブジェクト (またはnull
は、アクティブな同期を一時停止します(存在する場合))- 戻り値:
- 中断されたリソースを保持するオブジェクト (またはトランザクションも同期もアクティブでない場合は
null
) - 例外:
TransactionException
- 関連事項:
resume
protected final void resume(@Nullable ObjectSE transaction, @Nullable AbstractPlatformTransactionManager.SuspendedResourcesHolder resourcesHolder) throws TransactionException 指定されたトランザクションを再開します。最初にdoResume
テンプレートメソッドに委譲し、次にトランザクションの同期を再開します。- パラメーター:
transaction
- 現在のトランザクションオブジェクトresourcesHolder
-suspend
によって返される、中断されたリソースを保持するオブジェクト (またはnull
があれば、単に同期を再開します)- 例外:
TransactionException
- 関連事項:
commit
この commit の実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。isRollbackOnly
、doCommit
、rollback
への委譲。- 次で指定:
- インターフェース
PlatformTransactionManager
のcommit
- パラメーター:
status
-getTransaction
メソッドによって返されるオブジェクト- 例外:
UnexpectedRollbackException
- トランザクションコーディネーターが開始した予期しないロールバックの場合HeuristicCompletionException
- トランザクションコーディネーター側のヒューリスティックな決定が原因でトランザクションが失敗した場合TransactionSystemException
- コミットまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException
- 関連事項:
rollback
このロールバックの実装は、既存のトランザクションへの参加を処理します。doRollback
およびdoSetRollbackOnly
へのデリゲート。- 次で指定:
- インターフェース
PlatformTransactionManager
のrollback
- パラメーター:
status
-getTransaction
メソッドによって返されるオブジェクト- 例外:
TransactionSystemException
- ロールバックまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException
- 関連事項:
triggerBeforeCommit
beforeCommit
コールバックをトリガーします。- パラメーター:
status
- トランザクションを表すオブジェクト
triggerBeforeCompletion
beforeCompletion
コールバックをトリガーします。- パラメーター:
status
- トランザクションを表すオブジェクト
invokeAfterCompletion
protected final void invokeAfterCompletion(ListSE<TransactionSynchronization> synchronizations, int completionStatus) 指定された Spring TransactionSynchronization オブジェクトのafterCompletion
メソッドを実際に呼び出します。この抽象マネージャー自体、または
registerAfterCompletionWithExistingTransaction
コールバックの特別な実装によって呼び出されます。- パラメーター:
synchronizations
- TransactionSynchronization オブジェクトのリストcompletionStatus
- TransactionSynchronization インターフェースの定数に従った完了ステータス- 関連事項:
doGetTransaction
現在のトランザクション状態のトランザクションオブジェクトを返します。返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有であり、対応するトランザクション状態を変更可能な形で保持します。このオブジェクトは、直接または DefaultTransactionStatus インスタンスの一部として、他のテンプレートメソッド(doBegin や doCommit など)に渡されます。
返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の
getTransaction
呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction
実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。- 戻り値:
- 現在のトランザクションオブジェクト
- 例外:
CannotCreateTransactionException
- トランザクションサポートが利用できない場合TransactionException
- ルックアップまたはシステムエラーの場合- 関連事項:
isExistingTransaction
指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。
デフォルト実装は
false
を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。- パラメーター:
transaction
- doGetTransaction によって返されるトランザクションオブジェクト- 戻り値:
- 既存のトランザクションがある場合
- 例外:
TransactionException
- システムエラーの場合- 関連事項:
useSavepointForNestedTransaction
protected boolean useSavepointForNestedTransaction()ネストされたトランザクションにセーブポイントを使用するかどうかを返します。デフォルトは
true
です。これにより、セーブポイントの作成および保持のために DefaultTransactionStatus への委譲が行われます。トランザクションオブジェクトが SavepointManager インターフェースを実装していない場合、NestedTransactionNotSupportedException がスローされます。そうでない場合、SavepointManager は、ネストされたトランザクションの開始を区別するために、新しいセーブポイントを作成するように求められます。サブクラスはこれをオーバーライドして
false
を返すことができ、すでに存在するトランザクションのコンテキスト内でdoBegin
をさらに呼び出します。doBegin
実装は、このようなシナリオでそれに応じてこれを処理する必要があります。これは、たとえば JTA に適しています。doBegin
protected abstract void doBegin(ObjectSE transaction, TransactionDefinition definition) throws TransactionException 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。伝播動作の適用を気にする必要はありません。これは、この抽象マネージャーによってすでに処理されているためです。このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。
特別なシナリオは、セーブポイントのないネストされたトランザクションです:
useSavepointForNestedTransaction()
が "false" を返す場合、このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクトdefinition
- 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス- 例外:
TransactionException
- 作成またはシステムエラーの場合NestedTransactionNotSupportedException
- 基になるトランザクションがネストをサポートしていない場合
doSuspend
現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクト- 戻り値:
- 中断されたリソースを保持するオブジェクト (doResume に渡すために未検査のままになります)
- 例外:
TransactionSuspensionNotSupportedException
- トランザクションマネージャーの実装が中断をサポートしていない場合TransactionException
- システムエラーの場合- 関連事項:
doResume
protected void doResume(@Nullable ObjectSE transaction, ObjectSE suspendedResources) throws TransactionException 現在のトランザクションのリソースを再開します。トランザクションの同期はその後再開されます。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクトsuspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト- 例外:
TransactionSuspensionNotSupportedException
- トランザクションマネージャーの実装が再開をサポートしていない場合TransactionException
- システムエラーの場合- 関連事項:
shouldCommitOnGlobalRollbackOnly
protected boolean shouldCommitOnGlobalRollbackOnly()グローバルな方法でロールバック専用としてマークされたトランザクションでdoCommit
を呼び出すかどうかを返します。アプリケーションが TransactionStatus を介してトランザクションをロールバックのみにローカルに設定する場合は適用されませんが、トランザクションコーディネーターによってロールバックのみとしてマークされているトランザクション自体にのみ適用されます。
デフォルトは「false」: ローカルトランザクション戦略は通常、トランザクション自体にロールバックのみのマーカーを保持しないため、トランザクションコミットの一部としてロールバックのみのトランザクションを処理できません。その場合、AbstractPlatformTransactionManager はロールバックをトリガーし、その後 UnexpectedRollbackException をスローします。
具体的なトランザクションマネージャーが、ロールバックのみのトランザクションでも
doCommit
呼び出しを予期している場合、これをオーバーライドして "true" を返し、そこで特別な処理を可能にします。これは、たとえば、UserTransaction.commit
が読み取り専用フラグ自体をチェックし、対応する RollbackException をスローする JTA の場合です。これには、特定の理由(トランザクションタイムアウトなど)が含まれる場合があります。このメソッドが "true" を返しても、
doCommit
実装が例外をスローしない場合、このトランザクションマネージャーは UnexpectedRollbackException 自体をスローします。これは典型的なケースではありません。主に、呼び出しコードによってロールバックがリクエストされていない場合でも静かにロールバックする JTA プロバイダーの不正な動作をカバーするためにチェックされます。prepareForCommit
beforeCommit
同期コールバックが発生する前に実行されるコミットの準備をします。例外はコミット呼び出し元に伝播され、トランザクションのロールバックが発生することに注意してください。
- パラメーター:
status
- トランザクションのステータス表現- 例外:
RuntimeExceptionSE
- エラーの場合 ; 呼び出し元に伝播されます (注意: ここで TransactionException サブクラスをスローしないでください! )
doCommit
指定されたトランザクションの実際のコミットを実行します。実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
- パラメーター:
status
- トランザクションのステータス表現- 例外:
TransactionException
- コミットまたはシステムエラーの場合- 関連事項:
doRollback
指定されたトランザクションの実際のロールバックを実行します。実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
- パラメーター:
status
- トランザクションのステータス表現- 例外:
TransactionException
- システムエラーの場合- 関連事項:
doSetRollbackOnly
指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
- パラメーター:
status
- トランザクションのステータス表現- 例外:
TransactionException
- システムエラーの場合
registerAfterCompletionWithExistingTransaction
protected void registerAfterCompletionWithExistingTransaction(ObjectSE transaction, ListSE<TransactionSynchronization> synchronizations) throws TransactionException 指定されたトランザクション同期のリストを既存のトランザクションに登録します。Spring トランザクションマネージャーの制御、すべての Spring トランザクションの同期が終了し、トランザクションがまだ完了していないときに呼び出されます。これは、たとえば、既存の JTA または EJB CMT トランザクションに参加する場合です。
デフォルトの実装は、"STATUS_UNKNOWN" を渡して、すぐに
afterCompletion
メソッドを呼び出すだけです。これは、外部トランザクションの実際の結果を判断する機会がない場合にできる最善の方法です。- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクトsynchronizations
- TransactionSynchronization オブジェクトのリスト- 例外:
TransactionException
- システムエラーの場合- 関連事項:
doCleanupAfterCompletion
トランザクション完了後にリソースをクリーンアップします。doCommit
およびdoRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。例外をスローするべきではなく、エラーに対して警告を発行するだけです。
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクト