【发布时间】:2015-03-25 19:14:41
【问题描述】:
我正在使用多个数据库进行设置,技术堆栈的 spring 与在 tomcat 6 上运行的 hibernate。跨数据库的事务不是必需的,每个数据库都有自己的 dataSource、sessionFactory 和 transactionManager (org.springframework.orm.hibernate3 .HibernateTransactionManager) 声明式使用事务管理(@Transactional 注释)。最近需要一次性在其中两个数据库(比如 db1 和 db2)中进行事务性插入。
我知道有像 JOTM 和 atomikos 这样的第三方库可以为 tomcat 添加 JTA 支持。但我想知道是否可以手动管理交易。
比如可以有下面这样的吗?
Transaction transactionDb1 = sessionFactoryDb1.getCurrentSession().beginTransaction();
Transaction transactionDb2 = sessionFactoryDb2.getCurrentSession().beginTransaction();
try
{
// DAO layer call to DB1
// DAO layer call to DB2
transactionDb1.commit();
transactionDb2.commit();
}
catch (Exception e) {
transactionDb1.rollback();
transactionDb2.rollback();
}
它可能不会那么简单。但这样的事情可能吗?据我所知,可以使用程序化事务处理。但是我该如何结合声明性方法呢?我还能在其他情况下使用@Transactional 吗?任何帮助将不胜感激。
【问题讨论】:
-
那么,你想分离出两个数据库的事务吗?即使一个失败,另一个也应该提交?
-
其实没有。理想情况下,代码应该是 if(transactionDb1.wasCommitted()) transactionDb2.commit() else //rollback both
标签: java spring hibernate tomcat spring-transactions