Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确保在spring中使用单个事务管理器处理多个DBs?_Java_Spring_Hibernate_Transactions_Spring Transactions - Fatal编程技术网

Java 如何确保在spring中使用单个事务管理器处理多个DBs?

Java 如何确保在spring中使用单个事务管理器处理多个DBs?,java,spring,hibernate,transactions,spring-transactions,Java,Spring,Hibernate,Transactions,Spring Transactions,我对每个数据库使用多个事务管理器(HibernateTransactionManager) 在一个代码流中,我相信我会为每个数据库启动/完成多个事务 我想确保所有数据库事务都是单个事务的一部分。我怎样才能做到这一点 建议使用JTATransaction manager,我是否应该将其与已经使用Hibernate的应用程序结合使用 虽然我认为在应用程序的任何阶段执行时,所有事务都将回滚 我使用的是Spring 4.1.*和hibernate 3.6.*并且没有使用任何webcontainer。我已

我对每个数据库使用多个事务管理器(HibernateTransactionManager)

在一个代码流中,我相信我会为每个数据库启动/完成多个事务

我想确保所有数据库事务都是单个事务的一部分。我怎样才能做到这一点

建议使用JTATransaction manager,我是否应该将其与已经使用Hibernate的应用程序结合使用

虽然我认为在应用程序的任何阶段执行时,所有事务都将回滚


我使用的是Spring 4.1.*和hibernate 3.6.*并且没有使用任何webcontainer。

我已经多年没有使用hibernate了,因此,如果有任何误导,请提前道歉

  • 您需要JTA事务。您的数据源需要支持JTA
  • 如果您在Weblogic或Websphere之类的web容器中运行,那么创建JTA事务就很容易了。我认为Tomcat在这里不够用。从命令行程序中,我没有找到答案
  • 如果您完全控制了这三个数据库,您应该会没事的。但是请注意,涉及web服务的回滚系统可能是不完整的,或者需要非标准协议(例如,Weblogic仅支持SOAP JTA over t3协议)
如果你得到了结果,请分享,因为这方面的好建议很少


(编辑)刚刚注意到您明确声明您没有使用web容器。如果你遇到一个命令行程序的解决方案,我们很多人都想知道。为分布式事务构建JUnit测试是我想做的事情,但我从未发现如何生成JTA事务对象(/edit>)

不,它们不会回滚。如果您有3个事务,前2个提交,最后一个失败,那么已经提交的2个事务将无法回滚。看起来您需要XA事务@HowardWang我还为同一篇文章找到了一些建议,因此我询问是否需要使用JTA.@M.Deinum,但作为SpringFrameworkRef.statis,“它在运行时未检查的异常情况下标记回滚事务”。那么,您的意思是它将只回滚其方法引发异常的当前事务吗?SpringFramework参考:但这仅适用于当前事务和尚未提交的事务。想象一下txa,b,c。C已经提交,B失败,A和B回滚,但C不可能回滚,因为它已经提交。如果中间有一个陷阱,那么只有B可以回滚,而a和C仍然可以提交,情况可能会更糟。