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

jianglongtao 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 7d16995  Decouple data source pool type and DataSourceJdbcUrlMetaData 
and DataSourcePoolMetaData (#15809)
7d16995 is described below

commit 7d1699527b6ce8fec11c4110542590a5c0da9a83
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Mar 5 23:11:36 2022 +0800

    Decouple data source pool type and DataSourceJdbcUrlMetaData and 
DataSourcePoolMetaData (#15809)
    
    * Decouple data source pool type and DataSourceJdbcUrlMetaData
    
    * Decouple data source pool type and DataSourcePoolMetaData
    
    * Decouple data source pool type and DataSourcePoolMetaData
---
 .../metrics/prometheus/util/ReflectiveUtil.java    |  4 +-
 .../shardingsphere-infra-common/pom.xml            |  2 -
 .../pool/creator/DataSourcePoolCreator.java        |  9 ++---
 .../pool/metadata/DataSourceJdbcUrlMetaData.java   | 14 +++----
 .../pool/metadata/DataSourcePoolMetaData.java      |  7 +---
 .../type/dbcp/DBCPDataSourceJdbcUrlMetaData.java   | 37 ++++++++++-------
 .../type/dbcp/DBCPDataSourcePoolMetaData.java      |  3 +-
 .../dbcp/TomcatDBCPDataSourceJdbcUrlMetaData.java  | 37 ++++++++++-------
 .../dbcp/TomcatDBCPDataSourcePoolMetaData.java     |  3 +-
 .../hikari/HikariDataSourceJdbcUrlMetaData.java    | 46 ++++++++++++++++------
 .../type/hikari/HikariDataSourcePoolMetaData.java  |  3 +-
 .../props/DataSourcePropertiesCreator.java         |  3 +-
 .../fixture/MockedDataSourceJdbcUrlMetaData.java   | 29 +++++++++-----
 .../fixture/MockedDataSourcePoolMetaData.java      |  5 +--
 14 files changed, 116 insertions(+), 86 deletions(-)

diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/util/ReflectiveUtil.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/util/ReflectiveUtil.java
index 02baed7..fc870c9 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/util/ReflectiveUtil.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/util/ReflectiveUtil.java
@@ -55,8 +55,6 @@ public final class ReflectiveUtil {
 
     private static Field getField(final Class<?> clazz, final String 
fieldName) {
         Field[] fields = clazz.getDeclaredFields();
-        return fields.length != 0
-                ? Arrays.stream(fields).filter(each -> 
fieldName.equals(each.getName())).findFirst().orElse(null)
-                : null;
+        return fields.length != 0 ? Arrays.stream(fields).filter(each -> 
fieldName.equals(each.getName())).findFirst().orElse(null) : null;
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/pom.xml 
b/shardingsphere-infra/shardingsphere-infra-common/pom.xml
index af2c0cb..5dea03e 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/pom.xml
+++ b/shardingsphere-infra/shardingsphere-infra-common/pom.xml
@@ -69,12 +69,10 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-dbcp2</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.tomcat</groupId>
             <artifactId>tomcat-dbcp</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>io.vertx</groupId>
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreator.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreator.java
index 427ebed..bfcbb26 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreator.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreator.java
@@ -54,7 +54,6 @@ public final class DataSourcePoolCreator {
      * @param dataSourceProps data source properties
      * @return created data source
      */
-    @SuppressWarnings("rawtypes")
     public static DataSource create(final DataSourceProperties 
dataSourceProps) {
         DataSource result = 
createDataSource(dataSourceProps.getDataSourceClassName());
         Optional<DataSourcePoolMetaData> poolMetaData = 
DataSourcePoolMetaDataFactory.newInstance(dataSourceProps.getDataSourceClassName());
@@ -75,7 +74,7 @@ public final class DataSourcePoolCreator {
         return (DataSource) 
Class.forName(dataSourceClassName).getConstructor().newInstance();
     }
     
-    private static void setDefaultFields(final DataSourceReflection 
dataSourceReflection, final DataSourcePoolMetaData<?> poolMetaData) {
+    private static void setDefaultFields(final DataSourceReflection 
dataSourceReflection, final DataSourcePoolMetaData poolMetaData) {
         for (Entry<String, Object> entry : 
poolMetaData.getDefaultProperties().entrySet()) {
             dataSourceReflection.setField(entry.getKey(), entry.getValue());
         }
@@ -87,7 +86,7 @@ public final class DataSourcePoolCreator {
         }
     }
     
-    private static void setConfiguredFields(final DataSourceProperties 
dataSourceProps, final DataSourceReflection dataSourceReflection, final 
DataSourcePoolMetaData<?> poolMetaData) {
+    private static void setConfiguredFields(final DataSourceProperties 
dataSourceProps, final DataSourceReflection dataSourceReflection, final 
DataSourcePoolMetaData poolMetaData) {
         for (Entry<String, Object> entry : 
dataSourceProps.getAllLocalProperties().entrySet()) {
             String fieldName = entry.getKey();
             Object fieldValue = entry.getValue();
@@ -97,11 +96,11 @@ public final class DataSourcePoolCreator {
         }
     }
     
-    private static boolean isValidProperty(final String key, final Object 
value, final DataSourcePoolMetaData<?> poolMetaData) {
+    private static boolean isValidProperty(final String key, final Object 
value, final DataSourcePoolMetaData poolMetaData) {
         return !poolMetaData.getInvalidProperties().containsKey(key) || null 
== value || !value.equals(poolMetaData.getInvalidProperties().get(key));
     }
     
-    @SuppressWarnings({"unchecked", "rawtypes"})
+    @SuppressWarnings("unchecked")
     private static void appendJdbcUrlProperties(final 
CustomDataSourceProperties customDataSourceProps, final DataSource 
targetDataSource, final DataSourcePoolMetaData poolMetaData) {
         String jdbcUrlPropertiesFieldName = 
poolMetaData.getJdbcUrlMetaData().getJdbcUrlPropertiesFieldName();
         if (null != jdbcUrlPropertiesFieldName && 
customDataSourceProps.getProperties().containsKey(jdbcUrlPropertiesFieldName)) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourceJdbcUrlMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourceJdbcUrlMetaData.java
index 1d45baa..b0b6330 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourceJdbcUrlMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourceJdbcUrlMetaData.java
@@ -22,10 +22,8 @@ import java.util.Properties;
 
 /**
  * Data source JDBC URL meta data.
- * 
- * @param <T> type of target data source
  */
-public interface DataSourceJdbcUrlMetaData<T extends DataSource> {
+public interface DataSourceJdbcUrlMetaData {
     
     /**
      * Get JDBC URL.
@@ -33,7 +31,7 @@ public interface DataSourceJdbcUrlMetaData<T extends 
DataSource> {
      * @param targetDataSource target data source
      * @return JDBC URL
      */
-    String getJdbcUrl(T targetDataSource);
+    String getJdbcUrl(DataSource targetDataSource);
     
     /**
      * Get username.
@@ -41,7 +39,7 @@ public interface DataSourceJdbcUrlMetaData<T extends 
DataSource> {
      * @param targetDataSource target data source
      * @return username
      */
-    String getUsername(T targetDataSource);
+    String getUsername(DataSource targetDataSource);
     
     /**
      * Get password.
@@ -49,7 +47,7 @@ public interface DataSourceJdbcUrlMetaData<T extends 
DataSource> {
      * @param targetDataSource target data source
      * @return password
      */
-    String getPassword(T targetDataSource);
+    String getPassword(DataSource targetDataSource);
     
     /**
      * Get JDBC URL properties field name.
@@ -64,7 +62,7 @@ public interface DataSourceJdbcUrlMetaData<T extends 
DataSource> {
      * @param targetDataSource target data source
      * @return JDBC URL properties
      */
-    Properties getJdbcUrlProperties(T targetDataSource);
+    Properties getJdbcUrlProperties(DataSource targetDataSource);
     
     /**
      * Append JDBC URL properties.
@@ -73,5 +71,5 @@ public interface DataSourceJdbcUrlMetaData<T extends 
DataSource> {
      * @param value value
      * @param targetDataSource target data source
      */
-    void appendJdbcUrlProperties(String key, String value, T targetDataSource);
+    void appendJdbcUrlProperties(String key, String value, DataSource 
targetDataSource);
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaData.java
index 7364279..390a1d3 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaData.java
@@ -19,16 +19,13 @@ package 
org.apache.shardingsphere.infra.datasource.pool.metadata;
 
 import org.apache.shardingsphere.spi.typed.TypedSPI;
 
-import javax.sql.DataSource;
 import java.util.Collection;
 import java.util.Map;
 
 /**
  * Data source pool meta data.
- * 
- * @param <T> type of target data source
  */
-public interface DataSourcePoolMetaData<T extends DataSource> extends TypedSPI 
{
+public interface DataSourcePoolMetaData extends TypedSPI {
     
     /**
      * Get default properties.
@@ -63,5 +60,5 @@ public interface DataSourcePoolMetaData<T extends DataSource> 
extends TypedSPI {
      * 
      * @return data source JDBC URL meta data
      */
-    DataSourceJdbcUrlMetaData<T> getJdbcUrlMetaData();
+    DataSourceJdbcUrlMetaData getJdbcUrlMetaData();
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourceJdbcUrlMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourceJdbcUrlMetaData.java
index 723b758..7433cf1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourceJdbcUrlMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourceJdbcUrlMetaData.java
@@ -18,30 +18,31 @@
 package org.apache.shardingsphere.infra.datasource.pool.metadata.type.dbcp;
 
 import lombok.SneakyThrows;
-import org.apache.commons.dbcp2.BasicDataSource;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourceJdbcUrlMetaData;
 
+import javax.sql.DataSource;
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Properties;
 
 /**
  * Hikari data source JDBC URL meta data.
  */
-public final class DBCPDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData<BasicDataSource> {
+public final class DBCPDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData {
     
     @Override
-    public String getJdbcUrl(final BasicDataSource targetDataSource) {
-        return targetDataSource.getUrl();
+    public String getJdbcUrl(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "url");
     }
     
     @Override
-    public String getUsername(final BasicDataSource targetDataSource) {
-        return targetDataSource.getUsername();
+    public String getUsername(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "username");
     }
     
     @Override
-    public String getPassword(final BasicDataSource targetDataSource) {
-        return targetDataSource.getPassword();
+    public String getPassword(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "password");
     }
     
     @Override
@@ -50,15 +51,21 @@ public final class DBCPDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMet
     }
     
     @Override
-    @SneakyThrows(ReflectiveOperationException.class)
-    public Properties getJdbcUrlProperties(final BasicDataSource 
targetDataSource) {
-        Field field = 
BasicDataSource.class.getDeclaredField("connectionProperties");
-        field.setAccessible(true);
-        return (Properties) field.get(targetDataSource);
+    public Properties getJdbcUrlProperties(final DataSource targetDataSource) {
+        return (Properties) getFieldValue(targetDataSource, 
"connectionProperties");
     }
     
+    @SneakyThrows(ReflectiveOperationException.class)
     @Override
-    public void appendJdbcUrlProperties(final String key, final String value, 
final BasicDataSource targetDataSource) {
-        targetDataSource.addConnectionProperty(key, value);
+    public void appendJdbcUrlProperties(final String key, final String value, 
final DataSource targetDataSource) {
+        Method method = 
targetDataSource.getClass().getMethod("addConnectionProperty", String.class, 
String.class);
+        method.invoke(targetDataSource, key, value);
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private Object getFieldValue(final DataSource targetDataSource, final 
String fieldName) {
+        Field field = targetDataSource.getClass().getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(targetDataSource);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourcePoolMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourcePoolMetaData.java
index 7918ada..96a32a8 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourcePoolMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/DBCPDataSourcePoolMetaData.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.infra.datasource.pool.metadata.type.dbcp;
 
 import lombok.Getter;
-import org.apache.commons.dbcp2.BasicDataSource;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
 
 import java.util.Collection;
@@ -30,7 +29,7 @@ import java.util.Map;
  * DBCP data source pool meta data.
  */
 @Getter
-public final class DBCPDataSourcePoolMetaData implements 
DataSourcePoolMetaData<BasicDataSource> {
+public final class DBCPDataSourcePoolMetaData implements 
DataSourcePoolMetaData {
     
     private final Collection<String> transientFieldNames = new LinkedList<>();
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourceJdbcUrlMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourceJdbcUrlMetaData.java
index 2caccfd..b5f607b 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourceJdbcUrlMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourceJdbcUrlMetaData.java
@@ -19,29 +19,30 @@ package 
org.apache.shardingsphere.infra.datasource.pool.metadata.type.dbcp;
 
 import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourceJdbcUrlMetaData;
-import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
 
+import javax.sql.DataSource;
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Properties;
 
 /**
  * Tomcat DBCP data source JDBC URL meta data.
  */
-public final class TomcatDBCPDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData<BasicDataSource> {
+public final class TomcatDBCPDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData {
     
     @Override
-    public String getJdbcUrl(final BasicDataSource targetDataSource) {
-        return targetDataSource.getUrl();
+    public String getJdbcUrl(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "url");
     }
     
     @Override
-    public String getUsername(final BasicDataSource targetDataSource) {
-        return targetDataSource.getUsername();
+    public String getUsername(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "username");
     }
     
     @Override
-    public String getPassword(final BasicDataSource targetDataSource) {
-        return targetDataSource.getPassword();
+    public String getPassword(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "password");
     }
     
     @Override
@@ -50,15 +51,21 @@ public final class TomcatDBCPDataSourceJdbcUrlMetaData 
implements DataSourceJdbc
     }
     
     @Override
-    @SneakyThrows(ReflectiveOperationException.class)
-    public Properties getJdbcUrlProperties(final BasicDataSource 
targetDataSource) {
-        Field field = 
BasicDataSource.class.getDeclaredField("connectionProperties");
-        field.setAccessible(true);
-        return (Properties) field.get(targetDataSource);
+    public Properties getJdbcUrlProperties(final DataSource targetDataSource) {
+        return (Properties) getFieldValue(targetDataSource, 
"connectionProperties");
     }
     
+    @SneakyThrows(ReflectiveOperationException.class)
     @Override
-    public void appendJdbcUrlProperties(final String key, final String value, 
final BasicDataSource targetDataSource) {
-        targetDataSource.addConnectionProperty(key, value);
+    public void appendJdbcUrlProperties(final String key, final String value, 
final DataSource targetDataSource) {
+        Method method = 
targetDataSource.getClass().getMethod("addConnectionProperty", String.class, 
String.class);
+        method.invoke(targetDataSource, key, value);
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private Object getFieldValue(final DataSource targetDataSource, final 
String fieldName) {
+        Field field = targetDataSource.getClass().getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(targetDataSource);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourcePoolMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourcePoolMetaData.java
index 00dcd14..4c5d800 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourcePoolMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/dbcp/TomcatDBCPDataSourcePoolMetaData.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.infra.datasource.pool.metadata.type.dbcp;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
-import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -30,7 +29,7 @@ import java.util.Map;
  * Tomcat JDBC data source pool meta data.
  */
 @Getter
-public final class TomcatDBCPDataSourcePoolMetaData implements 
DataSourcePoolMetaData<BasicDataSource> {
+public final class TomcatDBCPDataSourcePoolMetaData implements 
DataSourcePoolMetaData {
     
     private final Collection<String> transientFieldNames = new LinkedList<>();
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourceJdbcUrlMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourceJdbcUrlMetaData.java
index 4b2dc11..deb4d49 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourceJdbcUrlMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourceJdbcUrlMetaData.java
@@ -17,29 +17,31 @@
 
 package org.apache.shardingsphere.infra.datasource.pool.metadata.type.hikari;
 
-import com.zaxxer.hikari.HikariDataSource;
+import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourceJdbcUrlMetaData;
 
+import javax.sql.DataSource;
+import java.lang.reflect.Field;
 import java.util.Properties;
 
 /**
  * Hikari data source JDBC URL meta data.
  */
-public final class HikariDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData<HikariDataSource> {
+public final class HikariDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData {
     
     @Override
-    public String getJdbcUrl(final HikariDataSource targetDataSource) {
-        return targetDataSource.getJdbcUrl();
+    public String getJdbcUrl(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "jdbcUrl");
     }
     
     @Override
-    public String getUsername(final HikariDataSource targetDataSource) {
-        return targetDataSource.getUsername();
+    public String getUsername(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "username");
     }
     
     @Override
-    public String getPassword(final HikariDataSource targetDataSource) {
-        return targetDataSource.getPassword();
+    public String getPassword(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "password");
     }
     
     @Override
@@ -48,12 +50,32 @@ public final class HikariDataSourceJdbcUrlMetaData 
implements DataSourceJdbcUrlM
     }
     
     @Override
-    public Properties getJdbcUrlProperties(final HikariDataSource 
targetDataSource) {
-        return targetDataSource.getDataSourceProperties();
+    public Properties getJdbcUrlProperties(final DataSource targetDataSource) {
+        return (Properties) getFieldValue(targetDataSource, 
"dataSourceProperties");
     }
     
     @Override
-    public void appendJdbcUrlProperties(final String key, final String value, 
final HikariDataSource targetDataSource) {
-        targetDataSource.getDataSourceProperties().put(key, value);
+    public void appendJdbcUrlProperties(final String key, final String value, 
final DataSource targetDataSource) {
+        ((Properties) getFieldValue(targetDataSource, 
"dataSourceProperties")).put(key, value);
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private Object getFieldValue(final DataSource targetDataSource, final 
String fieldName) {
+        Class<?> dataSourceClass = targetDataSource.getClass();
+        Field field = null;
+        boolean found = false;
+        while (!found) {
+            try {
+                field = dataSourceClass.getDeclaredField(fieldName);
+                found = true;
+            } catch (final ReflectiveOperationException ex) {
+                dataSourceClass = dataSourceClass.getSuperclass();
+                if (Object.class == dataSourceClass) {
+                    throw ex;
+                }
+            }
+        }
+        field.setAccessible(true);
+        return field.get(targetDataSource);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourcePoolMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourcePoolMetaData.java
index 959896e..3be4872 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourcePoolMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/hikari/HikariDataSourcePoolMetaData.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.infra.datasource.pool.metadata.type.hikari;
 
-import com.zaxxer.hikari.HikariDataSource;
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
 
@@ -30,7 +29,7 @@ import java.util.Map;
  * Hikari data source pool meta data.
  */
 @Getter
-public final class HikariDataSourcePoolMetaData implements 
DataSourcePoolMetaData<HikariDataSource> {
+public final class HikariDataSourcePoolMetaData implements 
DataSourcePoolMetaData {
     
     private final Map<String, Object> defaultProperties = new HashMap<>(6, 1);
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesCreator.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesCreator.java
index 78af622..7d621d2 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesCreator.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesCreator.java
@@ -75,7 +75,6 @@ public final class DataSourcePropertiesCreator {
         return result;
     }
     
-    @SuppressWarnings("rawtypes")
     private static Map<String, Object> createProperties(final DataSource 
dataSource) {
         Map<String, Object> result = new LinkedHashMap<>();
         Optional<DataSourcePoolMetaData> poolMetaData = 
DataSourcePoolMetaDataFactory.newInstance(dataSource.getClass().getName());
@@ -89,7 +88,7 @@ public final class DataSourcePropertiesCreator {
         return result;
     }
     
-    private static boolean isValidProperty(final String key, final Object 
value, final DataSourcePoolMetaData<?> poolMetaData) {
+    private static boolean isValidProperty(final String key, final Object 
value, final DataSourcePoolMetaData poolMetaData) {
         return !poolMetaData.getInvalidProperties().containsKey(key) || null 
== value || !value.equals(poolMetaData.getInvalidProperties().get(key));
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourceJdbcUrlMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourceJdbcUrlMetaData.java
index a6b9220..8adef1e 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourceJdbcUrlMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourceJdbcUrlMetaData.java
@@ -17,26 +17,28 @@
 
 package org.apache.shardingsphere.infra.datasource.pool.metadata.fixture;
 
+import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourceJdbcUrlMetaData;
-import org.apache.shardingsphere.test.mock.MockedDataSource;
 
+import javax.sql.DataSource;
+import java.lang.reflect.Field;
 import java.util.Properties;
 
-public final class MockedDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData<MockedDataSource> {
+public final class MockedDataSourceJdbcUrlMetaData implements 
DataSourceJdbcUrlMetaData {
     
     @Override
-    public String getJdbcUrl(final MockedDataSource targetDataSource) {
-        return targetDataSource.getUrl();
+    public String getJdbcUrl(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "url");
     }
     
     @Override
-    public String getUsername(final MockedDataSource targetDataSource) {
-        return targetDataSource.getUsername();
+    public String getUsername(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "username");
     }
     
     @Override
-    public String getPassword(final MockedDataSource targetDataSource) {
-        return targetDataSource.getPassword();
+    public String getPassword(final DataSource targetDataSource) {
+        return (String) getFieldValue(targetDataSource, "password");
     }
     
     @Override
@@ -45,11 +47,18 @@ public final class MockedDataSourceJdbcUrlMetaData 
implements DataSourceJdbcUrlM
     }
     
     @Override
-    public Properties getJdbcUrlProperties(final MockedDataSource 
targetDataSource) {
+    public Properties getJdbcUrlProperties(final DataSource targetDataSource) {
         return new Properties();
     }
     
     @Override
-    public void appendJdbcUrlProperties(final String key, final String value, 
final MockedDataSource targetDataSource) {
+    public void appendJdbcUrlProperties(final String key, final String value, 
final DataSource targetDataSource) {
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private Object getFieldValue(final DataSource targetDataSource, final 
String fieldName) {
+        Field field = targetDataSource.getClass().getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(targetDataSource);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourcePoolMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourcePoolMetaData.java
index d03beb8..e5203cf 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourcePoolMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/fixture/MockedDataSourcePoolMetaData.java
@@ -18,14 +18,13 @@
 package org.apache.shardingsphere.infra.datasource.pool.metadata.fixture;
 
 import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
-import org.apache.shardingsphere.test.mock.MockedDataSource;
 
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-public final class MockedDataSourcePoolMetaData implements 
DataSourcePoolMetaData<MockedDataSource> {
+public final class MockedDataSourcePoolMetaData implements 
DataSourcePoolMetaData {
     
     @Override
     public Map<String, Object> getDefaultProperties() {
@@ -62,6 +61,6 @@ public final class MockedDataSourcePoolMetaData implements 
DataSourcePoolMetaDat
     
     @Override
     public String getType() {
-        return MockedDataSource.class.getName();
+        return "org.apache.shardingsphere.test.mock.MockedDataSource";
     }
 }

Reply via email to