Jakarta ee 多个REST调用能否参与分布式事务?

Jakarta ee 多个REST调用能否参与分布式事务?,jakarta-ee,rest,transactions,jta,2phase-commit,Jakarta Ee,Rest,Transactions,Jta,2phase Commit,这里是场景,顺便说一下,我正在寻找一个以Java为中心的答案 客户端代码从提供者应用程序#1调用REST服务A(POST) 客户机代码使用JDBC直接更新内部数据库 客户端代码从提供者应用程序2调用REST服务B(POST) 步骤1到3需要在具有两阶段提交支持的分布式事务中进行,即,如果步骤2的数据库更新失败,那么我们希望撤消步骤1的POST。如果步骤3的POST失败,我们希望撤消步骤1的POST和步骤2的数据库更新 是否有一种方法可以使用JTA实现这一点,而无需编写我们自己的补偿代码(撤销步骤

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

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

  • 是否有一种方法可以使用JTA实现这一点,而无需编写我们自己的补偿代码(撤销步骤1和步骤2)?

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


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

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