【发布时间】:2014-03-17 05:52:30
【问题描述】:
这对您来说可能是一个重复的问题,但我找不到(至少我无法理解)令人满意的答案,因此再次询问。
我正在使用两个数据源(MySQL 和 Oracle)。以下是执行流程: 主要方法-A调用方法-B(写入Oracle DB)然后它(方法-A)调用方法-C(写入mySQL DB)然后它(方法-A)调用方法-D(写入Oracle DB) )。
如果任何地方发生故障,一切都应该回滚。目前只有 Oracle DB 中的更改会被回滚,而 mySQL DB 不会被回滚。
我已经定义了两个事务管理器。
=========> First <=========
<tx:annotation-driven transaction-manager="txManager" mode='proxy' proxy-target-class='true’/>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="SessionFactory" />
</bean>
<bean id=“SessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean” parent="AbstractSessionFactory" depends-on="AppConfigHelper”>
<property name="hibernateProperties”>
...
ORACLE DB Properties
</property>
</bean>
<aop:aspectj-autoproxy/>
==============================
=========> Second <=========
<tx:annotation-driven transaction-manager="txManager2" mode='proxy' proxy-target-class='true'/>
<bean id="txManager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="SessionFactory2" />
<qualifier value="CherryTransaction" />
</bean>
<aop:aspectj-autoproxy/>
<bean id="SessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" parent="AbstractSessionFactory2" depends-on="AppConfigHelper">
<property name="hibernateProperties">
...
MYSQL DB Properties
</property>
</bean>
==============================
- 在方法 A 之上,我使用了 @Transactional 注释
- 在方法 B 之上,我使用了 @Transactional 注释
- 在方法 C 之上,我使用了 @Transactional("txManager2") 注释
- 在方法 D 之上,我使用了 @Transactional 注释
问题是:
- 为什么 MySQL 更改没有回滚?
- 让这个工作的唯一方法是使用使用 JTA 的全局事务管理吗? (它是一个遗留系统,这是我需要与两个数据库交互的唯一地方)
- 能否请您指出一个处理此类案例的示例/教程?
衷心感谢您阅读本文!
【问题讨论】:
-
我还有一个问题:
标签: java spring transactional