Все еще используются транзакции XA / JTA? - PullRequest
4 голосов
/ 07 декабря 2011

У меня есть приложение, которое взаимодействует с несколькими базами данных и некоторыми пользовательскими службами. Для некоторых операций мне нужно поведение, подобное транзакции, когда набор изменений либо фиксируется во всех базах данных / службах, либо все откатывается при возникновении ошибки.

Стандарт XA от группы X / Open и Java JTA, похоже, решают именно эту проблему с помощью двухфазного процесса фиксации. Некоторые базы данных (mySQL, Postgres, Oracle) поддерживают эти интерфейсы, но у меня возникает ощущение, что они не часто используются или их популярность снижается. Это правда? И если да, то почему?

Я знаю, что были некоторые проблемы с репликацией с XA на MySQL. Кроме того, транзакции XA могут быть значительно медленнее. Есть ли другие причины, по которым XA непопулярен / необычен?

Ответы [ 2 ]

6 голосов
/ 08 декабря 2011

Есть несколько моментов с XA:

  • Он выполняет свою работу, и не существует принятой альтернативы.Если вы должны использовать распределенные транзакции, тогда XA не обойдется.
  • Это «стандартная технология», без рекламы и маркетинга.Поэтому он летит ниже радара большинства людей.
  • Даже когда он используется, есть большая вероятность, что Jack Application Developer не знает об этом, так как большинство частей обычно скрыты в некоторых средах.* Потребность в XA действительно несколько снижается, поскольку сервис-ориентированная архитектура (SOA) и организация очередей сообщений являются парадигмами раздутой архитектуры, которые пытаются избежать такой тесной связи подсистем.Хотя, по крайней мере, SOA, похоже, тоже неплохо снижается.; -)
  • Часто забытые части XA - это необходимый код и инструменты, которые используются, когда транзакция действительно прерывается.В XA есть некоторые предместья, где менеджер транзакций не может ни фиксировать, ни откатывать все ресурсы в течение достаточно долгого времени.Эта точка только увеличивает точку «используйте ее, только если вы действительно должны».
1 голос
/ 08 декабря 2011

Они все еще используются именно для того, что вы упомянули.Если операция с одной из баз данных завершается неудачно, все откатывается.

Они медленнее, и поэтому, если XA не нужен (т. Е. Является автономной операцией или нетранзакционной), его не следует использовать.

Контейнер Java EE может даже заставить васиспользовать источник данных XA при работе с несколькими БД.

...