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