クラス JpaTransactionManager
- 実装されたすべてのインターフェース:
SerializableSE
、Aware
、BeanFactoryAware
、InitializingBean
、ConfigurableTransactionManager
、PlatformTransactionManager
、ResourceTransactionManager
、TransactionManager
EntityManagerFactory
EE の PlatformTransactionManager
実装。指定されたファクトリから JPA EntityManager をスレッドにバインドし、潜在的にファクトリごとに 1 つのスレッドにバインドされた EntityManager を許可します。SharedEntityManagerCreator
および @PersistenceContext
は、スレッドにバインドされたエンティティマネージャーを認識し、そのようなトランザクションに自動的に参加します。このトランザクション管理メカニズムをサポートする JPA アクセスコードには、どちらかを使用する必要があります。 このトランザクションマネージャーは、トランザクションデータアクセスに単一の JPA EntityManagerFactory を使用するアプリケーションに適しています。JTA(通常は JtaTransactionManager
を使用)は、同じトランザクション内の複数のトランザクションリソースにアクセスするために必要です。JTA トランザクションに参加させるには、JPA プロバイダーを適宜構成する必要があることに注意してください。
このトランザクションマネージャーは、トランザクション内での直接 DataSource アクセスもサポートします(つまり、同じ DataSource で動作するプレーンな JDBC コード)。これにより、JPA にアクセスするサービスとプレーンな JDBC を使用するサービスを(JPA を意識せずに)混在させることができます! アプリケーションコードは、DataSourceTransactionManager
と同じ単純な接続ルックアップパターン(つまり、DataSourceUtils.getConnection(javax.sql.DataSource)
または TransactionAwareDataSourceProxy
を経由する)に固執する必要があります。これには、ベンダー固有の JpaDialect
を構成する必要があることに注意してください。
メモ: プレーンな JDBC コードに DataSource の接続を登録するには、このインスタンスが DataSource (setDataSource(javax.sql.DataSource)
) を認識する必要があります。指定された DataSource は、指定された EntityManagerFactory で使用されるものと明らかに一致する必要があります。このトランザクションマネージャーは、EntityManagerFactory の接続ファクトリとして使用される DataSource を自動検出するため、通常は "dataSource" プロパティを明示的に指定する必要はありません。
このトランザクションマネージャーは、JDBC セーブポイントを介してネストされたトランザクションをサポートします。ただし、ネストされたトランザクションは JDBC 接続にのみ適用され、JPA EntityManager とそのキャッシュされたエンティティオブジェクトおよび関連コンテキストには適用されないため、"nestedTransactionAllowed"
フラグのデフォルトは false
です。JPA トランザクションに参加する JDBC アクセスコードにネストされたトランザクションを使用する場合は、フラグを手動で true
に設定できます (JDBC ドライバーがセーブポイントをサポートしている場合)。JPA 自体はネストされたトランザクションをサポートしていないことに注意してください。JPA アクセスコードが意味的にネストされたトランザクションに参加することを期待しないでください。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller
- 関連事項:
setEntityManagerFactory(jakarta.persistence.EntityManagerFactory)
setDataSource(javax.sql.DataSource)
LocalEntityManagerFactoryBean
SharedEntityManagerBean
DataSourceUtils.getConnection(javax.sql.DataSource)
DataSourceUtils.releaseConnection(java.sql.Connection, javax.sql.DataSource)
JdbcTemplate
JdbcTransactionManager
JtaTransactionManager
- 直列化された形式
フィールドサマリー
クラス org.springframework.transaction.support.AbstractPlatformTransactionManager から継承されたフィールド
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
コンストラクターのサマリー
コンストラクター説明新しい JpaTransactionManager インスタンスを作成します。新しい JpaTransactionManager インスタンスを作成します。メソッドのサマリー
修飾子と型メソッド説明void
JPA ダイアレクトを積極的に初期化し、設定されていない場合は、指定された EntityManagerFactory のデフォルトのダイアレクトを作成します。protected void
closeEntityManagerAfterFailedBegin
(org.springframework.orm.jpa.JpaTransactionManager.JpaTransactionObject txObject) 現在のトランザクションの EntityManager を閉じます。protected EntityManagerEE
トランザクションに使用される JPA EntityManager を作成します。protected void
doBegin
(ObjectSE transaction, TransactionDefinition definition) 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。protected void
doCleanupAfterCompletion
(ObjectSE transaction) トランザクション完了後にリソースをクリーンアップします。protected void
doCommit
(DefaultTransactionStatus status) 指定されたトランザクションの実際のコミットを実行します。protected ObjectSE
現在のトランザクション状態のトランザクションオブジェクトを返します。protected void
現在のトランザクションのリソースを再開します。protected void
doRollback
(DefaultTransactionStatus status) 指定されたトランザクションの実際のロールバックを実行します。protected void
指定されたトランザクションをロールバックのみに設定します。protected ObjectSE
現在のトランザクションのリソースを一時停止します。このインスタンスがトランザクションを管理する JDBC DataSource を返します。このインスタンスがトランザクションを管理する EntityManagerFactory を返します。このトランザクションマネージャーに使用する JPA ダイアレクトを返します。特定のエントリを追加またはオーバーライドするオプションを使用して、JPA プロパティへのMap
アクセスを永続性プロバイダーに渡すことを許可します。存在する場合、トランザクションを管理する永続性ユニットの名前を返します。このトランザクションマネージャーが操作するリソースファクトリ (JDBC DataSource や JMS ConnectionFactory など) を返します。protected boolean
isExistingTransaction
(ObjectSE transaction) 指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。protected final EntityManagerFactoryEE
実際に使用するために EntityManagerFactory を取得します。void
setBeanFactory
(BeanFactory beanFactory) 明示的に設定されていない場合は、永続ユニット名で EntityManagerFactory を取得します。void
setDataSource
(DataSourceSE dataSource) このインスタンスがトランザクションを管理する JDBC DataSource を設定します。void
このインスタンスがトランザクションを管理する EntityManagerFactory を設定します。void
setEntityManagerInitializer
(ConsumerSE<EntityManagerEE> entityManagerInitializer) このJpaTransactionManager
によって管理される新しいトランザクション用に作成されたすべてのEntityManager
リソースをカスタマイズするためのコールバックを指定します。void
setJpaDialect
(JpaDialect jpaDialect) このトランザクションマネージャーに使用する JPA ダイアレクトを設定します。void
setJpaProperties
(PropertiesSE jpaProperties) EntityManagerFactory.createEntityManager(Map)
(存在する場合)に渡される JPA プロパティを指定します。void
setJpaPropertyMap
(MapSE<StringSE, ?> jpaProperties) JPA プロパティをマップとして指定し、EntityManagerFactory.createEntityManager(Map)
(存在する場合)に渡されます。void
setPersistenceUnitName
(StringSE persistenceUnitName) トランザクションを管理する永続性ユニットの名前を設定します。protected boolean
この実装は "true" を返します: JPA コミットは、グローバルレベルでロールバック専用としてマークされたトランザクションを適切に処理します。クラス org.springframework.transaction.support.AbstractPlatformTransactionManager から継承されたメソッド
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionExecutionListeners, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, prepareForCommit, prepareSynchronization, registerAfterCompletionWithExistingTransaction, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionExecutionListeners, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, suspend, triggerBeforeCommit, triggerBeforeCompletion, useSavepointForNestedTransaction
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.transaction.ConfigurableTransactionManager から継承されたメソッド
addListener
インターフェース org.springframework.transaction.PlatformTransactionManager から継承されたメソッド
commit, getTransaction, rollback
コンストラクターの詳細
JpaTransactionManager
public JpaTransactionManager()新しい JpaTransactionManager インスタンスを作成します。EntityManagerFactory を使用できるように設定する必要があります。
JpaTransactionManager
新しい JpaTransactionManager インスタンスを作成します。- パラメーター:
emf
- トランザクションを管理する EntityManagerFactory
メソッドの詳細
setEntityManagerFactory
このインスタンスがトランザクションを管理する EntityManagerFactory を設定します。または、ターゲット EntityManagerFactory の永続性ユニット名を指定します。デフォルトでは、包含 BeanFactory で型 EntityManagerFactory の単一の固有 Bean を見つけることにより、デフォルト EntityManagerFactory が取得されます。
getEntityManagerFactory
このインスタンスがトランザクションを管理する EntityManagerFactory を返します。obtainEntityManagerFactory
実際に使用するために EntityManagerFactory を取得します。- 戻り値:
- EntityManagerFactory (非
null
) - 例外:
IllegalStateExceptionSE
- EntityManagerFactory セットがない場合- 導入:
- 5.0
setPersistenceUnitName
トランザクションを管理する永続性ユニットの名前を設定します。これは、直接参照によって EntityManagerFactory を指定する代わりに、代わりに永続化ユニット名で解決します。EntityManagerFactory および永続性ユニット名が指定されていない場合、型 EntityManagerFactory の単一の固有 Bean を見つけることにより、デフォルト EntityManagerFactory が取得されます。
getPersistenceUnitName
存在する場合、トランザクションを管理する永続性ユニットの名前を返します。setJpaProperties
EntityManagerFactory.createEntityManager(Map)
(存在する場合)に渡される JPA プロパティを指定します。文字列 "value" (PropertiesEditor で解析)または XML Bean 定義の "props" 要素を入力できます。
setJpaPropertyMap
JPA プロパティをマップとして指定し、EntityManagerFactory.createEntityManager(Map)
(存在する場合)に渡されます。XML Bean 定義の「マップ」または "props" 要素を取り込むことができます。
getJpaPropertyMap
特定のエントリを追加またはオーバーライドするオプションを使用して、JPA プロパティへのMap
アクセスを永続性プロバイダーに渡すことを許可します。jpaPropertyMap[myKey]
などを介してエントリを直接指定する場合に便利です。setDataSource
このインスタンスがトランザクションを管理する JDBC DataSource を設定します。DataSource は、JPA EntityManagerFactory で使用されるものと一致する必要があります。たとえば、両方に同じ JNDI DataSource を指定できます。EntityManagerFactory が接続ファクトリとして既知の DataSource を使用する場合、DataSource は自動検出されます。DataSource を明示的に指定することはできますが、この場合は必要ありません。
この DataSource のトランザクション JDBC 接続は、DataSourceUtils または JdbcTemplate を介してこの DataSource に直接アクセスするアプリケーションコードに提供されます。接続は、JPA EntityManager から取得されます。
JPA トランザクションを JDBC トランザクションとして公開できるようにするには、特定の JPA 実装に JPA ダイアレクトを使用する必要があることに注意してください。
ここで指定する DataSource は、TransactionAwareDataSourceProxy ではなく、トランザクションを管理するターゲット DataSource である必要があります。データアクセスコードのみが TransactionAwareDataSourceProxy で機能しますが、トランザクションマネージャーは基になるターゲット DataSource で機能する必要があります。それでも TransactionAwareDataSourceProxy が渡された場合、ターゲット DataSource を抽出するためにラップ解除されます。
getDataSource
このインスタンスがトランザクションを管理する JDBC DataSource を返します。setJpaDialect
このトランザクションマネージャーに使用する JPA ダイアレクトを設定します。ベンダー固有のトランザクション管理および JDBC 接続の公開に使用されます。EntityManagerFactory が既知の JpaDialect を使用している場合、自動検出されます。DataSource を明示的に指定することはできますが、この場合は必要ありません。
ダイアレクトオブジェクトを使用して、基礎となる JDBC 接続を取得することができます。JPA トランザクションを JDBC トランザクションとして公開できます。
getJpaDialect
このトランザクションマネージャーに使用する JPA ダイアレクトを返します。setEntityManagerInitializer
このJpaTransactionManager
によって管理される新しいトランザクション用に作成されたすべてのEntityManager
リソースをカスタマイズするためのコールバックを指定します。これは、ファクトリレベルの
EntityManager
カスタマイザおよびJpaVendorAdapter
-levelpostProcessEntityManager
コールバックの代替であり、トランザクションリソースの特定のカスタマイズを可能にします。setBeanFactory
明示的に設定されていない場合は、永続ユニット名で EntityManagerFactory を取得します。永続性ユニットが指定されていない場合、デフォルトの EntityManagerFactory Bean にフォールバックします。- 次で指定:
- インターフェース
BeanFactoryAware
のsetBeanFactory
- パラメーター:
beanFactory
- 所有 BeanFactory(非null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 例外:
BeansException
- 初期化エラーの場合- 関連事項:
afterPropertiesSet
public void afterPropertiesSet()JPA ダイアレクトを積極的に初期化し、設定されていない場合は、指定された EntityManagerFactory のデフォルトのダイアレクトを作成します。EntityManagerFactory の DataSource があれば、自動検出します。- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
getResourceFactory
インターフェースからコピーされた説明:ResourceTransactionManager
このトランザクションマネージャーが操作するリソースファクトリ (JDBC DataSource や JMS ConnectionFactory など) を返します。このターゲットリソースファクトリは、通常、スレッドごとの
TransactionSynchronizationManager
のリソースバインディングのリソースキーとして使用されます。- 次で指定:
- インターフェース
ResourceTransactionManager
のgetResourceFactory
- 戻り値:
- ターゲットリソースファクトリ (非
null
) - 関連事項:
doGetTransaction
クラスからコピーされた説明:AbstractPlatformTransactionManager
現在のトランザクション状態のトランザクションオブジェクトを返します。返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有のものであり、対応するトランザクション状態を変更可能な形式で保持します。このオブジェクトは、他のテンプレートメソッド (doBegin や doCommit など) に直接、または DefaultTransactionStatus インスタンスの一部として渡されます。
返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の
getTransaction
呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction
実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。- 次で指定:
- クラス
AbstractPlatformTransactionManager
のdoGetTransaction
- 戻り値:
- 現在のトランザクションオブジェクト
- 関連事項:
AbstractPlatformTransactionManager.doBegin(java.lang.Object, org.springframework.transaction.TransactionDefinition)
AbstractPlatformTransactionManager.doCommit(org.springframework.transaction.support.DefaultTransactionStatus)
AbstractPlatformTransactionManager.doRollback(org.springframework.transaction.support.DefaultTransactionStatus)
DefaultTransactionStatus.getTransaction()
isExistingTransaction
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。
デフォルト実装は
false
を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のisExistingTransaction
- パラメーター:
transaction
- doGetTransaction によって返されるトランザクションオブジェクト- 戻り値:
- 既存のトランザクションがある場合
- 関連事項:
doBegin
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。伝播動作の適用を気にする必要はありません。これは、この抽象マネージャーによってすでに処理されているためです。このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。
特別なシナリオは、セーブポイントのないネストされたトランザクションです:
useSavepointForNestedTransaction()
が "false" を返す場合、このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。- 次で指定:
- クラス
AbstractPlatformTransactionManager
のdoBegin
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクトdefinition
- 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス
createEntityManagerForTransaction
トランザクションに使用される JPA EntityManager を作成します。デフォルトの実装では、EntityManagerFactory が Spring プロキシであるかどうかを確認し、可能であれば
EntityManagerFactoryInfo.createNativeEntityManager(java.util.Map<?, ?>)
に委譲します。これにより、JpaVendorAdapter.postProcessEntityManager(EntityManager)
が適用されます。closeEntityManagerAfterFailedBegin
protected void closeEntityManagerAfterFailedBegin(org.springframework.orm.jpa.JpaTransactionManager.JpaTransactionObject txObject) 現在のトランザクションの EntityManager を閉じます。トランザクション開始の試行が失敗した後に呼び出されます。- パラメーター:
txObject
- 現在のトランザクション
doSuspend
クラスからコピーされた説明:AbstractPlatformTransactionManager
現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoSuspend
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクト- 戻り値:
- 中断されたリソースを保持するオブジェクト (doResume に渡すために検査されないままになります)
- 関連事項:
doResume
クラスからコピーされた説明:AbstractPlatformTransactionManager
現在のトランザクションのリソースを再開します。トランザクションの同期はその後再開されます。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoResume
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクトsuspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト- 関連事項:
shouldCommitOnGlobalRollbackOnly
protected boolean shouldCommitOnGlobalRollbackOnly()この実装は "true" を返します: JPA コミットは、グローバルレベルでロールバック専用としてマークされたトランザクションを適切に処理します。- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のshouldCommitOnGlobalRollbackOnly
- 関連事項:
AbstractPlatformTransactionManager.doCommit(org.springframework.transaction.support.DefaultTransactionStatus)
DefaultTransactionStatus.isGlobalRollbackOnly()
AbstractTransactionStatus.isLocalRollbackOnly()
TransactionExecution.setRollbackOnly()
UnexpectedRollbackException
UserTransaction.commit()
EERollbackException
EE
doCommit
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションの実際のコミットを実行します。実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
- 次で指定:
- クラス
AbstractPlatformTransactionManager
のdoCommit
- パラメーター:
status
- トランザクションのステータス表現- 関連事項:
doRollback
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションの実際のロールバックを実行します。実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
- 次で指定:
- クラス
AbstractPlatformTransactionManager
のdoRollback
- パラメーター:
status
- トランザクションのステータス表現- 関連事項:
doSetRollbackOnly
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoSetRollbackOnly
- パラメーター:
status
- トランザクションのステータス表現
doCleanupAfterCompletion
クラスからコピーされた説明:AbstractPlatformTransactionManager
トランザクション完了後にリソースをクリーンアップします。doCommit
およびdoRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。例外をスローするべきではなく、エラーに対して警告を発行するだけです。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoCleanupAfterCompletion
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクト