【问题标题】:Can multiple REST calls participate in a distributed transaction?多个 REST 调用可以参与分布式事务吗?
【发布时间】:2012-03-20 18:12:00
【问题描述】:

这是场景,顺便说一下,我正在寻找以 Java 为中心的答案。

  1. 客户端代码从 Provider Application #1 调用 REST 服务 A (POST)。
  2. 客户端代码使用 JDBC 直接更新内部数据库。
  3. 客户端代码从 Provider Application #2 调用 REST 服务 B (POST)。
  4. 步骤 1 到 3 需要发生在具有两阶段提交支持的分布式事务中,即如果步骤 2 的数据库更新失败,那么我们要撤消步骤 1 的 POST。如果第 3 步的 POST 失败,我们要撤消第 1 步的 POST 和第 2 步的数据库更新。

有没有一种方法可以使用 JTA 完成此任务,而无需编写自己的补偿代码(撤消第 1 步和第 2 步)?

【问题讨论】:

  • 使用带有 XA 资源的 Java 事务 API 可以实现大部分操作。然而,困难的部分涉及撤消 POST 请求,除非提供程序应用程序具有一些非标准逻辑,否则您无法真正做到这一点。

标签: jakarta-ee rest transactions jta 2phase-commit


【解决方案1】:

除非每个参与者都支持独立的两阶段提交,否则您无法协调或管理分布式事务。

因此,在这种情况下 - 如果您的 REST 服务支持两种方法,相当于事务的两个阶段 - 您可以在客户端中实现事务管理器。

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2013-10-05
    相关资源
    最近更新 更多