これは、実際にはアプリサーバー自体が許可するものに制限されています。つまり、トランザクションマネージャの置き換えを明示的にサポートしている場合。
トランザクション管理の実際の技術は、トランザクションリソース(データソース接続、JMSセッション、JPA EntityManagersなど)を同期オブジェクトでラップしてTransactionManagerに登録し、TransactionまたはTransactionSynchronizationRegistryを介して現在のトランザクションに登録するコンテナです。
コンテナはSynchronization
オブジェクトを実装し、TransactionManagerはオブジェクトを実装しTransaction
ますTransactionSynchronizationRegistry
。2つの間の調整により、トランザクションの実行時に実際の管理が可能になります。
BMTとCMTは、トランザクションを開始/停止するようにコンテナに指示するための単なる代替方法です。いくつかの点で、「Bean-Managed」という用語は誤りUserTransaction
です。これは、準拠しているすべてのアプリサーバーがコンテナによって実装されるため、引き続きコンテナが作業を行うためです。また、「Container-Managed」は、トランザクションの開始/停止を決定するBean開発者であるため、少し誤解を招く可能性があります。これは、宣言型とプログラム型のどちらで行われるかだけです。これらの機能の最も正確な説明は、プログラムで管理されたトランザクションと宣言的に管理されたトランザクションです。すべての場合において、それはまだコンテナと話しているBeanであり、コンテナとトランザクションマネージャがすべての作業を行っています。
とはいえ、トランザクションマネージャーを変更することは可能かもしれませんが、OpenEJBとTomEEはそれをサポートしていますが、試みている方法では機能しません。これが可能かどうかをベンダーに確認してください。