несколько сеансовых фабрик, одно соединение? - PullRequest
2 голосов
/ 19 января 2010

Чтобы избежать накладных расходов XA, я добавил префикс некоторых имен таблиц из проекта A и выкатил их в ту же базу данных mysql, что и проект B, чтобы я мог использовать то же соединение - и надеюсь получить полную атомарность и т. Д.

Проекты A и B, хотя и имеют очень разные конфигурации фабрики сессий. У меня есть HibernateTransactionManager, настроенный для проекта B, тогда как A просто использует TransactionSynchronizationManager.hasResource (sessionFactoryA) Код в стиле OSiV для присоединения к транзакции.

Это работает концептуально? Я только что попробовал точку останова в A, затем подождал, затем продолжил, и тайм-аут заставил B откатиться, но A все еще фиксирует !!?

Что дает? Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 20 января 2010

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

Для правильной работы транзакций вам необходимо использовать один диспетчер транзакций и отправлять все транзакционные операции через него.

1 голос
/ 20 января 2010

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

...