2014-01-15 1 views
2

Я использую Spring (выпуск 3.1.4) с HibernateTemplate (3.6.7.Final) и Spring Data JPA (1.3.0.RELEASE). Я определил два менеджера транзакций: один для Hibernate и другой для Spring Data JPA, в моем файле конфигурации. Оба менеджера транзакций используют разные источники данных.Весенняя аннотация с двумя менеджерами транзакций

<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<bean id="transactionTemplate"  class="org.springframework.transaction.support.TransactionTemplate"> 
    <property name="transactionManager" ref="transactionManager" /> 
</bean> 

Я хочу, чтобы некоторые методы в своем коде использовать менеджер транзакций библиотеки Hibernate и некоторые методы использования Spring данных менеджера транзакций JPA в. (Spring Doc link - 10.5.6.2 Несколько менеджеров транзакций с @Transactional)

Я определила аннотации приводимой транзакцию в моем файле конфигурации, который по умолчанию собирания шаблона транзакции Hibernate в

<tx:annotation-driven /> 

Для запуска методов с весной Диспетчер транзакций JPA. Я упоминаю имя менеджера транзакций в определении моего метода, то есть @Transactional (value = "jpaTransactionManager"), но после вставки записи в БД поток получает повешенное, а дополнительный код не вызывается.

@Transactional(value = "jpaTransactionManager") 
public void transactionMethod() 
{ 
Object obj = createObj(); 
repository.save(obj); //data is inserted in DB here but after that thread is getting hanged here and below business logic is not called 

// Some business logic 
} 

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

Я попытался следующие вещи без какого-либо успеха

  • Использование двух с обоих менеджеров транзакций.
  • Аннотирование @Transactional (value = "jpaTransactionManager") как в уровне уровня и уровня метода.

Действительно оцените любую помощь в вышеупомянутой проблеме.

ответ

0

Попробуйте явно называть менеджеров транзакций. Используйте что-то помимо «transactionManager» по умолчанию для обоих, и обновляйте все ссылки на bean-компоненты, чтобы явно указать, какой транзакционный менеджер им нужен. Кроме того, я думаю, вам понадобятся две «объявления».

Что-то вроде этого:

<tx:annotation-driven transaction-manager="hibernateTransactionManager"/> 
<tx:annotation-driven transaction-manager="jpaTransactionManager"/> 

<bean id="transactionTemplate"  class="org.springframework.transaction.support.TransactionTemplate"> 
    <property name="transactionManager" ref="hibernateTransactionManager" /> 
</bean>