クラス JmsTransactionManager
- 実装されたすべてのインターフェース:
SerializableSE
、InitializingBean
、ConfigurableTransactionManager
、PlatformTransactionManager
、ResourceTransactionManager
、TransactionManager
ConnectionFactory
EE の PlatformTransactionManager
実装。JMS 接続 / セッションペアを指定された ConnectionFactory からスレッドにバインドし、ConnectionFactory ごとに 1 つのスレッドバインドセッションを可能にします。 このローカル戦略は、JTA トランザクション内で JMS 操作を実行する代わりになります。その利点は、メッセージブローカーをターゲットとして、スタンドアロンアプリケーションやテストスイートなどの任意の環境で動作できることです。ただし、この戦略では、メッセージングとデータベースアクセスの間でトランザクションを共有するためなど、XA トランザクションを提供できません。XA トランザクションには、完全な JTA/XA セットアップが必要です。通常、戦略として Spring の JtaTransactionManager
を使用します。
後続のセッション作成を伴う標準の Jakarta EE スタイルの ConnectionFactory.createConnection()
EE 呼び出しの代わりに、ConnectionFactoryUtils.getTransactionalSession(jakarta.jms.ConnectionFactory, jakarta.jms.Connection, boolean)
を介してトランザクション JMS セッションを取得するには、アプリケーションコードが必要です。Spring の JmsTemplate
は、スレッドにバインドされたセッションを自動検出し、自動的に参加します。
または、アプリケーションコードが ConnectionFactory で標準の Jakarta EE スタイルルックアップパターンを使用できるようにすることもできます。たとえば、Spring をまったく認識しないレガシーコードの場合です。その場合、Spring 管理のトランザクションに自動的に参加するターゲット ConnectionFactory の TransactionAwareConnectionFactoryProxy
を定義します。
このトランザクションマネージャーのターゲットとして CachingConnectionFactory
を使用することを強くお勧めします。CachingConnectionFactory は、すべての JMS アクセスに単一の JMS 接続を使用して、繰り返される接続作成のオーバーヘッドを回避し、セッションのキャッシュを維持します。その後、各トランザクションは独自の JMS セッションを使用しながら、同じ JMS 接続を共有します。
未加工のターゲット ConnectionFactory の使用は、リソースの再利用が不足しているため、効率が悪いだけではありません。JMS ドライバーが Session.commit()
の前に MessageProducer.close()
呼び出しや MessageConsumer.close()
呼び出しを受け入れない場合にも奇妙な影響が生じる可能性があります。後者は、プロデューサーハンドルを通じて送信され、コンシューマーハンドルを通じて受信されたすべてのメッセージをコミットすることになっています。安全な一般的なソリューションとして、常に CachingConnectionFactory
をこのトランザクションマネージャーの "connectionFactory"
プロパティに渡します。
トランザクション同期はデフォルトでオフになっています。このマネージャーは、同期の必要性が高い JDBC DataSourceTransactionManager
などのデータストアベースの Spring トランザクションマネージャーと一緒に使用される可能性があるためです。
ネストされたクラスのサマリー
クラス org.springframework.transaction.support.AbstractPlatformTransactionManager から継承されたネストクラス / インターフェース
AbstractPlatformTransactionManager.SuspendedResourcesHolder
フィールドサマリー
クラス org.springframework.transaction.support.AbstractPlatformTransactionManager から継承されたフィールド
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
コンストラクターのサマリー
コンストラクター説明Bean スタイルの使用のために新しい JmsTransactionManager を作成します。JmsTransactionManager
(ConnectionFactoryEE connectionFactory) ConnectionFactory を指定して、新しい JmsTransactionManager を作成します。方法の概要
修飾子と型メソッド説明void
ConnectionFactory が設定されていることを確認します。protected ConnectionEE
このテンプレートの ConnectionFactory を介して JMS 接続を作成します。protected SessionEE
指定された接続の JMS セッションを作成します。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
現在のトランザクションのリソースを一時停止します。このインスタンスがトランザクションを管理する必要がある JMS ConnectionFactory を返します。このトランザクションマネージャーが操作するリソースファクトリ (JDBC DataSource や JMS ConnectionFactory など) を返します。protected boolean
isExistingTransaction
(ObjectSE transaction) 指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。protected final ConnectionFactoryEE
実際に使用するために ConnectionFactory を取得します。void
このインスタンスがトランザクションを管理する必要がある JMS ConnectionFactory を設定します。void
setLazyResourceRetrieval
(boolean lazyResourceRetrieval) このトランザクションマネージャーがトランザクション(true
)内のアクセス時に JMS 接続とセッションを遅延取得するかどうかを指定します。クラス 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, shouldCommitOnGlobalRollbackOnly, 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
コンストラクターの詳細
JmsTransactionManager
public JmsTransactionManager()Bean スタイルの使用のために新しい JmsTransactionManager を作成します。メモ: インスタンスを使用する前に、ConnectionFactory を設定する必要があります。このコンストラクターは、BeanFactory を介して JmsTemplate を準備するために使用でき、通常は setConnectionFactory を介して ConnectionFactory を設定します。
このマネージャーは、DataSourceTransactionManager のようなデータストアベースの Spring トランザクションマネージャーと一緒に使用される可能性があるため、デフォルトでトランザクション同期をオフにします。いつでも 1 つのマネージャーのみが同期を実行できます。
JmsTransactionManager
ConnectionFactory を指定して、新しい JmsTransactionManager を作成します。- パラメーター:
connectionFactory
- 接続を取得する ConnectionFactory
メソッドの詳細
setConnectionFactory
このインスタンスがトランザクションを管理する必要がある JMS ConnectionFactory を設定します。getConnectionFactory
このインスタンスがトランザクションを管理する必要がある JMS ConnectionFactory を返します。obtainConnectionFactory
実際に使用するために ConnectionFactory を取得します。- 戻り値:
- ConnectionFactory (非
null
) - 例外:
IllegalStateExceptionSE
- ConnectionFactory セットがない場合- 導入:
- 5.0
setLazyResourceRetrieval
public void setLazyResourceRetrieval(boolean lazyResourceRetrieval) このトランザクションマネージャーがトランザクション(true
)内のアクセス時に JMS 接続とセッションを遅延取得するかどうかを指定します。デフォルトでは、トランザクションの開始時に積極的に JMS 接続とセッションが作成されます(false
)。afterPropertiesSet
public void afterPropertiesSet()ConnectionFactory が設定されていることを確認します。- 次で指定:
- インターフェース
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 インスタンス
doSuspend
クラスからコピーされた説明:AbstractPlatformTransactionManager
現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoSuspend
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクト- 戻り値:
- 中断されたリソースを保持するオブジェクト (doResume に渡すために検査されないままになります)
- 関連事項:
doResume
クラスからコピーされた説明:AbstractPlatformTransactionManager
現在のトランザクションのリソースを再開します。トランザクションの同期はその後再開されます。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoResume
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクトsuspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト- 関連事項:
doCommit
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションの実際のコミットを実行します。実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
- 次で指定:
- クラス
AbstractPlatformTransactionManager
のdoCommit
- パラメーター:
status
- トランザクションのステータス表現- 関連事項:
doRollback
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションの実際のロールバックを実行します。実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
- 次で指定:
- クラス
AbstractPlatformTransactionManager
のdoRollback
- パラメーター:
status
- トランザクションのステータス表現- 関連事項:
doSetRollbackOnly
クラスからコピーされた説明:AbstractPlatformTransactionManager
指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoSetRollbackOnly
- パラメーター:
status
- トランザクションのステータス表現
doCleanupAfterCompletion
クラスからコピーされた説明:AbstractPlatformTransactionManager
トランザクション完了後にリソースをクリーンアップします。doCommit
およびdoRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。例外をスローするべきではなく、エラーに対して警告を発行するだけです。
- オーバーライド:
- クラス
AbstractPlatformTransactionManager
のdoCleanupAfterCompletion
- パラメーター:
transaction
-doGetTransaction
によって返されるトランザクションオブジェクト
createConnection
このテンプレートの ConnectionFactory を介して JMS 接続を作成します。この実装では、JMS 1.1 API を使用します。
- 戻り値:
- 新しい JMS 接続
- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合
createSession
指定された接続の JMS セッションを作成します。この実装では、JMS 1.1 API を使用します。
- パラメーター:
con
- セッションを作成する JMS 接続- 戻り値:
- 新しい JMS セッション
- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合