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