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";
}
}