Программирование BMT — UserTransaction

Полное программирование BMT основано на интерфейсе UserTransaction? Другими словами, если я хочу использовать BMT, есть ли какой-нибудь сценарий, когда мне потребуется больше услуг, чем предоставляется интерфейсом UserTransaction.

Почему этот вопрос? Если я использую другую реализацию диспетчера транзакций (например, Bitronix TM или Atomikos), а не стандартную реализацию, предоставленную контейнером, достаточно ли просто внедрить новую TM в объект UserTransaction?

-Спасибо


person Bala    schedule 02.01.2012    source источник


Ответы (2)


Это действительно ограничено тем, что позволяет сам сервер приложений; т. е. если он явно поддерживает замену диспетчера транзакций.

Настоящим искусством управления транзакциями является контейнер, регистрирующий транзакционные ресурсы (соединения 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
comment
Спасибо за ответ. Не могли бы вы подробнее объяснить, однако это не будет работать так, как вы пытаетесь. В моем случае я не заменяю TM в контейнере, а просто использую TM стороннего производителя в Фаза модульного тестирования, когда контейнер не задействован. Я просто хочу знать, можно ли полностью реализовать BMT, используя сервисы интерфейса UserTransaction, или нам нужны какие-то другие сервисы для какого-то особого сценария? (например, например, Декстер объяснил, что можно использовать BMT без UserTransaction в локальной TM ресурса). - person Bala; 03.01.2012

Возможно, это не совсем ответ на ваш вопрос, но при использовании BMT вам также разрешено использовать локальные менеджеры транзакций ресурсов. В этом случае вы не будете использовать (внедренный) интерфейс UserTransaction.

Обратите внимание, что это допустимо только в том случае, если не выполняется транзакция, запущенная через указанный интерфейс UserTransaction.

person dexter meyers    schedule 02.01.2012
comment
Спасибо за Ваш ответ. Не могли бы вы проиллюстрировать это на простом примере. Вы хотите сказать, что при использовании локальной TM ресурса нет необходимости в UserTransaction? Если я не ошибаюсь, я думаю, что в таких случаях можно использовать UserTransaction, хотя мы не будем использовать транзакции, совместимые с JTA. Пожалуйста, поправьте меня, если я ошибаюсь. - person Bala; 02.01.2012
comment
UserTransaction совместим с JTA, если я не ошибаюсь по определению. Чтобы быть уверенным, локальный TM ресурса - это просто что-то вроде connection.setAutocommit(false) в соединении JDBC. - person dexter meyers; 02.01.2012