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

zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new e91e29db82a Bump `io.seata:seata-all` for testing to 2.0.0 (#30146)
e91e29db82a is described below

commit e91e29db82ae0338e8ffbe283d11bf6ac0e52db2
Author: Ling Hengqian <[email protected]>
AuthorDate: Sat Feb 17 17:12:30 2024 +0800

    Bump `io.seata:seata-all` for testing to 2.0.0 (#30146)
---
 .../special-api/transaction/seata.cn.md            | 106 +++++++++++++++++----
 .../special-api/transaction/seata.en.md            | 105 ++++++++++++++++----
 kernel/transaction/type/base/seata-at/pom.xml      |  21 ++++
 .../base/seata-at/src/test/resources/file.conf     |   7 +-
 .../base/seata-at/src/test/resources/seata.conf    |   2 +-
 pom.xml                                            |   2 +-
 6 files changed, 203 insertions(+), 40 deletions(-)

diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.cn.md
index 7a41e181ca9..53adcdf9c62 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.cn.md
@@ -5,7 +5,39 @@ weight = 7
 
 ## 背景信息
 
-Apache ShardingSphere 提供 BASE 事务,集成了 Seata 的实现。
+Apache ShardingSphere 提供 BASE 事务,集成了 Seata 的实现。本文所指 Seata 集成均指向 Seata AT 模式。
+
+## 前提条件
+
+引入 Maven 依赖,并排除 `io.seata:seata-all` 中过时的 `org.antlr:antlr4-runtime:4.8` 的 
Maven 依赖。
+
+```xml
+<project>
+    <dependencies>
+      <dependency>
+         <groupId>org.apache.shardingsphere</groupId>
+         <artifactId>shardingsphere-jdbc-core</artifactId>
+         <version>${shardingsphere.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.shardingsphere</groupId>
+         <artifactId>shardingsphere-transaction-base-seata-at</artifactId>
+         <version>${shardingsphere.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>io.seata</groupId>
+         <artifactId>seata-all</artifactId>
+         <version>2.0.0</version>
+         <exclusions>
+            <exclusion>
+               <groupId>org.antlr</groupId>
+               <artifactId>antlr4-runtime</artifactId>
+            </exclusion>
+         </exclusions>
+      </dependency>
+    </dependencies>
+</project>
+```
 
 ## 操作步骤
 
@@ -17,39 +49,77 @@ Apache ShardingSphere 提供 BASE 事务,集成了 Seata 的实现。
 
 ### 启动 Seata Server
 
-按照 [seata-work-shop](https://github.com/seata/seata-workshop) 中的步骤,下载并启动 Seata 
服务器。
+按照 [seata-fescar-workshop](https://github.com/seata/fescar-workshop) 或 
https://hub.docker.com/r/seataio/seata-server 中的步骤,
+下载并启动 Seata 服务器。
 
 ### 创建 undo_log 表
 
 在每一个分片数据库实例中执创建 `undo_log` 表(以 MySQL 为例)。
+SQL 的内容以 
https://github.com/apache/incubator-seata/tree/v2.0.0/script/client/at/db 
内对应的数据库为准。
 
 ```sql
 CREATE TABLE IF NOT EXISTS `undo_log`
 (
-  `id`            BIGINT(20)   NOT NULL AUTO_INCREMENT COMMENT 'increment id',
-  `branch_id`     BIGINT(20)   NOT NULL COMMENT 'branch transaction id',
-  `xid`           VARCHAR(100) NOT NULL COMMENT 'global transaction id',
-  `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as 
serialization',
-  `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
-  `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense 
status',
-  `log_created`   DATETIME     NOT NULL COMMENT 'create datetime',
-  `log_modified`  DATETIME     NOT NULL COMMENT 'modify datetime',
-  PRIMARY KEY (`id`),
-  UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
-) ENGINE = InnoDB
-  AUTO_INCREMENT = 1
-  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
+    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
+    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
+    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as 
serialization',
+    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
+    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense 
status',
+    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
+    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
+    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
+    ) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT 
='AT transaction mode undo table';
+
+ALTER TABLE `undo_log` ADD INDEX `ix_log_created` (`log_created`);
 ```
 
 ### 修改配置
 
-在 classpath 中增加 `seata.conf` 文件。
+在 classpath 的根目录中增加 `seata.conf` 文件, 
+配置文件格式参考 `io.seata.config.FileConfiguration` 的 
[JavaDoc](https://github.com/apache/incubator-seata/blob/v2.0.0/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java)。
+
+`seata.conf` 存在四个属性,
+
+1. `sharding.transaction.seata.at.enable`,当此值为`true`时,开启 ShardingSphere 的 
Seata AT 集成,存在默认值为 `true`
+2. `sharding.transaction.seata.tx.timeout`,全局事务超时(秒),存在默认值为 `60`
+3. `client.application.id`,应用唯一主键
+4. `client.transaction.service.group`,所属事务组,存在默认值为 `default`
+
+一个完全配置的 `seata.conf` 如下,
 
 ```conf
+sharding.transaction.seata.at.enable = true
+sharding.transaction.seata.tx.timeout = 30
+
 client {
-    application.id = example    ## 应用唯一主键
-    transaction.service.group = my_test_tx_group   ## 所属事务组
+    application.id = example
+    transaction.service.group = default_tx_group
 }
 ```
 
 根据实际场景修改 Seata 的 `file.conf` 和 `registry.conf` 文件。
+
+### 使用限制
+
+ShardingSphere 的 Seata 集成不支持隔离级别。
+
+ShardingSphere 的 Seata 集成将获取到的 Seata 全局事务置入线程的局部变量。
+而 `org.apache.seata.spring.annotation.GlobalTransactionScanner` 则是采用 Dynamic 
Proxy 的方式对方法进行增强。
+这意味着用户始终不应该针对 ShardingSphere 的 DataSource 使用 
`io.seata:seata-spring-boot-starter` 的注解。
+即在使用 ShardingSphere 的 Seata 集成时,用户应避免使用 `io.seata:seata-spring-boot-starter` 的 
Maven 依赖。
+
+针对 ShardingSphere 数据源,讨论 5 种情况,
+
+1. 手动获取从 ShardingSphere 数据源创建的 `java.sql.Connection` 实例,
+并手动调用 `setAutoCommit()`, `commit()` 和 `rollback()` 方法,这是被允许的。
+
+2. 在函数上使用 Jakarta EE 8 的 `javax.transaction.Transactional` 注解,这是被允许的。
+
+3. 在函数上使用 Jakarta EE 9/10 的 `jakarta.transaction.Transactional` 注解,这是被允许的。
+
+4. 在函数上使用 `io.seata.spring.annotation.GlobalTransactional` 注解,这是不被允许的。
+
+5. 手动从 `io.seata.tm.api.GlobalTransactionContext ` 创建 
`io.seata.tm.api.GlobalTransaction` 实例,
+调用 `io.seata.tm.api.GlobalTransaction` 实例的 `begin()`, `commit()` 和 
`rollback()` 方法,这是不被允许的。
+
+长话短说,在使用 ShardingSphere 的 Seata 集成时,你不应该使用 Seata Java API。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.en.md
index 92d72d30266..1ba21fc838d 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/special-api/transaction/seata.en.md
@@ -6,6 +6,39 @@ weight = 7
 ## Background
 
 Apache ShardingSphere provides BASE transactions that integrate the Seata 
implementation.
+All references to Seata integration in this article refer to Seata AT mode.
+
+## Prerequisites
+
+Introduce Maven dependencies and exclude the outdated Maven dependencies of 
`org.antlr:antlr4-runtime:4.8` in `io.seata:seata-all`.
+
+```xml
+<project>
+    <dependencies>
+      <dependency>
+         <groupId>org.apache.shardingsphere</groupId>
+         <artifactId>shardingsphere-jdbc-core</artifactId>
+         <version>${shardingsphere.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.shardingsphere</groupId>
+         <artifactId>shardingsphere-transaction-base-seata-at</artifactId>
+         <version>${shardingsphere.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>io.seata</groupId>
+         <artifactId>seata-all</artifactId>
+         <version>2.0.0</version>
+         <exclusions>
+            <exclusion>
+               <groupId>org.antlr</groupId>
+               <artifactId>antlr4-runtime</artifactId>
+            </exclusion>
+         </exclusions>
+      </dependency>
+    </dependencies>
+</project>
+```
 
 ## Procedure
 
@@ -17,39 +50,77 @@ Apache ShardingSphere provides BASE transactions that 
integrate the Seata implem
 
 ### Start Seata Server
 
-Refer to [seata-work-shop](https://github.com/seata/seata-workshop) to 
download and start the Seata server.
+Follow the steps in 
[seata-fescar-workshop](https://github.com/seata/fescar-workshop) or 
https://hub.docker.com/r/seataio/seata-server ,
+download and start the Seata server.
 
 ### Create undo_log table
 
 Create the `undo_log` table in each shard database instance (take MySQL as an 
example).
+The content of SQL is subject to the corresponding database in 
https://github.com/apache/incubator-seata/tree/v2.0.0/script/client/at/db .
 
 ```sql
 CREATE TABLE IF NOT EXISTS `undo_log`
 (
-  `id`            BIGINT(20)   NOT NULL AUTO_INCREMENT COMMENT 'increment id',
-  `branch_id`     BIGINT(20)   NOT NULL COMMENT 'branch transaction id',
-  `xid`           VARCHAR(100) NOT NULL COMMENT 'global transaction id',
-  `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as 
serialization',
-  `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
-  `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense 
status',
-  `log_created`   DATETIME     NOT NULL COMMENT 'create datetime',
-  `log_modified`  DATETIME     NOT NULL COMMENT 'modify datetime',
-  PRIMARY KEY (`id`),
-  UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
-) ENGINE = InnoDB
-  AUTO_INCREMENT = 1
-  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
+   `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
+   `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
+   `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as 
serialization',
+   `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
+   `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense 
status',
+   `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
+   `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
+   UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
+   ) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT ='AT 
transaction mode undo table';
+
+ALTER TABLE `undo_log` ADD INDEX `ix_log_created` (`log_created`);
 ```
 
 ### Modify configuration
 
-Add the `seata.conf` file to the classpath.
+Add the `seata.conf` file to the root directory of the classpath.
+The configuration file format refers to the 
[JavaDoc](https://github.com/apache/incubator-seata/blob/v2.0.0/config/seata-config-core/src/main/java/io/seata/config/FileConfiguration.java)
 of `io.seata.config.FileConfiguration`.
+
+There are four properties in `seata.conf`,
+
+1. `sharding.transaction.seata.at.enable`, when this value is `true`, 
ShardingSphere's Seata AT integration is enabled, there is a default value of 
`true`
+2. `sharding.transaction.seata.tx.timeout`, global transaction timeout in 
SECONDS, there is a default value of `60`
+3. `client.application.id`, apply the only primary key
+4. `client.transaction.service.group`, the transaction group it belongs to, 
there is a default value of `default`
+
+A fully configured `seata.conf` is as follows,
 
 ```conf
+sharding.transaction.seata.at.enable = true
+sharding.transaction.seata.tx.timeout = 30
+
 client {
-    application.id = example    ## Apply the only primary key
-    transaction.service.group = my_test_tx_group   ## The transaction group it 
belongs to.
+    application.id = example
+    transaction.service.group = default_tx_group
 }
 ```
 
 Modify the `file.conf` and `registry.conf` files of Seata as required.
+
+### Usage restrictions
+
+ShardingSphere's Seata integration does not support isolation levels.
+
+ShardingSphere's Seata integration places the obtained Seata global 
transaction into the thread's local variables.
+And `org.apache.seata.spring.annotation.GlobalTransactionScanner` uses Dynamic 
Proxy to enhance the method.
+This means that users should never use the 
`io.seata:seata-spring-boot-starter` annotation for ShardingSphere's DataSource.
+That is, when using ShardingSphere's Seata integration, users should avoid 
using the Maven dependency of `io.seata:seata-spring-boot-starter`.
+
+For ShardingSphere data source, discuss 5 situations,
+
+1. Manually obtain the `java.sql.Connection` instance created from the 
ShardingSphere data source,
+   and manually calling the `setAutoCommit()`, `commit()` and `rollback()` 
methods is allowed.
+
+2. Using the Jakarta EE 8 `javax.transaction.Transactional` annotation on the 
function is allowed.
+
+3. Using Jakarta EE 9/10’s `jakarta.transaction.Transactional` annotation on 
functions is allowed.
+
+4. Using the `io.seata.spring.annotation.GlobalTransactional` annotation on 
the function is not allowed.
+
+5. Manually create `io.seata.tm.api.GlobalTransaction` instance from 
`io.seata.tm.api.GlobalTransactionContext`,
+calling the `begin()`, `commit()` and `rollback()` methods of an 
`io.seata.tm.api.GlobalTransaction` instance is not allowed.
+
+Long story short, you should not use the Seata Java API when using 
ShardingSphere's Seata integration.
diff --git a/kernel/transaction/type/base/seata-at/pom.xml 
b/kernel/transaction/type/base/seata-at/pom.xml
index e6ef1c98ee4..d89ff394031 100644
--- a/kernel/transaction/type/base/seata-at/pom.xml
+++ b/kernel/transaction/type/base/seata-at/pom.xml
@@ -26,6 +26,27 @@
     <artifactId>shardingsphere-transaction-base-seata-at</artifactId>
     <name>${project.artifactId}</name>
     
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>io.seata</groupId>
+                <artifactId>seata-all</artifactId>
+                <version>${seata.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.antlr</groupId>
+                        <artifactId>antlr4-runtime</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.antlr</groupId>
+                <artifactId>antlr4-runtime</artifactId>
+                <version>${antlr4.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    
     <dependencies>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
diff --git a/kernel/transaction/type/base/seata-at/src/test/resources/file.conf 
b/kernel/transaction/type/base/seata-at/src/test/resources/file.conf
index 47f45ee06be..0a3731adf57 100644
--- a/kernel/transaction/type/base/seata-at/src/test/resources/file.conf
+++ b/kernel/transaction/type/base/seata-at/src/test/resources/file.conf
@@ -39,11 +39,9 @@ transport {
 }
 service {
   #vgroup->rgroup
-  vgroupMapping.my_test_tx_group = "default"
+  vgroupMapping.default_tx_group = "default"
   #only support single node
   default.grouplist = "127.0.0.1:8891"
-  #degrade current not support
-  enableDegrade = false
   #disable
   disable = false
 }
@@ -54,4 +52,7 @@ client {
     retry.internal = 10
     retry.times = 30
   }
+  tm {
+    degradeCheck = false
+  }
 }
diff --git 
a/kernel/transaction/type/base/seata-at/src/test/resources/seata.conf 
b/kernel/transaction/type/base/seata-at/src/test/resources/seata.conf
index 069a678a7e5..dd4a2160541 100644
--- a/kernel/transaction/type/base/seata-at/src/test/resources/seata.conf
+++ b/kernel/transaction/type/base/seata-at/src/test/resources/seata.conf
@@ -20,5 +20,5 @@ sharding.transaction.seata.tx.timeout = 30
 
 client {
     application.id = jdbc-test
-    transaction.service.group = my_test_tx_group
+    transaction.service.group = default_tx_group
 }
diff --git a/pom.xml b/pom.xml
index 0efa42e3dc0..00f95da26db 100644
--- a/pom.xml
+++ b/pom.xml
@@ -97,7 +97,7 @@
         <narayana.version>5.12.4.Final</narayana.version>
         
<jboss-transaction-spi.version>7.6.0.Final</jboss-transaction-spi.version>
         <jboss-logging.version>3.2.1.Final</jboss-logging.version>
-        <seata.version>1.6.1</seata.version>
+        <seata.version>2.0.0</seata.version>
         
         <netty.version>4.1.106.Final</netty.version>
         <bouncycastle.version>1.70</bouncycastle.version>

Reply via email to