Это действительно ограничено тем, что позволяет сам сервер приложений; т. е. если он явно поддерживает замену диспетчера транзакций.
Настоящим искусством управления транзакциями является контейнер, регистрирующий транзакционные ресурсы (соединения DataSource, JMS Sessions, JPA EntityManagers и т. д.) с помощью TransactionManager путем их упаковки с помощью Синхронизация объектов и их регистрация в текущей транзакции через Транзакция или Реестр синхронизации транзакций
Контейнер реализует объекты Synchronization
, TransactionManager реализует объекты Transaction
и TransactionSynchronizationRegistry
. Координация между ними — это то, что дает вам фактическое управление при выполнении транзакции.
BMT и CMT — это просто альтернативные способы сообщить контейнеру о необходимости запуска/остановки транзакций. В некоторых отношениях термин «Bean-Managed» является ложным, поскольку UserTransaction
на каждом совместимом сервере приложений будет реализован контейнером, и, таким образом, контейнер по-прежнему будет выполнять работу. Кроме того, «Контейнерное управление» немного вводит в заблуждение, поскольку разработчик bean-компонента по-прежнему решает, когда транзакции запускаются/останавливаются, это просто делается декларативно, а не программно. Наиболее точным описанием этих функций будут «Транзакции, управляемые программно» и «Транзакции, управляемые декларативно». Во всех случаях bean-компонент по-прежнему общается с контейнером, а контейнер и менеджер транзакций выполняют всю работу.
Все это говорит о том, что вы все еще можете изменить диспетчер транзакций, OpenEJB и TomEE поддерживают его, однако это не будет работать так, как вы пытаетесь. Узнайте у своего поставщика, возможно ли это.
person
David Blevins
schedule
02.01.2012