public interface PlatformTransactionManager
実装者には、提供された AbstractPlatformTransactionManager
クラスから派生させることをお勧めします。AbstractPlatformTransactionManager
クラスは、定義された伝播動作を事前実装し、トランザクション同期処理を処理します。サブクラスは、基礎となるトランザクションの特定の状態(開始、一時停止、再開、コミット)にテンプレートメソッドを実装する必要があります。
この戦略インターフェースのデフォルトの実装は JtaTransactionManager
および DataSourceTransactionManager
であり、他のトランザクション戦略の実装ガイドとして機能します。
TransactionTemplate
, TransactionInterceptor
, TransactionProxyFactoryBean
修飾子と型 | メソッドと説明 |
---|---|
void | commit(TransactionStatus status) ステータスに関して、指定されたトランザクションをコミットします。 |
TransactionStatus | getTransaction(TransactionDefinition definition) 指定された伝播動作に従って、現在アクティブなトランザクションを返すか、新しいトランザクションを作成します。 |
void | rollback(TransactionStatus status) 指定されたトランザクションのロールバックを実行します。 |
TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException
分離レベルやタイムアウトなどのパラメーターは新しいトランザクションにのみ適用されるため、アクティブなトランザクションに参加する場合は無視されることに注意してください。
さらに、すべてのトランザクション定義設定がすべてのトランザクションマネージャーでサポートされるわけではありません。適切なトランザクションマネージャーの実装は、サポートされていない設定が発生した場合に例外をスローする必要があります。
上記の規則の例外は読み取り専用フラグです。明示的な読み取り専用モードがサポートされていない場合は無視してください。基本的に、読み取り専用フラグは潜在的な最適化のヒントにすぎません。
definition
- TransactionDefinition インスタンス(デフォルトでは null
にすることができます)、伝播動作、分離レベル、タイムアウトなどを記述します TransactionException
- ルックアップ、作成、システムエラーの場合 IllegalTransactionStateException
- 指定されたトランザクション定義を実行できない場合 (たとえば、現在アクティブなトランザクションが指定された伝播動作と競合している場合)TransactionDefinition.getPropagationBehavior()
, TransactionDefinition.getIsolationLevel()
, TransactionDefinition.getTimeout()
, TransactionDefinition.isReadOnly()
void commit(TransactionStatus status) throws TransactionException
トランザクションが新しいものではない場合、周囲のトランザクションに適切に参加するためにコミットを省略します。以前のトランザクションが中断されて新しいトランザクションを作成できる場合は、新しいトランザクションをコミットした後に以前のトランザクションを再開します。
コミットの呼び出しが完了すると、正常であるか例外をスローするかに関係なく、トランザクションを完全に完了してクリーンアップする必要があることに注意してください。このような場合、ロールバックコールは予期されません。
このメソッドが TransactionException 以外の例外をスローした場合、コミット前のエラーが原因でコミットの試行が失敗しました。例: O/R マッピングツールがコミットの直前にデータベースへの変更をフラッシュしようとして、結果の DataAccessException がトランザクションを失敗させた可能性があります。このような場合、元の例外はこの commit メソッドの呼び出し元に伝播されます。
status
- getTransaction
メソッドによって返されるオブジェクト UnexpectedRollbackException
- トランザクションコーディネーターが開始した予期しないロールバックの場合 HeuristicCompletionException
- トランザクションコーディネーター側のヒューリスティックな決定が原因でトランザクションが失敗した場合 TransactionSystemException
- コミットまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException
TransactionStatus.setRollbackOnly()
void rollback(TransactionStatus status) throws TransactionException
トランザクションが新しいものではない場合は、周囲のトランザクションに適切に参加するために、ロールバックのみに設定します。新しいトランザクションを作成できるように以前のトランザクションが中断されている場合は、新しいトランザクションをロールバックしてから以前のトランザクションを再開します。
コミットが例外をスローした場合、トランザクションでロールバックを呼び出さないでください。コミット例外が発生した場合でも、コミットが戻ると、トランザクションはすでに完了し、クリーンアップされています。その結果、コミットの失敗後のロールバック呼び出しは、IllegalTransactionStateException につながります。
status
- getTransaction
メソッドによって返されるオブジェクト TransactionSystemException
- ロールバックまたはシステムエラーの場合 (通常、根本的なリソース障害が原因)IllegalTransactionStateException
- 指定されたトランザクションがすでに完了している場合 (つまり、コミットまたはロールバックされます)TransactionException