public class JtaTransactionManager extends AbstractPlatformTransactionManager implements TransactionFactory, InitializingBean, SerializableSE
PlatformTransactionManager
実装。これは通常、Java EE サーバーのトランザクションコーディネーターに委譲するために使用されますが、アプリケーション内に埋め込まれたローカル JTA プロバイダーで構成することもできます。このトランザクションマネージャーは、分散トランザクション、つまり複数のリソースにまたがるトランザクションの処理、および一般的にアプリケーションサーバーリソース(JNDI で利用可能な JDBC DataSources など)の制御に適しています。単一の JDBC DataSource の場合、DataSourceTransactionManager で十分です。たとえば、Hibernate(トランザクションキャッシュを含む)で単一のリソースにアクセスするには、HibernateTransactionManager が適切です。
典型的な JTA トランザクション(REQUIRED, SUPPORTS, MANDATORY, NEVER)では、プレーンな JtaTransactionManager 定義で十分であり、すべての Java EE サーバー間で移植できます。これは、JTA UserTransaction の機能に対応し、Java EE は標準の JNDI 名("java:comp/UserTransaction")を指定します。この種の JTA を使用するために、サーバー固有の TransactionManager ルックアップを構成する必要はありません。
トランザクションの中断(REQUIRES_NEW、NOT_SUPPORTED)は、JTA TransactionManager が登録されている場合にのみ利用できます。"autodetectTransactionManager" フラグが "true" (デフォルト)に設定されている場合、一般的な TransactionManager の場所は JtaTransactionManager によって自動検出されます。
メモ: JTA TransactionManager インターフェースのサポートは、Java EE では必要ありません。ほとんどすべての Java EE サーバーはそれを公開しますが、EE への拡張として公開します。TransactionManager インターフェースが JTA の一部であるにもかかわらず、互換性に課題がある可能性があります。結果として、Spring はベンダー固有のさまざまな PlatformTransactionManagers を提供します。これらは適切な場合に使用することをお勧めします: WebLogicJtaTransactionManager
および WebSphereUowTransactionManager
。他のすべての Java EE サーバーでは、標準の JtaTransactionManager で十分です。
この純粋な JtaTransactionManager クラスは、タイムアウトをサポートしますが、トランザクションごとの分離レベルはサポートしません。カスタムサブクラスは、この機能を提供するために、特定の JTA 拡張機能の doJtaBegin(org.springframework.transaction.jta.JtaTransactionObject, org.springframework.transaction.TransactionDefinition)
メソッドをオーバーライドする場合があります。Spring には、WebLogic サーバーに対応する WebLogicJtaTransactionManager
クラスが含まれています。特定の Java EE トランザクションコーディネーター用のこのようなアダプターは、監視のためにトランザクション名を公開する場合もあります。標準の JTA では、トランザクション名は単に無視されます。
Spring の tx:jta-transaction-manager
構成要素を使用して、適切な JTA プラットフォームトランザクションマネージャーを自動的に選択することを検討してください(WebLogic および WebSphere を自動検出)。
JTA 1.1 は、標準の JTA UserTransaction ハンドルに加えて、パブリック Java EE 5 API として TransactionSynchronizationRegistry 機能を追加します。Spring 2.5 の時点で、この JtaTransactionManager は TransactionSynchronizationRegistry を自動検出し、既存の JTA トランザクション(EJB CMT によって制御されるなど)に参加するときに Spring 管理の同期を登録するために使用します。使用可能な TransactionSynchronizationRegistry がない場合、そのような同期は(EE 以外の)JTA TransactionManager ハンドルを介して登録されます。
このクラスは直列化可能です。ただし、アクティブな同期は直列化に耐えられません。
UserTransaction
SE, TransactionManager
SE, TransactionSynchronizationRegistry
SE, setUserTransactionName(java.lang.String)
, setUserTransaction(javax.transaction.UserTransaction)
, setTransactionManagerName(java.lang.String)
, setTransactionManager(javax.transaction.TransactionManager)
, WebLogicJtaTransactionManager
, 直列化された形式 AbstractPlatformTransactionManager.SuspendedResourcesHolder
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME JTA TransactionSynchronizationRegistry の標準 Java EE 5 JNDI ロケーション。 |
static StringSE | DEFAULT_USER_TRANSACTION_NAME JTA UserTransaction のデフォルトの JNDI ロケーション。 |
static StringSE[] | FALLBACK_TRANSACTION_MANAGER_NAMES JTA TransactionManager のフォールバック JNDI ロケーション。 |
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
コンストラクターと説明 |
---|
JtaTransactionManager() Bean として構成する新しい JtaTransactionManager インスタンスを作成します。 |
JtaTransactionManager(TransactionManagerSE transactionManager) 新しい JtaTransactionManager インスタンスを作成します。 |
JtaTransactionManager(UserTransactionSE userTransaction) 新しい JtaTransactionManager インスタンスを作成します。 |
JtaTransactionManager(UserTransactionSE userTransaction, TransactionManagerSE transactionManager) 新しい JtaTransactionManager インスタンスを作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() UserTransaction および TransactionManager ハンドルを初期化します。 |
protected void | applyIsolationLevel(JtaTransactionObject txObject, int isolationLevel) 指定されたトランザクション分離レベルを適用します。 |
protected void | applyTimeout(JtaTransactionObject txObject, int timeout) 指定されたトランザクションタイムアウトを適用します。 |
protected UserTransactionSE | buildUserTransaction(TransactionManagerSE transactionManager) 指定された TransactionManager に基づいて UserTransaction ハンドルを作成します。 |
protected void | checkUserTransactionAndTransactionManager() 標準の JTA 要件を想定して、UserTransaction ハンドルと TransactionManager ハンドルを確認します。 |
TransactionSE | createTransaction(StringSE name, int timeout) 指定された名前とタイムアウトに基づいてアクティブな Transaction オブジェクトを作成します。 |
protected void | doBegin(ObjectSE transaction, TransactionDefinition definition) 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。 |
protected void | doCleanupAfterCompletion(ObjectSE transaction) トランザクション完了後にリソースをクリーンアップします。 |
protected void | doCommit(DefaultTransactionStatus status) 指定されたトランザクションの実際のコミットを実行します。 |
protected JtaTransactionObject | doGetJtaTransaction(UserTransactionSE ut) 指定された現在の UserTransaction の JTA トランザクションオブジェクトを取得します。 |
protected ObjectSE | doGetTransaction() この実装は、JTA UserTransaction の JtaTransactionObject インスタンスを返します。 |
protected void | doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition) JTA UserTransaction または TransactionManager で JTA 開始を実行します。 |
protected void | doJtaResume(JtaTransactionObject txObject, ObjectSE suspendedTransaction) JTA TransactionManager で JTA 履歴書を実行します。 |
protected ObjectSE | doJtaSuspend(JtaTransactionObject txObject) JTA TransactionManager で JTA サスペンドを実行します。 |
protected void | doRegisterAfterCompletionWithJtaTransaction(JtaTransactionObject txObject, ListSE<TransactionSynchronization> synchronizations) 指定された Spring TransactionSynchronizations で afterCompletion を呼び出すために、JTA TransactionManager で JTA 同期を登録します。 |
protected void | doResume(ObjectSE transaction, ObjectSE suspendedResources) 現在のトランザクションのリソースを再開します。 |
protected void | doRollback(DefaultTransactionStatus status) 指定されたトランザクションの実際のロールバックを実行します。 |
protected void | doSetRollbackOnly(DefaultTransactionStatus status) 指定されたトランザクションをロールバックのみに設定します。 |
protected ObjectSE | doSuspend(ObjectSE transaction) 現在のトランザクションのリソースを一時停止します。 |
protected TransactionManagerSE | findTransactionManager(UserTransactionSE ut) 自動検出により JTA TransactionManager を見つけます。UserTransaction オブジェクトが TransactionManager を実装しているかどうかを確認し、フォールバック JNDI の場所を確認します。 |
protected TransactionSynchronizationRegistrySE | findTransactionSynchronizationRegistry(UserTransactionSE ut, TransactionManagerSE tm) 自動検出を通じて JTA 1.1 TransactionSynchronizationRegistry を見つけます。UserTransaction オブジェクトまたは TransactionManager オブジェクトがそれを実装しているかどうかを確認し、Java EE 5 の標準 JNDI ロケーションを確認します。 |
protected UserTransactionSE | findUserTransaction() デフォルトの JNDI ルックアップ "java:comp/UserTransaction" で JTA UserTransaction を見つけます。 |
PropertiesSE | getJndiEnvironment() JNDI ルックアップに使用する JNDI 環境を返します。 |
JndiTemplate | getJndiTemplate() JNDI ルックアップに使用される JndiTemplate を返します。 |
TransactionManagerSE | getTransactionManager() このトランザクションマネージャーが使用する JTA TransactionManager があれば、それを返します。 |
TransactionSynchronizationRegistrySE | getTransactionSynchronizationRegistry() このトランザクションマネージャーが使用する JTA 1.1 TransactionSynchronizationRegistry があれば、それを返します。 |
UserTransactionSE | getUserTransaction() このトランザクションマネージャーが使用する JTA UserTransaction を返します。 |
protected void | initTransactionSynchronizationRegistry() 可能な場合は、JTA 1.1 TransactionSynchronizationRegistry を初期化します。 |
protected void | initUserTransactionAndTransactionManager() UserTransaction および TransactionManager ハンドルを初期化します。 |
protected boolean | isExistingTransaction(ObjectSE transaction) 指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。 |
protected TransactionManagerSE | lookupTransactionManager(StringSE transactionManagerName) 構成された名前を使用して、JNDI で JTA TransactionManager を検索します。 |
protected TransactionSynchronizationRegistrySE | lookupTransactionSynchronizationRegistry(StringSE registryName) 構成された名前を使用して、JNDI で JTA 1.1 TransactionSynchronizationRegistry を検索します。 |
protected UserTransactionSE | lookupUserTransaction(StringSE userTransactionName) 構成された名前を使用して、JNDI で JTA UserTransaction を検索します。 |
protected void | registerAfterCompletionWithExistingTransaction(ObjectSE transaction, ListSE<TransactionSynchronization> synchronizations) 指定されたトランザクション同期のリストを既存のトランザクションに登録します。 |
protected TransactionManagerSE | retrieveTransactionManager() サブクラスがベンダー固有の方法で JTA TransactionManager を取得できるようにします。 |
protected TransactionSynchronizationRegistrySE | retrieveTransactionSynchronizationRegistry() サブクラスがベンダー固有の方法で JTA 1.1 TransactionSynchronizationRegistry を取得できるようにします。 |
protected UserTransactionSE | retrieveUserTransaction() サブクラスがベンダー固有の方法で JTA UserTransaction を取得できるようにします。 |
void | setAllowCustomIsolationLevels(boolean allowCustomIsolationLevels) カスタム分離レベルの指定を許可するかどうかを設定します。 |
void | setAutodetectTransactionManager(boolean autodetectTransactionManager) JTA TransactionManager インターフェースも実装する JTA UserTransaction オブジェクトを自動検出するかどうかを設定します(つまり |
void | setAutodetectTransactionSynchronizationRegistry(boolean autodetectTransactionSynchronizationRegistry) UserTransaction も JNDI から取得されている場合、デフォルトの JDNI ロケーション("java:comp/TransactionSynchronizationRegistry")で JTA 1.1 TransactionSynchronizationRegistry オブジェクトを自動検出するかどうか、および JTA UserTransaction/TransactionManager オブジェクトが JTA TransactionSynchronizationRegistry を実装しているかどうかのチェックにフォールバックするかどうかを設定します。インターフェースも。 |
void | setAutodetectUserTransaction(boolean autodetectUserTransaction) Java EE で指定されているデフォルトの JNDI ロケーション "java:comp/UserTransaction" で JTA UserTransaction を自動検出するかどうかを設定します。 |
void | setCacheUserTransaction(boolean cacheUserTransaction) JNDI からフェッチされた JTA UserTransaction オブジェクトをキャッシュするかどうかを設定します。 |
void | setJndiEnvironment(PropertiesSE jndiEnvironment) JNDI ルックアップに使用する JNDI 環境を設定します。 |
void | setJndiTemplate(JndiTemplate jndiTemplate) JNDI ルックアップに使用する JndiTemplate を設定します。 |
void | setTransactionManager(TransactionManagerSE transactionManager) 直接参照として使用するように JTA TransactionManager を設定します。 |
void | setTransactionManagerName(StringSE transactionManagerName) JTA TransactionManager の JNDI 名を設定します。 |
void | setTransactionSynchronizationRegistry(TransactionSynchronizationRegistrySE transactionSynchronizationRegistry) JTA 1.1 TransactionSynchronizationRegistry を直接参照として使用するように設定します。 |
void | setTransactionSynchronizationRegistryName(StringSE transactionSynchronizationRegistryName) JTA 1.1 TransactionSynchronizationRegistry の JNDI 名を設定します。 |
void | setUserTransaction(UserTransactionSE userTransaction) 直接参照として使用するように JTA UserTransaction を設定します。 |
void | setUserTransactionName(StringSE userTransactionName) JTA UserTransaction の JNDI 名を設定します。 |
protected boolean | shouldCommitOnGlobalRollbackOnly() この実装は "true" を返します: JTA コミットは、グローバルレベルでロールバックのみとマークされたトランザクションを適切に処理します。 |
boolean | supportsResourceAdapterManagedTransactions() 基になるトランザクションマネージャーがリソースアダプター(つまり |
protected boolean | useSavepointForNestedTransaction() この実装は false を返し、既存のトランザクションにもかかわらず、doBegin をさらに呼び出します。 |
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, newTransactionStatus, prepareForCommit, prepareSynchronization, prepareTransactionStatus, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, suspend, triggerBeforeCommit, triggerBeforeCompletion
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE DEFAULT_USER_TRANSACTION_NAME
public static final StringSE[] FALLBACK_TRANSACTION_MANAGER_NAMES
public JtaTransactionManager()
afterPropertiesSet
を呼び出して構成をアクティブにします。public JtaTransactionManager(UserTransactionSE userTransaction)
userTransaction
- 直接参照として使用する JTA UserTransactionpublic JtaTransactionManager(UserTransactionSE userTransaction, TransactionManagerSE transactionManager)
userTransaction
- 直接参照として使用する JTA UserTransactiontransactionManager
- 直接参照として使用する JTA TransactionManagerpublic JtaTransactionManager(TransactionManagerSE transactionManager)
transactionManager
- 直接参照として使用する JTA TransactionManagerpublic void setJndiTemplate(JndiTemplate jndiTemplate)
public JndiTemplate getJndiTemplate()
public void setJndiEnvironment(@Nullable PropertiesSE jndiEnvironment)
@Nullable public PropertiesSE getJndiEnvironment()
public void setUserTransaction(@Nullable UserTransactionSE userTransaction)
通常、ローカルの JTA 設定にのみ使用されます。Java EE 環境では、UserTransaction は常に JNDI からフェッチされます。
@Nullable public UserTransactionSE getUserTransaction()
public void setUserTransactionName(StringSE userTransactionName)
明示的に指定されていない場合、UserTransaction は Java EE のデフォルトの場所 "java:comp/UserTransaction" で自動検出されることに注意してください。
public void setAutodetectUserTransaction(boolean autodetectUserTransaction)
デフォルトは "true" で、明示的に指定されていない限り、UserTransaction を自動検出します。デフォルトの UserTransaction が使用可能であるにもかかわらず、JtaTransactionManager が TransactionManager に対してのみ動作できるようにするには、このフラグをオフにします。
public void setCacheUserTransaction(boolean cacheUserTransaction)
デフォルトは「true」: UserTransaction ルックアップは起動時にのみ発生し、すべてのスレッドのすべてのトランザクションに同じ UserTransaction ハンドルを再利用します。これは、共有 UserTransaction オブジェクトを提供するすべてのアプリケーションサーバーにとって最も効率的な選択です(一般的なケース)。
このフラグをオフにすると、トランザクションごとに UserTransaction の新しいルックアップが実行されます。これは、すべてのトランザクションに対して新しい UserTransaction を返し、状態を現在のスレッドではなく UserTransaction オブジェクト自体に関連付けたままにするアプリケーションサーバーでのみ必要です。
public void setTransactionManager(@Nullable TransactionManagerSE transactionManager)
UserTransaction インターフェースではサポートされていないため、トランザクションの中断と再開には TransactionManager が必要です。
JTA UserTransaction オブジェクトが JTA TransactionManager インターフェースも実装している場合、TransactionManager は自動検出され、既知のさまざまなフォールバック JNDI ロケーションで自動検出されることに注意してください。
@Nullable public TransactionManagerSE getTransactionManager()
public void setTransactionManagerName(StringSE transactionManagerName)
UserTransaction インターフェースではサポートされていないため、トランザクションの中断と再開には TransactionManager が必要です。
JTA UserTransaction オブジェクトが JTA TransactionManager インターフェースも実装している場合、TransactionManager は自動検出され、既知のさまざまなフォールバック JNDI ロケーションで自動検出されることに注意してください。
public void setAutodetectTransactionManager(boolean autodetectTransactionManager)
デフォルトは "true" で、明示的に指定されていない限り、TransactionManager を自動検出します。たとえば、サスペンド / レジュームに既知の課題があり、REQUIRES_NEW または NOT_SUPPORTED を使用しようとするとすぐに失敗する場合など、オフにして使用可能な TransactionManager を意図的に無視できます。
public void setTransactionSynchronizationRegistry(@Nullable TransactionSynchronizationRegistrySE transactionSynchronizationRegistry)
TransactionSynchronizationRegistry は、JTA TransactionManager API の通常の登録メソッドの代替として、トランザクション同期の介在登録を可能にします。また、JTA TransactionManager 自体とは対照的に、Java EE 5 プラットフォームの公式部分です。
TransactionSynchronizationRegistry は JNDI で自動検出され、UserTransaction/TransactionManager オブジェクトからも自動検出されることに注意してください。
@Nullable public TransactionSynchronizationRegistrySE getTransactionSynchronizationRegistry()
public void setTransactionSynchronizationRegistryName(StringSE transactionSynchronizationRegistryName)
明示的に指定されていない場合、TransactionSynchronizationRegistry は Java EE 5 のデフォルトの場所 "java:comp/TransactionSynchronizationRegistry" で自動検出されることに注意してください。
public void setAutodetectTransactionSynchronizationRegistry(boolean autodetectTransactionSynchronizationRegistry)
デフォルトは "true" で、明示的に指定されていない限り、TransactionSynchronizationRegistry を自動検出します。オフにすると、同期登録を通常の JTA TransactionManager API に委譲できます。
public void setAllowCustomIsolationLevels(boolean allowCustomIsolationLevels)
デフォルトは "false" で、トランザクションにデフォルト以外の分離レベルが指定されている場合は、例外がスローされます。影響を受けるリソースアダプターがスレッドにバインドされたトランザクションコンテキストをチェックし、指定された分離レベルを(IsolationLevelDataSourceAdapter などを介して)個別に適用する場合は、このフラグをオンにします。
public void afterPropertiesSet() throws TransactionSystemException
InitializingBean
の afterPropertiesSet
TransactionSystemException
initUserTransactionAndTransactionManager()
protected void initUserTransactionAndTransactionManager() throws TransactionSystemException
TransactionSystemException
- 初期化に失敗した場合 protected void checkUserTransactionAndTransactionManager() throws IllegalStateExceptionSE
IllegalStateExceptionSE
- 十分なハンドルがない場合 protected void initTransactionSynchronizationRegistry()
UserTransaction および TransactionManager ハンドルをチェックする可能性があるため、initUserTransactionAndTransactionManager()
の後に呼び出されます。
TransactionSystemException
- 初期化に失敗した場合 protected UserTransactionSE buildUserTransaction(TransactionManagerSE transactionManager)
transactionManager
- TransactionManagerprotected UserTransactionSE lookupUserTransaction(StringSE userTransactionName) throws TransactionSystemException
直接 UserTransaction 参照が設定されていない場合、afterPropertiesSet
によって呼び出されます。サブクラスでオーバーライドして、別の UserTransaction オブジェクトを提供できます。
userTransactionName
- UserTransaction の JNDI 名 TransactionSystemException
- JNDI ルックアップが失敗した場合 setJndiTemplate(org.springframework.jndi.JndiTemplate)
, setUserTransactionName(java.lang.String)
protected TransactionManagerSE lookupTransactionManager(StringSE transactionManagerName) throws TransactionSystemException
直接 TransactionManager 参照が設定されていない場合、afterPropertiesSet
によって呼び出されます。サブクラスでオーバーライドして、別の TransactionManager オブジェクトを提供できます。
transactionManagerName
- TransactionManager の JNDI 名 TransactionSystemException
- JNDI ルックアップが失敗した場合 setJndiTemplate(org.springframework.jndi.JndiTemplate)
, setTransactionManagerName(java.lang.String)
protected TransactionSynchronizationRegistrySE lookupTransactionSynchronizationRegistry(StringSE registryName) throws TransactionSystemException
サブクラスでオーバーライドして、別の TransactionManager オブジェクトを提供できます。
registryName
- TransactionSynchronizationRegistry の JNDI 名 TransactionSystemException
- JNDI ルックアップが失敗した場合 setJndiTemplate(org.springframework.jndi.JndiTemplate)
, setTransactionSynchronizationRegistryName(java.lang.String)
@Nullable protected UserTransactionSE retrieveUserTransaction() throws TransactionSystemException
デフォルトの実装は、単に null
を返します。
null
TransactionSystemException
- エラーの場合 setUserTransaction(javax.transaction.UserTransaction)
, setUserTransactionName(java.lang.String)
@Nullable protected TransactionManagerSE retrieveTransactionManager() throws TransactionSystemException
デフォルトの実装は、単に null
を返します。
null
TransactionSystemException
- エラーの場合 setTransactionManager(javax.transaction.TransactionManager)
, setTransactionManagerName(java.lang.String)
@Nullable protected TransactionSynchronizationRegistrySE retrieveTransactionSynchronizationRegistry() throws TransactionSystemException
デフォルトの実装は、単に null
を返します。
null
TransactionSystemException
- エラーの場合 @Nullable protected UserTransactionSE findUserTransaction()
null
DEFAULT_USER_TRANSACTION_NAME
@Nullable protected TransactionManagerSE findTransactionManager(@Nullable UserTransactionSE ut)
ut
- JTA UserTransaction オブジェクト null
FALLBACK_TRANSACTION_MANAGER_NAMES
@Nullable protected TransactionSynchronizationRegistrySE findTransactionSynchronizationRegistry(@Nullable UserTransactionSE ut, @Nullable TransactionManagerSE tm) throws TransactionSystemException
デフォルトの実装は、単に null
を返します。
ut
- JTA UserTransaction オブジェクト tm
- JTA TransactionManager オブジェクト null
TransactionSystemException
- エラーの場合 protected ObjectSE doGetTransaction()
UserTransaction オブジェクトは、現在のトランザクション用に新しく検索されるか、起動時に検索されたキャッシュされたものが使用されます。後者がデフォルトです。ほとんどのアプリケーションサーバーは、キャッシュ可能な共有シングルトン UserTransaction を使用します。"cacheUserTransaction" フラグをオフにして、すべてのトランザクションに対して最新のルックアップを適用します。
AbstractPlatformTransactionManager
の doGetTransaction
setCacheUserTransaction(boolean)
protected JtaTransactionObject doGetJtaTransaction(UserTransactionSE ut)
サブクラスはこれをオーバーライドして JtaTransactionObject サブクラスを提供できます。たとえば、必要な追加の JTA ハンドルを保持できます。
ut
- 現在のトランザクションに使用する UserTransaction ハンドル protected boolean isExistingTransaction(ObjectSE transaction)
AbstractPlatformTransactionManager
結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。
デフォルト実装は false
を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
AbstractPlatformTransactionManager
の isExistingTransaction
transaction
- doGetTransaction によって返されるトランザクションオブジェクト AbstractPlatformTransactionManager.doGetTransaction()
protected boolean useSavepointForNestedTransaction()
JTA 実装は、さらに UserTransaction.begin()
呼び出しを介してネストされたトランザクションをサポートする場合がありますが、セーブポイントをサポートすることはありません。
protected void doBegin(ObjectSE transaction, TransactionDefinition definition)
AbstractPlatformTransactionManager
このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。
特別なシナリオは、セーブポイントのないネストされたトランザクションです: useSavepointForNestedTransaction()
が "false" を返す場合、このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。
AbstractPlatformTransactionManager
の doBegin
transaction
- doGetTransaction
によって返されるトランザクションオブジェクト definition
- 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition) throws NotSupportedExceptionSE, SystemExceptionSE
この実装では、標準の JTA 機能のみがサポートされます。つまり、トランザクションごとの分離レベルとトランザクション名はサポートされません。特定の JTA 実装のために、サブクラスでオーバーライドできます。
UserTransaction の begin
メソッドを呼び出す前に、applyIsolationLevel
および applyTimeout
を呼び出します。
txObject
- UserTransaction を含む JtaTransactionObjectdefinition
- TransactionDefinition インスタンス。伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述します NotSupportedExceptionSE
- JTA メソッドによってスローされた場合 SystemExceptionSE
- JTA メソッドによってスローされた場合 getUserTransaction()
, getTransactionManager()
, applyIsolationLevel(org.springframework.transaction.jta.JtaTransactionObject, int)
, applyTimeout(org.springframework.transaction.jta.JtaTransactionObject, int)
, JtaTransactionObject.getUserTransaction()
, UserTransaction.setTransactionTimeout(int)
SE, UserTransaction.begin()
SEprotected void applyIsolationLevel(JtaTransactionObject txObject, int isolationLevel) throws InvalidIsolationLevelException, SystemExceptionSE
完全な doJtaBegin(org.springframework.transaction.jta.JtaTransactionObject, org.springframework.transaction.TransactionDefinition)
メソッドをオーバーライドする代わりに、特定の JTA 実装のサブクラスでオーバーライドされます。
txObject
- UserTransaction を含む JtaTransactionObjectisolationLevel
- トランザクション定義から取得した分離レベル InvalidIsolationLevelException
- 指定された分離レベルを適用できない場合 SystemExceptionSE
- JTA 実装によってスローされた場合 doJtaBegin(org.springframework.transaction.jta.JtaTransactionObject, org.springframework.transaction.TransactionDefinition)
, JtaTransactionObject.getUserTransaction()
, getTransactionManager()
protected void applyTimeout(JtaTransactionObject txObject, int timeout) throws SystemExceptionSE
UserTransaction.setTransactionTimeout
を呼び出します。txObject
- UserTransaction を含む JtaTransactionObjecttimeout
- トランザクション定義から取得したタイムアウト値 SystemExceptionSE
- JTA 実装によってスローされた場合 doJtaBegin(org.springframework.transaction.jta.JtaTransactionObject, org.springframework.transaction.TransactionDefinition)
, JtaTransactionObject.getUserTransaction()
, UserTransaction.setTransactionTimeout(int)
SEprotected ObjectSE doSuspend(ObjectSE transaction)
AbstractPlatformTransactionManager
トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
AbstractPlatformTransactionManager
の doSuspend
transaction
- doGetTransaction
によって返されるトランザクションオブジェクト AbstractPlatformTransactionManager.doResume(java.lang.Object, java.lang.Object)
protected ObjectSE doJtaSuspend(JtaTransactionObject txObject) throws SystemExceptionSE
特定の JTA 実装のために、サブクラスでオーバーライドできます。
txObject
- UserTransaction を含む JtaTransactionObjectSystemExceptionSE
- JTA メソッドによってスローされた場合 getTransactionManager()
, TransactionManager.suspend()
SEprotected void doResume(@Nullable ObjectSE transaction, ObjectSE suspendedResources)
AbstractPlatformTransactionManager
トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
AbstractPlatformTransactionManager
の doResume
transaction
- doGetTransaction
によって返されるトランザクションオブジェクト suspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト AbstractPlatformTransactionManager.doSuspend(java.lang.Object)
protected void doJtaResume(@Nullable JtaTransactionObject txObject, ObjectSE suspendedTransaction) throws InvalidTransactionExceptionSE, SystemExceptionSE
特定の JTA 実装のために、サブクラスでオーバーライドできます。
txObject
- UserTransaction を含む JtaTransactionObjectsuspendedTransaction
- 中断された JTA トランザクションオブジェクト InvalidTransactionExceptionSE
- JTA メソッドによってスローされた場合 SystemExceptionSE
- JTA メソッドによってスローされた場合 getTransactionManager()
, TransactionManager.resume(javax.transaction.Transaction)
SEprotected boolean shouldCommitOnGlobalRollbackOnly()
AbstractPlatformTransactionManager
の shouldCommitOnGlobalRollbackOnly
AbstractPlatformTransactionManager.doCommit(org.springframework.transaction.support.DefaultTransactionStatus)
, DefaultTransactionStatus.isGlobalRollbackOnly()
, AbstractTransactionStatus.isLocalRollbackOnly()
, TransactionExecution.setRollbackOnly()
, UnexpectedRollbackException
, UserTransaction.commit()
SE, RollbackException
SEprotected void doCommit(DefaultTransactionStatus status)
AbstractPlatformTransactionManager
実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
AbstractPlatformTransactionManager
の doCommit
status
- トランザクションのステータス表現 DefaultTransactionStatus.getTransaction()
protected void doRollback(DefaultTransactionStatus status)
AbstractPlatformTransactionManager
実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
AbstractPlatformTransactionManager
の doRollback
status
- トランザクションのステータス表現 DefaultTransactionStatus.getTransaction()
protected void doSetRollbackOnly(DefaultTransactionStatus status)
AbstractPlatformTransactionManager
既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
AbstractPlatformTransactionManager
の doSetRollbackOnly
status
- トランザクションのステータス表現 protected void registerAfterCompletionWithExistingTransaction(ObjectSE transaction, ListSE<TransactionSynchronization> synchronizations)
AbstractPlatformTransactionManager
Spring トランザクションマネージャーの制御、すべての Spring トランザクションの同期が終了し、トランザクションがまだ完了していないときに呼び出されます。これは、たとえば、既存の JTA または EJB CMT トランザクションに参加する場合です。
デフォルトの実装は、"STATUS_UNKNOWN" を渡して、すぐに afterCompletion
メソッドを呼び出すだけです。これは、外部トランザクションの実際の結果を判断する機会がない場合にできる最善の方法です。
AbstractPlatformTransactionManager
の registerAfterCompletionWithExistingTransaction
transaction
- doGetTransaction
によって返されるトランザクションオブジェクト synchronizations
- TransactionSynchronization オブジェクトのリスト AbstractPlatformTransactionManager.invokeAfterCompletion(java.util.List, int)
, TransactionSynchronization.afterCompletion(int)
, TransactionSynchronization.STATUS_UNKNOWN
protected void doRegisterAfterCompletionWithJtaTransaction(JtaTransactionObject txObject, ListSE<TransactionSynchronization> synchronizations) throws RollbackExceptionSE, SystemExceptionSE
afterCompletion
を呼び出すために、JTA TransactionManager で JTA 同期を登録します。デフォルトの実装では、JTA 1.1 TransactionSynchronizationRegistry(利用可能な場合)または JTA TransactionManager の現在のトランザクション(利用可能な場合)に同期を登録します。2 つとも使用できない場合、警告がログに記録されます。
特定の JTA 実装のために、サブクラスでオーバーライドできます。
txObject
- 現在のトランザクションオブジェクト synchronizations
- TransactionSynchronization オブジェクトのリスト RollbackExceptionSE
- JTA メソッドによってスローされた場合 SystemExceptionSE
- JTA メソッドによってスローされた場合 getTransactionManager()
, Transaction.registerSynchronization(javax.transaction.Synchronization)
SE, TransactionSynchronizationRegistry.registerInterposedSynchronization(javax.transaction.Synchronization)
SEprotected void doCleanupAfterCompletion(ObjectSE transaction)
AbstractPlatformTransactionManager
doCommit
および doRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。
例外をスローするべきではなく、エラーに対して警告を発行するだけです。
AbstractPlatformTransactionManager
の doCleanupAfterCompletion
transaction
- doGetTransaction
によって返されるトランザクションオブジェクト public TransactionSE createTransaction(@Nullable StringSE name, int timeout) throws NotSupportedExceptionSE, SystemExceptionSE
TransactionFactory
TransactionFactory
の createTransaction
name
- トランザクション名 (null
の場合があります)timeout
- トランザクションのタイムアウト (デフォルトのタイムアウトの場合は -1)null
)NotSupportedExceptionSE
- トランザクションマネージャーが指定された型のトランザクションをサポートしていない場合 SystemExceptionSE
- トランザクションマネージャーがトランザクションの作成に失敗した場合 public boolean supportsResourceAdapterManagedTransactions()
TransactionFactory
通常は false
です。無効な構成と有効な ResourceAdapter 管理のトランザクションを区別するために、AbstractMessageEndpointFactory
によってチェックされます。