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

duanzhengqiang 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 dff17cf7463 Support connecting to HiveServer2 through database 
connection pools other than HikariCP (#33762)
dff17cf7463 is described below

commit dff17cf7463251e083086465553a3b5982ad533a
Author: Ling Hengqian <[email protected]>
AuthorDate: Fri Nov 22 22:26:22 2024 +0800

    Support connecting to HiveServer2 through database connection pools other 
than HikariCP (#33762)
---
 RELEASE-NOTES.md                                   |  1 +
 .../shardingsphere-jdbc/observability/_index.cn.md | 11 +++++
 .../shardingsphere-jdbc/observability/_index.en.md | 11 +++++
 .../optional-plugins/hiveserver2/_index.cn.md      | 10 ----
 .../optional-plugins/hiveserver2/_index.en.md      | 10 ----
 .../optional-plugins/testcontainers/_index.cn.md   | 46 ++++++++++++++++--
 .../optional-plugins/testcontainers/_index.en.md   | 55 ++++++++++++++++++----
 .../infra/database/DatabaseTypeEngine.java         | 31 ++++++------
 .../reflect-config.json                            |  7 +--
 .../test/natived/jdbc/databases/PostgresTest.java  |  7 +++
 .../test/natived/jdbc/databases/SQLServerTest.java |  7 +++
 .../natived/jdbc/transactions/base/SeataTest.java  | 13 ++++-
 12 files changed, 153 insertions(+), 56 deletions(-)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index c2c68829585..fe6bd7bc32b 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -22,6 +22,7 @@
 1. Doc: Adds documentation for HiveServer2 support - 
[#33717](https://github.com/apache/shardingsphere/pull/33717)
 1. DistSQL: Check inline expression when create sharding table rule with 
inline sharding algorithm - 
[#33735](https://github.com/apache/shardingsphere/pull/33735)
 1. Infra: Support setting `hive_conf_list`, `hive_var_list` and 
`sess_var_list` for jdbcURL when connecting to HiveServer2 - 
[#33749](https://github.com/apache/shardingsphere/pull/33749)
+1. Infra: Support connecting to HiveServer2 through database connection pools 
other than HikariCP - 
[#33762](https://github.com/apache/shardingsphere/pull/33762)
 
 ### Bug Fixes
 
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
index 7317dd49f0a..73b9c8cc909 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
@@ -128,6 +128,17 @@ cd ./shardingsphere/
 COPY --from=ghcr.io/apache/shardingsphere-agent:latest /usr/agent/ 
/shardingsphere-agent/
 ```
 
+#### 社区构建
+
+自 ShardingSphere 5.5.2 开始,ShardingSphere Agent 在 
https://github.com/apache/shardingsphere/pkgs/container/shardingsphere-agent 
发布社区构建。
+此 Docker Image 不属于 ASF 分发产物之一,只是为了方便而提供。
+
+若在自定义 `Dockerfile` 中添加以下语句,这会将 ShardingSphere Agent 的目录复制到 
`/shardingsphere-agent/` 。
+
+```dockerfile
+COPY --from=ghcr.io/apache/shardingsphere-agent:5.5.2 /usr/agent/ 
/shardingsphere-agent/
+```
+
 #### 夜间构建
 
 ShardingSphere Agent 在 
https://github.com/apache/shardingsphere/pkgs/container/shardingsphere-agent 
存在夜间构建的 Docker Image。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
index 47d81c5e7c0..9ee8add0048 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
@@ -130,6 +130,17 @@ If you add the following statement in your custom 
`Dockerfile`, it will copy the
 COPY --from=ghcr.io/apache/shardingsphere-agent:latest /usr/agent/ 
/shardingsphere-agent/
 ```
 
+#### Community Build
+
+Since ShardingSphere 5.5.2, ShardingSphere Agent has released community builds 
at https://github.com/apache/shardingsphere/pkgs/container/shardingsphere-agent 
.
+This Docker Image is not part of the ASF distribution, but is provided for 
convenience.
+
+If you add the following statement in a custom `Dockerfile`, it will copy the 
ShardingSphere Agent directory to `/shardingsphere-agent/`.
+
+```dockerfile
+COPY --from=ghcr.io/apache/shardingsphere-agent:5.5.2 /usr/agent/ 
/shardingsphere-agent/
+```
+
 #### Nightly Build
 
 ShardingSphere Agent has a nightly built Docker Image at 
https://github.com/apache/shardingsphere/pkgs/container/shardingsphere-agent .
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
index 0b74c032d80..f0d5e43ebc4 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
@@ -233,16 +233,6 @@ ShardingSphere 仅针对 HiveServer2 `4.0.1` 进行集成测试。
 HiveServer2 JDBC Driver `4.0.1` 不支持 Hadoop `3.4.1`,
 参考 https://github.com/apache/hive/pull/5500 。
 
-### 数据库连接池限制
-
-由于 `org.apache.hive.jdbc.DatabaseMetaData` 未实现 
`java.sql.DatabaseMetaData#getURL()`, 
-ShardingSphere 
在`org.apache.shardingsphere.infra.database.DatabaseTypeEngine#getStorageType(javax.sql.DataSource)`处做了模糊处理,
-因此用户暂时仅可通过 `com.zaxxer.hikari.HikariDataSource` 的数据库连接池连接 HiveServer2。
-
-若用户需要通过 `com.alibaba.druid.pool.DruidDataSource` 的数据库连接池连接 HiveServer2,
-用户应当考虑在 Hive 的主分支实现 `java.sql.DatabaseMetaData#getURL()`,
-而不是尝试修改 ShardingSphere 的内部类。
-
 ### SQL 限制
 
 ShardingSphere JDBC DataSource 尚不支持执行 HiveServer2 的 `SET` 语句,`CREATE TABLE` 
语句和 `TRUNCATE TABLE` 语句。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
index e8ef96a059d..6b0296ef5d8 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
@@ -237,16 +237,6 @@ Users can only use Hadoop `3.3.6` as the underlying Hadoop 
dependency of HiveSer
 HiveServer2 JDBC Driver `4.0.1` does not support Hadoop `3.4.1`,
 Reference https://github.com/apache/hive/pull/5500.
 
-### Database connection pool limitation
-
-Since `org.apache.hive.jdbc.DatabaseMetaData` does not implement 
`java.sql.DatabaseMetaData#getURL()`,
-ShardingSphere has done fuzzy processing at 
`org.apache.shardingsphere.infra.database.DatabaseTypeEngine#getStorageType(javax.sql.DataSource)`,
-so users can only connect to HiveServer2 through the database connection pool 
of `com.zaxxer.hikari.HikariDataSource` for the time being.
-
-If users need to connect to HiveServer2 through the database connection pool 
of `com.alibaba.druid.pool.DruidDataSource`,
-users should consider implementing `java.sql.DatabaseMetaData#getURL()` in the 
main branch of Hive,
-rather than trying to modify the internal classes of ShardingSphere.
-
 ### SQL Limitations
 
 ShardingSphere JDBC DataSource does not yet support executing HiveServer2's 
`SET` statement, 
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.cn.md
index 6f011d9187a..9c537228ddc 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.cn.md
@@ -3,8 +3,13 @@ title = "Testcontainers"
 weight = 6
 +++
 
+## 背景信息
+
 ShardingSphere 默认情况下不提供对 `org.testcontainers.jdbc.ContainerDatabaseDriver` 的 
`driverClassName` 的支持。
-要在 ShardingSphere 的配置文件为数据节点使用类似 
`jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_0` 的 
`jdbcUrl`,
+
+## 前提条件
+
+要在 ShardingSphere 的配置文件为数据节点使用类似 
`jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` 的 `jdbcUrl`,
 可能的 Maven 依赖关系如下,
 
 ```xml
@@ -28,6 +33,8 @@ ShardingSphere 默认情况下不提供对 `org.testcontainers.jdbc.ContainerDat
 </dependencies>
 ```
 
+## 配置示例
+
 要使用 `org.apache.shardingsphere:shardingsphere-infra-database-testcontainers` 
模块,
 用户设备总是需要安装 Docker Engine 或符合 
https://java.testcontainers.org/supported_docker_environment/ 要求的 alternative 
container runtimes。
 此时可在 ShardingSphere 的 YAML 配置文件正常使用 `jdbc:tc:postgresql:` 前缀的 jdbcURL。
@@ -37,15 +44,15 @@ dataSources:
   ds_0:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_0
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0
   ds_1:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_1
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_1
   ds_2:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_2
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_2
 ```
 
 `org.apache.shardingsphere:shardingsphere-infra-database-testcontainers` 为 
testcontainers-java 风格的 jdbcURL 提供支持,
@@ -58,3 +65,34 @@ dataSources:
 5. 为 `jdbc:tc:mysql:` 的 jdbcURL 前缀提供支持的 Maven 模块 
`org.testcontainers:mysql:1.20.3`
 6. 为 `jdbc:tc:oracle:` 的 jdbcURL 前缀提供支持的 Maven 模块 
`org.testcontainers:oracle-xe:1.20.3` 和 `org.testcontainers:oracle-free:1.20.3`
 7. 为 `jdbc:tc:tidb:` 的 jdbcURL 前缀提供支持的 Maven 模块 
`org.testcontainers:tidb:1.20.3`
+
+## 使用限制
+
+### 生命周期限制
+
+如果像如下所示在 ShardingSphere 配置文件内定义通过 testcontainers-java 创建 Docker Container 的逻辑,
+
+```yaml
+dataSources:
+  ds_0:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0
+```
+
+testcontainers 默认情况下仅在对 `jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` 
的最后一个 `java.sql.Connection` 关闭后,
+停止`jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0`创建的 Docker Container。
+但 ShardingSphere 的内部类会缓存 `java.sql.Connection`。这导致直到 JVM 关闭,
+`jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` 创建的 Docker Container 才会被关闭。
+若有避免 Container 被长期开启的必要,
+`org.testcontainers.jdbc.ContainerDatabaseDriver` 存在可用方法来在单元测试中快速关闭相关 
Container,
+示例如下,
+
+```java
+import org.testcontainers.jdbc.ContainerDatabaseDriver;
+public class ExampleUtils {
+    void test() {
+        ContainerDatabaseDriver.killContainers();
+    }
+}
+```
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.en.md
index e2698a09e71..c8f4f9a2df7 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/testcontainers/_index.en.md
@@ -3,8 +3,13 @@ title = "Testcontainers"
 weight = 6
 +++
 
+## Background Information
+
 ShardingSphere does not provide support for `driverClassName` of 
`org.testcontainers.jdbc.ContainerDatabaseDriver` by default.
-To use `jdbcUrl` like 
`jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_0` for data 
nodes in ShardingSphere's configuration file,
+
+## Prerequisites
+
+To use `jdbcUrl` like `jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` for 
data nodes in ShardingSphere's configuration file,
 the possible Maven dependencies are as follows,
 
 ```xml
@@ -30,27 +35,29 @@ the possible Maven dependencies are as follows,
 
 At this time, you can use the jdbcURL with the prefix `jdbc:tc:postgresql:` 
normally in the YAML configuration file of ShardingSphere.
 
+## Configuration Example
+
+To use the 
`org.apache.shardingsphere:shardingsphere-infra-database-testcontainers` module,
+the user machine always needs to have Docker Engine or alternative container 
runtimes that comply with 
https://java.testcontainers.org/supported_docker_environment/ installed.
+`org.apache.shardingsphere:shardingsphere-infra-database-testcontainers` 
provides support for testcontainers-java style jdbcURL,
+including but not limited to,
+
 ```yaml
 dataSources:
   ds_0:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_0
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0
   ds_1:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_1
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_1
   ds_2:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:postgresql:17.1-bookworm://test-databases-postgres/demo_ds_2
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_2
 ```
 
-To use the 
`org.apache.shardingsphere:shardingsphere-infra-database-testcontainers` 
module, 
-the user machine always needs to have Docker Engine or alternative container 
runtimes that comply with 
https://java.testcontainers.org/supported_docker_environment/ installed.
-`org.apache.shardingsphere:shardingsphere-infra-database-testcontainers` 
provides support for testcontainers-java style jdbcURL,
-including but not limited to,
-
 1. Maven module `org.testcontainers:clickhouse:1.20.3` that provides support 
for jdbcURL prefixes for `jdbc:tc:clickhouse:`
 2. Maven module `org.testcontainers:postgresql:1.20.3` that provides support 
for jdbcURL prefixes for `jdbc:tc:postgresql:`
 3. Maven module `org.testcontainers:mssqlserver:1.20.3` that provides support 
for jdbcURL prefixes for `jdbc:tc:sqlserver:`
@@ -58,3 +65,33 @@ including but not limited to,
 5. Maven module `org.testcontainers:mysql:1.20.3` that provides support for 
jdbcURL prefixes of `jdbc:tc:mysql:` 
 6. Maven modules `org.testcontainers:oracle-xe:1.20.3` and 
`org.testcontainers:oracle-free:1.20.3` that provide support for jdbcURL 
prefixes of `jdbc:tc:oracle:`
 7. Maven module `org.testcontainers:tidb:1.20.3` that provides support for 
jdbcURL prefixes of `jdbc:tc:tidb:`
+
+## Usage restrictions
+
+### Lifecycle restrictions
+
+If the logic of creating a Docker Container through testcontainers-java is 
defined in the ShardingSphere configuration file as shown below,
+
+```yaml
+dataSources:
+  ds_0:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
+    jdbcUrl: jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0
+```
+
+testcontainers, by default, 
+stops the Docker Container created by 
`jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` only after the last 
`java.sql.Connection` of `jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` is 
closed.
+But ShardingSphere's internal class will cache `java.sql.Connection`.
+As a result, the Docker Container created by 
`jdbc:tc:postgresql:17.1-bookworm://test/demo_ds_0` will not be closed until 
the JVM is closed.
+If it is necessary to prevent the Container from being opened for a long time, 
`org.testcontainers.jdbc.ContainerDatabaseDriver` has a method available to 
quickly close the relevant Container in the unit test.
+The example is as follows,
+
+```java
+import org.testcontainers.jdbc.ContainerDatabaseDriver;
+public class ExampleUtils {
+    void test() {
+        ContainerDatabaseDriver.killContainers();
+    }
+}
+```
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
index 2472f46df61..4049776e152 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
@@ -24,15 +24,13 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
-import 
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
-import 
org.apache.shardingsphere.infra.datasource.pool.hikari.metadata.HikariDataSourcePoolFieldMetaData;
-import 
org.apache.shardingsphere.infra.datasource.pool.hikari.metadata.HikariDataSourcePoolMetaData;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.infra.util.reflection.ReflectionUtils;
 
 import javax.sql.DataSource;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
+import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
 import java.util.Collection;
@@ -117,27 +115,30 @@ public final class DatabaseTypeEngine {
     
     /**
      * Get storage type.
-     * Similar to apache/hive 4.0.0's 
`org.apache.hive.jdbc.HiveDatabaseMetaData`, it does not implement {@link 
java.sql.DatabaseMetaData#getURL()}.
-     * So use {@link CatalogSwitchableDataSource#getUrl()} and {@link 
ReflectionUtils#getFieldValue(Object, String)} to try fuzzy matching.
+     * Similar to <a 
href="https://github.com/apache/hive/pull/5554";>apache/hive#5554</a>,
+     * apache/hive 4.0.1's `org.apache.hive.jdbc.HiveDatabaseMetaData` does 
not implement {@link DatabaseMetaData#getURL()}.
+     * So use {@link java.sql.Wrapper#isWrapperFor(Class)} to try fuzzy 
matching.
      *
      * @param dataSource data source
      * @return storage type
      * @throws SQLWrapperException SQL wrapper exception
+     * @throws RuntimeException Runtime exception
      */
     public static DatabaseType getStorageType(final DataSource dataSource) {
         try (Connection connection = dataSource.getConnection()) {
             return DatabaseTypeFactory.get(connection.getMetaData().getURL());
         } catch (final SQLFeatureNotSupportedException 
sqlFeatureNotSupportedException) {
-            if (dataSource instanceof CatalogSwitchableDataSource) {
-                return DatabaseTypeFactory.get(((CatalogSwitchableDataSource) 
dataSource).getUrl());
+            try (Connection connection = dataSource.getConnection()) {
+                Class<?> hiveConnectionClass = 
Class.forName("org.apache.hive.jdbc.HiveConnection");
+                if (connection.isWrapperFor(hiveConnectionClass)) {
+                    Object hiveConnection = 
connection.unwrap(hiveConnectionClass);
+                    String connectedUrl = (String) 
hiveConnectionClass.getMethod("getConnectedUrl").invoke(hiveConnection);
+                    return DatabaseTypeFactory.get(connectedUrl);
+                }
+                throw new SQLWrapperException(sqlFeatureNotSupportedException);
+            } catch (final SQLException | ClassNotFoundException | 
NoSuchMethodException | InvocationTargetException | IllegalAccessException 
exception) {
+                throw new RuntimeException(exception);
             }
-            if (dataSource.getClass().getName().equals(new 
HikariDataSourcePoolMetaData().getType())) {
-                HikariDataSourcePoolFieldMetaData dataSourcePoolFieldMetaData 
= new HikariDataSourcePoolFieldMetaData();
-                String jdbcUrlFieldName = 
ReflectionUtils.<String>getFieldValue(dataSource, 
dataSourcePoolFieldMetaData.getJdbcUrlFieldName())
-                        .orElseThrow(() -> new 
SQLWrapperException(sqlFeatureNotSupportedException));
-                return DatabaseTypeFactory.get(jdbcUrlFieldName);
-            }
-            throw new SQLWrapperException(sqlFeatureNotSupportedException);
         } catch (final SQLException ex) {
             throw new SQLWrapperException(ex);
         }
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json
index a5d2b3f54bd..f4de54a3500 100644
--- 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json
@@ -692,11 +692,6 @@
   "queryAllPublicConstructors":true,
   "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"add","parameterTypes":["long"] }, {"name":"sum","parameterTypes":[] }]
 },
-{
-  
"condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask"},
-  "name":"java.util.concurrent.atomic.Striped64$Cell",
-  "fields":[{"name":"value"}]
-},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.expr.groovy.GroovyInlineExpressionParser"},
   "name":"java.util.function.DoubleFunction",
@@ -2075,7 +2070,7 @@
   "queryAllDeclaredMethods":true
 },
 {
-  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.listener.DatabaseMetaDataChangedListener$$Lambda/0x00007f401fb273a8"},
+  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.listener.DatabaseMetaDataChangedListener$$Lambda/0x00007f47f3b26e30"},
   
"name":"org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch.MetaDataChangedSubscriber"
 },
 {
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PostgresTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PostgresTest.java
index 95a3d2e1dc7..623235e4fc5 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PostgresTest.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PostgresTest.java
@@ -20,8 +20,10 @@ package 
org.apache.shardingsphere.test.natived.jdbc.databases;
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import org.apache.shardingsphere.test.natived.commons.TestShardingService;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledInNativeImage;
+import org.testcontainers.jdbc.ContainerDatabaseDriver;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
@@ -31,6 +33,11 @@ class PostgresTest {
     
     private TestShardingService testShardingService;
     
+    @AfterAll
+    static void afterAll() {
+        ContainerDatabaseDriver.killContainers();
+    }
+    
     @Test
     void assertShardingInLocalTransactions() throws SQLException {
         HikariConfig config = new HikariConfig();
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
index 1fafe7cee87..44fe6b3c3ca 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
@@ -20,8 +20,10 @@ package 
org.apache.shardingsphere.test.natived.jdbc.databases;
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import org.apache.shardingsphere.test.natived.commons.TestShardingService;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledInNativeImage;
+import org.testcontainers.jdbc.ContainerDatabaseDriver;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
@@ -31,6 +33,11 @@ class SQLServerTest {
     
     private TestShardingService testShardingService;
     
+    @AfterAll
+    static void afterAll() {
+        ContainerDatabaseDriver.killContainers();
+    }
+    
     @Test
     void assertShardingInLocalTransactions() throws SQLException {
         HikariConfig config = new HikariConfig();
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/base/SeataTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/base/SeataTest.java
index e9c9e29d1fc..2e20ef8bf55 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/base/SeataTest.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/base/SeataTest.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.test.natived.jdbc.transactions.base;
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import org.apache.http.HttpStatus;
+import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import org.apache.shardingsphere.test.natived.commons.TestShardingService;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
@@ -27,10 +28,12 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledInNativeImage;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.jdbc.ContainerDatabaseDriver;
 import org.testcontainers.junit.jupiter.Container;
 import org.testcontainers.junit.jupiter.Testcontainers;
 
 import javax.sql.DataSource;
+import java.sql.Connection;
 import java.sql.SQLException;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -61,12 +64,15 @@ class SeataTest {
     
     @AfterAll
     static void afterAll() {
+        ContainerDatabaseDriver.killContainers();
         System.clearProperty(SERVICE_DEFAULT_GROUP_LIST_KEY);
     }
     
     /**
-     * TODO Just checking `/health` of `7091` port of Seata Server is not 
enough to indicate that Seata Server is ready.
-     * @throws SQLException An exception that provides information on a 
database access error or other errors.
+     * TODO Need to investigate why {@link 
org.apache.shardingsphere.transaction.base.seata.at.SeataATShardingSphereTransactionManager#close()}
 is not called.
+     *  The manual call {@link 
org.apache.shardingsphere.mode.manager.ContextManager#close()} is not intuitive.
+     *
+     * @throws SQLException SQL exception
      */
     @Test
     void assertShardingInSeataTransactions() throws SQLException {
@@ -75,6 +81,9 @@ class SeataTest {
         initEnvironment();
         testShardingService.processSuccess();
         testShardingService.cleanEnvironment();
+        try (Connection connection = dataSource.getConnection()) {
+            
connection.unwrap(ShardingSphereConnection.class).getContextManager().close();
+        }
     }
     
     private void initEnvironment() throws SQLException {

Reply via email to