Нет никакой разницы в обработке локальных или глобальных транзакций в отношении BMT или CMT.
BMT и CMT определяют только то, как могут быть определены начало и конец транзакций.В CMT это определяется вызовами аннотированных методов, в BMT начало и конец транзакций определяются с помощью объекта UserTransaction.
Если необходима глобальная транзакция или лучше распределенная транзакция, тогда Transactionmanagerорганизуйте это независимо от BMT или CMT.
Эти глобальные транзакции или двухфазное принятие становятся необходимыми, как только задействовано более одного ресурса транзакции.Например, если вы используете компонент MessageDriven, который вызывает компонент, аннотированный как «обработка транзакций Beanmanaged» и вносящий изменения в СУБД.В этом случае двухфазная фиксация выполняется для ресурсов, очереди сообщений и СУБД.
Итак, чтобы ответить на ваши вопросы:
- Нет, ответ см. Выше.
- Вы не можете выполнять транзакции с более чем одним ресурсом без менеджера транзакций.Контейнер, предоставляющий распределенные транзакции, как это обычно делают J2EE-контейнеры, будет обрабатывать все транзакции с использованием Transactionmanager.В jboss вы можете настроить источники данных как "no jta", в этом случае вы явно освобождаете их от двухфазных коммитов, но я думаю, что jboss -actionmanager будет обрабатывать db-соединения такого источника данных, несмотря на это.
- Да, если под «дать положение» вы имеете в виду «поддерживает»