Java 如何在j2ee中实现长时间运行的分布式事务

Java 如何在j2ee中实现长时间运行的分布式事务,java,transactions,distributed-transactions,Java,Transactions,Distributed Transactions,我想将记录从一个数据库移动到不同机器上的另一个数据库。这些记录应该从第一个数据库中删除,并以原子方式插入第二个数据库 我们能用xa吗? 我相信xa使用了两阶段提交算法,这需要对资源进行阻塞锁定 目标数据库是EIS数据库,因此应将其锁定最短时间 XA对锁定机构没有任何影响。它只是确保即使您更新两个独立的事务资源,也能保持酸性。如果我理解正确,您的用例只更新了一个,因此这里不需要XA。XA确实是一个两阶段提交阻止协议,但在我的例子中,只有两个实体涉及,第一个实体非常快。所以2PC对我来说很有效 对于

我想将记录从一个数据库移动到不同机器上的另一个数据库。这些记录应该从第一个数据库中删除,并以原子方式插入第二个数据库

我们能用xa吗? 我相信xa使用了两阶段提交算法,这需要对资源进行阻塞锁定


目标数据库是EIS数据库,因此应将其锁定最短时间

XA对锁定机构没有任何影响。它只是确保即使您更新两个独立的事务资源,也能保持酸性。如果我理解正确,您的用例只更新了一个,因此这里不需要XA。

XA确实是一个两阶段提交阻止协议,但在我的例子中,只有两个实体涉及,第一个实体非常快。所以2PC对我来说很有效

对于更一般的场景,可以使用3阶段提交。这是一个非阻塞协议。虽然似乎没有任何java规范

还遇到了BTP和
不确定它与JDBC适配器融合有多容易。

本地事务。您正在更新单个数据库。数据是来自GUI还是来自另一个数据库并不重要。与更新数据库的任何其他用例一样使用目标数据库。如果我使用本地事务,则数据可能会提交到目标,但不会从源中清除。啊,好的。因此,您不需要只在目标数据库中插入数据。还必须将其从源数据库中删除。如果你想要酸度,需要XA。你说的“长时间跑步”是什么意思?小时?天?都是oracle数据库吗?如果是这样,使用dblink可能是一种选择。此连接将位于数据库层内。可以通过过程或plsql调用。