Кажется, что транзакция не работает в режиме Spring.

Я пытаюсь реализовать декларативное управление транзакциями в настройках Spring+Struts+Hibernate. Это часть моего applicationcontext.xml

<property>
  <props>
    <prop key="foodoo*">PROPAGATION_REQUIRED,-FooException</prop>
  </props>
</property>

Я определил два открытых метода в моем классе FooService -> UpdateFoo, foodooTest и два частных метода (которые имеют логику обновления) -> Test1 и Test2

Звонок идет как:

UpdateFoo->foodooTest->Test1
                     ->Test2

(foodooTest должен инициировать транзакцию) Я создаю компонент

FooService fooService = (FooService)context.getBean("fooService");
//and call
fooService.UpdateFoo();

Test2 выдает FooException и, следовательно, я ожидаю, что транзакция будет откатываться. Но это не так. Фиксация происходит в каждом Test1 и Test2 (до исключения). Я использую Hibernate getHibernateTemplate.Merge() для обновлений. Мой двигатель БД - InnoDB.

Я не уверен, что мне здесь не хватает.

1 ответ

Решение

Spring откатывает транзакции по исключению, только если пользовательское исключение расширяется RuntimeException, Удостовериться FooException продолжается RuntimeException( ссылка):

В конфигурации по умолчанию код инфраструктуры транзакций Spring Framework помечает транзакцию для отката только в случае выполнения, непроверенных исключений; то есть, когда выброшенное исключение является экземпляром или подклассом RuntimeException. (Ошибки также по умолчанию приводят к откату). Проверенные исключения, которые вызываются из транзакционного метода, не приводят к откату в конфигурации по умолчанию.

Исходя из вашего комментария, необходимо проверить еще 2 вещи: 1) убедитесь, что у вас настроен менеджер транзакций платформы. Пример:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="mySessionFactory" />
</bean>

Кроме того, если вы хотите использовать аннотации для транзакций, вам также необходимо настроить это:

<tx:annotation-driven />
Другие вопросы по тегам