From 39ccfba2b22694654262683d35e8aaf77fd44991 Mon Sep 17 00:00:00 2001 From: funkye Date: Thu, 23 May 2024 23:46:46 +0800 Subject: [PATCH] bugfix: tcc sample check tx status error (#683) --- .../java/org/apache/seata/action/TccActionOne.java | 3 +-- .../java/org/apache/seata/action/TccActionTwo.java | 5 +---- .../apache/seata/action/impl/TccActionOneImpl.java | 8 +++++++- .../apache/seata/action/impl/TccActionTwoImpl.java | 11 ++++++++++- .../org/apache/seata/stater/TccConsumerStarter.java | 5 ----- .../seata/SofaRPCTccTransactionApplication.java | 2 -- .../java/org/apache/seata/action/TccActionOne.java | 3 +-- .../java/org/apache/seata/action/TccActionTwo.java | 5 +---- .../apache/seata/action/impl/TccActionOneImpl.java | 8 +++++++- .../apache/seata/action/impl/TccActionTwoImpl.java | 10 +++++++++- 10 files changed, 37 insertions(+), 23 deletions(-) diff --git a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java index 3afabd713..e6d3e91d0 100644 --- a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java +++ b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java @@ -29,8 +29,7 @@ public interface TccActionOne { * @param a the a * @return the boolean */ - @TwoPhaseBusinessAction(name = "DubboTccActionOne", commitMethod = "commit", rollbackMethod = "rollback") - boolean prepare(BusinessActionContext actionContext, @BusinessActionContextParameter(paramName = "a") int a); + boolean prepare(BusinessActionContext actionContext, int a); /** * Commit boolean. diff --git a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java index dd0efa6d8..64130c7a6 100644 --- a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java +++ b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java @@ -32,10 +32,7 @@ public interface TccActionTwo { * @param list the list * @return the boolean */ - @TwoPhaseBusinessAction(name = "DubboTccActionTwo", commitMethod = "commit", rollbackMethod = "rollback") - public boolean prepare(BusinessActionContext actionContext, - @BusinessActionContextParameter(paramName = "b") String b, - @BusinessActionContextParameter(paramName = "c", index = 1) List list); + boolean prepare(BusinessActionContext actionContext, String b, List list); /** * Commit boolean. diff --git a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java index f45919c35..18720f2af 100644 --- a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java +++ b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java @@ -17,13 +17,17 @@ package org.apache.seata.action.impl; import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; import org.apache.seata.action.ResultHolder; import org.apache.seata.action.TccActionOne; +import org.springframework.util.Assert; public class TccActionOneImpl implements TccActionOne { @Override - public boolean prepare(BusinessActionContext actionContext, int a) { + @TwoPhaseBusinessAction(name = "DubboTccActionOne", commitMethod = "commit", rollbackMethod = "rollback") + public boolean prepare(BusinessActionContext actionContext,@BusinessActionContextParameter(paramName = "a") int a) { String xid = actionContext.getXid(); System.out.println("TccActionOne prepare, xid:" + xid + ", a:" + a); return true; @@ -32,6 +36,7 @@ public boolean prepare(BusinessActionContext actionContext, int a) { @Override public boolean commit(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("a") != null); System.out.println("TccActionOne commit, xid:" + xid + ", a:" + actionContext.getActionContext("a")); ResultHolder.setActionOneResult(xid, "T"); return true; @@ -40,6 +45,7 @@ public boolean commit(BusinessActionContext actionContext) { @Override public boolean rollback(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("a") != null); System.out.println("TccActionOne rollback, xid:" + xid + ", a:" + actionContext.getActionContext("a")); ResultHolder.setActionOneResult(xid, "R"); return true; diff --git a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java index af628a1b2..d6ed6dcb4 100644 --- a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java +++ b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java @@ -19,8 +19,11 @@ import java.util.List; import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; import org.apache.seata.action.ResultHolder; import org.apache.seata.action.TccActionTwo; +import org.springframework.util.Assert; /** * The type Tcc action two. @@ -30,7 +33,9 @@ public class TccActionTwoImpl implements TccActionTwo { @Override - public boolean prepare(BusinessActionContext actionContext, String b, List list) { + @TwoPhaseBusinessAction(name = "DubboTccActionTwo", commitMethod = "commit", rollbackMethod = "rollback") + public boolean prepare(BusinessActionContext actionContext, @BusinessActionContextParameter(paramName = "b") String b, + @BusinessActionContextParameter(paramName = "c", index = 1) List list) { String xid = actionContext.getXid(); System.out.println("TccActionTwo prepare, xid:" + xid + ", b:" + b + ", c:" + list.get(1)); return true; @@ -39,6 +44,8 @@ public boolean prepare(BusinessActionContext actionContext, String b, List list) @Override public boolean commit(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("b") != null); + Assert.isTrue(actionContext.getActionContext("c") != null); System.out.println( "TccActionTwo commit, xid:" + xid + ", b:" + actionContext.getActionContext("b") + ", c:" + actionContext .getActionContext("c")); @@ -49,6 +56,8 @@ public boolean commit(BusinessActionContext actionContext) { @Override public boolean rollback(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("b") != null); + Assert.isTrue(actionContext.getActionContext("c") != null); System.out.println( "TccActionTwo rollback, xid:" + xid + ", b:" + actionContext.getActionContext("b") + ", c:" + actionContext .getActionContext("c")); diff --git a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/stater/TccConsumerStarter.java b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/stater/TccConsumerStarter.java index 279e4b5ff..b16815492 100644 --- a/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/stater/TccConsumerStarter.java +++ b/tcc-sample/spring-dubbo-seata-tcc/src/main/java/org/apache/seata/stater/TccConsumerStarter.java @@ -17,7 +17,6 @@ package org.apache.seata.stater; import io.seata.common.util.StringUtils; -import io.seata.core.context.RootContext; import org.apache.seata.service.TccTransactionService; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.util.Assert; @@ -44,9 +43,6 @@ private static void transactionCommitDemo() throws InterruptedException { System.out.println(txId); Assert.isTrue(StringUtils.isNotEmpty(txId), "事务开启失败"); - //wait commit - Thread.sleep(3000); - tccTransactionService.checkBranchTransaction(txId,true); System.out.println("transaction commit demo finish."); } @@ -60,7 +56,6 @@ private static void transactionRollbackDemo() throws InterruptedException { //wait rollback Thread.sleep(3000); - tccTransactionService.checkBranchTransaction(RootContext.getXID(),false); System.out.println("transaction rollback demo finish."); } diff --git a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/SofaRPCTccTransactionApplication.java b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/SofaRPCTccTransactionApplication.java index 8e3fd9fcc..32263e353 100644 --- a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/SofaRPCTccTransactionApplication.java +++ b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/SofaRPCTccTransactionApplication.java @@ -87,8 +87,6 @@ private static void transactionRollbackDemo() throws InterruptedException { //wait rollback Thread.sleep(3000); - tccTransactionService.checkBranchTransaction(RootContext.getXID(),false); - System.out.println("transaction rollback demo finish."); } diff --git a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java index 70b576fca..a4693e6a7 100644 --- a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java +++ b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionOne.java @@ -29,8 +29,7 @@ public interface TccActionOne { * @param a the a * @return the boolean */ - @TwoPhaseBusinessAction(name = "SofaTccActionOne", commitMethod = "commit", rollbackMethod = "rollback") - boolean prepare(BusinessActionContext actionContext, @BusinessActionContextParameter(paramName = "a") int a); + boolean prepare(BusinessActionContext actionContext, int a); /** * Commit boolean. diff --git a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java index e09b97133..678efc5fb 100644 --- a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java +++ b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/TccActionTwo.java @@ -32,10 +32,7 @@ public interface TccActionTwo { * @param list the list * @return the boolean */ - @TwoPhaseBusinessAction(name = "SofaTccActionTwo", commitMethod = "commit", rollbackMethod = "rollback") - boolean prepare(BusinessActionContext actionContext, - @BusinessActionContextParameter(paramName = "b") String b, - @BusinessActionContextParameter(paramName = "c", index = 1) List list); + boolean prepare(BusinessActionContext actionContext, String b, List list); /** * Commit boolean. diff --git a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java index 7356cc4ce..f234def82 100644 --- a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java +++ b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionOneImpl.java @@ -19,16 +19,20 @@ import com.alipay.sofa.runtime.api.annotation.SofaService; import com.alipay.sofa.runtime.api.annotation.SofaServiceBinding; import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; import org.apache.seata.action.ResultHolder; import org.apache.seata.action.TccActionOne; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; @SofaService(interfaceType = TccActionOne.class, bindings = { @SofaServiceBinding(bindingType = "bolt") }) @Service public class TccActionOneImpl implements TccActionOne { @Override - public boolean prepare(BusinessActionContext actionContext, int a) { + @TwoPhaseBusinessAction(name = "SofaTccActionOne", commitMethod = "commit", rollbackMethod = "rollback") + public boolean prepare(BusinessActionContext actionContext,@BusinessActionContextParameter(paramName = "a") int a) { String xid = actionContext.getXid(); System.out.println("TccActionOne prepare, xid:" + xid + ", a:" + a); return true; @@ -37,6 +41,7 @@ public boolean prepare(BusinessActionContext actionContext, int a) { @Override public boolean commit(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("a") != null); System.out.println("TccActionOne commit, xid:" + xid + ", a:" + actionContext.getActionContext("a")); ResultHolder.setActionOneResult(xid, "T"); return true; @@ -45,6 +50,7 @@ public boolean commit(BusinessActionContext actionContext) { @Override public boolean rollback(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("a") != null); System.out.println("TccActionOne rollback, xid:" + xid + ", a:" + actionContext.getActionContext("a")); ResultHolder.setActionOneResult(xid, "R"); return true; diff --git a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java index bdc1ca888..30a7a12d2 100644 --- a/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java +++ b/tcc-sample/springboot-sofarpc-seata-tcc/src/main/java/org/apache/seata/action/impl/TccActionTwoImpl.java @@ -19,9 +19,12 @@ import com.alipay.sofa.runtime.api.annotation.SofaService; import com.alipay.sofa.runtime.api.annotation.SofaServiceBinding; import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; import org.apache.seata.action.ResultHolder; import org.apache.seata.action.TccActionTwo; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; import java.util.List; @@ -35,7 +38,8 @@ public class TccActionTwoImpl implements TccActionTwo { @Override - public boolean prepare(BusinessActionContext actionContext, String b, List list) { + @TwoPhaseBusinessAction(name = "SofaTccActionTwo", commitMethod = "commit", rollbackMethod = "rollback") + public boolean prepare(BusinessActionContext actionContext, @BusinessActionContextParameter(paramName = "b") String b, @BusinessActionContextParameter(paramName = "c", index = 1) List list) { String xid = actionContext.getXid(); System.out.println("TccActionTwo prepare, xid:" + xid + ", b:" + b + ", c:" + list.get(1)); return true; @@ -44,6 +48,8 @@ public boolean prepare(BusinessActionContext actionContext, String b, List list) @Override public boolean commit(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("b") != null); + Assert.isTrue(actionContext.getActionContext("c") != null); System.out.println( "TccActionTwo commit, xid:" + xid + ", b:" + actionContext.getActionContext("b") + ", c:" + actionContext .getActionContext("c")); @@ -54,6 +60,8 @@ public boolean commit(BusinessActionContext actionContext) { @Override public boolean rollback(BusinessActionContext actionContext) { String xid = actionContext.getXid(); + Assert.isTrue(actionContext.getActionContext("b") != null); + Assert.isTrue(actionContext.getActionContext("c") != null); System.out.println( "TccActionTwo rollback, xid:" + xid + ", b:" + actionContext.getActionContext("b") + ", c:" + actionContext .getActionContext("c"));