クラス AbstractPlatformTransactionManager

java.lang.ObjectSE
org.springframework.transaction.support.AbstractPlatformTransactionManager
実装されたすべてのインターフェース:
SerializableSEConfigurableTransactionManagerPlatformTransactionManagerTransactionManager
既知の直属サブクラス
DataSourceTransactionManagerHibernateTransactionManagerJmsTransactionManagerJpaTransactionManagerJtaTransactionManager

public abstract class AbstractPlatformTransactionManager extends ObjectSE implements PlatformTransactionManager, ConfigurableTransactionManager, SerializableSE
Spring の標準トランザクションワークフローを実装する抽象基本クラス。JtaTransactionManager などの具体的なプラットフォームトランザクションマネージャーの基盤として機能します。

この基本クラスは、次のワークフロー処理を提供します。

  • 既存のトランザクションがあるかどうかを判断します。
  • 適切な伝播動作を適用します。
  • 必要に応じてトランザクションを中断および再開します。
  • コミット時にロールバック専用フラグをチェックします。
  • ロールバックに適切な変更を適用します(実際のロールバックまたはロールバックのみの設定)。
  • 登録された同期コールバックをトリガーします(トランザクション同期がアクティブな場合)。

サブクラスは、トランザクションの特定の状態(開始、一時停止、再開、コミット、ロールバックなど)に特定のテンプレートメソッドを実装する必要があります。それらの最も重要なものは抽象的であり、具体的な実装によって提供される必要があります。残りについては、デフォルトが提供されるため、オーバーライドはオプションです。

トランザクションの同期は、トランザクションの補完時に呼び出されるコールバックを登録するための一般的なメカニズムです。これは主に、JTA トランザクション内で実行する場合、JDBC、Hibernate、JPA などのデータアクセスサポートクラスによって内部的に使用されます。トランザクション完了時に閉じるために、トランザクション内で開かれているリソースを登録します。トランザクション内で同じ Hibernate セッションを再利用するため。同じメカニズムは、アプリケーションのカスタム同期のニーズにも活用できます。

このクラスの状態は直列化可能で、トランザクションインターセプターを運ぶプロキシとともにトランザクション戦略を直列化できます。状態も直列化できるようにする場合は、サブクラス次第です。その場合は、java.io.Serializable マーカーインターフェースを実装する必要があります。また、一時的な状態を復元する必要がある場合は、Java シリアライゼーションルールに従ってプライベート readObject() メソッドを実装する必要があります。

導入:
28.03.2003
作成者:
Juergen Hoeller, Sam Brannen
関連事項:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    protected static final class
    中断されたリソースのホルダー。
  • フィールドサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    protected Log
    static final int
    既存のバックエンドトランザクションのない PROPAGATION_SUPPORTS から生じる「空の」トランザクションであっても、常にトランザクション同期をアクティブにします。
    static final int
    実際のトランザクションでさえも、決してアクティブなトランザクション同期を行わないでください。
    static final int
    実際のトランザクションに対してのみトランザクション同期をアクティブにします。つまり、既存のバックエンドトランザクションのない PROPAGATION_SUPPORTS から生じる空のトランザクションに対してはアクティブにしません。
  • コンストラクターのサマリー

    コンストラクター
    コンストラクター
    説明
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    final void
    このコミットの実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。
    protected int
    特定の定義に使用する実際のタイムアウトを決定します。
    protected abstract void
    doBegin(ObjectSE transaction, TransactionDefinition definition)
    指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。
    protected void
    トランザクション完了後にリソースをクリーンアップします。
    protected abstract void
    指定されたトランザクションの実際のコミットを実行します。
    protected abstract ObjectSE
    現在のトランザクション状態のトランザクションオブジェクトを返します。
    protected void
    doResume(ObjectSE transaction, ObjectSE suspendedResources)
    現在のトランザクションのリソースを再開します。
    protected abstract void
    指定されたトランザクションの実際のロールバックを実行します。
    protected void
    指定されたトランザクションをロールバックのみに設定します。
    protected ObjectSE
    doSuspend(ObjectSE transaction)
    現在のトランザクションのリソースを一時停止します。
    final int
    トランザクションレベルで指定されたタイムアウトがない場合、このトランザクションマネージャーが適用するデフォルトのタイムアウトを秒単位で返します。
    この実装は、伝播動作を処理します。
    このトランザクションマネージャーに登録されているトランザクション実行リスナーを返します。
    final int
    このトランザクションマネージャーがスレッドバインドトランザクション同期サポートをアクティブにする必要がある場合に戻ります。
    protected final void
    invokeAfterCompletion(ListSE<TransactionSynchronization> synchronizations, int completionStatus)
    指定された Spring TransactionSynchronization オブジェクトの afterCompletion メソッドを実際に呼び出します。
    protected boolean
    指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。
    final boolean
    トランザクションがロールバック専用としてグローバルにマークされている場合、早期に失敗するかどうかを返します。
    final boolean
    参加しているトランザクションが失敗した後に、既存のトランザクションをロールバック専用としてグローバルにマークするかどうかを返します。
    final boolean
    ネストされたトランザクションが許可されているかどうかを返します。
    final boolean
    doCommit 呼び出しの失敗時に doRollback を実行する必要があるかどうかを返します。
    final boolean
    既存のトランザクションに参加する前に検証する必要があるかどうかを返します。
    protected void
    beforeCommit 同期コールバックが発生する前に実行されるコミットの準備をします。
    protected void
    必要に応じて、トランザクションの同期を初期化します。
    protected void
    指定されたトランザクション同期のリストを既存のトランザクションに登録します。
    protected final void
    指定されたトランザクションを再開します。
    final void
    このロールバックの実装は、既存のトランザクションへの参加を処理します。
    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
    このトランザクションマネージャーからの begin/commit/rollback コールバックのトランザクション実行リスナーを設定します。
    final void
    setTransactionSynchronization(int transactionSynchronization)
    このトランザクションマネージャーがスレッドバインドトランザクション同期サポートをアクティブにするタイミングを設定します。
    final void
    このクラスの対応する定数の名前によってトランザクション同期を設定します。たとえば、"SYNCHRONIZATION_ALWAYS"
    final void
    setValidateExistingTransaction(boolean validateExistingTransaction)
    既存のトランザクションを参加する前に検証するかどうかを設定します。
    protected boolean
    グローバルな方法でロールバック専用としてマークされたトランザクションで doCommit を呼び出すかどうかを返します。
    suspend(ObjectSE transaction)
    指定されたトランザクションを中断します。
    protected final void
    beforeCommit コールバックをトリガーします。
    protected final void
    beforeCompletion コールバックをトリガーします。
    protected boolean
    ネストされたトランザクションにセーブポイントを使用するかどうかを返します。

    クラス java.lang.ObjectSE から継承されたメソッド

    clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE

    インターフェース org.springframework.transaction.ConfigurableTransactionManager から継承されたメソッド

    addListener
  • フィールドの詳細

  • コンストラクターの詳細

    • AbstractPlatformTransactionManager

      public AbstractPlatformTransactionManager()
  • メソッドの詳細

    • setTransactionSynchronizationName

      public final void setTransactionSynchronizationName(StringSE constantName)
      このクラスの対応する定数の名前によってトランザクション同期を設定します。たとえば、"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 を実行する必要があるかどうかを返します。
    • setTransactionExecutionListeners

      public final void setTransactionExecutionListeners(CollectionSE<TransactionExecutionListener> listeners)
      インターフェースからコピーされた説明: ConfigurableTransactionManager
      このトランザクションマネージャーからの begin/commit/rollback コールバックのトランザクション実行リスナーを設定します。
      次で指定:
      インターフェース ConfigurableTransactionManagersetTransactionExecutionListeners 
      関連事項:
    • getTransactionExecutionListeners

      public final CollectionSE<TransactionExecutionListener> getTransactionExecutionListeners()
      インターフェースからコピーされた説明: ConfigurableTransactionManager
      このトランザクションマネージャーに登録されているトランザクション実行リスナーを返します。
      次で指定:
      インターフェース ConfigurableTransactionManagergetTransactionExecutionListeners 
      関連事項:
    • getTransaction

      public final TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException
      この実装は、伝播動作を処理します。doGetTransactionisExistingTransactiondoBegin への委譲。
      次で指定:
      インターフェース PlatformTransactionManagergetTransaction 
      パラメーター:
      definition - TransactionDefinition インスタンス(デフォルトでは null にすることができます)、伝播動作、分離レベル、タイムアウトなどを記述します
      戻り値:
      新規または現在のトランザクションを表すトランザクションステータスオブジェクト
      例外:
      TransactionException - ルックアップ、作成、システムエラーの場合
      IllegalTransactionStateException - 指定されたトランザクション定義を実行できない場合 (たとえば、現在アクティブなトランザクションが指定された伝播動作と競合している場合)
      関連事項:
    • prepareSynchronization

      protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition)
      必要に応じて、トランザクションの同期を初期化します。
    • determineTimeout

      protected int determineTimeout(TransactionDefinition definition)
      特定の定義に使用する実際のタイムアウトを決定します。トランザクション定義でデフォルト以外の値が指定されていない場合、このマネージャーのデフォルトのタイムアウトにフォールバックします。
      パラメーター:
      definition - トランザクション定義
      戻り値:
      使用する実際のタイムアウト
      関連事項:
    • suspend

      指定されたトランザクションを中断します。最初にトランザクションの同期を一時停止し、次に 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

      public final void commit(TransactionStatus status) throws TransactionException
      この commit の実装は、既存のトランザクションおよびプログラムによるロールバックリクエストへの参加を処理します。isRollbackOnlydoCommitrollback への委譲。
      次で指定:
      インターフェース PlatformTransactionManagercommit 
      パラメーター:
      status - getTransaction メソッドによって返されるオブジェクト
      例外:
      UnexpectedRollbackException - トランザクションコーディネーターが開始した予期しないロールバックの場合
      HeuristicCompletionException - トランザクションコーディネーター側のヒューリスティックな決定が原因でトランザクションが失敗した場合
      TransactionSystemException - コミットまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)
      IllegalTransactionStateException - 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)
      TransactionException
      関連事項:
    • rollback

      public final void rollback(TransactionStatus status) throws TransactionException
      このロールバックの実装は、既存のトランザクションへの参加を処理します。doRollback および doSetRollbackOnly へのデリゲート。
      次で指定:
      インターフェース PlatformTransactionManagerrollback 
      パラメーター:
      status - getTransaction メソッドによって返されるオブジェクト
      例外:
      TransactionSystemException - ロールバックまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)
      IllegalTransactionStateException - 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)
      TransactionException
      関連事項:
    • triggerBeforeCommit

      protected final void triggerBeforeCommit(DefaultTransactionStatus status)
      beforeCommit コールバックをトリガーします。
      パラメーター:
      status - トランザクションを表すオブジェクト
    • triggerBeforeCompletion

      protected final void triggerBeforeCompletion(DefaultTransactionStatus status)
      beforeCompletion コールバックをトリガーします。
      パラメーター:
      status - トランザクションを表すオブジェクト
    • invokeAfterCompletion

      protected final void invokeAfterCompletion(ListSE<TransactionSynchronization> synchronizations, int completionStatus)
      指定された Spring TransactionSynchronization オブジェクトの afterCompletion メソッドを実際に呼び出します。

      この抽象マネージャー自体、または registerAfterCompletionWithExistingTransaction コールバックの特別な実装によって呼び出されます。

      パラメーター:
      synchronizations - TransactionSynchronization オブジェクトのリスト
      completionStatus - TransactionSynchronization インターフェースの定数に従った完了ステータス
      関連事項:
    • doGetTransaction

      protected abstract ObjectSE doGetTransaction() throws TransactionException
      現在のトランザクション状態のトランザクションオブジェクトを返します。

      返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有であり、対応するトランザクション状態を変更可能な形で保持します。このオブジェクトは、直接または DefaultTransactionStatus インスタンスの一部として、他のテンプレートメソッド(doBegin や doCommit など)に渡されます。

      返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の getTransaction 呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction 実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。

      戻り値:
      現在のトランザクションオブジェクト
      例外:
      CannotCreateTransactionException - トランザクションサポートが利用できない場合
      TransactionException - ルックアップまたはシステムエラーの場合
      関連事項:
    • isExistingTransaction

      protected boolean isExistingTransaction(ObjectSE transaction) throws TransactionException
      指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。

      結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(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

      protected ObjectSE doSuspend(ObjectSE transaction) throws TransactionException
      現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。

      トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は 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

      protected void prepareForCommit(DefaultTransactionStatus status)
      beforeCommit 同期コールバックが発生する前に実行されるコミットの準備をします。

      例外はコミット呼び出し元に伝播され、トランザクションのロールバックが発生することに注意してください。

      パラメーター:
      status - トランザクションのステータス表現
      例外:
      RuntimeExceptionSE - エラーの場合 ; 呼び出し元に伝播されます (注意: ここで TransactionException サブクラスをスローしないでください! )
    • doCommit

      protected abstract void doCommit(DefaultTransactionStatus status) throws TransactionException
      指定されたトランザクションの実際のコミットを実行します。

      実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。

      パラメーター:
      status - トランザクションのステータス表現
      例外:
      TransactionException - コミットまたはシステムエラーの場合
      関連事項:
    • doRollback

      protected abstract void doRollback(DefaultTransactionStatus status) throws TransactionException
      指定されたトランザクションの実際のロールバックを実行します。

      実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。

      パラメーター:
      status - トランザクションのステータス表現
      例外:
      TransactionException - システムエラーの場合
      関連事項:
    • doSetRollbackOnly

      protected void doSetRollbackOnly(DefaultTransactionStatus status) throws TransactionException
      指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。

      既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は 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

      protected void doCleanupAfterCompletion(ObjectSE transaction)
      トランザクション完了後にリソースをクリーンアップします。

      doCommit および doRollback の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。

      例外をスローするべきではなく、エラーに対して警告を発行するだけです。

      パラメーター:
      transaction - doGetTransaction によって返されるトランザクションオブジェクト