2013-09-05 5 views
3

У меня есть класс, который аннотируется @Service. У меня есть метод, который должен обновлять два разных источника данных (база данных и репозиторий контента). Я добавил @Transactional по методу в классе обслуживания. Без каких-либо дополнительных настроек; Правильно ли, что два класса репозитория (аннотированные с @Repository) запускаются в рамках одной и той же транзакции?Правильное использование @Transactional весной

Я использую JBoss 7.1.1 и у меня есть эти две строки в Spring (3.2) конфигурации:

<tx:jta-transaction-manager/> 
<tx:annotation-driven proxy-target-class="true"/> 

Или это работать в двух различных операциях? Я хочу только зафиксировать данные, если в методе уровня обслуживания не выбрасываются исключения во время выполнения. Он вызывается из метода контроллера (класс аннотируется @Controller).

Я добавлю 500 бонусов как можно скорее к парню, который поможет мне получить Jackrabbit и соединение с базой данных для работы в одной транзакции. Я использую JBoss 7.1.1, Spring 3.2, Jackrabbit 2.6.2 JCA.

+0

Ваша конфигурация должна быть достаточной, так как весна берет необходимые компоненты из jndi, но JTA обычно является PITA. Я просто предлагаю вам протестировать частичные сбои с обоими источниками данных, а также с сбоями приложений, поскольку транзакции JTA не так легко восстановить, и вам может потребоваться выполнить некоторые ручные действия для * удаления * частичной транзакции от менеджера транзакций и баз данных – Augusto

ответ

0

Без каких-либо дополнительных настроек два класса репозитория будут выполняться в разных транзакциях.

То, что вы ищете, называется Distributed Transaction, есть ответы StackOverflow об этом here и here. Если вы не работаете на Java EE-сервере, вот article, который описывает настройку распределенных транзакций для обычного контейнера сервлета, такого как Tomcat.

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