public interface TransactionDefinition
実際の新しいトランザクションが開始されない限り、分離レベルとタイムアウト設定は適用されないことに注意してください。PROPAGATION_REQUIRED
、PROPAGATION_REQUIRES_NEW
、PROPAGATION_NESTED
のみがそれを引き起こす可能性があるため、他の場合にそれらの設定を指定することは通常意味がありません。さらに、すべてのトランザクションマネージャーがこれらの高度な機能をサポートするわけではないため、デフォルト以外の値を指定すると、対応する例外がスローされる可能性があることに注意してください。
read-only flag
は、実際のリソーストランザクションに支えられているか、リソースレベルで非トランザクションで動作しているかにかかわらず、あらゆるトランザクションコンテキストに適用されます。後者の場合、フラグは Hibernate Session
などのアプリケーション内の管理対象リソースにのみ適用されます。
PlatformTransactionManager.getTransaction(TransactionDefinition)
, DefaultTransactionDefinition
, TransactionAttribute
修飾子と型 | フィールドと説明 |
---|---|
static int | ISOLATION_DEFAULT 基礎となるデータストアのデフォルトの分離レベルを使用します。 |
static int | ISOLATION_READ_COMMITTED ダーティリードが防止されることを示します。繰り返し不可の読み取りとファントム読み取りが発生する可能性があります。 |
static int | ISOLATION_READ_UNCOMMITTED ダーティー読み取り、繰り返し不可の読み取り、ファントム読み取りが発生する可能性があることを示します。 |
static int | ISOLATION_REPEATABLE_READ ダーティリードおよび繰り返し不可のリードが防止されることを示します。ファントムリードが発生する可能性があります。 |
static int | ISOLATION_SERIALIZABLE ダーティー読み取り、繰り返し不可の読み取り、ファントム読み取りが防止されることを示します。 |
static int | PROPAGATION_MANDATORY 現在のトランザクションをサポートします。現在のトランザクションが存在しない場合、例外をスローします。 |
static int | PROPAGATION_NESTED 現在のトランザクションが存在する場合はネストされたトランザクション内で実行し、そうでない場合は PROPAGATION_REQUIRED のように動作します。 |
static int | PROPAGATION_NEVER 現在のトランザクションをサポートしません。現在のトランザクションが存在する場合、例外をスローします。 |
static int | PROPAGATION_NOT_SUPPORTED 現在のトランザクションをサポートしません。むしろ、常に非トランザクションで実行します。 |
static int | PROPAGATION_REQUIRED 現在のトランザクションをサポートします。存在しない場合は新しいものを作成します。 |
static int | PROPAGATION_REQUIRES_NEW 新しいトランザクションを作成し、現在のトランザクションが存在する場合は中断します。 |
static int | PROPAGATION_SUPPORTS 現在のトランザクションをサポートします。存在しない場合は非トランザクションで実行します。 |
static int | TIMEOUT_DEFAULT 基になるトランザクションシステムの既定のタイムアウトを使用するか、タイムアウトがサポートされていない場合はなしを使用します。 |
修飾子と型 | メソッドと説明 |
---|---|
int | getIsolationLevel() 分離レベルを返します。 |
java.lang.String | getName() このトランザクションの名前を返します。 |
int | getPropagationBehavior() 伝播動作を返します。 |
int | getTimeout() トランザクションタイムアウトを返します。 |
boolean | isReadOnly() 読み取り専用トランザクションとして最適化するかどうかを返します。 |
static final int PROPAGATION_REQUIRED
これは通常、トランザクション定義のデフォルト設定であり、通常はトランザクション同期スコープを定義します。
static final int PROPAGATION_SUPPORTS
注意 : トランザクション同期を使用するトランザクションマネージャーの場合、PROPAGATION_SUPPORTS
は、同期が適用されるトランザクションスコープを定義するため、トランザクションがまったくない場合とは少し異なります。結果として、同じリソース(JDBC Connection
、Hibernate Session
など)が指定されたスコープ全体で共有されます。正確な動作は、トランザクションマネージャーの実際の同期構成によって異なることに注意してください!
一般的に、PROPAGATION_SUPPORTS
は注意して使用してください! 特に、PROPAGATION_SUPPORTS
スコープ内で PROPAGATION_REQUIRED
または PROPAGATION_REQUIRES_NEW
に依存しないでください(実行時に同期の競合が発生する可能性があります)。そのようなネストが避けられない場合は、トランザクションマネージャーを適切に構成してください(通常は「実際のトランザクションの同期」に切り替えます)。
static final int PROPAGATION_MANDATORY
PROPAGATION_MANDATORY
スコープ内のトランザクション同期は、常に周囲のトランザクションによって駆動されることに注意してください。
static final int PROPAGATION_REQUIRES_NEW
注意 : 実際のトランザクションの停止は、すべてのトランザクションマネージャーですぐに使用できるわけではありません。これは特に JtaTransactionManager
に当てはまります。JtaTransactionManager
では、javax.transaction.TransactionManager
を使用可能にする必要があります(標準 Java EE ではサーバー固有です)。
PROPAGATION_REQUIRES_NEW
スコープは、常に独自のトランザクション同期を定義します。既存の同期は適切に一時停止および再開されます。
static final int PROPAGATION_NOT_SUPPORTED
注意 : 実際のトランザクションの停止は、すべてのトランザクションマネージャーですぐに使用できるわけではありません。これは特に JtaTransactionManager
に当てはまります。JtaTransactionManager
では、javax.transaction.TransactionManager
を使用可能にする必要があります(標準 Java EE ではサーバー固有です)。
トランザクション同期は PROPAGATION_NOT_SUPPORTED
スコープ内では使用できないことに注意してください。既存の同期は一時停止され、適切に再開されます。
static final int PROPAGATION_NEVER
トランザクション同期は PROPAGATION_NEVER
スコープ内では使用できないことに注意してください。
static final int PROPAGATION_NESTED
PROPAGATION_REQUIRED
のように動作します。EJB には類似の機能はありません。 注意 : ネストされたトランザクションの実際の作成は、特定のトランザクションマネージャーでのみ機能します。箱から出しただけで、これは JDBC 3.0 ドライバーで作業するときに JDBC DataSourceTransactionManager
にのみ適用されます。一部の JTA プロバイダーは、ネストされたトランザクションもサポートする場合があります。
static final int ISOLATION_DEFAULT
Connection
, 定数フィールド値 static final int ISOLATION_READ_UNCOMMITTED
このレベルでは、あるトランザクションで変更された行を、その行の変更がコミットされる前に別のトランザクションで読み取ることができます(「ダーティリード」)。変更のいずれかがロールバックされると、2 番目のトランザクションが無効な行を取得します。
Connection.TRANSACTION_READ_UNCOMMITTED
, 定数フィールド値 static final int ISOLATION_READ_COMMITTED
このレベルは、トランザクションがコミットされていない変更を含む行を読み取ることを禁止するだけです。
Connection.TRANSACTION_READ_COMMITTED
, 定数フィールド値 static final int ISOLATION_REPEATABLE_READ
このレベルは、トランザクションがコミットされていない変更を含む行を読み取ることを禁止します。また、1 つのトランザクションが行を読み取り、2 番目のトランザクションが行を変更し、最初のトランザクションが行を再度読み取り、2 番目に異なる値を取得する状況も禁止します。時間(「反復不能読み取り」)。
Connection.TRANSACTION_REPEATABLE_READ
, 定数フィールド値 static final int ISOLATION_SERIALIZABLE
このレベルには、ISOLATION_REPEATABLE_READ
の禁止事項が含まれ、1 つのトランザクションが WHERE
条件を満たすすべての行を読み取り、2 番目のトランザクションがその WHERE
条件を満たす行を挿入し、最初のトランザクションが同じ条件を再読み取りして、2 回目の読み取りでの追加の「ファントム」行。
Connection.TRANSACTION_SERIALIZABLE
, 定数フィールド値 static final int TIMEOUT_DEFAULT
int getPropagationBehavior()
this interface
で定義された PROPAGATION_XXX
定数のいずれかを返さなければなりません。
int getIsolationLevel()
this interface
で定義されている ISOLATION_XXX
定数の 1 つを返す必要があります。これらの定数は、Connection
の同じ定数の値と一致するように設計されています。
新しく開始されたトランザクションにのみ適用されるため、PROPAGATION_REQUIRED
または PROPAGATION_REQUIRES_NEW
で使用するために特別に設計されています。異なる分離レベルの既存のトランザクションに参加するときに分離レベルの宣言を拒否したい場合は、トランザクションマネージャーで "validateExistingTransactions" フラグを "true" に切り替えることを検討してください。
ISOLATION_DEFAULT
以外のレベルが指定された場合、カスタム分離レベルをサポートしないトランザクションマネージャーは例外をスローすることに注意してください。
int getTimeout()
秒数または TIMEOUT_DEFAULT
を返す必要があります。
新たに開始されたトランザクションにのみ適用されるため、PROPAGATION_REQUIRED
または PROPAGATION_REQUIRES_NEW
での使用専用に設計されています。
タイムアウトをサポートしないトランザクションマネージャーは、TIMEOUT_DEFAULT
以外のタイムアウトが指定された場合に例外をスローすることに注意してください。
boolean isReadOnly()
読み取り専用フラグは、実際のリソーストランザクション(PROPAGATION_REQUIRED
/PROPAGATION_REQUIRES_NEW
)によって裏付けられているか、リソースレベルで非トランザクションで動作している(PROPAGATION_SUPPORTS
)かに関わらず、すべてのトランザクションコンテキストに適用されます。後者の場合、フラグは Hibernate Session
などのアプリケーション内の管理対象リソースにのみ適用されます。
これは、実際のトランザクションサブシステムのヒントとしてのみ機能します。 必ずしも書き込みアクセスの試行が失敗するわけではありません。読み取り専用ヒントを解釈できないトランザクションマネージャーは、読み取り専用トランザクションを要求されたときに例外をスローしません。
true
TransactionSynchronization.beforeCommit(boolean)
, TransactionSynchronizationManager.isCurrentTransactionReadOnly()
@Nullable java.lang.String getName()
null
にすることができます。これは、該当する場合、トランザクションモニターに表示されるトランザクション名として使用されます(たとえば、WebLogic's)。
Spring の宣言的トランザクションの場合、公開される名前は fully-qualified class name + "." + method name
(デフォルト)です。
TransactionAspectSupport
, TransactionSynchronizationManager.getCurrentTransactionName()