когда использовать глобальную транзакцию или использовать spring aop для транзакции

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


person cometta    schedule 07.01.2010    source источник
comment
Вы уверены, что разместили правильную ссылку?   -  person Pascal Thivent    schedule 19.01.2010


Ответы (2)


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

Задача может представлять собой набор команд SQL для источника данных или для источника данных2.

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

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

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

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

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

person Pascal Thivent    schedule 19.01.2010

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

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

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

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

person Eran Medan    schedule 19.01.2010
comment
@erann, вы были полезны - person cometta; 19.01.2010