【发布时间】:2012-03-20 18:12:00
【问题描述】:
这是场景,顺便说一下,我正在寻找以 Java 为中心的答案。
- 客户端代码从 Provider Application #1 调用 REST 服务 A (POST)。
- 客户端代码使用 JDBC 直接更新内部数据库。
- 客户端代码从 Provider Application #2 调用 REST 服务 B (POST)。
- 步骤 1 到 3 需要发生在具有两阶段提交支持的分布式事务中,即如果步骤 2 的数据库更新失败,那么我们要撤消步骤 1 的 POST。如果第 3 步的 POST 失败,我们要撤消第 1 步的 POST 和第 2 步的数据库更新。
有没有一种方法可以使用 JTA 完成此任务,而无需编写自己的补偿代码(撤消第 1 步和第 2 步)?
【问题讨论】:
-
使用带有 XA 资源的 Java 事务 API 可以实现大部分操作。然而,困难的部分涉及撤消 POST 请求,除非提供程序应用程序具有一些非标准逻辑,否则您无法真正做到这一点。
标签: jakarta-ee rest transactions jta 2phase-commit