В веб-приложении я использую разные компоненты, которые используют Spring 3.0.x, имеющие свои DataSource
и TransactionManager
(все с разными именами). Все они включены в контекст через «основное» веб-приложение, включая конфигурацию Spring.
<import resource="classpath:spring-config-componentName.xml" />
В каждой из конфигураций Spring компонентов, которые я использую, декларативное управление транзакциями, включается через
<tx:annotation-driven transaction-manager="transactionManager_componentName" />
И для каждого метода, который должен быть транзакционным, я добавляю аннотацию, которая выглядит следующим образом:
@Transactional(propagation=Propagation.REQUIRES_NEW, value="transactionManager_componentName")
Проблема, с которой я столкнулся, заключается в том, что я обнаружил, что создается только один TransactionInterceptor
, который имеет ссылку на одного из менеджеров транзакций, но не на один из самого компонента. Есть ли способ справиться с этим? Хотите указать TransactionInterceptor
в качестве компонента и сослаться на него в аннотации @Transactional
?
Я думаю, что есть возможность, указав TransactionProxyFactoryBean
в каждом компоненте и выполнив декларативное управление транзакциями через конфигурацию xml. Но это то, чего я бы хотел избежать.
Предложенный способ, описанный в документации Spring ( 10.5.6.2 Менеджеры множественных транзакций с @ Transactional ), не работает.