2012-03-20 48 views
1

下面是该场景,顺便说一下,我正在寻找以Java为中心的答案。多个REST调用可以参与分布式事务吗?

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

有没有一种方法可以使用JTA来完成此操作而无需编写我们自己的补偿代码(撤消步骤1和2)?

+0

大多数情况下,使用Java Transaction API和XA Resources都是可能的。然而,困难的部分涉及到撤消POST请求,除非提供者应用程序具有一些非标准逻辑,否则你不能这么做。 – 2012-03-20 18:24:35

回答

2

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

因此,在这种情况下 - 如果您的REST服务支持两种等于交易两个阶段的方法 - 您可能已在客户端实现了一个交易管理器。

相关问题