gpt4 book ai didi

java - 手动处理事务而不是 JtaTransactionManager

转载 作者:行者123 更新时间:2023-11-30 08:54:58 25 4
gpt4 key购买 nike

我正在使用多个数据库进行设置,技术堆栈的 spring 和 hibernate 在 tomcat 6 上运行。跨数据库的事务不是必需的,每个数据库都有自己的数据源、sessionFactory 和 transactionManager (org.springframework.orm.hibernate3 .HibernateTransactionManager) 声明性地使用事务管理(@Transactional 注释)。最近有一个要求,即在其中两个 DB(例如 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 吗?非常感谢任何帮助。

最佳答案

您可以对多个非 JTA 数据源使用编程事务,但不会有任何全局事务。每个 DataSource 都将使用自己独立的事务,因此如果第一个提交而第二个回滚,您将没有机会回滚已经提交的第一个事务。

Spring @Transactional annotation只能针对一个 TransactionManager,并且由于您不使用 JTA,您可以选择一个 SessionFactory 或 DataSource。这就是为什么如果您想要自动事务管理,您只能依赖 JtaTransactionManager。如果您不需要 JTA,您将不得不编写自己的事务管理代码。

关于java - 手动处理事务而不是 JtaTransactionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29264545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com