多个REST调用可以参与分布式事务吗?

时间:2012-03-20 18:12:01

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

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

  1. 客户端代码从提供者应用程序#1调用REST服务A(POST)。
  2. 客户端代码使用JDBC直接更新内部数据库。
  3. 客户端代码从提供商应用程序#2调用REST服务B(POST)。
  4. 步骤1到3需要在具有两阶段提交支持的分布式事务中发生,即如果步骤2的数据库更新失败,那么我们要撤消步骤1的POST。如果步骤3的POST失败,我们要撤消步骤1的POST和步骤2的数据库更新。
  5. 我们有没有办法在不编写自己的补偿代码的情况下使用JTA来实现这一目标(撤消步骤1和2)?

1 个答案:

答案 0 :(得分:2)

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

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