【问题标题】:how to implement Long running distributed transaction in j2ee如何在 j2ee 中实现长时间运行的分布式事务
【发布时间】:2012-01-09 15:51:04
【问题描述】:

我想将不同机器上的记录从一个数据库移动到另一个数据库。记录应该从第一个数据库中删除并自动插入到第二个数据库中。

我们可以使用 xa 吗? 我相信 xa 使用 2 阶段提交算法,这需要资源上的阻塞锁

目标数据库是一个 EIS 数据库,所以它应该被锁定最少的时间。

【问题讨论】:

  • “长时间运行”是什么意思?小时 ?天?
  • 都是oracle数据库吗?如果是这样,使用 dblink 可能是一种选择。此连接将在您的数据库层内。这可以通过过程或 plsql 调用。

标签: java transactions distributed-transactions


【解决方案1】:

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

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

还遇到了 BTP 和 http://jotm.objectweb.org/jotm-btp.html 不确定它与 JDBC 适配器融合的难易程度。

【讨论】:

    【解决方案2】:

    XA 对锁定机制没有任何影响。即使您更新两个单独的事务资源,它也只是确保保留 ACIDity。如果我理解正确,您的用例只会更新一个,所以这里不需要 XA。

    【讨论】:

    • 本地事务。您正在更新单个数据库。数据是来自 GUI 还是来自另一个数据库并不重要。像在任何其他更新数据库的用例中一样使用您的目标数据库。
    • 如果我使用本地事务,那么数据可能已提交到目标但未从源中清除。
    • 啊,好的。所以你不需要只在目标数据库中插入数据。您还必须将其从源数据库中删除。那么如果你想要 ACIDity,XA 是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多