This is an automated email from the ASF dual-hosted git repository.
jimin 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 32119ea1ac optimize: support mariadb 3.x (#7807)
32119ea1ac is described below
commit 32119ea1ac51d1116535844c1a83c03f7c5aca25
Author: lokidundun <[email protected]>
AuthorDate: Sat Dec 6 23:35:14 2025 +0800
optimize: support mariadb 3.x (#7807)
---
changes/en-us/2.x.md | 1 +
changes/zh-cn/2.x.md | 1 +
.../apache/seata/rm/datasource/util/XAUtils.java | 27 ++++++++++++++--------
.../seata/rm/datasource/util/XAUtilsTest.java | 17 ++++++++++++++
4 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 7330594eb8..6ba81c7221 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -77,6 +77,7 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#7741](https://github.com/apache/incubator-seata/pull/7741)] supports
publishing image based on JDK 25
- [[#7743](https://github.com/seata/seata/pull/7743)] upgrade Apache Tomcat
dependency from 9.0.108 to 9.0.109
- [[#7740](https://github.com/apache/incubator-seata/pull/7740)] enhance
HttpClient to support h2c
+- [[#7807](https://github.com/apache/incubator-seata/pull/7807)] support
mariadb 3.x
- [[#7781](https://github.com/apache/incubator-seata/pull/7781)] highlight
pmd-check log
- [[#7813](https://github.com/apache/incubator-seata/pull/7813)] add decode
buffer limit
- [[#7829](https://github.com/apache/incubator-seata/pull/7829)] optimize lz4
compressor
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 8b7761e8f6..564f560a56 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -76,6 +76,7 @@
- [[#7741](https://github.com/apache/incubator-seata/pull/7741)] 支持发布基于JDK
25的镜像
- [[#7743](https://github.com/seata/seata/pull/7743)] 将 Apache Tomcat 依赖项从
9.0.108 升级到 9.0.109
- [[#7740](https://github.com/apache/incubator-seata/pull/7740)]
优化http工具类使之支持h2c协议
+- [[#7807](https://github.com/apache/incubator-seata/pull/7807)] 支持 mariadb 3.x
- [[#7781](https://github.com/apache/incubator-seata/pull/7781)] 高亮 pmd 检查日志信息
- [[#7813](https://github.com/apache/incubator-seata/pull/7813)] 增加解码buffer限制
- [[#7829](https://github.com/apache/incubator-seata/pull/7829)] 优化lz4
compressor
diff --git
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/util/XAUtils.java
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/util/XAUtils.java
index f851600625..e6484dfdfc 100644
---
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/util/XAUtils.java
+++
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/util/XAUtils.java
@@ -38,6 +38,9 @@ public class XAUtils {
private static final Logger LOGGER =
LoggerFactory.getLogger(XAUtils.class);
+ private static final String MARIADB_3X_XA_CONNECTION_CLASS =
"org.mariadb.jdbc.MariaDbPooledConnection";
+ private static final String MARIADB_PRE3X_XA_CONNECTION_CLASS =
"org.mariadb.jdbc.MariaXaConnection";
+
public static String getDbType(String jdbcUrl, String driverClassName) {
return JdbcUtils.getDbType(jdbcUrl, driverClassName);
}
@@ -65,7 +68,12 @@ public class XAUtils {
return createXAConnection(physicalConn,
"oracle.jdbc.xa.client.OracleXAConnection", dbType);
}
case JdbcConstants.MARIADB:
- return createXAConnection(physicalConn,
"org.mariadb.jdbc.MariaXaConnection", dbType);
+ try {
+ return createXAConnection(physicalConn,
MARIADB_3X_XA_CONNECTION_CLASS, dbType);
+ } catch (Exception e) {
+ LOGGER.warn("Failed to create MariaDB 3.x XA
Connection, try pre-3.x version", e);
+ return createXAConnection(physicalConn,
MARIADB_PRE3X_XA_CONNECTION_CLASS, dbType);
+ }
case JdbcConstants.POSTGRESQL:
return PGUtils.createXAConnection(physicalConn);
case JdbcConstants.KINGBASE:
@@ -112,9 +120,12 @@ public class XAUtils {
case JdbcConstants.ORACLE:
return xaConnectionClass.getConstructor(Connection.class);
case JdbcConstants.MARIADB:
- // MariaXaConnection(MariaDbConnection connection)
- Class<?> mariaXaConnectionClass =
Class.forName("org.mariadb.jdbc.MariaDbConnection");
- return
xaConnectionClass.getConstructor(mariaXaConnectionClass);
+ if
("org.mariadb.jdbc.MariaXaConnection".equals(xaConnectionClass.getName())) {
+ Class<?> mariaDbConnectionClass =
Class.forName("org.mariadb.jdbc.MariaDbConnection");
+ return
xaConnectionClass.getConstructor(mariaDbConnectionClass);
+ } else {
+ return
xaConnectionClass.getConstructor(Connection.class);
+ }
case JdbcConstants.KINGBASE:
Class<?> kingbaseConnectionClass =
Class.forName("com.kingbase8.core.BaseConnection");
return
xaConnectionClass.getConstructor(kingbaseConnectionClass);
@@ -151,12 +162,8 @@ public class XAUtils {
result.add(params[0]);
return result;
case JdbcConstants.MARIADB:
- Class mariaDbConnectionClass =
Class.forName("org.mariadb.jdbc.MariaDbConnection");
- if (mariaDbConnectionClass.isInstance(params[0])) {
- Object mariaDbConnectionInstance =
mariaDbConnectionClass.cast(params[0]);
- result.add(mariaDbConnectionInstance);
- return result;
- }
+ result.add(params[0]);
+ return (List<T>) result;
case JdbcConstants.DM:
Class<?> dmConnectionClass =
Class.forName("dm.jdbc.driver.DmdbConnection");
if (dmConnectionClass.isInstance(params[0])) {
diff --git
a/rm-datasource/src/test/java/org/apache/seata/rm/datasource/util/XAUtilsTest.java
b/rm-datasource/src/test/java/org/apache/seata/rm/datasource/util/XAUtilsTest.java
index 8bf3e489c0..049770bee3 100644
---
a/rm-datasource/src/test/java/org/apache/seata/rm/datasource/util/XAUtilsTest.java
+++
b/rm-datasource/src/test/java/org/apache/seata/rm/datasource/util/XAUtilsTest.java
@@ -117,4 +117,21 @@ public class XAUtilsTest {
public void testCreateXAConnectionOscar() throws SQLException,
ClassNotFoundException {
testCreateXAConnectionForDbType(OSCAR,
"com.oscar.jdbc.OscarJdbc2Connection", "com.oscar.xa.Jdbc3XAConnection");
}
+
+ @Test
+ public void testCreateXAConnectionConstructorNotFound() {
+
when(mockDataSourceResource.getDbType()).thenReturn("unsupportedDbType");
+ assertThrows(SQLException.class, () -> {
+ XAUtils.createXAConnection(mockConnection, mockDataSourceResource);
+ });
+ }
+
+ @Test
+ public void testCreateXAConnectionConstructorMismatch() throws Exception {
+ when(mockDataSourceResource.getDbType()).thenReturn(KINGBASE);
+ Connection wrongConn = mock(Connection.class);
+ assertThrows(SQLException.class, () -> {
+ XAUtils.createXAConnection(wrongConn, mockDataSourceResource);
+ });
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]