В чем разница между nonXADatasource с jta="true" и XADataSource?
меня смутил тот факт, что мы можем разрешить использовать транзакции JTA с не-XA-datasource. ссылка на документацию. Так в чем же разница между источниками данных XA/non-XA? Почему мы вообще должны использовать XA-datasources?
2 ответов
транзакция XA, в самых общих терминах, является "глобальной транзакцией", которая может охватывать несколько ресурсов. Транзакция, отличная от XA, всегда включает только один ресурс.
транзакция XA включает в себя координирующего менеджера транзакций, с одной или несколькими базами данных (или другими ресурсами, такими как JMS), участвующими в одной глобальной транзакции. Транзакции, отличные от XA, не имеют координатора транзакций, и один ресурс выполняет всю свою транзакционную работу сам (это иногда называется локальные транзакции.)
jta= "true", транзакция фиксируется автоматически.
Мне было интересно об этом самому (опция"использовать JTA" в источнике данных, отличном от XA), поэтому я протестировал несколько конфигураций. У меня есть распределенная транзакция, соединяющаяся с двумя серверами MySQL.
вот мои результаты. Если у меня есть:
- два источника данных не-XA, оба имеют JTA= "true"
результат: ошибка " не удалось заручиться транзакцией при вводе объекта meta-aware."
- два источника данных non-XA, с одним JTA="true"
результат: они не будут участвовать в распределенной транзакции. Каждый совершит отдельно.
- один XA и один не-XA с JTA= "false",
результат: то же, что и #2
- один XA и один не-XA с JTA= "true".
Результат: Работает!
из них похоже, что опция "использовать JTA" указывает, будет ли она участвовать в распределенной транзакции, если есть XA источник.