You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by xi...@apache.org on 2025/03/18 06:02:11 UTC

(incubator-seata) branch 2.x updated: optimize: sync 2.3.0 changes (#7230)

This is an automated email from the ASF dual-hosted git repository.

xingfudeshi pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 9c57b2eedd optimize: sync 2.3.0 changes (#7230)
9c57b2eedd is described below

commit 9c57b2eeddf3cbabb865f0f78ce4056b23b1590a
Author: wt_better <yi...@alibaba-inc.com>
AuthorDate: Tue Mar 18 14:02:06 2025 +0800

    optimize: sync 2.3.0 changes (#7230)
---
 .github/workflows/test-ubuntu.yml                  |    2 +-
 all/pom.xml                                        |    4 +
 changes/en-us/2.3.0.md                             |   10 +-
 changes/zh-cn/2.3.0.md                             |   12 +-
 changes/zh-cn/2.x.md                               |    2 +-
 .../org/apache/seata/common/ConfigurationKeys.java |   21 +-
 .../rm/tcc/interceptor/ProxyUtilsTccTest.java      |  129 +-
 .../parser/TccActionInterceptorParserTest.java     |  169 +--
 .../tm/api/DefaultFailureHandlerImplTest.java      |  132 +-
 .../org/apache/seata/core/model/BranchType.java    |    8 +-
 .../apache/seata/core/context/RootContextTest.java |    1 +
 distribution/NOTICE.md                             | 1592 ++++++++++----------
 .../parser/ProxyUtilsGlobalTransactionalTest.java  |   41 +-
 .../apache/seata/server/raft/RaftServerTest.java   |   14 +-
 .../rm/tcc/interceptor/ProxyUtilsTccTest.java      |  133 +-
 .../parser/TccActionInterceptorParserTest.java     |  210 +--
 test/pom.xml                                       |   11 +-
 .../parser/SagaActionInterceptorParserTest.java    |  175 +--
 .../seata/saga/engine/db/StateMachineDBTests.java  |    1 -
 .../seata/tm/TransactionManagerHolderTest.java     |   26 +-
 .../test/java/org/apache/seata/tm/api/APITest.java |   11 +-
 .../tm/api/DefaultFailureHandlerImplTest.java      |  124 +-
 .../seata/tm/api/DefaultGlobalTransactionTest.java |   26 +-
 .../seata/tm/api/GlobalTransactionContextTest.java |   17 +-
 24 files changed, 1443 insertions(+), 1428 deletions(-)

diff --git a/.github/workflows/test-ubuntu.yml b/.github/workflows/test-ubuntu.yml
index 90c754b06c..58e52792af 100644
--- a/.github/workflows/test-ubuntu.yml
+++ b/.github/workflows/test-ubuntu.yml
@@ -149,7 +149,7 @@ jobs:
       - name: "Build with Maven on 'arm64v8/ubuntu:20.04' OS (Skip tests)"
         run: |
           docker run --rm -v ${{ github.workspace }}:/ws:rw --workdir=/ws \
-            arm64v8/ubuntu:20.04 \
+            --platform linux/arm64 arm64v8/ubuntu:20.04 \
             bash -exc 'apt-get update -y && \
                        apt-get install maven -y && \
                        apt-get install -y python3 python3-pip python3-distutils && \
diff --git a/all/pom.xml b/all/pom.xml
index cef3c32c42..1622a39886 100644
--- a/all/pom.xml
+++ b/all/pom.xml
@@ -376,6 +376,10 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
         <!-- the 3rd part -->
         <dependency>
             <groupId>io.netty</groupId>
diff --git a/changes/en-us/2.3.0.md b/changes/en-us/2.3.0.md
index 26643b163d..eeff0411ac 100644
--- a/changes/en-us/2.3.0.md
+++ b/changes/en-us/2.3.0.md
@@ -49,7 +49,9 @@ The version is updated as follows:
   in `application.raft.example.yml`
 - [[#7025](https://github.com/apache/incubator-seata/pull/7025)] fix vGroupMappingManager is NOT init
 - [[#7044](https://github.com/apache/incubator-seata/pull/7044)] fix tableMeta refresh after closed
--
+- [[#7117](https://github.com/apache/incubator-seata/pull/7117)] fix prefix: seata.server.raft.ssl should not be null
+- [[#7127](https://github.com/apache/incubator-seata/pull/7127)] fix branchType server decode error
+
 
 ### optimize:
 
@@ -88,10 +90,15 @@ The version is updated as follows:
 - [[#7051](https://github.com/apache/incubator-seata/pull/7051)] add namingserver jib
 - [[#7054](https://github.com/apache/incubator-seata/pull/7054)] In file mode when the lock cannot be acquired output
   the holder's xid
+- [[#7154](https://github.com/apache/incubator-seata/pull/7154)] remove unused dependencies
+- [[#7153](https://github.com/apache/incubator-seata/pull/7153)] upgrade tomcat-embed to 9.0.98
+- [[#7152](https://github.com/apache/incubator-seata/pull/7152)] remove org.eclipse.jetty dependency
+- [[#7151](https://github.com/apache/incubator-seata/pull/7151)] upgrade xstream to 1.4.21
 
 ### refactor:
 
 - [[#7017](https://github.com/apache/incubator-seata/pull/7017)] remove dependency on seata-server module
+- [[#7155](https://github.com/apache/incubator-seata/pull/7155)] refactor the code that does not comply with license requirements
 
 ### test:
 
@@ -124,5 +131,6 @@ Thanks to these contributors for their code commits. Please report an unintended
 - [lightClouds917](https://github.com/lightClouds917)
 - [Muluo-cyan](https://github.com/Muluo-cyan)
 - [yixia](https://github.com/wt-better)
+- [ChinaJeckXu](https://github.com/ChinaJeckXu)
 
 Also, we receive many valuable issues, questions and advices from our community. Thanks for you all.
diff --git a/changes/zh-cn/2.3.0.md b/changes/zh-cn/2.3.0.md
index 8b8f505452..3cba0e59ed 100644
--- a/changes/zh-cn/2.3.0.md
+++ b/changes/zh-cn/2.3.0.md
@@ -42,6 +42,9 @@ Apache Seata(incubating) 是一款开源的分布式事务解决方案,提供
 - [[#7022](https://github.com/apache/incubator-seata/pull/7022)] 修复 `application.raft.example.yml`的 `store.mode`属性
 - [[#7025](https://github.com/apache/incubator-seata/pull/7025)] 修复vGroupMappingManager未初始化的问题
 - [[#7044](https://github.com/apache/incubator-seata/pull/7044)] 修复TableMeta在数据源关闭后刷新错误问题
+- [[#7117](https://github.com/apache/incubator-seata/pull/7117)] 修复 seata.server.raft.ssl 前缀不存在的问题
+- [[#7127](https://github.com/apache/incubator-seata/pull/7127)] 修复saga注解化导致的server branchType解码失败问题
+
 
 ### optimize:
 
@@ -77,10 +80,15 @@ Apache Seata(incubating) 是一款开源的分布式事务解决方案,提供
 - [[#7043](https://github.com/apache/incubator-seata/pull/7043)] 在获取不到mq的sendResult时,直接完成回滚
 - [[#7051](https://github.com/apache/incubator-seata/pull/7051)] 为namingserver模块添加Jib支持以构建Docker镜像
 - [[#7054](https://github.com/apache/incubator-seata/pull/7054)] file模式中竞争不到锁时输出持有者的xid
+- [[#7154](https://github.com/apache/incubator-seata/pull/7154)] 移除未使用的依赖
+- [[#7153](https://github.com/apache/incubator-seata/pull/7153)] 升级 tomcat-embed 版本至 9.0.98
+- [[#7152](https://github.com/apache/incubator-seata/pull/7152)] 移除 org.eclipse.jetty 依赖
+- [[#7151](https://github.com/apache/incubator-seata/pull/7151)] 升级 xstream 版本至 1.4.21
 
 ### refactor:
 
 - [[#7017](https://github.com/apache/incubator-seata/pull/7017)] 移除 seata-server 模块的依赖
+- [[#7155](https://github.com/apache/incubator-seata/pull/7155)] 重构不满足 license 要求的代码
 
 ### test:
 
@@ -111,7 +119,9 @@ Apache Seata(incubating) 是一款开源的分布式事务解决方案,提供
 - [YvCeung](https://github.com/YvCeung)
 - [jsbxyyx](https://github.com/jsbxyyx)
 - [lightClouds917](https://github.com/lightClouds917)
-- [Muluo-cyan](https://github.com/Muluo-cyan)
+- [Muluo-cyan](https://github.com/Muluo-cyan) 
 - [yixia](https://github.com/wt-better)
+- [ChinaJeckXu](https://github.com/ChinaJeckXu)
+- [YongGoose](https://github.com/YongGoose)
 
 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index e5cd4c7938..46dc142508 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -68,6 +68,7 @@
 - [[#7214](https://github.com/apache/incubator-seata/pull/7214)] 升级 jackson 至 2.18.3 版本
 
 
+
 ### test:
 
 - [[#7092](https://github.com/apache/incubator-seata/pull/7092)] 修复NacosMockTest测试方法并行导致测试结果被干扰失败的问题
@@ -80,7 +81,6 @@
 - [[#7221](https://github.com/apache/incubator-seata/pull/7221)] 增加 gRPC Encoder/Decoder的测试用例
 - [[#7227](https://github.com/apache/incubator-seata/pull/7227)] 为 seata-discovery-consul 增加mock测试
 
-
 ### refactor:
 
 - [[#7145](https://github.com/apache/incubator-seata/pull/7145)] 重构不满足 license 要求的代码
diff --git a/common/src/main/java/org/apache/seata/common/ConfigurationKeys.java b/common/src/main/java/org/apache/seata/common/ConfigurationKeys.java
index 96f7345fae..c60c4d4821 100644
--- a/common/src/main/java/org/apache/seata/common/ConfigurationKeys.java
+++ b/common/src/main/java/org/apache/seata/common/ConfigurationKeys.java
@@ -1212,6 +1212,17 @@ public interface ConfigurationKeys {
      */
     String META_PREFIX = SEATA_FILE_ROOT_CONFIG + FILE_CONFIG_SPLIT_CHAR + FILE_ROOT_REGISTRY + FILE_CONFIG_SPLIT_CHAR + "metadata.";
 
+    /**
+     * The constant SERVER_REGISTRY_METADATA_PREFIX
+     */
+    String SERVER_REGISTRY_METADATA_PREFIX = SERVER_PREFIX + FILE_ROOT_REGISTRY + ".metadata";
+
+    /**
+     * The constant SERVER_REGISTRY_METADATA_EXTERNAL
+     */
+    String SERVER_REGISTRY_METADATA_EXTERNAL = SERVER_REGISTRY_METADATA_PREFIX + ".external";
+
+
     /**
      * The constant RATE_LIMIT_PREFIX.
      */
@@ -1237,14 +1248,4 @@ public interface ConfigurationKeys {
      */
     String RATE_LIMIT_BUCKET_TOKEN_INITIAL_NUM = RATE_LIMIT_PREFIX + ".bucketTokenInitialNum";
 
-    /**
-     * The constant SERVER_REGISTRY_METADATA_PREFIX
-     */
-    String SERVER_REGISTRY_METADATA_PREFIX = SERVER_PREFIX + FILE_ROOT_REGISTRY + ".metadata";
-
-    /**
-     * The constant SERVER_REGISTRY_METADATA_EXTERNAL
-     */
-    String SERVER_REGISTRY_METADATA_EXTERNAL = SERVER_REGISTRY_METADATA_PREFIX + ".external";
-
 }
diff --git a/compatible/src/test/java/io/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java b/compatible/src/test/java/io/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java
index 7802ba291e..02c7e7d910 100644
--- a/compatible/src/test/java/io/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java
+++ b/compatible/src/test/java/io/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java
@@ -16,14 +16,11 @@
  */
 package io.seata.rm.tcc.interceptor;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-
 import io.seata.core.context.RootContext;
 import io.seata.rm.tcc.NormalTccActionImpl;
 import io.seata.rm.tcc.TccParam;
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.BranchType;
@@ -32,88 +29,100 @@ import org.apache.seata.core.model.Resource;
 import org.apache.seata.core.model.ResourceManager;
 import org.apache.seata.integration.tx.api.util.ProxyUtil;
 import org.apache.seata.rm.DefaultResourceManager;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
 public class ProxyUtilsTccTest {
 
-    private final String DEFAULT_XID = "default_xid";
+    private ResourceManager backResourceManager;
 
-    private final AtomicReference<String> branchReference = new AtomicReference<String>();
+    private final AtomicReference<String> branchReference = new AtomicReference<>();
 
+    @BeforeEach
+    public void beforeEach() {
+        RootContext.bind(XID.generateXID(UUIDGenerator.generateUUID()));
+        ResourceManager resourceManager = new ResourceManager() {
 
-    private final ResourceManager resourceManager = new ResourceManager() {
+            @Override
+            public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
+                branchReference.set(resourceId);
+                return System.currentTimeMillis();
+            }
 
-        @Override
-        public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
-            branchReference.set(resourceId);
-            return System.currentTimeMillis();
-        }
+            @Override
+            public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status, String applicationData) throws TransactionException {
 
-        @Override
-        public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status, String applicationData) throws TransactionException {
+            }
 
-        }
+            @Override
+            public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) throws TransactionException {
+                return false;
+            }
 
-        @Override
-        public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) throws TransactionException {
-            return false;
-        }
+            @Override
+            public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
+                return null;
+            }
 
-        @Override
-        public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
-            return null;
-        }
+            @Override
+            public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
+                return null;
+            }
 
-        @Override
-        public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
-            return null;
-        }
+            @Override
+            public void registerResource(Resource resource) {
 
-        @Override
-        public void registerResource(Resource resource) {
+            }
 
-        }
+            @Override
+            public void unregisterResource(Resource resource) {
 
-        @Override
-        public void unregisterResource(Resource resource) {
+            }
 
-        }
+            @Override
+            public Map<String, Resource> getManagedResources() {
+                return null;
+            }
 
-        @Override
-        public Map<String, Resource> getManagedResources() {
-            return null;
-        }
+            @Override
+            public BranchType getBranchType() {
+                return null;
+            }
 
-        @Override
-        public BranchType getBranchType() {
-            return null;
-        }
+            @Override
+            public GlobalStatus getGlobalStatus(BranchType branchType, String xid) {
+                return null;
+            }
 
-        @Override
-        public GlobalStatus getGlobalStatus(BranchType branchType, String xid) {
-            return null;
-        }
 
+        };
+        backResourceManager = DefaultResourceManager.get().getResourceManager(BranchType.TCC);
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
+    }
 
-    };
 
-    private final NormalTccActionImpl tccActionProxy= ProxyUtil.createProxy(new NormalTccActionImpl());
+    @AfterEach
+    public void afterEach() {
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, backResourceManager);
+        RootContext.unbind();
+    }
 
 
     @Test
     public void testTcc() {
-        //given
-        RootContext.bind(DEFAULT_XID);
-
         TccParam tccParam = new TccParam(1, "abc@163.com");
         List<String> listB = Collections.singletonList("b");
 
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-
+        NormalTccActionImpl tccActionProxy = ProxyUtil.createProxy(new NormalTccActionImpl());
         String result = tccActionProxy.prepare(null, 0, listB, tccParam);
 
-        //then
         Assertions.assertEquals("a", result);
         Assertions.assertNotNull(result);
         Assertions.assertEquals("tccActionForCompatibleTest", branchReference.get());
@@ -121,23 +130,17 @@ public class ProxyUtilsTccTest {
 
     @Test
     public void testTccThrowRawException() {
-        //given
-        RootContext.bind(DEFAULT_XID);
-
         TccParam tccParam = new TccParam(1, "abc@163.com");
         List<String> listB = Collections.singletonList("b");
 
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-
-        //when
-        //then
+        NormalTccActionImpl tccActionProxy = ProxyUtil.createProxy(new NormalTccActionImpl());
         Assertions.assertThrows(IllegalArgumentException.class, () -> tccActionProxy.prepareWithException(null, 0, listB, tccParam));
     }
 
     @Test
-    public void testTccImplementOtherMethod(){
+    public void testTccImplementOtherMethod() {
+        NormalTccActionImpl tccActionProxy = ProxyUtil.createProxy(new NormalTccActionImpl());
         Assertions.assertTrue(tccActionProxy.otherMethod());
     }
 
-
 }
diff --git a/compatible/src/test/java/io/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java b/compatible/src/test/java/io/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java
index 2bfcdbe877..1c37267c3f 100644
--- a/compatible/src/test/java/io/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java
+++ b/compatible/src/test/java/io/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java
@@ -16,14 +16,6 @@
  */
 package io.seata.rm.tcc.interceptor.parser;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-
-import io.seata.core.context.RootContext;
 import io.seata.rm.tcc.BranchSessionMock;
 import io.seata.rm.tcc.NestTccAction;
 import io.seata.rm.tcc.NestTccActionImpl;
@@ -32,6 +24,8 @@ import io.seata.rm.tcc.TccAction;
 import io.seata.rm.tcc.TccActionImpl;
 import io.seata.tm.api.GlobalTransaction;
 import io.seata.tm.api.GlobalTransactionContext;
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
@@ -43,27 +37,30 @@ import org.apache.seata.integration.tx.api.util.ProxyUtil;
 import org.apache.seata.rm.DefaultResourceManager;
 import org.apache.seata.rm.tcc.TCCResourceManager;
 import org.apache.seata.tm.TransactionManagerHolder;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 
 class TccActionInterceptorParserTest {
 
-    private static ResourceManager resourceManager;
-
-    @BeforeAll
-    public static void init() throws IOException {
-        System.setProperty("config.type", "file");
-        System.setProperty("config.file.name", "file.conf");
-        System.setProperty("txServiceGroup", "default_tx_group");
-        System.setProperty("service.vgroupMapping.default_tx_group", "default");
-    }
+    private ResourceManager backResourceManager;
+    private TransactionManager backTransactionManager;
 
     @BeforeEach
-    public void before() {
-        resourceManager = new TCCResourceManager() {
+    public void beforeEach() {
+        backResourceManager = DefaultResourceManager.get().getResourceManager(BranchType.TCC);
+        backTransactionManager = TransactionManagerHolder.get();
+
+        Map<String, List<BranchSessionMock>> applicationDataMap = new ConcurrentHashMap<>();
+
+        ResourceManager mockResourceManager = new TCCResourceManager() {
 
             @Override
             public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
@@ -83,12 +80,53 @@ class TccActionInterceptorParserTest {
                 return branchId;
             }
         };
-        RootContext.unbind();
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-        TransactionManagerHolder.set(transactionManager);
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, mockResourceManager);
+
+        TransactionManager mockTransactionManager = new TransactionManager() {
+            @Override
+            public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
+                return XID.generateXID(UUIDGenerator.generateUUID());
+            }
+
+            @Override
+            public GlobalStatus commit(String xid) throws TransactionException {
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                for (BranchSessionMock branch : branches) {
+                    mockResourceManager.branchCommit(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
+                }
+                return GlobalStatus.Committed;
+            }
+
+            @Override
+            public GlobalStatus rollback(String xid) throws TransactionException {
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                for (BranchSessionMock branch : branches) {
+                    mockResourceManager.branchRollback(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
+                }
+
+                return GlobalStatus.Rollbacked;
+            }
+
+            @Override
+            public GlobalStatus getStatus(String xid) throws TransactionException {
+                return GlobalStatus.Begin;
+            }
+
+            @Override
+            public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
+                return globalStatus;
+            }
+        };
+        TransactionManagerHolder.set(mockTransactionManager);
+    }
+
+    @AfterEach
+    public void afterEach() {
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, backResourceManager);
+        TransactionManagerHolder.set(backTransactionManager);
     }
 
+
     @Test
     void parserInterfaceToProxy() {
 
@@ -139,11 +177,7 @@ class TccActionInterceptorParserTest {
 
             Assertions.assertTrue(result);
 
-            if (result) {
-                tx.commit();
-            } else {
-                tx.rollback();
-            }
+            tx.commit();
         } catch (Exception exx) {
             tx.rollback();
             throw exx;
@@ -159,7 +193,7 @@ class TccActionInterceptorParserTest {
     public void testNestTcc_should_rollback() throws Exception {
 
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction, "oldtccAction");
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction, "oldtccAction");
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -188,11 +222,7 @@ class TccActionInterceptorParserTest {
 
             Assertions.assertFalse(result);
 
-            if (result) {
-                tx.commit();
-            } else {
-                tx.rollback();
-            }
+            tx.rollback();
         } catch (Exception exx) {
             tx.rollback();
             throw exx;
@@ -208,7 +238,7 @@ class TccActionInterceptorParserTest {
     public void testNestTcc_required_new_should_rollback_commit() throws Exception {
 
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction, "oldtccAction");
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction, "oldtccAction");
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -236,11 +266,7 @@ class TccActionInterceptorParserTest {
 
             Assertions.assertFalse(result);
 
-            if (result) {
-                tx.commit();
-            } else {
-                tx.rollback();
-            }
+            tx.rollback();
         } catch (Exception exx) {
             tx.rollback();
             throw exx;
@@ -252,12 +278,11 @@ class TccActionInterceptorParserTest {
     }
 
 
-
     @Test
     public void testNestTcc_required_new_should_both_commit() throws Exception {
 
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction, "oldtccAction");
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction, "oldtccAction");
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -285,11 +310,7 @@ class TccActionInterceptorParserTest {
 
             Assertions.assertTrue(result);
 
-            if (result) {
-                tx.commit();
-            } else {
-                tx.rollback();
-            }
+            tx.commit();
         } catch (Exception exx) {
             tx.rollback();
             throw exx;
@@ -300,56 +321,4 @@ class TccActionInterceptorParserTest {
 
     }
 
-
-
-    private static Map<String, List<BranchSessionMock>> applicationDataMap = new ConcurrentHashMap<>();
-
-
-    private static TransactionManager transactionManager = new TransactionManager() {
-        @Override
-        public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
-            return UUID.randomUUID().toString();
-        }
-
-        @Override
-        public GlobalStatus commit(String xid) throws TransactionException {
-            commitAll(xid);
-            return GlobalStatus.Committed;
-        }
-
-        @Override
-        public GlobalStatus rollback(String xid) throws TransactionException {
-
-            rollbackAll(xid);
-
-            return GlobalStatus.Rollbacked;
-        }
-
-        @Override
-        public GlobalStatus getStatus(String xid) throws TransactionException {
-            return GlobalStatus.Begin;
-        }
-
-        @Override
-        public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
-            return globalStatus;
-        }
-    };
-
-
-    public static void commitAll(String xid) throws TransactionException {
-
-        List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-        for (BranchSessionMock branch : branches) {
-            resourceManager.branchCommit(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
-        }
-    }
-
-    public static void rollbackAll(String xid) throws TransactionException {
-
-        List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-        for (BranchSessionMock branch : branches) {
-            resourceManager.branchRollback(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
-        }
-    }
 }
diff --git a/compatible/src/test/java/io/seata/tm/api/DefaultFailureHandlerImplTest.java b/compatible/src/test/java/io/seata/tm/api/DefaultFailureHandlerImplTest.java
index 34567dd536..7621107e8f 100644
--- a/compatible/src/test/java/io/seata/tm/api/DefaultFailureHandlerImplTest.java
+++ b/compatible/src/test/java/io/seata/tm/api/DefaultFailureHandlerImplTest.java
@@ -16,31 +16,28 @@
  */
 package io.seata.tm.api;
 
-import java.lang.reflect.Field;
-
 import io.netty.util.HashedWheelTimer;
 import io.seata.core.context.RootContext;
 import io.seata.tm.api.transaction.MyRuntimeException;
+import org.apache.seata.common.util.ReflectionUtil;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
-import org.apache.seata.tm.TransactionManagerHolder;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.lang.reflect.Field;
+
 class DefaultFailureHandlerImplTest {
     private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFailureHandlerImplTest.class);
 
     private static final String DEFAULT_XID = "1234567890";
     private static GlobalStatus globalStatus = GlobalStatus.Begin;
 
-    @BeforeAll
-    public static void init() {
-
-        TransactionManagerHolder.set(new TransactionManager() {
+    private TransactionManager getTransactionManager() {
+        return new TransactionManager() {
             @Override
             public String begin(String applicationId, String transactionServiceGroup, String name, int timeout)
                     throws TransactionException {
@@ -66,68 +63,83 @@ class DefaultFailureHandlerImplTest {
             public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
                 return globalStatus;
             }
-        });
+        };
     }
 
     @Test
-    void onBeginFailure() {
-        RootContext.bind(DEFAULT_XID);
-        DefaultGlobalTransaction tx = (DefaultGlobalTransaction)GlobalTransactionContext.getCurrentOrCreate();
-        FailureHandler failureHandler = new DefaultFailureHandlerImpl();
-        failureHandler.onBeginFailure(tx, new MyRuntimeException("").getCause());
+    void onBeginFailure() throws Exception {
+        try {
+            RootContext.bind(DEFAULT_XID);
+            DefaultGlobalTransaction tx = (DefaultGlobalTransaction) GlobalTransactionContext.getCurrentOrCreate();
+            ReflectionUtil.setFieldValue(tx.getInstance(), "transactionManager", getTransactionManager());
+
+            FailureHandler failureHandler = new DefaultFailureHandlerImpl();
+            failureHandler.onBeginFailure(tx, new MyRuntimeException("").getCause());
+        } finally {
+            RootContext.unbind();
+        }
     }
 
     @Test
-    void onCommitFailure() throws Exception{
-
-        RootContext.bind(DEFAULT_XID);
-        DefaultGlobalTransaction tx = (DefaultGlobalTransaction)GlobalTransactionContext.getCurrentOrCreate();
-        FailureHandler failureHandler = new DefaultFailureHandlerImpl();
-        failureHandler.onCommitFailure(tx, new MyRuntimeException("").getCause());
-
-        // get timer
-        Class<?> c = Class.forName("io.seata.tm.api.DefaultFailureHandlerImpl");
-        Field field = c.getDeclaredField("TIMER");
-        field.setAccessible(true);
-        HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
-        // assert timer pendingCount: first time is 1
-        Long pendingTimeout = timer.pendingTimeouts();
-        Assertions.assertEquals(pendingTimeout,1L);
-        //set globalStatus
-        globalStatus= GlobalStatus.Committed;
-        Thread.sleep(25*1000L);
-        pendingTimeout = timer.pendingTimeouts();
-        LOGGER.info("pendingTimeout {}" ,pendingTimeout);
-        //all timer is done
-        Assertions.assertEquals(pendingTimeout,0L);
+    void onCommitFailure() throws Exception {
+
+        try {
+            RootContext.bind(DEFAULT_XID);
+            DefaultGlobalTransaction tx = (DefaultGlobalTransaction) GlobalTransactionContext.getCurrentOrCreate();
+            ReflectionUtil.setFieldValue(tx.getInstance(), "transactionManager", getTransactionManager());
+
+            FailureHandler failureHandler = new DefaultFailureHandlerImpl();
+            failureHandler.onCommitFailure(tx, new MyRuntimeException("").getCause());
+
+            // get timer
+            Class<?> c = Class.forName("io.seata.tm.api.DefaultFailureHandlerImpl");
+            Field field = c.getDeclaredField("TIMER");
+            field.setAccessible(true);
+            HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
+            // assert timer pendingCount: first time is 1
+            Long pendingTimeout = timer.pendingTimeouts();
+            Assertions.assertEquals(pendingTimeout, 1L);
+            //set globalStatus
+            globalStatus = GlobalStatus.Committed;
+            Thread.sleep(25 * 1000L);
+            pendingTimeout = timer.pendingTimeouts();
+            LOGGER.info("pendingTimeout {}", pendingTimeout);
+            //all timer is done
+            Assertions.assertEquals(pendingTimeout, 0L);
+        } finally {
+            RootContext.unbind();
+        }
     }
 
     @Test
     void onRollbackFailure() throws Exception {
-
-
-        RootContext.bind(DEFAULT_XID);
-        DefaultGlobalTransaction tx = (DefaultGlobalTransaction)GlobalTransactionContext.getCurrentOrCreate();
-        FailureHandler failureHandler = new DefaultFailureHandlerImpl();
-
-        failureHandler.onRollbackFailure(tx, new MyRuntimeException("").getCause());
-
-        // get timer
-        Class<?> c = Class.forName("io.seata.tm.api.DefaultFailureHandlerImpl");
-        Field field = c.getDeclaredField("TIMER");
-        field.setAccessible(true);
-        HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
-        // assert timer pendingCount: first time is 1
-        Long pendingTimeout = timer.pendingTimeouts();
-        Assertions.assertEquals(pendingTimeout,1L);
-        //set globalStatus
-        globalStatus= GlobalStatus.Rollbacked;
-        Thread.sleep(25*1000L);
-        pendingTimeout = timer.pendingTimeouts();
-        LOGGER.info("pendingTimeout {}" ,pendingTimeout);
-        //all timer is done
-        Assertions.assertEquals(pendingTimeout,0L);
-
+        try {
+            RootContext.bind(DEFAULT_XID);
+            DefaultGlobalTransaction tx = (DefaultGlobalTransaction) GlobalTransactionContext.getCurrentOrCreate();
+            ReflectionUtil.setFieldValue(tx.getInstance(), "transactionManager", getTransactionManager());
+
+            FailureHandler failureHandler = new DefaultFailureHandlerImpl();
+
+            failureHandler.onRollbackFailure(tx, new MyRuntimeException("").getCause());
+
+            // get timer
+            Class<?> c = Class.forName("io.seata.tm.api.DefaultFailureHandlerImpl");
+            Field field = c.getDeclaredField("TIMER");
+            field.setAccessible(true);
+            HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
+            // assert timer pendingCount: first time is 1
+            Long pendingTimeout = timer.pendingTimeouts();
+            Assertions.assertEquals(pendingTimeout, 1L);
+            //set globalStatus
+            globalStatus = GlobalStatus.Rollbacked;
+            Thread.sleep(25 * 1000L);
+            pendingTimeout = timer.pendingTimeouts();
+            LOGGER.info("pendingTimeout {}", pendingTimeout);
+            //all timer is done
+            Assertions.assertEquals(pendingTimeout, 0L);
+        } finally {
+            RootContext.unbind();
+        }
 
     }
 
diff --git a/core/src/main/java/org/apache/seata/core/model/BranchType.java b/core/src/main/java/org/apache/seata/core/model/BranchType.java
index 37ae5342b7..852c4c5cc3 100644
--- a/core/src/main/java/org/apache/seata/core/model/BranchType.java
+++ b/core/src/main/java/org/apache/seata/core/model/BranchType.java
@@ -39,14 +39,14 @@ public enum BranchType {
     SAGA,
 
     /**
-     * The SAGA_ANNOTATION.
+     * The XA.
      */
-    SAGA_ANNOTATION,
+    XA,
 
     /**
-     * The XA.
+     * The SAGA_ANNOTATION.
      */
-    XA;
+    SAGA_ANNOTATION;
 
     /**
      * Get branch type.
diff --git a/core/src/test/java/org/apache/seata/core/context/RootContextTest.java b/core/src/test/java/org/apache/seata/core/context/RootContextTest.java
index 1bc660e60c..6220703ea3 100644
--- a/core/src/test/java/org/apache/seata/core/context/RootContextTest.java
+++ b/core/src/test/java/org/apache/seata/core/context/RootContextTest.java
@@ -57,6 +57,7 @@ public class RootContextTest {
         assertThat(RootContext.getXID()).isEqualTo(DEFAULT_XID);
         assertThat(RootContext.unbind()).isEqualTo(DEFAULT_XID);
         assertThat(RootContext.getXID()).isNull();
+        RootContext.unbind();
     }
 
     /**
diff --git a/distribution/NOTICE.md b/distribution/NOTICE.md
index 5caec21c8b..c1c82dd611 100644
--- a/distribution/NOTICE.md
+++ b/distribution/NOTICE.md
@@ -1,414 +1,414 @@
 Due to license compatibility issues, we cannot include jar dependencies such as mysql, mariadb, oracle, etc., in the distribution package.
 Please copy database driver dependencies, such as `mysql-connector-java.jar`, to this directory. The following is an example of a directory structure:
 
-```
+```aidl
 .
 ├── DISCLAIMER
 ├── LICENSE
 ├── NOTICE
 ├── seata-namingserver
-│   ├── Dockerfile
-│   ├── bin
-│   │   ├── seata-namingserver-setup.sh
-│   │   ├── seata-namingserver.bat
-│   │   └── seata-namingserver.sh
-│   ├── conf
-│   │   ├── application.yml
-│   │   ├── logback
-│   │   │   ├── console-appender.xml
-│   │   │   └── file-appender.xml
-│   │   └── logback-spring.xml
-│   ├── lib
-│   │   ├── caffeine-2.9.3.jar
-│   │   ├── checker-qual-3.37.0.jar
-│   │   ├── commons-codec-1.15.jar
-│   │   ├── commons-compiler-3.1.10.jar
-│   │   ├── commons-lang-2.6.jar
-│   │   ├── commons-lang3-3.12.0.jar
-│   │   ├── error_prone_annotations-2.21.1.jar
-│   │   ├── httpclient-4.5.14.jar
-│   │   ├── httpcore-4.4.16.jar
-│   │   ├── jackson-annotations-2.13.5.jar
-│   │   ├── jackson-core-2.13.5.jar
-│   │   ├── jackson-databind-2.13.5.jar
-│   │   ├── jackson-datatype-jdk8-2.13.5.jar
-│   │   ├── jackson-datatype-jsr310-2.13.5.jar
-│   │   ├── jackson-module-parameter-names-2.13.5.jar
-│   │   ├── jakarta.annotation-api-1.3.5.jar
-│   │   ├── janino-3.1.10.jar
-│   │   ├── jul-to-slf4j-1.7.36.jar
-│   │   ├── logback-classic-1.2.12.jar
-│   │   ├── logback-core-1.2.12.jar
-│   │   ├── netty-all-4.1.101.Final.jar
-│   │   ├── netty-buffer-4.1.101.Final.jar
-│   │   ├── netty-codec-4.1.101.Final.jar
-│   │   ├── netty-codec-dns-4.1.101.Final.jar
-│   │   ├── netty-codec-haproxy-4.1.101.Final.jar
-│   │   ├── netty-codec-http-4.1.101.Final.jar
-│   │   ├── netty-codec-http2-4.1.101.Final.jar
-│   │   ├── netty-codec-memcache-4.1.101.Final.jar
-│   │   ├── netty-codec-mqtt-4.1.101.Final.jar
-│   │   ├── netty-codec-redis-4.1.101.Final.jar
-│   │   ├── netty-codec-smtp-4.1.101.Final.jar
-│   │   ├── netty-codec-socks-4.1.101.Final.jar
-│   │   ├── netty-codec-stomp-4.1.101.Final.jar
-│   │   ├── netty-codec-xml-4.1.101.Final.jar
-│   │   ├── netty-common-4.1.101.Final.jar
-│   │   ├── netty-handler-4.1.101.Final.jar
-│   │   ├── netty-handler-proxy-4.1.101.Final.jar
-│   │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
-│   │   ├── netty-resolver-4.1.101.Final.jar
-│   │   ├── netty-resolver-dns-4.1.101.Final.jar
-│   │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
-│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
-│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
-│   │   ├── netty-transport-4.1.101.Final.jar
-│   │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
-│   │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
-│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
-│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
-│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
-│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
-│   │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
-│   │   ├── netty-transport-rxtx-4.1.101.Final.jar
-│   │   ├── netty-transport-sctp-4.1.101.Final.jar
-│   │   ├── netty-transport-udt-4.1.101.Final.jar
-│   │   ├── seata-common-2.3.0.jar
-│   │   ├── slf4j-api-1.7.36.jar
-│   │   ├── snakeyaml-2.0.jar
-│   │   ├── spring-aop-5.3.39.jar
-│   │   ├── spring-beans-5.3.39.jar
-│   │   ├── spring-boot-2.7.18.jar
-│   │   ├── spring-boot-autoconfigure-2.7.18.jar
-│   │   ├── spring-boot-starter-2.7.18.jar
-│   │   ├── spring-boot-starter-json-2.7.18.jar
-│   │   ├── spring-boot-starter-logging-2.7.18.jar
-│   │   ├── spring-boot-starter-tomcat-2.7.18.jar
-│   │   ├── spring-boot-starter-web-2.7.18.jar
-│   │   ├── spring-context-5.3.39.jar
-│   │   ├── spring-core-5.3.39.jar
-│   │   ├── spring-expression-5.3.39.jar
-│   │   ├── spring-jcl-5.3.39.jar
-│   │   ├── spring-web-5.3.39.jar
-│   │   ├── spring-webmvc-5.3.39.jar
-│   │   ├── tomcat-annotations-api-9.0.98.jar
-│   │   ├── tomcat-embed-core-9.0.98.jar
-│   │   ├── tomcat-embed-el-9.0.98.jar
-│   │   └── tomcat-embed-websocket-9.0.98.jar
-│   └── target
-│       └── seata-namingserver.jar
+│   ├── Dockerfile
+│   ├── bin
+│   │   ├── seata-namingserver-setup.sh
+│   │   ├── seata-namingserver.bat
+│   │   └── seata-namingserver.sh
+│   ├── conf
+│   │   ├── application.yml
+│   │   ├── logback
+│   │   │   ├── console-appender.xml
+│   │   │   └── file-appender.xml
+│   │   └── logback-spring.xml
+│   ├── lib
+│   │   ├── caffeine-2.9.3.jar
+│   │   ├── checker-qual-3.37.0.jar
+│   │   ├── commons-codec-1.15.jar
+│   │   ├── commons-compiler-3.1.10.jar
+│   │   ├── commons-lang-2.6.jar
+│   │   ├── commons-lang3-3.12.0.jar
+│   │   ├── error_prone_annotations-2.21.1.jar
+│   │   ├── httpclient-4.5.14.jar
+│   │   ├── httpcore-4.4.16.jar
+│   │   ├── jackson-annotations-2.13.5.jar
+│   │   ├── jackson-core-2.13.5.jar
+│   │   ├── jackson-databind-2.13.5.jar
+│   │   ├── jackson-datatype-jdk8-2.13.5.jar
+│   │   ├── jackson-datatype-jsr310-2.13.5.jar
+│   │   ├── jackson-module-parameter-names-2.13.5.jar
+│   │   ├── jakarta.annotation-api-1.3.5.jar
+│   │   ├── janino-3.1.10.jar
+│   │   ├── jul-to-slf4j-1.7.36.jar
+│   │   ├── logback-classic-1.2.12.jar
+│   │   ├── logback-core-1.2.12.jar
+│   │   ├── netty-all-4.1.101.Final.jar
+│   │   ├── netty-buffer-4.1.101.Final.jar
+│   │   ├── netty-codec-4.1.101.Final.jar
+│   │   ├── netty-codec-dns-4.1.101.Final.jar
+│   │   ├── netty-codec-haproxy-4.1.101.Final.jar
+│   │   ├── netty-codec-http-4.1.101.Final.jar
+│   │   ├── netty-codec-http2-4.1.101.Final.jar
+│   │   ├── netty-codec-memcache-4.1.101.Final.jar
+│   │   ├── netty-codec-mqtt-4.1.101.Final.jar
+│   │   ├── netty-codec-redis-4.1.101.Final.jar
+│   │   ├── netty-codec-smtp-4.1.101.Final.jar
+│   │   ├── netty-codec-socks-4.1.101.Final.jar
+│   │   ├── netty-codec-stomp-4.1.101.Final.jar
+│   │   ├── netty-codec-xml-4.1.101.Final.jar
+│   │   ├── netty-common-4.1.101.Final.jar
+│   │   ├── netty-handler-4.1.101.Final.jar
+│   │   ├── netty-handler-proxy-4.1.101.Final.jar
+│   │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
+│   │   ├── netty-resolver-4.1.101.Final.jar
+│   │   ├── netty-resolver-dns-4.1.101.Final.jar
+│   │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
+│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
+│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
+│   │   ├── netty-transport-4.1.101.Final.jar
+│   │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
+│   │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
+│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
+│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
+│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
+│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
+│   │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
+│   │   ├── netty-transport-rxtx-4.1.101.Final.jar
+│   │   ├── netty-transport-sctp-4.1.101.Final.jar
+│   │   ├── netty-transport-udt-4.1.101.Final.jar
+│   │   ├── seata-common-2.3.0.jar
+│   │   ├── slf4j-api-1.7.36.jar
+│   │   ├── snakeyaml-2.0.jar
+│   │   ├── spring-aop-5.3.39.jar
+│   │   ├── spring-beans-5.3.39.jar
+│   │   ├── spring-boot-2.7.18.jar
+│   │   ├── spring-boot-autoconfigure-2.7.18.jar
+│   │   ├── spring-boot-starter-2.7.18.jar
+│   │   ├── spring-boot-starter-json-2.7.18.jar
+│   │   ├── spring-boot-starter-logging-2.7.18.jar
+│   │   ├── spring-boot-starter-tomcat-2.7.18.jar
+│   │   ├── spring-boot-starter-web-2.7.18.jar
+│   │   ├── spring-context-5.3.39.jar
+│   │   ├── spring-core-5.3.39.jar
+│   │   ├── spring-expression-5.3.39.jar
+│   │   ├── spring-jcl-5.3.39.jar
+│   │   ├── spring-web-5.3.39.jar
+│   │   ├── spring-webmvc-5.3.39.jar
+│   │   ├── tomcat-annotations-api-9.0.98.jar
+│   │   ├── tomcat-embed-core-9.0.98.jar
+│   │   ├── tomcat-embed-el-9.0.98.jar
+│   │   └── tomcat-embed-websocket-9.0.98.jar
+│   └── target
+│       └── seata-namingserver.jar
 └── seata-server
     ├── Dockerfile
     ├── bin
-    │   ├── seata-server.bat
-    │   ├── seata-server.sh
-    │   └── seata-setup.sh
+    │   ├── seata-server.bat
+    │   ├── seata-server.sh
+    │   └── seata-setup.sh
     ├── conf
-    │   ├── application.example.yml
-    │   ├── application.raft.example.yml
-    │   ├── application.yml
-    │   ├── logback
-    │   │   ├── console-appender.xml
-    │   │   ├── file-appender.xml
-    │   │   ├── kafka-appender.xml
-    │   │   ├── logstash-appender.xml
-    │   │   └── metric-appender.xml
-    │   └── logback-spring.xml
+    │   ├── application.example.yml
+    │   ├── application.raft.example.yml
+    │   ├── application.yml
+    │   ├── logback
+    │   │   ├── console-appender.xml
+    │   │   ├── file-appender.xml
+    │   │   ├── kafka-appender.xml
+    │   │   ├── logstash-appender.xml
+    │   │   └── metric-appender.xml
+    │   └── logback-spring.xml
     ├── ext
-    │   └── apm-skywalking
-    │       ├── plugins
-    │       │   ├── apm-jdbc-commons-8.6.0.jar
-    │       │   ├── apm-mysql-5.x-plugin-8.6.0.jar
-    │       │   ├── apm-mysql-6.x-plugin-8.6.0.jar
-    │       │   ├── apm-mysql-8.x-plugin-8.6.0.jar
-    │       │   ├── apm-mysql-commons-8.6.0.jar
-    │       │   └── apm-seata-skywalking-plugin-2.3.0.jar
-    │       └── skywalking-agent.jar
+    │   └── apm-skywalking
+    │       ├── plugins
+    │       │   ├── apm-jdbc-commons-8.6.0.jar
+    │       │   ├── apm-mysql-5.x-plugin-8.6.0.jar
+    │       │   ├── apm-mysql-6.x-plugin-8.6.0.jar
+    │       │   ├── apm-mysql-8.x-plugin-8.6.0.jar
+    │       │   ├── apm-mysql-commons-8.6.0.jar
+    │       │   └── apm-seata-skywalking-plugin-2.3.0.jar
+    │       └── skywalking-agent.jar
     ├── lib
-    │   ├── DmJdbcDriver18-8.1.2.192.jar
-    │   ├── HikariCP-4.0.3.jar
-    │   ├── animal-sniffer-annotations-1.24.jar
-    │   ├── annotations-4.1.1.4.jar
-    │   ├── ant-1.10.12.jar
-    │   ├── ant-launcher-1.10.12.jar
-    │   ├── aopalliance-1.0.jar
-    │   ├── apollo-client-2.0.1.jar
-    │   ├── apollo-core-2.0.1.jar
-    │   ├── archaius-core-0.7.6.jar
-    │   ├── asm-6.0.jar
-    │   ├── audience-annotations-0.12.0.jar
-    │   ├── bolt-1.6.7.jar
-    │   ├── checker-qual-3.37.0.jar
-    │   ├── commons-codec-1.15.jar
-    │   ├── commons-compiler-3.1.10.jar
-    │   ├── commons-configuration-1.10.jar
-    │   ├── commons-dbcp2-2.9.0.jar
-    │   ├── commons-io-2.8.0.jar
-    │   ├── commons-jxpath-1.3.jar
-    │   ├── commons-lang-2.6.jar
-    │   ├── commons-logging-1.2.jar
-    │   ├── commons-math-2.2.jar
-    │   ├── commons-pool-1.6.jar
-    │   ├── commons-pool2-2.11.1.jar
-    │   ├── compactmap-2.0.jar
-    │   ├── config-1.2.1.jar
-    │   ├── consul-api-1.4.2.jar
-    │   ├── curator-client-5.1.0.jar
-    │   ├── curator-framework-5.1.0.jar
-    │   ├── curator-recipes-5.1.0.jar
-    │   ├── curator-test-5.1.0.jar
-    │   ├── dexx-collections-0.2.jar
-    │   ├── disruptor-3.3.7.jar
-    │   ├── druid-1.2.20.jar
-    │   ├── error_prone_annotations-2.21.1.jar
-    │   ├── eureka-client-1.10.18.jar
-    │   ├── failsafe-2.3.3.jar
-    │   ├── failureaccess-1.0.1.jar
-    │   ├── fastjson-1.2.83.jar
-    │   ├── fastjson2-2.0.52.jar
-    │   ├── grpc-api-1.55.1.jar
-    │   ├── grpc-context-1.55.1.jar
-    │   ├── grpc-core-1.55.1.jar
-    │   ├── grpc-grpclb-1.27.1.jar
-    │   ├── grpc-netty-1.55.1.jar
-    │   ├── grpc-protobuf-1.55.1.jar
-    │   ├── grpc-protobuf-lite-1.55.1.jar
-    │   ├── grpc-stub-1.55.1.jar
-    │   ├── grpc-util-1.55.1.jar
-    │   ├── gson-2.9.1.jar
-    │   ├── guava-32.1.3-jre.jar
-    │   ├── guice-5.0.1.jar
-    │   ├── h2-2.1.214.jar
-    │   ├── hamcrest-2.2.jar
-    │   ├── hamcrest-core-2.2.jar
-    │   ├── hessian-4.0.3.jar
-    │   ├── hessian-4.0.63.jar
-    │   ├── httpasyncclient-4.1.5.jar
-    │   ├── httpclient-4.5.14.jar
-    │   ├── httpcore-4.4.16.jar
-    │   ├── httpcore-nio-4.4.16.jar
-    │   ├── j2objc-annotations-2.8.jar
-    │   ├── jackson-annotations-2.13.5.jar
-    │   ├── jackson-core-2.13.5.jar
-    │   ├── jackson-core-asl-1.9.13.jar
-    │   ├── jackson-databind-2.13.5.jar
-    │   ├── jackson-datatype-jdk8-2.13.5.jar
-    │   ├── jackson-datatype-jsr310-2.13.5.jar
-    │   ├── jackson-mapper-asl-1.9.13.jar
-    │   ├── jackson-module-parameter-names-2.13.5.jar
-    │   ├── jakarta.annotation-api-1.3.5.jar
-    │   ├── janino-3.1.10.jar
-    │   ├── javax.inject-1.jar
-    │   ├── javax.servlet-api-4.0.1.jar
-    │   ├── jcommander-1.82.jar
-    │   ├── jctools-core-2.1.1.jar
-    │   ├── jdbc
-    │   │   └── NOTICE.md
-    │   ├── jedis-3.8.0.jar
-    │   ├── jersey-apache-client4-1.19.1.jar
-    │   ├── jersey-client-1.19.1.jar
-    │   ├── jersey-core-1.19.1.jar
-    │   ├── jetcd-common-0.5.0.jar
-    │   ├── jetcd-core-0.5.0.jar
-    │   ├── jetcd-resolver-0.5.0.jar
-    │   ├── jettison-1.5.4.jar
-    │   ├── jjwt-api-0.10.5.jar
-    │   ├── jjwt-impl-0.10.5.jar
-    │   ├── jjwt-jackson-0.10.5.jar
-    │   ├── jna-5.5.0.jar
-    │   ├── joda-time-2.3.jar
-    │   ├── jraft-core-1.3.14.jar
-    │   ├── jsr305-3.0.2.jar
-    │   ├── jsr311-api-1.1.1.jar
-    │   ├── jul-to-slf4j-1.7.36.jar
-    │   ├── junit-4.13.2.jar
-    │   ├── kafka-clients-3.6.1.jar
-    │   ├── kryo-5.4.0.jar
-    │   ├── kryo-serializers-0.45.jar
-    │   ├── logback-classic-1.2.12.jar
-    │   ├── logback-core-1.2.12.jar
-    │   ├── logback-kafka-appender-0.2.0-RC2.jar
-    │   ├── logstash-logback-encoder-6.5.jar
-    │   ├── lz4-java-1.7.1.jar
-    │   ├── metrics-core-4.2.22.jar
-    │   ├── minlog-1.3.1.jar
-    │   ├── mxparser-1.2.2.jar
-    │   ├── nacos-api-1.4.6.jar
-    │   ├── nacos-client-1.4.6.jar
-    │   ├── nacos-common-1.4.6.jar
-    │   ├── netflix-eventbus-0.3.0.jar
-    │   ├── netflix-infix-0.3.0.jar
-    │   ├── netty-all-4.1.101.Final.jar
-    │   ├── netty-buffer-4.1.101.Final.jar
-    │   ├── netty-codec-4.1.101.Final.jar
-    │   ├── netty-codec-dns-4.1.101.Final.jar
-    │   ├── netty-codec-haproxy-4.1.101.Final.jar
-    │   ├── netty-codec-http-4.1.101.Final.jar
-    │   ├── netty-codec-http2-4.1.101.Final.jar
-    │   ├── netty-codec-memcache-4.1.101.Final.jar
-    │   ├── netty-codec-mqtt-4.1.101.Final.jar
-    │   ├── netty-codec-redis-4.1.101.Final.jar
-    │   ├── netty-codec-smtp-4.1.101.Final.jar
-    │   ├── netty-codec-socks-4.1.101.Final.jar
-    │   ├── netty-codec-stomp-4.1.101.Final.jar
-    │   ├── netty-codec-xml-4.1.101.Final.jar
-    │   ├── netty-common-4.1.101.Final.jar
-    │   ├── netty-handler-4.1.101.Final.jar
-    │   ├── netty-handler-proxy-4.1.101.Final.jar
-    │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
-    │   ├── netty-resolver-4.1.101.Final.jar
-    │   ├── netty-resolver-dns-4.1.101.Final.jar
-    │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
-    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
-    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
-    │   ├── netty-transport-4.1.101.Final.jar
-    │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
-    │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
-    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
-    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
-    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
-    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
-    │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
-    │   ├── netty-transport-rxtx-4.1.101.Final.jar
-    │   ├── netty-transport-sctp-4.1.101.Final.jar
-    │   ├── netty-transport-udt-4.1.101.Final.jar
-    │   ├── objenesis-3.2.jar
-    │   ├── perfmark-api-0.25.0.jar
-    │   ├── postgresql-42.3.8.jar
-    │   ├── proto-google-common-protos-2.9.0.jar
-    │   ├── protobuf-java-3.25.4.jar
-    │   ├── protobuf-java-util-3.11.0.jar
-    │   ├── reflectasm-1.11.9.jar
-    │   ├── registry-client-all-6.3.0.jar
-    │   ├── rocksdbjni-8.8.1.jar
-    │   ├── seata-common-2.3.0.jar
-    │   ├── seata-compressor-all-2.3.0.jar
-    │   ├── seata-compressor-bzip2-2.3.0.jar
-    │   ├── seata-compressor-deflater-2.3.0.jar
-    │   ├── seata-compressor-gzip-2.3.0.jar
-    │   ├── seata-compressor-lz4-2.3.0.jar
-    │   ├── seata-compressor-zip-2.3.0.jar
-    │   ├── seata-compressor-zstd-2.3.0.jar
-    │   ├── seata-config-all-2.3.0.jar
-    │   ├── seata-config-apollo-2.3.0.jar
-    │   ├── seata-config-consul-2.3.0.jar
-    │   ├── seata-config-core-2.3.0.jar
-    │   ├── seata-config-etcd3-2.3.0.jar
-    │   ├── seata-config-nacos-2.3.0.jar
-    │   ├── seata-config-spring-cloud-2.3.0.jar
-    │   ├── seata-config-zk-2.3.0.jar
-    │   ├── seata-console-2.3.0.jar
-    │   ├── seata-core-2.3.0.jar
-    │   ├── seata-discovery-all-2.3.0.jar
-    │   ├── seata-discovery-consul-2.3.0.jar
-    │   ├── seata-discovery-core-2.3.0.jar
-    │   ├── seata-discovery-custom-2.3.0.jar
-    │   ├── seata-discovery-etcd3-2.3.0.jar
-    │   ├── seata-discovery-eureka-2.3.0.jar
-    │   ├── seata-discovery-nacos-2.3.0.jar
-    │   ├── seata-discovery-namingserver-2.3.0.jar
-    │   ├── seata-discovery-redis-2.3.0.jar
-    │   ├── seata-discovery-sofa-2.3.0.jar
-    │   ├── seata-discovery-zk-2.3.0.jar
-    │   ├── seata-metrics-all-2.3.0.jar
-    │   ├── seata-metrics-api-2.3.0.jar
-    │   ├── seata-metrics-core-2.3.0.jar
-    │   ├── seata-metrics-exporter-prometheus-2.3.0.jar
-    │   ├── seata-metrics-registry-compact-2.3.0.jar
-    │   ├── seata-serializer-all-2.3.0.jar
-    │   ├── seata-serializer-hessian-2.3.0.jar
-    │   ├── seata-serializer-kryo-2.3.0.jar
-    │   ├── seata-serializer-protobuf-2.3.0.jar
-    │   ├── seata-serializer-seata-2.3.0.jar
-    │   ├── seata-spring-autoconfigure-core-2.3.0.jar
-    │   ├── seata-spring-autoconfigure-server-2.3.0.jar
-    │   ├── servo-core-0.12.21.jar
-    │   ├── simpleclient-0.15.0.jar
-    │   ├── simpleclient_common-0.15.0.jar
-    │   ├── simpleclient_httpserver-0.15.0.jar
-    │   ├── simpleclient_tracer_common-0.15.0.jar
-    │   ├── simpleclient_tracer_otel-0.15.0.jar
-    │   ├── simpleclient_tracer_otel_agent-0.15.0.jar
-    │   ├── slf4j-api-1.7.36.jar
-    │   ├── snakeyaml-2.0.jar
-    │   ├── snappy-java-1.1.10.5.jar
-    │   ├── sofa-common-tools-1.0.12.jar
-    │   ├── spring-aop-5.3.39.jar
-    │   ├── spring-beans-5.3.39.jar
-    │   ├── spring-boot-2.7.18.jar
-    │   ├── spring-boot-autoconfigure-2.7.18.jar
-    │   ├── spring-boot-starter-2.7.18.jar
-    │   ├── spring-boot-starter-json-2.7.18.jar
-    │   ├── spring-boot-starter-logging-2.7.18.jar
-    │   ├── spring-boot-starter-security-2.7.18.jar
-    │   ├── spring-boot-starter-tomcat-2.7.18.jar
-    │   ├── spring-boot-starter-web-2.7.18.jar
-    │   ├── spring-context-5.3.39.jar
-    │   ├── spring-core-5.3.39.jar
-    │   ├── spring-expression-5.3.39.jar
-    │   ├── spring-jcl-5.3.39.jar
-    │   ├── spring-security-config-5.7.11.jar
-    │   ├── spring-security-core-5.7.11.jar
-    │   ├── spring-security-crypto-5.7.11.jar
-    │   ├── spring-security-web-5.7.11.jar
-    │   ├── spring-test-5.3.39.jar
-    │   ├── spring-web-5.3.39.jar
-    │   ├── spring-webmvc-5.3.39.jar
-    │   ├── tomcat-annotations-api-9.0.98.jar
-    │   ├── tomcat-embed-core-9.0.98.jar
-    │   ├── tomcat-embed-el-9.0.98.jar
-    │   ├── tomcat-embed-websocket-9.0.98.jar
-    │   ├── xstream-1.4.20.jar
-    │   ├── zookeeper-3.7.2.jar
-    │   ├── zookeeper-jute-3.7.2.jar
-    │   └── zstd-jni-1.5.0-4.jar
+    │   ├── DmJdbcDriver18-8.1.2.192.jar
+    │   ├── HikariCP-4.0.3.jar
+    │   ├── animal-sniffer-annotations-1.24.jar
+    │   ├── annotations-4.1.1.4.jar
+    │   ├── ant-1.10.12.jar
+    │   ├── ant-launcher-1.10.12.jar
+    │   ├── aopalliance-1.0.jar
+    │   ├── apollo-client-2.0.1.jar
+    │   ├── apollo-core-2.0.1.jar
+    │   ├── archaius-core-0.7.6.jar
+    │   ├── asm-6.0.jar
+    │   ├── audience-annotations-0.12.0.jar
+    │   ├── bolt-1.6.7.jar
+    │   ├── checker-qual-3.37.0.jar
+    │   ├── commons-codec-1.15.jar
+    │   ├── commons-compiler-3.1.10.jar
+    │   ├── commons-configuration-1.10.jar
+    │   ├── commons-dbcp2-2.9.0.jar
+    │   ├── commons-io-2.8.0.jar
+    │   ├── commons-jxpath-1.3.jar
+    │   ├── commons-lang-2.6.jar
+    │   ├── commons-logging-1.2.jar
+    │   ├── commons-math-2.2.jar
+    │   ├── commons-pool-1.6.jar
+    │   ├── commons-pool2-2.11.1.jar
+    │   ├── compactmap-2.0.jar
+    │   ├── config-1.2.1.jar
+    │   ├── consul-api-1.4.2.jar
+    │   ├── curator-client-5.1.0.jar
+    │   ├── curator-framework-5.1.0.jar
+    │   ├── curator-recipes-5.1.0.jar
+    │   ├── curator-test-5.1.0.jar
+    │   ├── dexx-collections-0.2.jar
+    │   ├── disruptor-3.3.7.jar
+    │   ├── druid-1.2.20.jar
+    │   ├── error_prone_annotations-2.21.1.jar
+    │   ├── eureka-client-1.10.18.jar
+    │   ├── failsafe-2.3.3.jar
+    │   ├── failureaccess-1.0.1.jar
+    │   ├── fastjson-1.2.83.jar
+    │   ├── fastjson2-2.0.52.jar
+    │   ├── grpc-api-1.55.1.jar
+    │   ├── grpc-context-1.55.1.jar
+    │   ├── grpc-core-1.55.1.jar
+    │   ├── grpc-grpclb-1.27.1.jar
+    │   ├── grpc-netty-1.55.1.jar
+    │   ├── grpc-protobuf-1.55.1.jar
+    │   ├── grpc-protobuf-lite-1.55.1.jar
+    │   ├── grpc-stub-1.55.1.jar
+    │   ├── grpc-util-1.55.1.jar
+    │   ├── gson-2.9.1.jar
+    │   ├── guava-32.1.3-jre.jar
+    │   ├── guice-5.0.1.jar
+    │   ├── h2-2.1.214.jar
+    │   ├── hamcrest-2.2.jar
+    │   ├── hamcrest-core-2.2.jar
+    │   ├── hessian-4.0.3.jar
+    │   ├── hessian-4.0.63.jar
+    │   ├── httpasyncclient-4.1.5.jar
+    │   ├── httpclient-4.5.14.jar
+    │   ├── httpcore-4.4.16.jar
+    │   ├── httpcore-nio-4.4.16.jar
+    │   ├── j2objc-annotations-2.8.jar
+    │   ├── jackson-annotations-2.13.5.jar
+    │   ├── jackson-core-2.13.5.jar
+    │   ├── jackson-core-asl-1.9.13.jar
+    │   ├── jackson-databind-2.13.5.jar
+    │   ├── jackson-datatype-jdk8-2.13.5.jar
+    │   ├── jackson-datatype-jsr310-2.13.5.jar
+    │   ├── jackson-mapper-asl-1.9.13.jar
+    │   ├── jackson-module-parameter-names-2.13.5.jar
+    │   ├── jakarta.annotation-api-1.3.5.jar
+    │   ├── janino-3.1.10.jar
+    │   ├── javax.inject-1.jar
+    │   ├── javax.servlet-api-4.0.1.jar
+    │   ├── jcommander-1.82.jar
+    │   ├── jctools-core-2.1.1.jar
+    │   ├── jdbc
+    │   │   └── NOTICE.md
+    │   ├── jedis-3.8.0.jar
+    │   ├── jersey-apache-client4-1.19.1.jar
+    │   ├── jersey-client-1.19.1.jar
+    │   ├── jersey-core-1.19.1.jar
+    │   ├── jetcd-common-0.5.0.jar
+    │   ├── jetcd-core-0.5.0.jar
+    │   ├── jetcd-resolver-0.5.0.jar
+    │   ├── jettison-1.5.4.jar
+    │   ├── jjwt-api-0.10.5.jar
+    │   ├── jjwt-impl-0.10.5.jar
+    │   ├── jjwt-jackson-0.10.5.jar
+    │   ├── jna-5.5.0.jar
+    │   ├── joda-time-2.3.jar
+    │   ├── jraft-core-1.3.14.jar
+    │   ├── jsr305-3.0.2.jar
+    │   ├── jsr311-api-1.1.1.jar
+    │   ├── jul-to-slf4j-1.7.36.jar
+    │   ├── junit-4.13.2.jar
+    │   ├── kafka-clients-3.6.1.jar
+    │   ├── kryo-5.4.0.jar
+    │   ├── kryo-serializers-0.45.jar
+    │   ├── logback-classic-1.2.12.jar
+    │   ├── logback-core-1.2.12.jar
+    │   ├── logback-kafka-appender-0.2.0-RC2.jar
+    │   ├── logstash-logback-encoder-6.5.jar
+    │   ├── lz4-java-1.7.1.jar
+    │   ├── metrics-core-4.2.22.jar
+    │   ├── minlog-1.3.1.jar
+    │   ├── mxparser-1.2.2.jar
+    │   ├── nacos-api-1.4.6.jar
+    │   ├── nacos-client-1.4.6.jar
+    │   ├── nacos-common-1.4.6.jar
+    │   ├── netflix-eventbus-0.3.0.jar
+    │   ├── netflix-infix-0.3.0.jar
+    │   ├── netty-all-4.1.101.Final.jar
+    │   ├── netty-buffer-4.1.101.Final.jar
+    │   ├── netty-codec-4.1.101.Final.jar
+    │   ├── netty-codec-dns-4.1.101.Final.jar
+    │   ├── netty-codec-haproxy-4.1.101.Final.jar
+    │   ├── netty-codec-http-4.1.101.Final.jar
+    │   ├── netty-codec-http2-4.1.101.Final.jar
+    │   ├── netty-codec-memcache-4.1.101.Final.jar
+    │   ├── netty-codec-mqtt-4.1.101.Final.jar
+    │   ├── netty-codec-redis-4.1.101.Final.jar
+    │   ├── netty-codec-smtp-4.1.101.Final.jar
+    │   ├── netty-codec-socks-4.1.101.Final.jar
+    │   ├── netty-codec-stomp-4.1.101.Final.jar
+    │   ├── netty-codec-xml-4.1.101.Final.jar
+    │   ├── netty-common-4.1.101.Final.jar
+    │   ├── netty-handler-4.1.101.Final.jar
+    │   ├── netty-handler-proxy-4.1.101.Final.jar
+    │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
+    │   ├── netty-resolver-4.1.101.Final.jar
+    │   ├── netty-resolver-dns-4.1.101.Final.jar
+    │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
+    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
+    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
+    │   ├── netty-transport-4.1.101.Final.jar
+    │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
+    │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
+    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
+    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
+    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
+    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
+    │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
+    │   ├── netty-transport-rxtx-4.1.101.Final.jar
+    │   ├── netty-transport-sctp-4.1.101.Final.jar
+    │   ├── netty-transport-udt-4.1.101.Final.jar
+    │   ├── objenesis-3.2.jar
+    │   ├── perfmark-api-0.25.0.jar
+    │   ├── postgresql-42.3.8.jar
+    │   ├── proto-google-common-protos-2.9.0.jar
+    │   ├── protobuf-java-3.25.4.jar
+    │   ├── protobuf-java-util-3.11.0.jar
+    │   ├── reflectasm-1.11.9.jar
+    │   ├── registry-client-all-6.3.0.jar
+    │   ├── rocksdbjni-8.8.1.jar
+    │   ├── seata-common-2.3.0.jar
+    │   ├── seata-compressor-all-2.3.0.jar
+    │   ├── seata-compressor-bzip2-2.3.0.jar
+    │   ├── seata-compressor-deflater-2.3.0.jar
+    │   ├── seata-compressor-gzip-2.3.0.jar
+    │   ├── seata-compressor-lz4-2.3.0.jar
+    │   ├── seata-compressor-zip-2.3.0.jar
+    │   ├── seata-compressor-zstd-2.3.0.jar
+    │   ├── seata-config-all-2.3.0.jar
+    │   ├── seata-config-apollo-2.3.0.jar
+    │   ├── seata-config-consul-2.3.0.jar
+    │   ├── seata-config-core-2.3.0.jar
+    │   ├── seata-config-etcd3-2.3.0.jar
+    │   ├── seata-config-nacos-2.3.0.jar
+    │   ├── seata-config-spring-cloud-2.3.0.jar
+    │   ├── seata-config-zk-2.3.0.jar
+    │   ├── seata-console-2.3.0.jar
+    │   ├── seata-core-2.3.0.jar
+    │   ├── seata-discovery-all-2.3.0.jar
+    │   ├── seata-discovery-consul-2.3.0.jar
+    │   ├── seata-discovery-core-2.3.0.jar
+    │   ├── seata-discovery-custom-2.3.0.jar
+    │   ├── seata-discovery-etcd3-2.3.0.jar
+    │   ├── seata-discovery-eureka-2.3.0.jar
+    │   ├── seata-discovery-nacos-2.3.0.jar
+    │   ├── seata-discovery-namingserver-2.3.0.jar
+    │   ├── seata-discovery-redis-2.3.0.jar
+    │   ├── seata-discovery-sofa-2.3.0.jar
+    │   ├── seata-discovery-zk-2.3.0.jar
+    │   ├── seata-metrics-all-2.3.0.jar
+    │   ├── seata-metrics-api-2.3.0.jar
+    │   ├── seata-metrics-core-2.3.0.jar
+    │   ├── seata-metrics-exporter-prometheus-2.3.0.jar
+    │   ├── seata-metrics-registry-compact-2.3.0.jar
+    │   ├── seata-serializer-all-2.3.0.jar
+    │   ├── seata-serializer-hessian-2.3.0.jar
+    │   ├── seata-serializer-kryo-2.3.0.jar
+    │   ├── seata-serializer-protobuf-2.3.0.jar
+    │   ├── seata-serializer-seata-2.3.0.jar
+    │   ├── seata-spring-autoconfigure-core-2.3.0.jar
+    │   ├── seata-spring-autoconfigure-server-2.3.0.jar
+    │   ├── servo-core-0.12.21.jar
+    │   ├── simpleclient-0.15.0.jar
+    │   ├── simpleclient_common-0.15.0.jar
+    │   ├── simpleclient_httpserver-0.15.0.jar
+    │   ├── simpleclient_tracer_common-0.15.0.jar
+    │   ├── simpleclient_tracer_otel-0.15.0.jar
+    │   ├── simpleclient_tracer_otel_agent-0.15.0.jar
+    │   ├── slf4j-api-1.7.36.jar
+    │   ├── snakeyaml-2.0.jar
+    │   ├── snappy-java-1.1.10.5.jar
+    │   ├── sofa-common-tools-1.0.12.jar
+    │   ├── spring-aop-5.3.39.jar
+    │   ├── spring-beans-5.3.39.jar
+    │   ├── spring-boot-2.7.18.jar
+    │   ├── spring-boot-autoconfigure-2.7.18.jar
+    │   ├── spring-boot-starter-2.7.18.jar
+    │   ├── spring-boot-starter-json-2.7.18.jar
+    │   ├── spring-boot-starter-logging-2.7.18.jar
+    │   ├── spring-boot-starter-security-2.7.18.jar
+    │   ├── spring-boot-starter-tomcat-2.7.18.jar
+    │   ├── spring-boot-starter-web-2.7.18.jar
+    │   ├── spring-context-5.3.39.jar
+    │   ├── spring-core-5.3.39.jar
+    │   ├── spring-expression-5.3.39.jar
+    │   ├── spring-jcl-5.3.39.jar
+    │   ├── spring-security-config-5.7.11.jar
+    │   ├── spring-security-core-5.7.11.jar
+    │   ├── spring-security-crypto-5.7.11.jar
+    │   ├── spring-security-web-5.7.11.jar
+    │   ├── spring-test-5.3.39.jar
+    │   ├── spring-web-5.3.39.jar
+    │   ├── spring-webmvc-5.3.39.jar
+    │   ├── tomcat-annotations-api-9.0.98.jar
+    │   ├── tomcat-embed-core-9.0.98.jar
+    │   ├── tomcat-embed-el-9.0.98.jar
+    │   ├── tomcat-embed-websocket-9.0.98.jar
+    │   ├── xstream-1.4.21.jar
+    │   ├── zookeeper-3.7.2.jar
+    │   ├── zookeeper-jute-3.7.2.jar
+    │   └── zstd-jni-1.5.0-4.jar
     ├── script
-    │   ├── config-center
-    │   │   ├── README.md
-    │   │   ├── apollo
-    │   │   │   ├── apollo-config-interactive.sh
-    │   │   │   └── apollo-config.sh
-    │   │   ├── config.txt
-    │   │   ├── consul
-    │   │   │   ├── consul-config-interactive.sh
-    │   │   │   └── consul-config.sh
-    │   │   ├── etcd3
-    │   │   │   ├── etcd3-config-interactive.sh
-    │   │   │   └── etcd3-config.sh
-    │   │   ├── nacos
-    │   │   │   ├── nacos-config-interactive.py
-    │   │   │   ├── nacos-config-interactive.sh
-    │   │   │   ├── nacos-config.py
-    │   │   │   └── nacos-config.sh
-    │   │   └── zk
-    │   │       ├── zk-config-interactive.sh
-    │   │       └── zk-config.sh
-    │   ├── logstash
-    │   │   └── config
-    │   │       ├── logstash-kafka.conf
-    │   │       └── logstash-logback.conf
-    │   └── server
-    │       ├── db
-    │       │   ├── dm.sql
-    │       │   ├── mysql.sql
-    │       │   ├── oracle.sql
-    │       │   ├── postgresql.sql
-    │       │   └── sqlserver.sql
-    │       ├── docker-compose
-    │       │   └── docker-compose.yaml
-    │       ├── helm
-    │       │   └── seata-server
-    │       │       ├── Chart.yaml
-    │       │       ├── templates
-    │       │       │   ├── NOTES.txt
-    │       │       │   ├── _helpers.tpl
-    │       │       │   ├── deployment.yaml
-    │       │       │   ├── service.yaml
-    │       │       │   └── tests
-    │       │       │       └── test-connection.yaml
-    │       │       └── values.yaml
-    │       └── kubernetes
-    │           └── seata-server.yaml
+    │   ├── config-center
+    │   │   ├── README.md
+    │   │   ├── apollo
+    │   │   │   ├── apollo-config-interactive.sh
+    │   │   │   └── apollo-config.sh
+    │   │   ├── config.txt
+    │   │   ├── consul
+    │   │   │   ├── consul-config-interactive.sh
+    │   │   │   └── consul-config.sh
+    │   │   ├── etcd3
+    │   │   │   ├── etcd3-config-interactive.sh
+    │   │   │   └── etcd3-config.sh
+    │   │   ├── nacos
+    │   │   │   ├── nacos-config-interactive.py
+    │   │   │   ├── nacos-config-interactive.sh
+    │   │   │   ├── nacos-config.py
+    │   │   │   └── nacos-config.sh
+    │   │   └── zk
+    │   │       ├── zk-config-interactive.sh
+    │   │       └── zk-config.sh
+    │   ├── logstash
+    │   │   └── config
+    │   │       ├── logstash-kafka.conf
+    │   │       └── logstash-logback.conf
+    │   └── server
+    │       ├── db
+    │       │   ├── dm.sql
+    │       │   ├── mysql.sql
+    │       │   ├── oracle.sql
+    │       │   ├── postgresql.sql
+    │       │   └── sqlserver.sql
+    │       ├── docker-compose
+    │       │   └── docker-compose.yaml
+    │       ├── helm
+    │       │   └── seata-server
+    │       │       ├── Chart.yaml
+    │       │       ├── templates
+    │       │       │   ├── NOTES.txt
+    │       │       │   ├── _helpers.tpl
+    │       │       │   ├── deployment.yaml
+    │       │       │   ├── service.yaml
+    │       │       │   └── tests
+    │       │       │       └── test-connection.yaml
+    │       │       └── values.yaml
+    │       └── kubernetes
+    │           └── seata-server.yaml
     └── target
         └── seata-server.jar
 
@@ -418,418 +418,418 @@ Please copy database driver dependencies, such as `mysql-connector-java.jar`, to
 
 由于license兼容性问题,我们不能将mysql、mariadb、oracle等jar依赖包含在发布包中。
 请将数据库driver相关依赖例如:`mysql-connector-java.jar`,拷贝到此目录下。目录结构示例如下:
-```
+```aidl
 .
 ├── DISCLAIMER
 ├── LICENSE
 ├── NOTICE
 ├── seata-namingserver
-│   ├── Dockerfile
-│   ├── bin
-│   │   ├── seata-namingserver-setup.sh
-│   │   ├── seata-namingserver.bat
-│   │   └── seata-namingserver.sh
-│   ├── conf
-│   │   ├── application.yml
-│   │   ├── logback
-│   │   │   ├── console-appender.xml
-│   │   │   └── file-appender.xml
-│   │   └── logback-spring.xml
-│   ├── lib
-│   │   ├── caffeine-2.9.3.jar
-│   │   ├── checker-qual-3.37.0.jar
-│   │   ├── commons-codec-1.15.jar
-│   │   ├── commons-compiler-3.1.10.jar
-│   │   ├── commons-lang-2.6.jar
-│   │   ├── commons-lang3-3.12.0.jar
-│   │   ├── error_prone_annotations-2.21.1.jar
-│   │   ├── httpclient-4.5.14.jar
-│   │   ├── httpcore-4.4.16.jar
-│   │   ├── jackson-annotations-2.13.5.jar
-│   │   ├── jackson-core-2.13.5.jar
-│   │   ├── jackson-databind-2.13.5.jar
-│   │   ├── jackson-datatype-jdk8-2.13.5.jar
-│   │   ├── jackson-datatype-jsr310-2.13.5.jar
-│   │   ├── jackson-module-parameter-names-2.13.5.jar
-│   │   ├── jakarta.annotation-api-1.3.5.jar
-│   │   ├── janino-3.1.10.jar
-│   │   ├── jul-to-slf4j-1.7.36.jar
-│   │   ├── log4j-api-2.17.2.jar
-│   │   ├── log4j-to-slf4j-2.17.2.jar
-│   │   ├── logback-classic-1.2.12.jar
-│   │   ├── logback-core-1.2.12.jar
-│   │   ├── netty-all-4.1.101.Final.jar
-│   │   ├── netty-buffer-4.1.101.Final.jar
-│   │   ├── netty-codec-4.1.101.Final.jar
-│   │   ├── netty-codec-dns-4.1.101.Final.jar
-│   │   ├── netty-codec-haproxy-4.1.101.Final.jar
-│   │   ├── netty-codec-http-4.1.101.Final.jar
-│   │   ├── netty-codec-http2-4.1.101.Final.jar
-│   │   ├── netty-codec-memcache-4.1.101.Final.jar
-│   │   ├── netty-codec-mqtt-4.1.101.Final.jar
-│   │   ├── netty-codec-redis-4.1.101.Final.jar
-│   │   ├── netty-codec-smtp-4.1.101.Final.jar
-│   │   ├── netty-codec-socks-4.1.101.Final.jar
-│   │   ├── netty-codec-stomp-4.1.101.Final.jar
-│   │   ├── netty-codec-xml-4.1.101.Final.jar
-│   │   ├── netty-common-4.1.101.Final.jar
-│   │   ├── netty-handler-4.1.101.Final.jar
-│   │   ├── netty-handler-proxy-4.1.101.Final.jar
-│   │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
-│   │   ├── netty-resolver-4.1.101.Final.jar
-│   │   ├── netty-resolver-dns-4.1.101.Final.jar
-│   │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
-│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
-│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
-│   │   ├── netty-transport-4.1.101.Final.jar
-│   │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
-│   │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
-│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
-│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
-│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
-│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
-│   │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
-│   │   ├── netty-transport-rxtx-4.1.101.Final.jar
-│   │   ├── netty-transport-sctp-4.1.101.Final.jar
-│   │   ├── netty-transport-udt-4.1.101.Final.jar
-│   │   ├── seata-common-2.3.0.jar
-│   │   ├── slf4j-api-1.7.36.jar
-│   │   ├── snakeyaml-2.0.jar
-│   │   ├── spring-aop-5.3.39.jar
-│   │   ├── spring-beans-5.3.39.jar
-│   │   ├── spring-boot-2.7.18.jar
-│   │   ├── spring-boot-autoconfigure-2.7.18.jar
-│   │   ├── spring-boot-starter-2.7.18.jar
-│   │   ├── spring-boot-starter-json-2.7.18.jar
-│   │   ├── spring-boot-starter-logging-2.7.18.jar
-│   │   ├── spring-boot-starter-tomcat-2.7.18.jar
-│   │   ├── spring-boot-starter-web-2.7.18.jar
-│   │   ├── spring-context-5.3.39.jar
-│   │   ├── spring-core-5.3.39.jar
-│   │   ├── spring-expression-5.3.39.jar
-│   │   ├── spring-jcl-5.3.39.jar
-│   │   ├── spring-web-5.3.39.jar
-│   │   ├── spring-webmvc-5.3.39.jar
-│   │   ├── tomcat-annotations-api-9.0.98.jar
-│   │   ├── tomcat-embed-core-9.0.98.jar
-│   │   ├── tomcat-embed-el-9.0.98.jar
-│   │   └── tomcat-embed-websocket-9.0.98.jar
-│   └── target
-│       └── seata-namingserver.jar
+│   ├── Dockerfile
+│   ├── bin
+│   │   ├── seata-namingserver-setup.sh
+│   │   ├── seata-namingserver.bat
+│   │   └── seata-namingserver.sh
+│   ├── conf
+│   │   ├── application.yml
+│   │   ├── logback
+│   │   │   ├── console-appender.xml
+│   │   │   └── file-appender.xml
+│   │   └── logback-spring.xml
+│   ├── lib
+│   │   ├── caffeine-2.9.3.jar
+│   │   ├── checker-qual-3.37.0.jar
+│   │   ├── commons-codec-1.15.jar
+│   │   ├── commons-compiler-3.1.10.jar
+│   │   ├── commons-lang-2.6.jar
+│   │   ├── commons-lang3-3.12.0.jar
+│   │   ├── error_prone_annotations-2.21.1.jar
+│   │   ├── httpclient-4.5.14.jar
+│   │   ├── httpcore-4.4.16.jar
+│   │   ├── jackson-annotations-2.13.5.jar
+│   │   ├── jackson-core-2.13.5.jar
+│   │   ├── jackson-databind-2.13.5.jar
+│   │   ├── jackson-datatype-jdk8-2.13.5.jar
+│   │   ├── jackson-datatype-jsr310-2.13.5.jar
+│   │   ├── jackson-module-parameter-names-2.13.5.jar
+│   │   ├── jakarta.annotation-api-1.3.5.jar
+│   │   ├── janino-3.1.10.jar
+│   │   ├── jul-to-slf4j-1.7.36.jar
+│   │   ├── log4j-api-2.17.2.jar
+│   │   ├── log4j-to-slf4j-2.17.2.jar
+│   │   ├── logback-classic-1.2.12.jar
+│   │   ├── logback-core-1.2.12.jar
+│   │   ├── netty-all-4.1.101.Final.jar
+│   │   ├── netty-buffer-4.1.101.Final.jar
+│   │   ├── netty-codec-4.1.101.Final.jar
+│   │   ├── netty-codec-dns-4.1.101.Final.jar
+│   │   ├── netty-codec-haproxy-4.1.101.Final.jar
+│   │   ├── netty-codec-http-4.1.101.Final.jar
+│   │   ├── netty-codec-http2-4.1.101.Final.jar
+│   │   ├── netty-codec-memcache-4.1.101.Final.jar
+│   │   ├── netty-codec-mqtt-4.1.101.Final.jar
+│   │   ├── netty-codec-redis-4.1.101.Final.jar
+│   │   ├── netty-codec-smtp-4.1.101.Final.jar
+│   │   ├── netty-codec-socks-4.1.101.Final.jar
+│   │   ├── netty-codec-stomp-4.1.101.Final.jar
+│   │   ├── netty-codec-xml-4.1.101.Final.jar
+│   │   ├── netty-common-4.1.101.Final.jar
+│   │   ├── netty-handler-4.1.101.Final.jar
+│   │   ├── netty-handler-proxy-4.1.101.Final.jar
+│   │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
+│   │   ├── netty-resolver-4.1.101.Final.jar
+│   │   ├── netty-resolver-dns-4.1.101.Final.jar
+│   │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
+│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
+│   │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
+│   │   ├── netty-transport-4.1.101.Final.jar
+│   │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
+│   │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
+│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
+│   │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
+│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
+│   │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
+│   │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
+│   │   ├── netty-transport-rxtx-4.1.101.Final.jar
+│   │   ├── netty-transport-sctp-4.1.101.Final.jar
+│   │   ├── netty-transport-udt-4.1.101.Final.jar
+│   │   ├── seata-common-2.3.0.jar
+│   │   ├── slf4j-api-1.7.36.jar
+│   │   ├── snakeyaml-2.0.jar
+│   │   ├── spring-aop-5.3.39.jar
+│   │   ├── spring-beans-5.3.39.jar
+│   │   ├── spring-boot-2.7.18.jar
+│   │   ├── spring-boot-autoconfigure-2.7.18.jar
+│   │   ├── spring-boot-starter-2.7.18.jar
+│   │   ├── spring-boot-starter-json-2.7.18.jar
+│   │   ├── spring-boot-starter-logging-2.7.18.jar
+│   │   ├── spring-boot-starter-tomcat-2.7.18.jar
+│   │   ├── spring-boot-starter-web-2.7.18.jar
+│   │   ├── spring-context-5.3.39.jar
+│   │   ├── spring-core-5.3.39.jar
+│   │   ├── spring-expression-5.3.39.jar
+│   │   ├── spring-jcl-5.3.39.jar
+│   │   ├── spring-web-5.3.39.jar
+│   │   ├── spring-webmvc-5.3.39.jar
+│   │   ├── tomcat-annotations-api-9.0.98.jar
+│   │   ├── tomcat-embed-core-9.0.98.jar
+│   │   ├── tomcat-embed-el-9.0.98.jar
+│   │   └── tomcat-embed-websocket-9.0.98.jar
+│   └── target
+│       └── seata-namingserver.jar
 └── seata-server
     ├── Dockerfile
     ├── bin
-    │   ├── seata-server.bat
-    │   ├── seata-server.sh
-    │   └── seata-setup.sh
+    │   ├── seata-server.bat
+    │   ├── seata-server.sh
+    │   └── seata-setup.sh
     ├── conf
-    │   ├── application.example.yml
-    │   ├── application.raft.example.yml
-    │   ├── application.yml
-    │   ├── logback
-    │   │   ├── console-appender.xml
-    │   │   ├── file-appender.xml
-    │   │   ├── kafka-appender.xml
-    │   │   ├── logstash-appender.xml
-    │   │   └── metric-appender.xml
-    │   └── logback-spring.xml
+    │   ├── application.example.yml
+    │   ├── application.raft.example.yml
+    │   ├── application.yml
+    │   ├── logback
+    │   │   ├── console-appender.xml
+    │   │   ├── file-appender.xml
+    │   │   ├── kafka-appender.xml
+    │   │   ├── logstash-appender.xml
+    │   │   └── metric-appender.xml
+    │   └── logback-spring.xml
     ├── ext
-    │   └── apm-skywalking
-    │       ├── plugins
-    │       │   ├── apm-jdbc-commons-8.6.0.jar
-    │       │   ├── apm-mysql-5.x-plugin-8.6.0.jar
-    │       │   ├── apm-mysql-6.x-plugin-8.6.0.jar
-    │       │   ├── apm-mysql-8.x-plugin-8.6.0.jar
-    │       │   ├── apm-mysql-commons-8.6.0.jar
-    │       │   └── apm-seata-skywalking-plugin-2.3.0.jar
-    │       └── skywalking-agent.jar
+    │   └── apm-skywalking
+    │       ├── plugins
+    │       │   ├── apm-jdbc-commons-8.6.0.jar
+    │       │   ├── apm-mysql-5.x-plugin-8.6.0.jar
+    │       │   ├── apm-mysql-6.x-plugin-8.6.0.jar
+    │       │   ├── apm-mysql-8.x-plugin-8.6.0.jar
+    │       │   ├── apm-mysql-commons-8.6.0.jar
+    │       │   └── apm-seata-skywalking-plugin-2.3.0.jar
+    │       └── skywalking-agent.jar
     ├── lib
-    │   ├── DmJdbcDriver18-8.1.2.192.jar
-    │   ├── HikariCP-4.0.3.jar
-    │   ├── animal-sniffer-annotations-1.24.jar
-    │   ├── annotations-4.1.1.4.jar
-    │   ├── ant-1.10.12.jar
-    │   ├── ant-launcher-1.10.12.jar
-    │   ├── aopalliance-1.0.jar
-    │   ├── apollo-client-2.0.1.jar
-    │   ├── apollo-core-2.0.1.jar
-    │   ├── archaius-core-0.7.6.jar
-    │   ├── asm-6.0.jar
-    │   ├── audience-annotations-0.12.0.jar
-    │   ├── bolt-1.6.7.jar
-    │   ├── checker-qual-3.37.0.jar
-    │   ├── commons-codec-1.15.jar
-    │   ├── commons-compiler-3.1.10.jar
-    │   ├── commons-configuration-1.10.jar
-    │   ├── commons-dbcp2-2.9.0.jar
-    │   ├── commons-io-2.8.0.jar
-    │   ├── commons-jxpath-1.3.jar
-    │   ├── commons-lang-2.6.jar
-    │   ├── commons-logging-1.2.jar
-    │   ├── commons-math-2.2.jar
-    │   ├── commons-pool-1.6.jar
-    │   ├── commons-pool2-2.11.1.jar
-    │   ├── compactmap-2.0.jar
-    │   ├── config-1.2.1.jar
-    │   ├── consul-api-1.4.2.jar
-    │   ├── curator-client-5.1.0.jar
-    │   ├── curator-framework-5.1.0.jar
-    │   ├── curator-recipes-5.1.0.jar
-    │   ├── curator-test-5.1.0.jar
-    │   ├── dexx-collections-0.2.jar
-    │   ├── disruptor-3.3.7.jar
-    │   ├── druid-1.2.20.jar
-    │   ├── error_prone_annotations-2.21.1.jar
-    │   ├── eureka-client-1.10.18.jar
-    │   ├── failsafe-2.3.3.jar
-    │   ├── failureaccess-1.0.1.jar
-    │   ├── fastjson-1.2.83.jar
-    │   ├── fastjson2-2.0.52.jar
-    │   ├── grpc-api-1.55.1.jar
-    │   ├── grpc-context-1.55.1.jar
-    │   ├── grpc-core-1.55.1.jar
-    │   ├── grpc-grpclb-1.27.1.jar
-    │   ├── grpc-netty-1.55.1.jar
-    │   ├── grpc-protobuf-1.55.1.jar
-    │   ├── grpc-protobuf-lite-1.55.1.jar
-    │   ├── grpc-stub-1.55.1.jar
-    │   ├── grpc-util-1.55.1.jar
-    │   ├── gson-2.9.1.jar
-    │   ├── guava-32.1.3-jre.jar
-    │   ├── guice-5.0.1.jar
-    │   ├── h2-2.1.214.jar
-    │   ├── hamcrest-2.2.jar
-    │   ├── hamcrest-core-2.2.jar
-    │   ├── hessian-4.0.3.jar
-    │   ├── hessian-4.0.63.jar
-    │   ├── httpasyncclient-4.1.5.jar
-    │   ├── httpclient-4.5.14.jar
-    │   ├── httpcore-4.4.16.jar
-    │   ├── httpcore-nio-4.4.16.jar
-    │   ├── j2objc-annotations-2.8.jar
-    │   ├── jackson-annotations-2.13.5.jar
-    │   ├── jackson-core-2.13.5.jar
-    │   ├── jackson-core-asl-1.9.13.jar
-    │   ├── jackson-databind-2.13.5.jar
-    │   ├── jackson-datatype-jdk8-2.13.5.jar
-    │   ├── jackson-datatype-jsr310-2.13.5.jar
-    │   ├── jackson-mapper-asl-1.9.13.jar
-    │   ├── jackson-module-parameter-names-2.13.5.jar
-    │   ├── jakarta.annotation-api-1.3.5.jar
-    │   ├── janino-3.1.10.jar
-    │   ├── javax.inject-1.jar
-    │   ├── javax.servlet-api-4.0.1.jar
-    │   ├── jcommander-1.82.jar
-    │   ├── jctools-core-2.1.1.jar
-    │   ├── jdbc
-    │   │   └── NOTICE.md
-    │   │   └── mysql-connector-java-8.0.28.jar
-    │   ├── jedis-3.8.0.jar
-    │   ├── jersey-apache-client4-1.19.1.jar
-    │   ├── jersey-client-1.19.1.jar
-    │   ├── jersey-core-1.19.1.jar
-    │   ├── jetcd-common-0.5.0.jar
-    │   ├── jetcd-core-0.5.0.jar
-    │   ├── jetcd-resolver-0.5.0.jar
-    │   ├── jettison-1.5.4.jar
-    │   ├── jjwt-api-0.10.5.jar
-    │   ├── jjwt-impl-0.10.5.jar
-    │   ├── jjwt-jackson-0.10.5.jar
-    │   ├── jna-5.5.0.jar
-    │   ├── joda-time-2.3.jar
-    │   ├── jraft-core-1.3.14.jar
-    │   ├── jsr305-3.0.2.jar
-    │   ├── jsr311-api-1.1.1.jar
-    │   ├── jul-to-slf4j-1.7.36.jar
-    │   ├── junit-4.13.2.jar
-    │   ├── kafka-clients-3.6.1.jar
-    │   ├── kryo-5.4.0.jar
-    │   ├── kryo-serializers-0.45.jar
-    │   ├── logback-classic-1.2.12.jar
-    │   ├── logback-core-1.2.12.jar
-    │   ├── logback-kafka-appender-0.2.0-RC2.jar
-    │   ├── logstash-logback-encoder-6.5.jar
-    │   ├── lz4-java-1.7.1.jar
-    │   ├── metrics-core-4.2.22.jar
-    │   ├── minlog-1.3.1.jar
-    │   ├── mxparser-1.2.2.jar
-    │   ├── nacos-api-1.4.6.jar
-    │   ├── nacos-client-1.4.6.jar
-    │   ├── nacos-common-1.4.6.jar
-    │   ├── netflix-eventbus-0.3.0.jar
-    │   ├── netflix-infix-0.3.0.jar
-    │   ├── netty-all-4.1.101.Final.jar
-    │   ├── netty-buffer-4.1.101.Final.jar
-    │   ├── netty-codec-4.1.101.Final.jar
-    │   ├── netty-codec-dns-4.1.101.Final.jar
-    │   ├── netty-codec-haproxy-4.1.101.Final.jar
-    │   ├── netty-codec-http-4.1.101.Final.jar
-    │   ├── netty-codec-http2-4.1.101.Final.jar
-    │   ├── netty-codec-memcache-4.1.101.Final.jar
-    │   ├── netty-codec-mqtt-4.1.101.Final.jar
-    │   ├── netty-codec-redis-4.1.101.Final.jar
-    │   ├── netty-codec-smtp-4.1.101.Final.jar
-    │   ├── netty-codec-socks-4.1.101.Final.jar
-    │   ├── netty-codec-stomp-4.1.101.Final.jar
-    │   ├── netty-codec-xml-4.1.101.Final.jar
-    │   ├── netty-common-4.1.101.Final.jar
-    │   ├── netty-handler-4.1.101.Final.jar
-    │   ├── netty-handler-proxy-4.1.101.Final.jar
-    │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
-    │   ├── netty-resolver-4.1.101.Final.jar
-    │   ├── netty-resolver-dns-4.1.101.Final.jar
-    │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
-    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
-    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
-    │   ├── netty-transport-4.1.101.Final.jar
-    │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
-    │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
-    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
-    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
-    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
-    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
-    │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
-    │   ├── netty-transport-rxtx-4.1.101.Final.jar
-    │   ├── netty-transport-sctp-4.1.101.Final.jar
-    │   ├── netty-transport-udt-4.1.101.Final.jar
-    │   ├── objenesis-3.2.jar
-    │   ├── perfmark-api-0.25.0.jar
-    │   ├── postgresql-42.3.8.jar
-    │   ├── proto-google-common-protos-2.9.0.jar
-    │   ├── protobuf-java-3.25.4.jar
-    │   ├── protobuf-java-util-3.11.0.jar
-    │   ├── reflectasm-1.11.9.jar
-    │   ├── registry-client-all-6.3.0.jar
-    │   ├── rocksdbjni-8.8.1.jar
-    │   ├── seata-common-2.3.0.jar
-    │   ├── seata-compressor-all-2.3.0.jar
-    │   ├── seata-compressor-bzip2-2.3.0.jar
-    │   ├── seata-compressor-deflater-2.3.0.jar
-    │   ├── seata-compressor-gzip-2.3.0.jar
-    │   ├── seata-compressor-lz4-2.3.0.jar
-    │   ├── seata-compressor-zip-2.3.0.jar
-    │   ├── seata-compressor-zstd-2.3.0.jar
-    │   ├── seata-config-all-2.3.0.jar
-    │   ├── seata-config-apollo-2.3.0.jar
-    │   ├── seata-config-consul-2.3.0.jar
-    │   ├── seata-config-core-2.3.0.jar
-    │   ├── seata-config-etcd3-2.3.0.jar
-    │   ├── seata-config-nacos-2.3.0.jar
-    │   ├── seata-config-spring-cloud-2.3.0.jar
-    │   ├── seata-config-zk-2.3.0.jar
-    │   ├── seata-console-2.3.0.jar
-    │   ├── seata-core-2.3.0.jar
-    │   ├── seata-discovery-all-2.3.0.jar
-    │   ├── seata-discovery-consul-2.3.0.jar
-    │   ├── seata-discovery-core-2.3.0.jar
-    │   ├── seata-discovery-custom-2.3.0.jar
-    │   ├── seata-discovery-etcd3-2.3.0.jar
-    │   ├── seata-discovery-eureka-2.3.0.jar
-    │   ├── seata-discovery-nacos-2.3.0.jar
-    │   ├── seata-discovery-namingserver-2.3.0.jar
-    │   ├── seata-discovery-redis-2.3.0.jar
-    │   ├── seata-discovery-sofa-2.3.0.jar
-    │   ├── seata-discovery-zk-2.3.0.jar
-    │   ├── seata-metrics-all-2.3.0.jar
-    │   ├── seata-metrics-api-2.3.0.jar
-    │   ├── seata-metrics-core-2.3.0.jar
-    │   ├── seata-metrics-exporter-prometheus-2.3.0.jar
-    │   ├── seata-metrics-registry-compact-2.3.0.jar
-    │   ├── seata-serializer-all-2.3.0.jar
-    │   ├── seata-serializer-hessian-2.3.0.jar
-    │   ├── seata-serializer-kryo-2.3.0.jar
-    │   ├── seata-serializer-protobuf-2.3.0.jar
-    │   ├── seata-serializer-seata-2.3.0.jar
-    │   ├── seata-spring-autoconfigure-core-2.3.0.jar
-    │   ├── seata-spring-autoconfigure-server-2.3.0.jar
-    │   ├── servo-core-0.12.21.jar
-    │   ├── simpleclient-0.15.0.jar
-    │   ├── simpleclient_common-0.15.0.jar
-    │   ├── simpleclient_httpserver-0.15.0.jar
-    │   ├── simpleclient_tracer_common-0.15.0.jar
-    │   ├── simpleclient_tracer_otel-0.15.0.jar
-    │   ├── simpleclient_tracer_otel_agent-0.15.0.jar
-    │   ├── slf4j-api-1.7.36.jar
-    │   ├── snakeyaml-2.0.jar
-    │   ├── snappy-java-1.1.10.5.jar
-    │   ├── sofa-common-tools-1.0.12.jar
-    │   ├── spring-aop-5.3.39.jar
-    │   ├── spring-beans-5.3.39.jar
-    │   ├── spring-boot-2.7.18.jar
-    │   ├── spring-boot-autoconfigure-2.7.18.jar
-    │   ├── spring-boot-starter-2.7.18.jar
-    │   ├── spring-boot-starter-json-2.7.18.jar
-    │   ├── spring-boot-starter-logging-2.7.18.jar
-    │   ├── spring-boot-starter-security-2.7.18.jar
-    │   ├── spring-boot-starter-tomcat-2.7.18.jar
-    │   ├── spring-boot-starter-web-2.7.18.jar
-    │   ├── spring-context-5.3.39.jar
-    │   ├── spring-core-5.3.39.jar
-    │   ├── spring-expression-5.3.39.jar
-    │   ├── spring-jcl-5.3.39.jar
-    │   ├── spring-security-config-5.7.11.jar
-    │   ├── spring-security-core-5.7.11.jar
-    │   ├── spring-security-crypto-5.7.11.jar
-    │   ├── spring-security-web-5.7.11.jar
-    │   ├── spring-test-5.3.39.jar
-    │   ├── spring-web-5.3.39.jar
-    │   ├── spring-webmvc-5.3.39.jar
-    │   ├── tomcat-annotations-api-9.0.98.jar
-    │   ├── tomcat-embed-core-9.0.98.jar
-    │   ├── tomcat-embed-el-9.0.98.jar
-    │   ├── tomcat-embed-websocket-9.0.98.jar
-    │   ├── xstream-1.4.20.jar
-    │   ├── zookeeper-3.7.2.jar
-    │   ├── zookeeper-jute-3.7.2.jar
-    │   └── zstd-jni-1.5.0-4.jar
+    │   ├── DmJdbcDriver18-8.1.2.192.jar
+    │   ├── HikariCP-4.0.3.jar
+    │   ├── animal-sniffer-annotations-1.24.jar
+    │   ├── annotations-4.1.1.4.jar
+    │   ├── ant-1.10.12.jar
+    │   ├── ant-launcher-1.10.12.jar
+    │   ├── aopalliance-1.0.jar
+    │   ├── apollo-client-2.0.1.jar
+    │   ├── apollo-core-2.0.1.jar
+    │   ├── archaius-core-0.7.6.jar
+    │   ├── asm-6.0.jar
+    │   ├── audience-annotations-0.12.0.jar
+    │   ├── bolt-1.6.7.jar
+    │   ├── checker-qual-3.37.0.jar
+    │   ├── commons-codec-1.15.jar
+    │   ├── commons-compiler-3.1.10.jar
+    │   ├── commons-configuration-1.10.jar
+    │   ├── commons-dbcp2-2.9.0.jar
+    │   ├── commons-io-2.8.0.jar
+    │   ├── commons-jxpath-1.3.jar
+    │   ├── commons-lang-2.6.jar
+    │   ├── commons-logging-1.2.jar
+    │   ├── commons-math-2.2.jar
+    │   ├── commons-pool-1.6.jar
+    │   ├── commons-pool2-2.11.1.jar
+    │   ├── compactmap-2.0.jar
+    │   ├── config-1.2.1.jar
+    │   ├── consul-api-1.4.2.jar
+    │   ├── curator-client-5.1.0.jar
+    │   ├── curator-framework-5.1.0.jar
+    │   ├── curator-recipes-5.1.0.jar
+    │   ├── curator-test-5.1.0.jar
+    │   ├── dexx-collections-0.2.jar
+    │   ├── disruptor-3.3.7.jar
+    │   ├── druid-1.2.20.jar
+    │   ├── error_prone_annotations-2.21.1.jar
+    │   ├── eureka-client-1.10.18.jar
+    │   ├── failsafe-2.3.3.jar
+    │   ├── failureaccess-1.0.1.jar
+    │   ├── fastjson-1.2.83.jar
+    │   ├── fastjson2-2.0.52.jar
+    │   ├── grpc-api-1.55.1.jar
+    │   ├── grpc-context-1.55.1.jar
+    │   ├── grpc-core-1.55.1.jar
+    │   ├── grpc-grpclb-1.27.1.jar
+    │   ├── grpc-netty-1.55.1.jar
+    │   ├── grpc-protobuf-1.55.1.jar
+    │   ├── grpc-protobuf-lite-1.55.1.jar
+    │   ├── grpc-stub-1.55.1.jar
+    │   ├── grpc-util-1.55.1.jar
+    │   ├── gson-2.9.1.jar
+    │   ├── guava-32.1.3-jre.jar
+    │   ├── guice-5.0.1.jar
+    │   ├── h2-2.1.214.jar
+    │   ├── hamcrest-2.2.jar
+    │   ├── hamcrest-core-2.2.jar
+    │   ├── hessian-4.0.3.jar
+    │   ├── hessian-4.0.63.jar
+    │   ├── httpasyncclient-4.1.5.jar
+    │   ├── httpclient-4.5.14.jar
+    │   ├── httpcore-4.4.16.jar
+    │   ├── httpcore-nio-4.4.16.jar
+    │   ├── j2objc-annotations-2.8.jar
+    │   ├── jackson-annotations-2.13.5.jar
+    │   ├── jackson-core-2.13.5.jar
+    │   ├── jackson-core-asl-1.9.13.jar
+    │   ├── jackson-databind-2.13.5.jar
+    │   ├── jackson-datatype-jdk8-2.13.5.jar
+    │   ├── jackson-datatype-jsr310-2.13.5.jar
+    │   ├── jackson-mapper-asl-1.9.13.jar
+    │   ├── jackson-module-parameter-names-2.13.5.jar
+    │   ├── jakarta.annotation-api-1.3.5.jar
+    │   ├── janino-3.1.10.jar
+    │   ├── javax.inject-1.jar
+    │   ├── javax.servlet-api-4.0.1.jar
+    │   ├── jcommander-1.82.jar
+    │   ├── jctools-core-2.1.1.jar
+    │   ├── jdbc
+    │   │   └── NOTICE.md
+    │   │   └── mysql-connector-java-8.0.28.jar
+    │   ├── jedis-3.8.0.jar
+    │   ├── jersey-apache-client4-1.19.1.jar
+    │   ├── jersey-client-1.19.1.jar
+    │   ├── jersey-core-1.19.1.jar
+    │   ├── jetcd-common-0.5.0.jar
+    │   ├── jetcd-core-0.5.0.jar
+    │   ├── jetcd-resolver-0.5.0.jar
+    │   ├── jettison-1.5.4.jar
+    │   ├── jjwt-api-0.10.5.jar
+    │   ├── jjwt-impl-0.10.5.jar
+    │   ├── jjwt-jackson-0.10.5.jar
+    │   ├── jna-5.5.0.jar
+    │   ├── joda-time-2.3.jar
+    │   ├── jraft-core-1.3.14.jar
+    │   ├── jsr305-3.0.2.jar
+    │   ├── jsr311-api-1.1.1.jar
+    │   ├── jul-to-slf4j-1.7.36.jar
+    │   ├── junit-4.13.2.jar
+    │   ├── kafka-clients-3.6.1.jar
+    │   ├── kryo-5.4.0.jar
+    │   ├── kryo-serializers-0.45.jar
+    │   ├── logback-classic-1.2.12.jar
+    │   ├── logback-core-1.2.12.jar
+    │   ├── logback-kafka-appender-0.2.0-RC2.jar
+    │   ├── logstash-logback-encoder-6.5.jar
+    │   ├── lz4-java-1.7.1.jar
+    │   ├── metrics-core-4.2.22.jar
+    │   ├── minlog-1.3.1.jar
+    │   ├── mxparser-1.2.2.jar
+    │   ├── nacos-api-1.4.6.jar
+    │   ├── nacos-client-1.4.6.jar
+    │   ├── nacos-common-1.4.6.jar
+    │   ├── netflix-eventbus-0.3.0.jar
+    │   ├── netflix-infix-0.3.0.jar
+    │   ├── netty-all-4.1.101.Final.jar
+    │   ├── netty-buffer-4.1.101.Final.jar
+    │   ├── netty-codec-4.1.101.Final.jar
+    │   ├── netty-codec-dns-4.1.101.Final.jar
+    │   ├── netty-codec-haproxy-4.1.101.Final.jar
+    │   ├── netty-codec-http-4.1.101.Final.jar
+    │   ├── netty-codec-http2-4.1.101.Final.jar
+    │   ├── netty-codec-memcache-4.1.101.Final.jar
+    │   ├── netty-codec-mqtt-4.1.101.Final.jar
+    │   ├── netty-codec-redis-4.1.101.Final.jar
+    │   ├── netty-codec-smtp-4.1.101.Final.jar
+    │   ├── netty-codec-socks-4.1.101.Final.jar
+    │   ├── netty-codec-stomp-4.1.101.Final.jar
+    │   ├── netty-codec-xml-4.1.101.Final.jar
+    │   ├── netty-common-4.1.101.Final.jar
+    │   ├── netty-handler-4.1.101.Final.jar
+    │   ├── netty-handler-proxy-4.1.101.Final.jar
+    │   ├── netty-handler-ssl-ocsp-4.1.101.Final.jar
+    │   ├── netty-resolver-4.1.101.Final.jar
+    │   ├── netty-resolver-dns-4.1.101.Final.jar
+    │   ├── netty-resolver-dns-classes-macos-4.1.101.Final.jar
+    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-aarch_64.jar
+    │   ├── netty-resolver-dns-native-macos-4.1.101.Final-osx-x86_64.jar
+    │   ├── netty-transport-4.1.101.Final.jar
+    │   ├── netty-transport-classes-epoll-4.1.101.Final.jar
+    │   ├── netty-transport-classes-kqueue-4.1.101.Final.jar
+    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar
+    │   ├── netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar
+    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar
+    │   ├── netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar
+    │   ├── netty-transport-native-unix-common-4.1.101.Final.jar
+    │   ├── netty-transport-rxtx-4.1.101.Final.jar
+    │   ├── netty-transport-sctp-4.1.101.Final.jar
+    │   ├── netty-transport-udt-4.1.101.Final.jar
+    │   ├── objenesis-3.2.jar
+    │   ├── perfmark-api-0.25.0.jar
+    │   ├── postgresql-42.3.8.jar
+    │   ├── proto-google-common-protos-2.9.0.jar
+    │   ├── protobuf-java-3.25.4.jar
+    │   ├── protobuf-java-util-3.11.0.jar
+    │   ├── reflectasm-1.11.9.jar
+    │   ├── registry-client-all-6.3.0.jar
+    │   ├── rocksdbjni-8.8.1.jar
+    │   ├── seata-common-2.3.0.jar
+    │   ├── seata-compressor-all-2.3.0.jar
+    │   ├── seata-compressor-bzip2-2.3.0.jar
+    │   ├── seata-compressor-deflater-2.3.0.jar
+    │   ├── seata-compressor-gzip-2.3.0.jar
+    │   ├── seata-compressor-lz4-2.3.0.jar
+    │   ├── seata-compressor-zip-2.3.0.jar
+    │   ├── seata-compressor-zstd-2.3.0.jar
+    │   ├── seata-config-all-2.3.0.jar
+    │   ├── seata-config-apollo-2.3.0.jar
+    │   ├── seata-config-consul-2.3.0.jar
+    │   ├── seata-config-core-2.3.0.jar
+    │   ├── seata-config-etcd3-2.3.0.jar
+    │   ├── seata-config-nacos-2.3.0.jar
+    │   ├── seata-config-spring-cloud-2.3.0.jar
+    │   ├── seata-config-zk-2.3.0.jar
+    │   ├── seata-console-2.3.0.jar
+    │   ├── seata-core-2.3.0.jar
+    │   ├── seata-discovery-all-2.3.0.jar
+    │   ├── seata-discovery-consul-2.3.0.jar
+    │   ├── seata-discovery-core-2.3.0.jar
+    │   ├── seata-discovery-custom-2.3.0.jar
+    │   ├── seata-discovery-etcd3-2.3.0.jar
+    │   ├── seata-discovery-eureka-2.3.0.jar
+    │   ├── seata-discovery-nacos-2.3.0.jar
+    │   ├── seata-discovery-namingserver-2.3.0.jar
+    │   ├── seata-discovery-redis-2.3.0.jar
+    │   ├── seata-discovery-sofa-2.3.0.jar
+    │   ├── seata-discovery-zk-2.3.0.jar
+    │   ├── seata-metrics-all-2.3.0.jar
+    │   ├── seata-metrics-api-2.3.0.jar
+    │   ├── seata-metrics-core-2.3.0.jar
+    │   ├── seata-metrics-exporter-prometheus-2.3.0.jar
+    │   ├── seata-metrics-registry-compact-2.3.0.jar
+    │   ├── seata-serializer-all-2.3.0.jar
+    │   ├── seata-serializer-hessian-2.3.0.jar
+    │   ├── seata-serializer-kryo-2.3.0.jar
+    │   ├── seata-serializer-protobuf-2.3.0.jar
+    │   ├── seata-serializer-seata-2.3.0.jar
+    │   ├── seata-spring-autoconfigure-core-2.3.0.jar
+    │   ├── seata-spring-autoconfigure-server-2.3.0.jar
+    │   ├── servo-core-0.12.21.jar
+    │   ├── simpleclient-0.15.0.jar
+    │   ├── simpleclient_common-0.15.0.jar
+    │   ├── simpleclient_httpserver-0.15.0.jar
+    │   ├── simpleclient_tracer_common-0.15.0.jar
+    │   ├── simpleclient_tracer_otel-0.15.0.jar
+    │   ├── simpleclient_tracer_otel_agent-0.15.0.jar
+    │   ├── slf4j-api-1.7.36.jar
+    │   ├── snakeyaml-2.0.jar
+    │   ├── snappy-java-1.1.10.5.jar
+    │   ├── sofa-common-tools-1.0.12.jar
+    │   ├── spring-aop-5.3.39.jar
+    │   ├── spring-beans-5.3.39.jar
+    │   ├── spring-boot-2.7.18.jar
+    │   ├── spring-boot-autoconfigure-2.7.18.jar
+    │   ├── spring-boot-starter-2.7.18.jar
+    │   ├── spring-boot-starter-json-2.7.18.jar
+    │   ├── spring-boot-starter-logging-2.7.18.jar
+    │   ├── spring-boot-starter-security-2.7.18.jar
+    │   ├── spring-boot-starter-tomcat-2.7.18.jar
+    │   ├── spring-boot-starter-web-2.7.18.jar
+    │   ├── spring-context-5.3.39.jar
+    │   ├── spring-core-5.3.39.jar
+    │   ├── spring-expression-5.3.39.jar
+    │   ├── spring-jcl-5.3.39.jar
+    │   ├── spring-security-config-5.7.11.jar
+    │   ├── spring-security-core-5.7.11.jar
+    │   ├── spring-security-crypto-5.7.11.jar
+    │   ├── spring-security-web-5.7.11.jar
+    │   ├── spring-test-5.3.39.jar
+    │   ├── spring-web-5.3.39.jar
+    │   ├── spring-webmvc-5.3.39.jar
+    │   ├── tomcat-annotations-api-9.0.98.jar
+    │   ├── tomcat-embed-core-9.0.98.jar
+    │   ├── tomcat-embed-el-9.0.98.jar
+    │   ├── tomcat-embed-websocket-9.0.98.jar
+    │   ├── xstream-1.4.21.jar
+    │   ├── zookeeper-3.7.2.jar
+    │   ├── zookeeper-jute-3.7.2.jar
+    │   └── zstd-jni-1.5.0-4.jar
     ├── script
-    │   ├── config-center
-    │   │   ├── README.md
-    │   │   ├── apollo
-    │   │   │   ├── apollo-config-interactive.sh
-    │   │   │   └── apollo-config.sh
-    │   │   ├── config.txt
-    │   │   ├── consul
-    │   │   │   ├── consul-config-interactive.sh
-    │   │   │   └── consul-config.sh
-    │   │   ├── etcd3
-    │   │   │   ├── etcd3-config-interactive.sh
-    │   │   │   └── etcd3-config.sh
-    │   │   ├── nacos
-    │   │   │   ├── nacos-config-interactive.py
-    │   │   │   ├── nacos-config-interactive.sh
-    │   │   │   ├── nacos-config.py
-    │   │   │   └── nacos-config.sh
-    │   │   └── zk
-    │   │       ├── zk-config-interactive.sh
-    │   │       └── zk-config.sh
-    │   ├── logstash
-    │   │   └── config
-    │   │       ├── logstash-kafka.conf
-    │   │       └── logstash-logback.conf
-    │   └── server
-    │       ├── db
-    │       │   ├── dm.sql
-    │       │   ├── mysql.sql
-    │       │   ├── oracle.sql
-    │       │   ├── postgresql.sql
-    │       │   └── sqlserver.sql
-    │       ├── docker-compose
-    │       │   └── docker-compose.yaml
-    │       ├── helm
-    │       │   └── seata-server
-    │       │       ├── Chart.yaml
-    │       │       ├── templates
-    │       │       │   ├── NOTES.txt
-    │       │       │   ├── _helpers.tpl
-    │       │       │   ├── deployment.yaml
-    │       │       │   ├── service.yaml
-    │       │       │   └── tests
-    │       │       │       └── test-connection.yaml
-    │       │       └── values.yaml
-    │       └── kubernetes
-    │           └── seata-server.yaml
+    │   ├── config-center
+    │   │   ├── README.md
+    │   │   ├── apollo
+    │   │   │   ├── apollo-config-interactive.sh
+    │   │   │   └── apollo-config.sh
+    │   │   ├── config.txt
+    │   │   ├── consul
+    │   │   │   ├── consul-config-interactive.sh
+    │   │   │   └── consul-config.sh
+    │   │   ├── etcd3
+    │   │   │   ├── etcd3-config-interactive.sh
+    │   │   │   └── etcd3-config.sh
+    │   │   ├── nacos
+    │   │   │   ├── nacos-config-interactive.py
+    │   │   │   ├── nacos-config-interactive.sh
+    │   │   │   ├── nacos-config.py
+    │   │   │   └── nacos-config.sh
+    │   │   └── zk
+    │   │       ├── zk-config-interactive.sh
+    │   │       └── zk-config.sh
+    │   ├── logstash
+    │   │   └── config
+    │   │       ├── logstash-kafka.conf
+    │   │       └── logstash-logback.conf
+    │   └── server
+    │       ├── db
+    │       │   ├── dm.sql
+    │       │   ├── mysql.sql
+    │       │   ├── oracle.sql
+    │       │   ├── postgresql.sql
+    │       │   └── sqlserver.sql
+    │       ├── docker-compose
+    │       │   └── docker-compose.yaml
+    │       ├── helm
+    │       │   └── seata-server
+    │       │       ├── Chart.yaml
+    │       │       ├── templates
+    │       │       │   ├── NOTES.txt
+    │       │       │   ├── _helpers.tpl
+    │       │       │   ├── deployment.yaml
+    │       │       │   ├── service.yaml
+    │       │       │   └── tests
+    │       │       │       └── test-connection.yaml
+    │       │       └── values.yaml
+    │       └── kubernetes
+    │           └── seata-server.yaml
     └── target
         └── seata-server.jar
         
-```
+```
\ No newline at end of file
diff --git a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/ProxyUtilsGlobalTransactionalTest.java b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/ProxyUtilsGlobalTransactionalTest.java
index 933ceb6bfe..2debd51010 100644
--- a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/ProxyUtilsGlobalTransactionalTest.java
+++ b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/ProxyUtilsGlobalTransactionalTest.java
@@ -16,35 +16,30 @@
  */
 package org.apache.seata.integration.tx.api.interceptor.parser;
 
-import org.apache.seata.integration.tx.api.util.ProxyUtil;
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
+import org.apache.seata.integration.tx.api.util.ProxyUtil;
 import org.apache.seata.tm.TransactionManagerHolder;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
-import java.util.concurrent.atomic.AtomicReference;
-
 
 public class ProxyUtilsGlobalTransactionalTest {
 
-    private final String DEFAULT_XID = "default_xid";
-
-
-    @Test
-    public void testTcc() {
-        //given
-        BusinessImpl business = new BusinessImpl();
-
-        AtomicReference<String> branchReference = new AtomicReference<String>();
-
-        Business businessProxy = ProxyUtil.createProxy(business);
+    private static TransactionManager bakTransactionManager;
 
+    @BeforeAll
+    public static void beforeAll() {
+        bakTransactionManager = TransactionManagerHolder.get();
         TransactionManager mockTransactionManager = new TransactionManager() {
             @Override
             public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
-                return DEFAULT_XID;
+                return XID.generateXID(UUIDGenerator.generateUUID());
             }
 
             @Override
@@ -69,13 +64,23 @@ public class ProxyUtilsGlobalTransactionalTest {
         };
 
         TransactionManagerHolder.set(mockTransactionManager);
+    }
+
+    @AfterAll
+    public static void afterAll() {
+        TransactionManagerHolder.set(bakTransactionManager);
+    }
+
+
+    @Test
+    public void testTcc() {
+        BusinessImpl business = new BusinessImpl();
+
+        Business businessProxy = ProxyUtil.createProxy(business);
 
-        //when
         String result = businessProxy.doBiz("test");
 
-        //then
         Assertions.assertNotNull(result);
-
     }
 
 
diff --git a/server/src/test/java/org/apache/seata/server/raft/RaftServerTest.java b/server/src/test/java/org/apache/seata/server/raft/RaftServerTest.java
index 4633a2d500..72ce5891c3 100644
--- a/server/src/test/java/org/apache/seata/server/raft/RaftServerTest.java
+++ b/server/src/test/java/org/apache/seata/server/raft/RaftServerTest.java
@@ -60,14 +60,14 @@ public class RaftServerTest {
 
     @Test
     public void initRaftServerStart() {
-       Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_ENABLED));
-       Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_CLIENT_KEYSTORE_PATH));
-       Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_SERVER_KEYSTORE_PATH));
-       Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_KMF_ALGORITHM));
-       Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_TMF_ALGORITHM));
+        Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_ENABLED));
+        Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_CLIENT_KEYSTORE_PATH));
+        Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_SERVER_KEYSTORE_PATH));
+        Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_KMF_ALGORITHM));
+        Assertions.assertDoesNotThrow(()-> ConfigurationFactory.getInstance().getConfig(SERVER_RAFT_SSL_TMF_ALGORITHM));
         System.setProperty("server.raftPort", "9091");
         System.setProperty(ConfigurationKeys.SERVER_RAFT_SERVER_ADDR,
-            XID.getIpAddress() + ":9091" + "," + XID.getIpAddress() + ":9092" + "," + XID.getIpAddress() + ":9093");
+                XID.getIpAddress() + ":9091" + "," + XID.getIpAddress() + ":9092" + "," + XID.getIpAddress() + ":9093");
         StoreConfig.setStartupParameter("raft", "raft", "raft");
         Assertions.assertDoesNotThrow(RaftServerManager::init);
         Assertions.assertNotNull(RaftServerManager.getRaftServer("default"));
@@ -87,7 +87,7 @@ public class RaftServerTest {
     @Test
     public void initRaftServerFailByRaftPortNull() {
         System.setProperty(ConfigurationKeys.SERVER_RAFT_SERVER_ADDR,
-            XID.getIpAddress() + ":9091" + "," + XID.getIpAddress() + ":9092" + "," + XID.getIpAddress() + ":9093");
+                XID.getIpAddress() + ":9091" + "," + XID.getIpAddress() + ":9092" + "," + XID.getIpAddress() + ":9093");
         StoreConfig.setStartupParameter("raft", "raft", "raft");
         Assertions.assertThrows(IllegalArgumentException.class, RaftServerManager::init);
     }
diff --git a/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java b/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java
index 5149377c4d..1826f3ebcb 100644
--- a/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java
+++ b/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/ProxyUtilsTccTest.java
@@ -16,11 +16,8 @@
  */
 package org.apache.seata.rm.tcc.interceptor;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchStatus;
@@ -32,90 +29,101 @@ import org.apache.seata.integration.tx.api.util.ProxyUtil;
 import org.apache.seata.rm.DefaultResourceManager;
 import org.apache.seata.rm.tcc.NormalTccActionImpl;
 import org.apache.seata.rm.tcc.TccParam;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
 
 public class ProxyUtilsTccTest {
 
-    private final String DEFAULT_XID = "default_xid";
+    private ResourceManager backResourceManager;
 
-    AtomicReference<String> branchReference = new AtomicReference<String>();
+    private final AtomicReference<String> branchReference = new AtomicReference<>();
 
+    @BeforeEach
+    public void beforeEach() {
+        RootContext.bind(XID.generateXID(UUIDGenerator.generateUUID()));
+        ResourceManager resourceManager = new ResourceManager() {
 
-    ResourceManager resourceManager = new ResourceManager() {
+            @Override
+            public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
+                branchReference.set(resourceId);
+                return System.currentTimeMillis();
+            }
 
-        @Override
-        public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
-            branchReference.set(resourceId);
-            return System.currentTimeMillis();
-        }
+            @Override
+            public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status, String applicationData) throws TransactionException {
 
-        @Override
-        public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status, String applicationData) throws TransactionException {
+            }
 
-        }
+            @Override
+            public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) throws TransactionException {
+                return false;
+            }
 
-        @Override
-        public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) throws TransactionException {
-            return false;
-        }
+            @Override
+            public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
+                return null;
+            }
 
-        @Override
-        public BranchStatus branchCommit(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
-            return null;
-        }
+            @Override
+            public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
+                return null;
+            }
 
-        @Override
-        public BranchStatus branchRollback(BranchType branchType, String xid, long branchId, String resourceId, String applicationData) throws TransactionException {
-            return null;
-        }
+            @Override
+            public void registerResource(Resource resource) {
 
-        @Override
-        public void registerResource(Resource resource) {
+            }
 
-        }
+            @Override
+            public void unregisterResource(Resource resource) {
 
-        @Override
-        public void unregisterResource(Resource resource) {
+            }
 
-        }
+            @Override
+            public Map<String, Resource> getManagedResources() {
+                return null;
+            }
 
-        @Override
-        public Map<String, Resource> getManagedResources() {
-            return null;
-        }
+            @Override
+            public BranchType getBranchType() {
+                return null;
+            }
 
-        @Override
-        public BranchType getBranchType() {
-            return null;
-        }
+            @Override
+            public GlobalStatus getGlobalStatus(BranchType branchType, String xid) {
+                return null;
+            }
 
-        @Override
-        public GlobalStatus getGlobalStatus(BranchType branchType, String xid) {
-            return null;
-        }
 
+        };
+        backResourceManager = DefaultResourceManager.get().getResourceManager(BranchType.TCC);
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
+    }
 
-    };
 
-    private final NormalTccActionImpl tccActionProxy= ProxyUtil.createProxy(new NormalTccActionImpl());
+    @AfterEach
+    public void afterEach() {
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, backResourceManager);
+        RootContext.unbind();
+    }
 
 
     @Test
     public void testTcc() {
-        //given
-        RootContext.bind(DEFAULT_XID);
-
         TccParam tccParam = new TccParam(1, "abc@163.com");
-        List<String> listB = Arrays.asList("b");
-
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
+        List<String> listB = Collections.singletonList("b");
 
-        //when
+        NormalTccActionImpl tccActionProxy = ProxyUtil.createProxy(new NormalTccActionImpl());
         String result = tccActionProxy.prepare(null, 0, listB, tccParam);
 
-        //then
         Assertions.assertEquals("a", result);
         Assertions.assertNotNull(result);
         Assertions.assertEquals("normalTccActionForTest", branchReference.get());
@@ -123,21 +131,16 @@ public class ProxyUtilsTccTest {
 
     @Test
     public void testTccThrowRawException() {
-        //given
-        RootContext.bind(DEFAULT_XID);
-
         TccParam tccParam = new TccParam(1, "abc@163.com");
-        List<String> listB = Arrays.asList("b");
-
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
+        List<String> listB = Collections.singletonList("b");
 
-        //when
-        //then
+        NormalTccActionImpl tccActionProxy = ProxyUtil.createProxy(new NormalTccActionImpl());
         Assertions.assertThrows(IllegalArgumentException.class, () -> tccActionProxy.prepareWithException(null, 0, listB, tccParam));
     }
 
     @Test
-    public void testTccImplementOtherMethod(){
+    public void testTccImplementOtherMethod() {
+        NormalTccActionImpl tccActionProxy = ProxyUtil.createProxy(new NormalTccActionImpl());
         Assertions.assertTrue(tccActionProxy.otherMethod());
     }
 
diff --git a/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java b/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java
index 870c08be1c..6e90a1ad3b 100644
--- a/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java
+++ b/tcc/src/test/java/org/apache/seata/rm/tcc/interceptor/parser/TccActionInterceptorParserTest.java
@@ -16,14 +16,8 @@
  */
 package org.apache.seata.rm.tcc.interceptor.parser;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.seata.core.context.RootContext;
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
@@ -45,28 +39,95 @@ import org.apache.seata.tm.api.GlobalTransaction;
 import org.apache.seata.tm.api.GlobalTransactionContext;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 
 class TccActionInterceptorParserTest {
 
-    @BeforeAll
-    public static void init() throws IOException {
-        System.setProperty("config.type", "file");
-        System.setProperty("config.file.name", "file.conf");
-        System.setProperty("txServiceGroup", "default_tx_group");
-        System.setProperty("service.vgroupMapping.default_tx_group", "default");
+    private ResourceManager backResourceManager;
+    private TransactionManager backTransactionManager;
+
+    @BeforeEach
+    public void beforeEach() {
+        backResourceManager = DefaultResourceManager.get().getResourceManager(BranchType.TCC);
+        backTransactionManager = TransactionManagerHolder.get();
+        Map<String, List<BranchSessionMock>> applicationDataMap = new ConcurrentHashMap<>();
+
+        ResourceManager mockResourceManager = new TCCResourceManager() {
+
+            @Override
+            public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
+
+                long branchId = System.currentTimeMillis();
+
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                BranchSessionMock branchSessionMock = new BranchSessionMock();
+                branchSessionMock.setXid(xid);
+                branchSessionMock.setBranchType(branchType);
+                branchSessionMock.setResourceId(resourceId);
+                branchSessionMock.setApplicationData(applicationData);
+                branchSessionMock.setBranchId(branchId);
+
+                branches.add(branchSessionMock);
+
+                return branchId;
+            }
+        };
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, mockResourceManager);
+
+        TransactionManager mockTransactionManager = new TransactionManager() {
+            @Override
+            public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
+                return XID.generateXID(UUIDGenerator.generateUUID());
+            }
+
+            @Override
+            public GlobalStatus commit(String xid) throws TransactionException {
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                for (BranchSessionMock branch : branches) {
+                    mockResourceManager.branchCommit(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
+                }
+                return GlobalStatus.Committed;
+            }
+
+            @Override
+            public GlobalStatus rollback(String xid) throws TransactionException {
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                for (BranchSessionMock branch : branches) {
+                    mockResourceManager.branchRollback(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
+                }
+
+                return GlobalStatus.Rollbacked;
+            }
+
+            @Override
+            public GlobalStatus getStatus(String xid) throws TransactionException {
+                return GlobalStatus.Begin;
+            }
+
+            @Override
+            public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
+                return globalStatus;
+            }
+        };
+        TransactionManagerHolder.set(mockTransactionManager);
     }
 
     @AfterEach
-    public void clearTccResource(){
-        resourceManager.getManagedResources().clear();
+    public void afterEach() {
+        DefaultResourceManager.mockResourceManager(BranchType.TCC, backResourceManager);
+        TransactionManagerHolder.set(backTransactionManager);
     }
 
+
     @Test
     void parserInterfaceToProxy() throws Exception {
-
         //given
         TccActionInterceptorParser tccActionInterceptorParser = new TccActionInterceptorParser();
         NormalTccActionImpl tccAction = new NormalTccActionImpl();
@@ -76,21 +137,13 @@ class TccActionInterceptorParserTest {
 
         //then
         Assertions.assertNotNull(proxyInvocationHandler);
-
     }
 
 
     @Test
     public void testNestTcc_should_commit() throws Exception {
-        //given
-        RootContext.unbind();
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-
-        TransactionManagerHolder.set(transactionManager);
-
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction);
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction);
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -137,15 +190,8 @@ class TccActionInterceptorParserTest {
 
     @Test
     public void testNestTcc_should_rollback() throws Exception {
-        //given
-        RootContext.unbind();
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-
-        TransactionManagerHolder.set(transactionManager);
-
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction);
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction);
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -186,21 +232,13 @@ class TccActionInterceptorParserTest {
 
         Assertions.assertFalse(nestTccAction.isCommit());
         Assertions.assertFalse(tccAction.isCommit());
-
     }
 
 
     @Test
     public void testNestTcc_required_new_should_rollback_commit() throws Exception {
-        //given
-        RootContext.unbind();
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-
-        TransactionManagerHolder.set(transactionManager);
-
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction);
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction);
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -244,18 +282,10 @@ class TccActionInterceptorParserTest {
     }
 
 
-
     @Test
     public void testNestTcc_required_new_should_both_commit() throws Exception {
-        //given
-        RootContext.unbind();
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.TCC, resourceManager);
-
-        TransactionManagerHolder.set(transactionManager);
-
         TccActionImpl tccAction = new TccActionImpl();
-        TccAction tccActionProxy =  ProxyUtil.createProxy(tccAction);
+        TccAction tccActionProxy = ProxyUtil.createProxy(tccAction);
         Assertions.assertNotNull(tccActionProxy);
 
         NestTccActionImpl nestTccAction = new NestTccActionImpl();
@@ -298,78 +328,4 @@ class TccActionInterceptorParserTest {
 
     }
 
-
-
-    private static Map<String, List<BranchSessionMock>> applicationDataMap = new ConcurrentHashMap<>();
-
-
-    private static TransactionManager transactionManager = new TransactionManager() {
-        @Override
-        public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
-            return UUID.randomUUID().toString();
-        }
-
-        @Override
-        public GlobalStatus commit(String xid) throws TransactionException {
-            commitAll(xid);
-            return GlobalStatus.Committed;
-        }
-
-        @Override
-        public GlobalStatus rollback(String xid) throws TransactionException {
-
-            rollbackAll(xid);
-
-            return GlobalStatus.Rollbacked;
-        }
-
-        @Override
-        public GlobalStatus getStatus(String xid) throws TransactionException {
-            return GlobalStatus.Begin;
-        }
-
-        @Override
-        public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
-            return globalStatus;
-        }
-    };
-
-
-    private static ResourceManager resourceManager = new TCCResourceManager() {
-
-        @Override
-        public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
-
-            long branchId = System.currentTimeMillis();
-
-            List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-            BranchSessionMock branchSessionMock = new BranchSessionMock();
-            branchSessionMock.setXid(xid);
-            branchSessionMock.setBranchType(branchType);
-            branchSessionMock.setResourceId(resourceId);
-            branchSessionMock.setApplicationData(applicationData);
-            branchSessionMock.setBranchId(branchId);
-
-            branches.add(branchSessionMock);
-
-            return branchId;
-        }
-    };
-
-    public static void commitAll(String xid) throws TransactionException {
-
-        List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-        for (BranchSessionMock branch : branches) {
-            resourceManager.branchCommit(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
-        }
-    }
-
-    public static void rollbackAll(String xid) throws TransactionException {
-
-        List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-        for (BranchSessionMock branch : branches) {
-            resourceManager.branchRollback(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
-        }
-    }
-
 }
diff --git a/test/pom.xml b/test/pom.xml
index 3c43350502..56d63f2beb 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -44,7 +44,9 @@
                 <groupId>org.xolstice.maven.plugins</groupId>
                 <artifactId>protobuf-maven-plugin</artifactId>
                 <configuration>
-                    <protoSourceRoot>${project.basedir}/src/test/resources/protobuf/org/apache/seata/protocol/transcation/</protoSourceRoot>
+                    <protoSourceRoot>
+                        ${project.basedir}/src/test/resources/protobuf/org/apache/seata/protocol/transcation/
+                    </protoSourceRoot>
                     <protocArtifact>
                         com.google.protobuf:protoc:3.25.4:exe:${os.detected.classifier}
                     </protocArtifact>
@@ -81,7 +83,7 @@
             <artifactId>grpc-alts</artifactId>
         </dependency>
 
-<!-- The actual spring-related dependencies that take effect are from the seata-dependencies module, not the seata-server module-->
+        <!-- The actual spring-related dependencies that take effect are from the seata-dependencies module, not the seata-server module-->
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>seata-server</artifactId>
@@ -188,6 +190,11 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <!-- grpc class dependency javax.Generated -->
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+        </dependency>
     </dependencies>
 
 
diff --git a/test/src/test/java/org/apache/seata/saga/annotation/rm/interceptor/parser/SagaActionInterceptorParserTest.java b/test/src/test/java/org/apache/seata/saga/annotation/rm/interceptor/parser/SagaActionInterceptorParserTest.java
index ca6f2317da..fa94702172 100644
--- a/test/src/test/java/org/apache/seata/saga/annotation/rm/interceptor/parser/SagaActionInterceptorParserTest.java
+++ b/test/src/test/java/org/apache/seata/saga/annotation/rm/interceptor/parser/SagaActionInterceptorParserTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.seata.saga.annotation.rm.interceptor.parser;
 
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
@@ -34,34 +36,90 @@ import org.apache.seata.tm.api.GlobalTransaction;
 import org.apache.seata.tm.api.GlobalTransactionContext;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- *
+ * Saga Action InterceptorParser Test
  */
 public class SagaActionInterceptorParserTest {
 
-    public static String DEFAULT_XID = "default_xid";
+    private ResourceManager backResourceManager;
+    private TransactionManager backTransactionManager;
+
+    @BeforeEach
+    public void beforeEach() {
+        backTransactionManager = TransactionManagerHolder.get();
+        backResourceManager = DefaultResourceManager.get().getResourceManager(BranchType.SAGA_ANNOTATION);
+
+        Map<String, List<BranchSessionMock>> applicationDataMap = new ConcurrentHashMap<>();
+        ResourceManager mockResourceManager = new SagaAnnotationResourceManager() {
+
+            @Override
+            public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
+
+                long branchId = System.currentTimeMillis();
+
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                BranchSessionMock branchSessionMock = new BranchSessionMock();
+                branchSessionMock.setXid(xid);
+                branchSessionMock.setBranchType(branchType);
+                branchSessionMock.setResourceId(resourceId);
+                branchSessionMock.setApplicationData(applicationData);
+                branchSessionMock.setBranchId(branchId);
+
+                branches.add(branchSessionMock);
+
+                return branchId;
+            }
+        };
+        DefaultResourceManager.mockResourceManager(BranchType.SAGA_ANNOTATION, mockResourceManager);
+
+        TransactionManager mockTransactionManager = new TransactionManager() {
+            @Override
+            public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
+                return XID.generateXID(UUIDGenerator.generateUUID());
+            }
+
+            @Override
+            public GlobalStatus commit(String xid) throws TransactionException {
+                return GlobalStatus.Committed;
+            }
+
+            @Override
+            public GlobalStatus rollback(String xid) throws TransactionException {
+                List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
+                for (BranchSessionMock branch : branches) {
+                    mockResourceManager.branchRollback(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
+                }
 
-    @BeforeAll
-    public static void init() throws IOException {
-        System.setProperty("config.type", "file");
-        System.setProperty("config.file.name", "file.conf");
-        System.setProperty("txServiceGroup", "default_tx_group");
-        System.setProperty("service.vgroupMapping.default_tx_group", "default");
+                return GlobalStatus.Rollbacked;
+            }
+
+            @Override
+            public GlobalStatus getStatus(String xid) throws TransactionException {
+                return GlobalStatus.Begin;
+            }
+
+            @Override
+            public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
+                return globalStatus;
+            }
+        };
+        TransactionManagerHolder.set(mockTransactionManager);
     }
 
     @AfterEach
-    public void clearTccResource() {
-        DefaultResourceManager.get().getResourceManager(BranchType.SAGA_ANNOTATION).getManagedResources().clear();
+    public void afterEach() {
+        DefaultResourceManager.mockResourceManager(BranchType.SAGA_ANNOTATION, backResourceManager);
+        TransactionManagerHolder.set(backTransactionManager);
     }
 
     @Test
@@ -77,15 +135,10 @@ public class SagaActionInterceptorParserTest {
 
     @Test
     public void testSagaAnnotation_should_commit() throws TransactionException {
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.SAGA_ANNOTATION, resourceManager);
-
-        TransactionManagerHolder.set(transactionManager);
-
         NormalSagaAnnotationActionImpl sagaActionProxy = ProxyUtil.createProxy(new NormalSagaAnnotationActionImpl());
 
         SagaParam sagaParam = new SagaParam(2, "abc@163.com");
-        List<String> listB = Arrays.asList("b");
+        List<String> listB = Collections.singletonList("b");
 
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
 
@@ -96,11 +149,7 @@ public class SagaActionInterceptorParserTest {
 
             Assertions.assertTrue(result);
 
-            if (result) {
-                tx.commit();
-            } else {
-                tx.rollback();
-            }
+            tx.commit();
         } catch (Exception exx) {
             tx.rollback();
             throw exx;
@@ -110,16 +159,12 @@ public class SagaActionInterceptorParserTest {
     }
 
     @Test
+    @Disabled
     public void testSagaAnnotation_should_rollback() throws TransactionException {
-        DefaultResourceManager.get();
-        DefaultResourceManager.mockResourceManager(BranchType.SAGA_ANNOTATION, resourceManager);
-
-        TransactionManagerHolder.set(transactionManager);
-
         NormalSagaAnnotationActionImpl sagaActionProxy = ProxyUtil.createProxy(new NormalSagaAnnotationActionImpl());
 
         SagaParam sagaParam = new SagaParam(1, "abc@163.com");
-        List<String> listB = Arrays.asList("b");
+        List<String> listB = Collections.singletonList("b");
 
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
 
@@ -129,12 +174,7 @@ public class SagaActionInterceptorParserTest {
             boolean result = sagaActionProxy.commit(null, 1, listB, sagaParam);
 
             Assertions.assertFalse(result);
-
-            if (result) {
-                tx.commit();
-            } else {
-                tx.rollback();
-            }
+            tx.rollback();
         } catch (Exception exx) {
             tx.rollback();
             throw exx;
@@ -143,68 +183,5 @@ public class SagaActionInterceptorParserTest {
         Assertions.assertFalse(sagaActionProxy.isCommit());
     }
 
-    private static Map<String, List<BranchSessionMock>> applicationDataMap = new ConcurrentHashMap<>();
-
-
-    private static TransactionManager transactionManager = new TransactionManager() {
-        @Override
-        public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
-            return DEFAULT_XID;
-        }
-
-        @Override
-        public GlobalStatus commit(String xid) throws TransactionException {
-            return GlobalStatus.Committed;
-        }
-
-        @Override
-        public GlobalStatus rollback(String xid) throws TransactionException {
-
-            rollbackAll(xid);
-
-            return GlobalStatus.Rollbacked;
-        }
-
-        @Override
-        public GlobalStatus getStatus(String xid) throws TransactionException {
-            return GlobalStatus.Begin;
-        }
-
-        @Override
-        public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
-            return globalStatus;
-        }
-    };
-
-
-    private static ResourceManager resourceManager = new SagaAnnotationResourceManager() {
-
-        @Override
-        public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
-
-            long branchId = System.currentTimeMillis();
-
-            List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-            BranchSessionMock branchSessionMock = new BranchSessionMock();
-            branchSessionMock.setXid(xid);
-            branchSessionMock.setBranchType(branchType);
-            branchSessionMock.setResourceId(resourceId);
-            branchSessionMock.setApplicationData(applicationData);
-            branchSessionMock.setBranchId(branchId);
-
-            branches.add(branchSessionMock);
-
-            return branchId;
-        }
-    };
-
-
-    public static void rollbackAll(String xid) throws TransactionException {
-
-        List<BranchSessionMock> branches = applicationDataMap.computeIfAbsent(xid, s -> new ArrayList<>());
-        for (BranchSessionMock branch : branches) {
-            resourceManager.branchRollback(branch.getBranchType(), branch.getXid(), branch.getBranchId(), branch.getResourceId(), branch.getApplicationData());
-        }
-    }
 
 }
\ No newline at end of file
diff --git a/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java b/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
index 3f2e79fe6a..070f335fa0 100644
--- a/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
+++ b/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
@@ -52,7 +52,6 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
diff --git a/tm/src/test/java/org/apache/seata/tm/TransactionManagerHolderTest.java b/tm/src/test/java/org/apache/seata/tm/TransactionManagerHolderTest.java
index 9ee20b3073..ffd84b7c06 100644
--- a/tm/src/test/java/org/apache/seata/tm/TransactionManagerHolderTest.java
+++ b/tm/src/test/java/org/apache/seata/tm/TransactionManagerHolderTest.java
@@ -18,18 +18,38 @@ package org.apache.seata.tm;
 
 
 import org.apache.seata.common.exception.ShouldNeverHappenException;
+import org.apache.seata.core.exception.TransactionException;
+import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
 import org.apache.seata.tm.api.transaction.MockTransactionManager;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 class TransactionManagerHolderTest {
 
+    private TransactionManager backTransactionManager;
+
+    @BeforeEach
+    public void beforeEach() {
+        backTransactionManager = TransactionManagerHolder.get();
+    }
+
+    @AfterEach
+    public void afterEach() {
+        TransactionManagerHolder.set(backTransactionManager);
+    }
+
 
     @Test
     void getTest() {
-        Assertions.assertThrows(ShouldNeverHappenException.class, () -> {   TransactionManagerHolder.set(null);
-            TransactionManagerHolder.get();});
+        Assertions.assertThrows(ShouldNeverHappenException.class, () -> {
+            TransactionManagerHolder.set(null);
+            TransactionManagerHolder.get();
+        });
     }
 
 
@@ -38,7 +58,7 @@ class TransactionManagerHolderTest {
         MockTransactionManager mockTransactionManager = new MockTransactionManager();
         TransactionManagerHolder.set(mockTransactionManager);
         TransactionManager transactionManager = TransactionManagerHolder.get();
-        Assertions.assertTrue(transactionManager instanceof MockTransactionManager);
+        Assertions.assertInstanceOf(MockTransactionManager.class, transactionManager);
     }
 
 }
diff --git a/tm/src/test/java/org/apache/seata/tm/api/APITest.java b/tm/src/test/java/org/apache/seata/tm/api/APITest.java
index efd6f2960c..a291f899cd 100644
--- a/tm/src/test/java/org/apache/seata/tm/api/APITest.java
+++ b/tm/src/test/java/org/apache/seata/tm/api/APITest.java
@@ -22,6 +22,7 @@ import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
 import org.apache.seata.tm.TransactionManagerHolder;
 import org.apache.seata.tm.api.transaction.TransactionInfo;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
@@ -36,11 +37,14 @@ public class APITest {
     private static final String TX_NAME = "test";
     private static final int TIME_OUT = 30000;
 
+    private static TransactionManager backTransactionManager;
+
     /**
      * Init.
      */
     @BeforeAll
     public static void init() {
+        backTransactionManager = TransactionManagerHolder.get();
         TransactionManagerHolder.set(new TransactionManager() {
             @Override
             public String begin(String applicationId, String transactionServiceGroup, String name, int timeout)
@@ -70,6 +74,11 @@ public class APITest {
         });
     }
 
+    @AfterAll
+    public static void afterAll() {
+        TransactionManagerHolder.set(backTransactionManager);
+    }
+
     /**
      * Clean root context.
      */
@@ -204,7 +213,7 @@ public class APITest {
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
         tx.globalReport(tx.getStatus());
 
-        Assertions.assertThrows(IllegalStateException.class, () ->  tx.globalReport(null));
+        Assertions.assertThrows(IllegalStateException.class, () -> tx.globalReport(null));
         Assertions.assertThrows(IllegalStateException.class, () -> {
             RootContext.unbind();
             GlobalTransaction tx2 = GlobalTransactionContext.getCurrentOrCreate();
diff --git a/tm/src/test/java/org/apache/seata/tm/api/DefaultFailureHandlerImplTest.java b/tm/src/test/java/org/apache/seata/tm/api/DefaultFailureHandlerImplTest.java
index aff5518470..218fd3592a 100644
--- a/tm/src/test/java/org/apache/seata/tm/api/DefaultFailureHandlerImplTest.java
+++ b/tm/src/test/java/org/apache/seata/tm/api/DefaultFailureHandlerImplTest.java
@@ -18,14 +18,13 @@ package org.apache.seata.tm.api;
 
 
 import io.netty.util.HashedWheelTimer;
+import org.apache.seata.common.util.ReflectionUtil;
 import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
-import org.apache.seata.tm.TransactionManagerHolder;
 import org.apache.seata.tm.api.transaction.MyRuntimeException;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,10 +38,8 @@ class DefaultFailureHandlerImplTest {
     private static final String DEFAULT_XID = "1234567890";
     private static GlobalStatus globalStatus = GlobalStatus.Begin;
 
-    @BeforeAll
-    public static void init() {
-
-        TransactionManagerHolder.set(new TransactionManager() {
+    private TransactionManager getTransactionManager() {
+        return new TransactionManager() {
             @Override
             public String begin(String applicationId, String transactionServiceGroup, String name, int timeout)
                     throws TransactionException {
@@ -68,66 +65,85 @@ class DefaultFailureHandlerImplTest {
             public GlobalStatus globalReport(String xid, GlobalStatus globalStatus) throws TransactionException {
                 return globalStatus;
             }
-        });
+        };
     }
 
     @Test
-    void onBeginFailure() {
-        RootContext.bind(DEFAULT_XID);
-        GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
-        FailureHandler failureHandler = new DefaultFailureHandlerImpl();
-        failureHandler.onBeginFailure(tx, new MyRuntimeException("").getCause());
+    void onBeginFailure() throws Exception {
+        try {
+            RootContext.bind(DEFAULT_XID);
+            GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
+            ReflectionUtil.setFieldValue(tx, "transactionManager", getTransactionManager());
+
+            FailureHandler failureHandler = new DefaultFailureHandlerImpl();
+            failureHandler.onBeginFailure(tx, new MyRuntimeException("").getCause());
+        } finally {
+            RootContext.unbind();
+        }
     }
 
     @Test
-    void onCommitFailure() throws Exception{
-
-        RootContext.bind(DEFAULT_XID);
-        GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
-        FailureHandler failureHandler = new DefaultFailureHandlerImpl();
-        failureHandler.onCommitFailure(tx, new MyRuntimeException("").getCause());
-
-        // get timer
-        Class<?> c = Class.forName("org.apache.seata.tm.api.DefaultFailureHandlerImpl");
-        Field field = c.getDeclaredField("TIMER");
-        field.setAccessible(true);
-        HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
-        // assert timer pendingCount: first time is 1
-        Long pendingTimeout = timer.pendingTimeouts();
-        Assertions.assertEquals(pendingTimeout,1L);
-        //set globalStatus
-        globalStatus= GlobalStatus.Committed;
-        Thread.sleep(25*1000L);
-        pendingTimeout = timer.pendingTimeouts();
-        LOGGER.info("pendingTimeout {}" ,pendingTimeout);
-        //all timer is done
-        Assertions.assertEquals(pendingTimeout,0L);
+    void onCommitFailure() throws Exception {
+
+        try {
+            RootContext.bind(DEFAULT_XID);
+            GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
+            //TransactionManagerHolder.set has interaction, using globalTransaction instance level tm
+            ReflectionUtil.setFieldValue(tx, "transactionManager", getTransactionManager());
+
+            FailureHandler failureHandler = new DefaultFailureHandlerImpl();
+            failureHandler.onCommitFailure(tx, new MyRuntimeException("").getCause());
+
+            // get timer
+            Class<?> c = Class.forName("org.apache.seata.tm.api.DefaultFailureHandlerImpl");
+            Field field = c.getDeclaredField("TIMER");
+            field.setAccessible(true);
+            HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
+            // assert timer pendingCount: first time is 1
+            Long pendingTimeout = timer.pendingTimeouts();
+            Assertions.assertEquals(pendingTimeout, 1L);
+            //set globalStatus
+            globalStatus = GlobalStatus.Committed;
+            Thread.sleep(25 * 1000L);
+            pendingTimeout = timer.pendingTimeouts();
+            LOGGER.info("pendingTimeout {}", pendingTimeout);
+            //all timer is done
+            Assertions.assertEquals(pendingTimeout, 0L);
+        } finally {
+            RootContext.unbind();
+        }
     }
 
     @Test
     void onRollbackFailure() throws Exception {
 
 
-        RootContext.bind(DEFAULT_XID);
-        GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
-        FailureHandler failureHandler = new DefaultFailureHandlerImpl();
-        failureHandler.onRollbackFailure(tx, new MyRuntimeException("").getCause());
-
-        // get timer
-        Class<?> c = Class.forName("org.apache.seata.tm.api.DefaultFailureHandlerImpl");
-        Field field = c.getDeclaredField("TIMER");
-        field.setAccessible(true);
-        HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
-        // assert timer pendingCount: first time is 1
-        Long pendingTimeout = timer.pendingTimeouts();
-        Assertions.assertEquals(pendingTimeout,1L);
-        //set globalStatus
-        globalStatus= GlobalStatus.Rollbacked;
-        Thread.sleep(25*1000L);
-        pendingTimeout = timer.pendingTimeouts();
-        LOGGER.info("pendingTimeout {}" ,pendingTimeout);
-        //all timer is done
-        Assertions.assertEquals(pendingTimeout,0L);
+        try {
+            RootContext.bind(DEFAULT_XID);
+            GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
+            ReflectionUtil.setFieldValue(tx, "transactionManager", getTransactionManager());
+
+            FailureHandler failureHandler = new DefaultFailureHandlerImpl();
+            failureHandler.onRollbackFailure(tx, new MyRuntimeException("").getCause());
+
+            // get timer
+            Class<?> c = Class.forName("org.apache.seata.tm.api.DefaultFailureHandlerImpl");
+            Field field = c.getDeclaredField("TIMER");
+            field.setAccessible(true);
+            HashedWheelTimer timer = (HashedWheelTimer) field.get(failureHandler);
+            // assert timer pendingCount: first time is 1
+            Long pendingTimeout = timer.pendingTimeouts();
+            Assertions.assertEquals(pendingTimeout, 1L);
+            //set globalStatus
+            globalStatus = GlobalStatus.Rollbacked;
+            Thread.sleep(25 * 1000L);
+            pendingTimeout = timer.pendingTimeouts();
+            LOGGER.info("pendingTimeout {}", pendingTimeout);
+            //all timer is done
+            Assertions.assertEquals(pendingTimeout, 0L);
+        } finally {
+            RootContext.unbind();
+        }
 
 
     }
diff --git a/tm/src/test/java/org/apache/seata/tm/api/DefaultGlobalTransactionTest.java b/tm/src/test/java/org/apache/seata/tm/api/DefaultGlobalTransactionTest.java
index 35af8625f6..c77075ac6f 100644
--- a/tm/src/test/java/org/apache/seata/tm/api/DefaultGlobalTransactionTest.java
+++ b/tm/src/test/java/org/apache/seata/tm/api/DefaultGlobalTransactionTest.java
@@ -17,28 +17,34 @@
 package org.apache.seata.tm.api;
 
 
+import org.apache.seata.common.XID;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
 import org.apache.seata.tm.TransactionManagerHolder;
 import org.apache.seata.tm.api.transaction.MyRuntimeException;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 
 class DefaultGlobalTransactionTest {
-    private static final String DEFAULT_XID = "1234567890";
 
-    @BeforeAll
-    public static void init() {
+    private TransactionManager backTransactionManager;
+
+    @BeforeEach
+    public void init() {
+        backTransactionManager = TransactionManagerHolder.get();
 
         TransactionManagerHolder.set(new TransactionManager() {
             @Override
             public String begin(String applicationId, String transactionServiceGroup, String name, int timeout)
                     throws TransactionException {
-                return DEFAULT_XID;
+                return XID.generateXID(UUIDGenerator.generateUUID());
             }
 
             @Override
@@ -53,7 +59,7 @@ class DefaultGlobalTransactionTest {
 
             @Override
             public GlobalStatus getStatus(String xid) throws TransactionException {
-              throw new MyRuntimeException("");
+                throw new MyRuntimeException("");
             }
 
             @Override
@@ -61,12 +67,12 @@ class DefaultGlobalTransactionTest {
                 return globalStatus;
             }
         });
+        RootContext.unbind();
     }
 
 
     @Test
     public void commitRetryExceptionTest() throws TransactionException {
-        RootContext.unbind();
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
         tx.begin();
         Assertions.assertThrows(TransactionException.class, tx::commit);
@@ -74,7 +80,6 @@ class DefaultGlobalTransactionTest {
 
     @Test
     public void commitNoXIDExceptionTest() throws TransactionException {
-        RootContext.unbind();
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
         Assertions.assertThrows(IllegalStateException.class, tx::commit);
     }
@@ -82,7 +87,6 @@ class DefaultGlobalTransactionTest {
 
     @Test
     public void rollBackRetryExceptionTest() throws TransactionException {
-        RootContext.unbind();
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
         tx.begin();
         Assertions.assertThrows(TransactionException.class, tx::rollback);
@@ -90,10 +94,14 @@ class DefaultGlobalTransactionTest {
 
     @Test
     public void rollBackNoXIDExceptionTest() throws TransactionException {
-        RootContext.unbind();
         GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();
         tx.begin();
         Assertions.assertThrows(TransactionException.class, tx::rollback);
     }
 
+    @AfterEach
+    public void afterEach() {
+        TransactionManagerHolder.set(backTransactionManager);
+    }
+
 }
diff --git a/tm/src/test/java/org/apache/seata/tm/api/GlobalTransactionContextTest.java b/tm/src/test/java/org/apache/seata/tm/api/GlobalTransactionContextTest.java
index c5bef02966..3c10f6ecec 100644
--- a/tm/src/test/java/org/apache/seata/tm/api/GlobalTransactionContextTest.java
+++ b/tm/src/test/java/org/apache/seata/tm/api/GlobalTransactionContextTest.java
@@ -21,21 +21,24 @@ import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.TransactionManager;
 import org.apache.seata.tm.TransactionManagerHolder;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 
 class GlobalTransactionContextTest {
     private static final String DEFAULT_XID = "1234567890";
 
-    @BeforeAll
-    public static void init() {
+    private TransactionManager backTransactionManager;
+
+    @BeforeEach
+    public void init() {
+        backTransactionManager = TransactionManagerHolder.get();
 
         TransactionManagerHolder.set(new TransactionManager() {
             @Override
-            public String begin(String applicationId, String transactionServiceGroup, String name, int timeout)
-                    throws TransactionException {
+            public String begin(String applicationId, String transactionServiceGroup, String name, int timeout) throws TransactionException {
                 return DEFAULT_XID;
             }
 
@@ -67,6 +70,10 @@ class GlobalTransactionContextTest {
         tx = GlobalTransactionContext.reload(DEFAULT_XID);
         GlobalTransaction finalTx = tx;
         Assertions.assertThrows(IllegalStateException.class, finalTx::begin);
+    }
 
+    @AfterEach
+    public void afterEach() {
+        TransactionManagerHolder.set(backTransactionManager);
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org