когда использовать глобальную транзакцию или использовать Spring AOP для транзакции - PullRequest
3 голосов
/ 07 января 2010

Q1. я понимаю, когда нам нужно иметь дело с несколькими базами данных, нам нужно использовать глобальные транзакции. но из этого поста http://fogbugz.atomikos.com/default.asp. человек предложил просто использовать Spring AOP, чтобы проконсультировать по поводу другого менеджера транзакций (подробнее> источник данных / сессия сеанса). Кто-нибудь может объяснить, в какой ситуации мы можем просто использовать этот подход И в какой ситуации нам нужен XA (глобальная транзакция) с atomikos или jotm или ejb..etc

Ответы [ 2 ]

4 голосов
/ 19 января 2010

Я думаю, что Паскаль полностью ответил на ваш вопрос, но я хочу попытаться упростить / обобщить его.

  • Если вам нужно выполнить параллельные, независимые задачи на источниках данных без требования объема транзакции (например, если транзакция завершается ошибкой в ​​одном источнике данных, нет необходимости выполнять откат в других), используйте предложение Паскаля или подход в http://fogbugz.atomikos.com/default.asp?community.6.596.2 (например, без JTA / без XA / без распределения)

  • Если вам нужна область транзакции для разных источников данных, например, если откат в одном источнике данных должен выполнить откат изменений в другом источнике данных в рамках одной и той же логической транзакции (например, база данных банка и база данных кредитных карт, выполняющая перевод средств, вы не можете получить декрет / инкриз в одном без соответствующего инкриса / декрета в другом) вам нужен менеджер транзакций JTA (XA / распределенный)

Надеюсь, что это делает изображение более четким (я открыт для комментариев, если я слишком упрощен или просто ошибаюсь)

3 голосов
/ 19 января 2010

Если вы ссылаетесь на это сообщение http://fogbugz.atomikos.com/default.asp?community.6.596.2,, то важная часть в вопросе из ОП:

Задача может быть набором команд sql для источника данных1 или источника данных2.

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

И вот что предлагает ответ: использование Atomikos не является необходимым и может быть излишним.

Использование двух dataSource, двух txManager, двух txAdvice и определения различных Элементы <aop:advisor/> с разными значениями атрибутов 'pointcut' и 'advice-ref' позволят применять совершенно разные конфигурации транзакций к различным объектам / методам уровня обслуживания.

См. Раздел 9.5.4. Настройка различной семантики транзакций для разных bean-компонентов для получения подробной информации.

Но если вам нужно работать с несколькими транзакционными ресурсами (обычно реляционными базами данных и очередями сообщений), тогда вам нужна поддержка глобальных транзакций, что означает менеджер транзакций J2EE (предоставляемый сервером приложений J2EE или автономный, например). Atomikos, JBossTS, JOTM и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...