Mule 3.3 spring 3.1 hibernate 3.6 управление транзакциями

Я работаю над приложением, которое включает мула, весну, спящий режим с аннотациями. Я использую org.springframework.orm.hibernate3.HibernateTransactionManager. Теперь проблема:

У меня есть определенные компоненты в муле, которые регистрируют данные в БД на основе условий, использующих спящий режим. Я использовал @Transactional, который вставляет несколько данных, а затем фиксирует транзакцию, когда область действия метода завершена. Но поведение, которое я хочу, таково: первый компонент вставляет данные на основе некоторого условия, но транзакция не должна совершаться немедленно, снова мой второй компонент, который является классом java, должен снова вставлять некоторые данные, затем третий и т. д., если какой-либо из компонентов терпит неудачу. запросы, выполняемые во всех компонентах, должны быть отброшены. все эти компоненты являются отдельными классами Java

Как я могу добиться такого поведения.

Спасибо,


person user2181841    schedule 18.03.2013    source источник


Ответы (1)


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

  1. Добавьте аннотацию @Transactional к классу вашего компонента или конкретным методам, которые должны быть в транзакции. По умолчанию транзакционный метод использует настройку распространения REQUIRED, которая позволит всем методам в цепочке выполнения объединиться только в одну транзакцию.
  2. Убедитесь, что Spring может сканировать все ваши компоненты.

    @Transactional @Component («lbsProviderApiCallJob») открытый класс LbsProviderApiCallJoImpl реализует LbsProviderApiCallJob, ApplicationContextAware {

Если все ваши компоненты не находятся в контексте Spring. это сложно сделать.

person Henry Leu    schedule 18.03.2013