Источник данных может быть настроен двух типов:
- XA : эти источники данных могут участвовать в распределенных транзакциях
- Локальный : также называется не-XA, они не могут участвовать в распределенной транзакции
UserTransaction
определено в спецификации JTA, которая описывает, как координировать участника в распределенной транзакции.
Однако сервер приложений, который реализует спецификацию JTA, может выполнять множество оптимизаций. Одним из них является last-agent-optimization
, который позволяет последнему участнику распределенной транзакции быть Local . Затем выполняется регулярный коммит для последних участников. Если есть только один участник, то это всегда так.
Короче говоря:
- если у вас более одного участника, необходимо использовать XA и двухфазную фиксацию
- если есть только один участник, большинство серверов приложений поддерживают локальный источник данных и не используют полнофункциональный протокол двухфазной фиксации.
Для Glassfish см .:
EDIT
Пункт "объем транзакций" Glassfish Документация объясняет это лучше меня. Я думаю, это одинаково для всех серверов приложений.
Локальная транзакция включает только одну
не-XA ресурс и требует, чтобы все
участвующие компоненты приложения
выполнить в течение одного процесса. Местное
оптимизация транзакций является специфической
к менеджеру ресурсов и
прозрачный для Java EE
применение.
На сервере приложений, JDBC
ресурс не-XA, если он соответствует любому из
следующие критерии:
В конфигурации пула соединений JDBC класс DataSource
не реализует
Интерфейс javax.sql.XADataSource.
Поле Global Transaction Support не отмечено или Ресурс не установлен
Настройка типа не существует или не существует
установить в javax.sql.XADataSource.
Транзакция остается локальной, если
выполняются следующие условия:
- Используется один и только один не-XA ресурс. Если какой-либо дополнительный не-XA
ресурс используется, транзакция
прерванный.
- Не выполняется импорт или экспорт транзакций.
Транзакции, которые включают несколько
ресурсы или несколько участников
процессы распределены или глобальны
сделки. Глобальная транзакция может
привлекать один не-XA ресурс, если последний
Оптимизация агента включена.
В противном случае все ресурсы должны быть XA.
Оптимизация использования последнего агента
свойство установлено в true по умолчанию.
Подробнее о том, как установить это
см. Настройка
Сервис транзакций.
Если только один ресурс XA используется в
транзакция, происходит однофазное принятие,
в противном случае транзакция
координируется с двухэтапной фиксацией
протокол.