Q1. я понимаю, когда нам нужно иметь дело с несколькими базами данных, нам нужно использовать глобальную транзакцию. но из этого поста http://fogbugz.atomikos.com/default.asp. человек предложил просто использовать Spring aop, чтобы посоветовать другому менеджеру транзакций (подробнее> datasource/sessionfactory). может кто-нибудь объяснить, в какой ситуации мы можем просто использовать этот подход. И в какой ситуации нам нужна XA (глобальная транзакция) с atomikos или jotm или ejb..etc, когда использовать глобальные транзакции или использовать весну aop для транзакции
ответ
Если вы имеете в виду это сообщение http://fogbugz.atomikos.com/default.asp?community.6.596.2, то важную роль в вопросе от ФП:
задача может быть либо набор команд SQL против DataSource1 или datasource2.
Другими словами, OP не будет привлекать несколько транзакционных ресурсов, он будет использовать тот или иной (и явно пишет, что ему не нужна XA-поддержка). Так что ему действительно не нужно global поддержка транзакций, он может использовать местных транзакций только с использованием менеджера транзакций J2EE: не является обязательным для его использования.
И вот что дает ответ: использование Atomikos не является необходимым и может быть излишним.
Используя два dataSource
, два txManager
, два txAdvice
и определение различных <aop:advisor/>
элементов с различными 'pointcut'
и 'advice-ref'
значения атрибутов позволят применить совершенно другую конфигурацию транзакций для различных услуг слоя объектов/методов.
Подробнее см. В разделе 9.5.4. Configuring different transactional semantics for different beans.
Но если вам нужно работать с несколькими транзакционными ресурсами (как правило, реляционных баз данных и очередей сообщений), то вам необходимо глобальной сделок поддержки, которая означает, что менеджер транзакций J2EE (при условии, сервером приложений J2EE или автономно, как Atomikos, JBossTS , JOTM и т. Д.).
Я думаю, что Паскаль полностью ответил на ваш вопрос, но я хочу попытаться упростить/обобщить его.
Если вам необходимо выполнить Параллель, самостоятельные задания по источникам данных без требования к транзакционной области видимости (например, в случае, если сделка не может в одном источнике данных, то doens't придется откатить в других), используйте предложение Паскаля или тому подход в http://fogbugz.atomikos.com/default.asp?community.6.596.2 (например, не JTA/non XA/нераспространяющийся)
Если вам нужна область транзакций по различным источникам данных, например если откат в одном источнике данных должен отменить изменения в другом источнике данных в той же области логической транзакции (например, банковская база данных и база данных кредитных карт, осуществляющая перевод средств, вы не можете получить указатель/прирост в одном без соответствующего увеличения/уменьшения в другом) вам нужен менеджер транзакций JTA (XA/распределенный)
Надеется, что это делает изображение четче (я открыт для комментариев, если я более чем упростил или просто неправилен)
@ehrann, вы были полезны – cometta
вы уверены, вы отправили правильную ссылку? –