2015-05-15 2 views
4

Я использую mulitple менеджеров транзакций (HibernateTransactionManager) по одному для каждой базы данных.Как убедиться, что несколько БД транслируются с одним менеджером транзакций весной?

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

Я хочу, чтобы все транзакции базы данных были частью единой транзакции. Как я могу добиться этого?

One of the post here предлагается использовать диспетчер JTATransaction, следует ли использовать его в сочетании с уже использующим Hibernate?

Хотя я думаю, что в случае исполнения на любом этапе приложения все транзакции будут откатны.

Я использую Spring 4.1. * И спящий режим 3.6. * И НЕ используя любой вебконтейнер.

+0

НЕТ, они не откатываются. Если у вас есть 3 транзакции, первые 2 фиксации, последняя из них не удалась, нет никаких способов, чтобы 2 уже совершенных транзакции откатывались. –

+0

Похоже, вам нужны транзакции XA. http://www.javaworld.com/article/2077714/java-web-development/xa-transactions-using-spring.html –

+0

@HowardWang Я также нашел некоторое предложение для той же статьи, поэтому я спросил, нужно ли использовать JTA. – Sankalp

ответ

0

Прошло много лет с тех пор, как я работал с Hibernate, поэтому извиняюсь заранее, если это вводит в заблуждение.

  • Вам нужны транзакции JTA. Ваши источники данных должны поддерживать JTA.
  • Если вы работаете в веб-контейнере, таком как Weblogic или Websphere, то создание транзакции JTA легко. Я не думаю, что Tomcat хватит здесь. Из командной строки я не нашел ответа.
  • Если у вас есть полный контроль над тремя базами данных, вы должны быть в порядке. Но следует помнить, что откат по сравнению с системами, которые включают веб-сервисы могут быть неоднородными или требуют нестандартных протоколов (например, Weblogic поддерживает только SOAP JTA по протоколу t3)

Если вы получите результаты, пожалуйста, поделитесь как количество хороших советов в этой области минимальна.

(править) Просто заметили, что вы четко заявили, что не используете веб-контейнер. Если вы встретите решение для командной строки, есть много нас, которые хотели бы знать. Строить тесты JUnit для распределенных транзакций - это то, что я хочу сделать, но никогда не нашел, как сгенерировать объект транзакции JTA (/ edit>)

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