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