Подтвердить что ты не робот

Какая разница между nonXADatasource с jta = "true" и XADataSource?

Я был смущен тем, что мы можем разрешить использование транзакций JTA с источником данных, отличным от XA. Ссылка на документацию. Итак, какова разница между источниками данных XA/non-XA? Почему мы должны использовать XA-источники данных вообще?

4b9b3361

Ответ 1

Транзакция XA, в самых общих чертах, представляет собой "глобальную транзакцию", которая может охватывать несколько ресурсов. В транзакции, отличной от XA, всегда используется только один ресурс.

Транзакция XA включает координационный менеджер транзакций с одной или несколькими базами данных (или другими ресурсами, такими как JMS), которые участвуют в одной глобальной транзакции. Операции, отличные от XA, не имеют координатора транзакций, и один ресурс выполняет всю свою транзакционную работу (это иногда называют локальными транзакциями).

jta = "true", транзакция фиксируется автоматически.

Ответ 2

Мне было интересно об этом самостоятельно (опция "использовать JTA" в источнике данных, отличном от XA), поэтому я протестировал несколько конфигураций. У меня есть распределенная транзакция, соединяющая два сервера MySQL.

Вот мои результаты. Если у меня есть:

  • Два источника данных, отличных от XA, оба имеют JTA = "true"

Результат: Ошибка "Не удалось заручиться транзакцией при вводе метаобновляемого объекта".

  1. Два источника данных, отличных от XA, с одним JTA = "true"

Результат: они не будут участвовать в распределенной транзакции. Каждый из них будет выполняться отдельно.

  1. Один XA и один не-XA с JTA = "false",

Результат: тот же, что и # 2

  1. Один XA и один не-XA с JTA = "true" .

Результат: Работает!

Из этого, похоже, опция "use JTA" указывает, будет ли она участвовать в распределенной транзакции, если есть источник данных XA.