2013-08-12 3 views
1

Я использую весной интеграции для отправки информации в другие системы через JMS. В настоящее время в системе мы имеем следующие шаги:Весна интеграции и транзакции с JMS и DB

  1. обновления статус в базе данных оракула сказать «Approved»
  2. отправить сообщение JMS вне к внешней системе.
  3. commit

a. Так что, если отправка JMS в (2) не удалась? Как мы можем знать и откатывать БД? b. Что делать, если фиксация на (3) терпит неудачу? Как мы откатываемся?

Пример кода или примера конфигурации будет полезен.

Благодаря GM

ответ

3

Вы можете использовать Spring Transaction Synchronization (поддерживаются Spring Integration) для синхронизации двух операций; это обеспечивает наилучшее усилие 1PC, как описано в Dr. Dave Syer's Javaworld Article. Если вам нужна абсолютная гарантия, вам может потребоваться использовать XA.

3

Вы также можете использовать ChainedTransactionManager Spring Data для Best Effort 1PC. Это безопасно, как XA, но вам придется иметь дело с дублирующимися сообщениями на стороне получателя, что вам все равно придется, если не обе системы используют XA последовательно. В этом blog post описывается, как развязать обработку входящих и исходящих транзакций с использованием наилучших усилий 1PC.

Смежные вопросы