Spring декларативное управление транзакциями: несколько точек - PullRequest
3 голосов
/ 16 июля 2011

Я знаю, что это почти выходные, но все еще стоит попробовать :) 1001 *

Мне нужно использовать несколько менеджеров транзакций, поэтому для меня имеет смысл использовать декларативное управление транзакциями вместо использования tx: annotation-based. Однако у меня есть классы обслуживания в различных пакетах, и следующий конфиг не работает:

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

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="svcPointcut1" expression="execution(* com.app.services.*.*(..))"/>
    <aop:pointcut id="svcPointcut2" expression="execution(* com.app.campaigns.services..*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="svcPointcut1" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="svcPointcut2" />
</aop:config>

Может кто-нибудь сказать мне, почему работает только первый pointcut, а второй - нет? Методы службы в пакете com.app.services выполняются в контексте транзакции, но методы службы в com.app.campaigns.services (и подпакете под ним) выбрасывают исключение UnsupportedException. Пожалуйста, избавь меня от этого страдания! Спасибо за тонну!

PS: приложение использует Spring 2.5.6

1 Ответ

0 голосов
/ 16 июля 2011

Мне нужно использовать несколько менеджеров транзакций, из-за которых это делает для меня смысл идти с декларативным управлением транзакциями вместо используя tx: на основе аннотаций.

Оба из них квалифицируются как «декларативное» управление транзакциями. Что еще более важно, вы все равно можете использовать транзакции на основе аннотаций с несколькими менеджерами передачи. Просто укажите имя или квалификатор менеджера в качестве атрибута "value" аннотации . С этим XML:

<bean id="project1TransactionManager" class="...TransactionManager">
    <qualifier value="project1"/>
</bean>
<bean id="project2TransactionManager" class="...TransactionManager">
    <qualifier value="project2"/>
</bean>

Любое из следующих должно работать:

@Transactional("project1")
@Transactional("project1TransactionManager")
@Transactional("project2")
@Transactional("project2TransactionManager")
...