This is an automated email from the ASF dual-hosted git repository.
panjuan 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 97b8b10 Add DBCPDataSourcePoolMetaData and test cases (#15255)
97b8b10 is described below
commit 97b8b1033b9442f0d51829a66115992a9cd9454a
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 6 13:55:47 2022 +0800
Add DBCPDataSourcePoolMetaData and test cases (#15255)
* Add more test case for DataSourcePoolCreatorTest
* Use getJdbcUrl instead of getJdbcUrlFieldName in DataSourcePoolMetaData
* Add DBCPDataSourcePoolMetaData and test cases
* Add DBCPDataSourcePoolMetaData and test cases
* Add DBCPDataSourcePoolMetaData and test cases
* Add DBCPDataSourcePoolMetaData and test cases
---
pom.xml | 7 +++
.../shardingsphere-infra-common/pom.xml | 6 ++
.../pool/creator/DataSourcePoolCreator.java | 24 ++++++--
.../pool/creator/DataSourceReflection.java | 31 +++-------
.../pool/metadata/DataSourcePoolMetaData.java | 34 +++++++++--
.../metadata/DataSourcePoolMetaDataFactory.java | 2 +-
.../DBCPDataSourcePoolMetaData.java} | 44 ++++++++++----
.../DefaultDataSourcePoolMetaData.java | 17 +++++-
.../HikariDataSourcePoolMetaData.java | 19 ++++--
.../TomcatDBCPDataSourcePoolMetaData.java} | 44 ++++++++++----
.../datasource/props/DataSourceProperties.java | 2 +-
.../props/DataSourcePropertiesCreator.java | 4 +-
...datasource.pool.metadata.DataSourcePoolMetaData | 6 +-
.../pool/creator/DataSourcePoolCreatorTest.java | 15 -----
.../type/DBCPDataSourcePoolCreatorTest.java | 70 ++++++++++++++++++++++
.../type/HikariDataSourcePoolCreatorTest.java | 61 +++++++++++++++++++
.../type/TomcatDBCPDataSourcePoolCreatorTest.java | 70 ++++++++++++++++++++++
.../DataSourcePoolMetaDataFactoryTest.java | 4 +-
.../fixture/MockedDataSourcePoolMetaData.java | 18 ++++--
.../datasource/props/DataSourcePropertiesTest.java | 2 +-
.../shardingsphere-jdbc-core/pom.xml | 4 ++
.../pom.xml | 9 +++
.../pom.xml | 9 +++
.../shardingsphere-mode-core/pom.xml | 10 ++++
.../shardingsphere-cluster-mode-core/pom.xml | 11 ++++
.../shardingsphere-standalone-mode-core/pom.xml | 11 ++++
.../shardingsphere-proxy-backend/pom.xml | 8 +++
27 files changed, 450 insertions(+), 92 deletions(-)
diff --git a/pom.xml b/pom.xml
index c83f4a4..44f4ae1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,6 +94,7 @@
<hikari-cp.version>3.4.2</hikari-cp.version>
<commons-dbcp2.version>2.2.0</commons-dbcp2.version>
+ <tomcat.version>10.0.16</tomcat.version>
<commons-pool.version>1.6</commons-pool.version>
<h2.version>1.4.196</h2.version>
<mysql-connector-java.version>5.1.47</mysql-connector-java.version>
@@ -553,6 +554,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ <version>${tomcat.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId>
<version>${curator.version}</version>
diff --git a/shardingsphere-infra/shardingsphere-infra-common/pom.xml
b/shardingsphere-infra/shardingsphere-infra-common/pom.xml
index ef205b8..1621a93 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/pom.xml
+++ b/shardingsphere-infra/shardingsphere-infra-common/pom.xml
@@ -74,6 +74,12 @@
<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 20f992b..a6ebff9 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
@@ -23,11 +23,13 @@ import lombok.SneakyThrows;
import
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
import
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaDataFactory;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import
org.apache.shardingsphere.infra.datasource.props.custom.CustomDataSourceProperties;
import javax.sql.DataSource;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Properties;
import java.util.stream.Collectors;
/**
@@ -52,13 +54,15 @@ 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());
DataSourcePoolMetaData poolMetaData =
DataSourcePoolMetaDataFactory.newInstance(dataSourceProps.getDataSourceClassName());
DataSourceReflection dataSourceReflection = new
DataSourceReflection(result);
setDefaultFields(dataSourceReflection, poolMetaData);
setConfiguredFields(dataSourceProps, dataSourceReflection,
poolMetaData);
-
dataSourceReflection.addDefaultDataSourceProperties(poolMetaData.getJdbcUrlPropertiesFieldName(),
poolMetaData.getJdbcUrlFieldName());
+
appendJdbcUrlProperties(dataSourceProps.getCustomDataSourceProperties(),
result, poolMetaData);
+ dataSourceReflection.addDefaultDataSourceProperties(poolMetaData);
return result;
}
@@ -67,23 +71,33 @@ 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());
}
}
- 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();
- if (isValidProperty(fieldName, fieldValue, poolMetaData)) {
+ if (isValidProperty(fieldName, fieldValue, poolMetaData) &&
!fieldName.equals(poolMetaData.getJdbcUrlPropertiesFieldName())) {
dataSourceReflection.setField(fieldName, fieldValue);
}
}
}
- 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"})
+ private static void appendJdbcUrlProperties(final
CustomDataSourceProperties customDataSourceProps, final DataSource
targetDataSource, final DataSourcePoolMetaData poolMetaData) {
+ if (null != poolMetaData.getJdbcUrlPropertiesFieldName() &&
customDataSourceProps.getProperties().containsKey(poolMetaData.getJdbcUrlPropertiesFieldName()))
{
+ Properties jdbcUrlProps = (Properties)
customDataSourceProps.getProperties().get(poolMetaData.getJdbcUrlPropertiesFieldName());
+ for (Entry<Object, Object> entry : jdbcUrlProps.entrySet()) {
+
poolMetaData.appendJdbcUrlProperties(entry.getKey().toString(),
entry.getValue().toString(), targetDataSource);
+ }
+ }
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourceReflection.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourceReflection.java
index 5187cac..460e96e 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourceReflection.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourceReflection.java
@@ -22,6 +22,7 @@ import com.google.common.collect.Sets;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
import javax.sql.DataSource;
import java.lang.reflect.Method;
@@ -153,22 +154,22 @@ public final class DataSourceReflection {
/**
* Add default data source properties.
*
- * @param dataSourcePropsFieldName data source properties field name
- * @param jdbcUrlFieldName JDBC URL field name
+ * @param dataSourcePoolMetaData data source pool meta data
*/
- public void addDefaultDataSourceProperties(final String
dataSourcePropsFieldName, final String jdbcUrlFieldName) {
- if (null == dataSourcePropsFieldName || null == jdbcUrlFieldName) {
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ public void addDefaultDataSourceProperties(final DataSourcePoolMetaData
dataSourcePoolMetaData) {
+ String jdbcUrl = dataSourcePoolMetaData.getJdbcUrl(dataSource);
+ Properties jdbcUrlProps =
dataSourcePoolMetaData.getJdbcUrlProperties(dataSource);
+ if (null == jdbcUrl || null == jdbcUrlProps) {
return;
}
- Properties targetDataSourceProps =
getDataSourceProperties(dataSourcePropsFieldName);
- String jdbcUrl = getJdbcUrl(jdbcUrlFieldName);
DataSourceMetaData dataSourceMetaData =
DatabaseTypeRegistry.getDatabaseTypeByURL(jdbcUrl).getDataSourceMetaData(jdbcUrl,
null);
Properties queryProps = dataSourceMetaData.getQueryProperties();
for (Entry<Object, Object> entry :
dataSourceMetaData.getDefaultQueryProperties().entrySet()) {
String defaultPropertyKey = entry.getKey().toString();
String defaultPropertyValue = entry.getValue().toString();
- if (!containsDefaultProperty(defaultPropertyKey,
targetDataSourceProps, queryProps)) {
- targetDataSourceProps.setProperty(defaultPropertyKey,
defaultPropertyValue);
+ if (!containsDefaultProperty(defaultPropertyKey, jdbcUrlProps,
queryProps)) {
+
dataSourcePoolMetaData.appendJdbcUrlProperties(defaultPropertyKey,
defaultPropertyValue, dataSource);
}
}
}
@@ -176,18 +177,4 @@ public final class DataSourceReflection {
private boolean containsDefaultProperty(final String defaultPropertyKey,
final Properties targetDataSourceProps, final Properties queryProps) {
return targetDataSourceProps.containsKey(defaultPropertyKey) ||
queryProps.containsKey(defaultPropertyKey);
}
-
- @SneakyThrows(ReflectiveOperationException.class)
- private Properties getDataSourceProperties(final String
dataSourcePropsFieldName) {
- return (Properties)
dataSource.getClass().getMethod(getGetterMethodName(dataSourcePropsFieldName)).invoke(dataSource);
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private String getJdbcUrl(final String jdbcUrlFieldName) {
- return (String)
dataSource.getClass().getMethod(getGetterMethodName(jdbcUrlFieldName)).invoke(dataSource);
- }
-
- private String getGetterMethodName(final String fieldName) {
- return GETTER_PREFIX +
CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, fieldName);
- }
}
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 ef4d072..e0bbdc7 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
@@ -20,13 +20,17 @@ package
org.apache.shardingsphere.infra.datasource.pool.metadata;
import org.apache.shardingsphere.spi.required.RequiredSPI;
import org.apache.shardingsphere.spi.typed.TypedSPI;
+import javax.sql.DataSource;
import java.util.Collection;
import java.util.Map;
+import java.util.Properties;
/**
* Data source pool meta data.
+ *
+ * @param <T> type of target data source
*/
-public interface DataSourcePoolMetaData extends TypedSPI, RequiredSPI {
+public interface DataSourcePoolMetaData<T extends DataSource> extends
TypedSPI, RequiredSPI {
/**
* Get default properties.
@@ -50,20 +54,38 @@ public interface DataSourcePoolMetaData extends TypedSPI,
RequiredSPI {
Map<String, String> getPropertySynonyms();
/**
- * Get JDBC URL field name.
- *
- * @return JDBC URL field name
+ * Get JDBC URL.
+ *
+ * @param targetDataSource target data source
+ * @return JDBC URL
*/
- String getJdbcUrlFieldName();
+ String getJdbcUrl(T targetDataSource);
/**
* Get JDBC URL properties field name.
- *
+ *
* @return JDBC URL properties field name
*/
String getJdbcUrlPropertiesFieldName();
/**
+ * Get JDBC URL properties.
+ *
+ * @param targetDataSource target data source
+ * @return JDBC URL properties
+ */
+ Properties getJdbcUrlProperties(T targetDataSource);
+
+ /**
+ * Append JDBC URL properties.
+ *
+ * @param key key
+ * @param value value
+ * @param targetDataSource target data source
+ */
+ void appendJdbcUrlProperties(String key, String value, T targetDataSource);
+
+ /**
* Get transient field names.
*
* @return transient field names
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactory.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactory.java
index 0986b90..d5e1836 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactory.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactory.java
@@ -41,7 +41,7 @@ public final class DataSourcePoolMetaDataFactory {
* @param dataSourceClassName data source class name
* @return new instance of data source pool meta data
*/
- public static DataSourcePoolMetaData newInstance(final String
dataSourceClassName) {
+ public static DataSourcePoolMetaData<?> newInstance(final String
dataSourceClassName) {
return TypedSPIRegistry.findRegisteredService(
DataSourcePoolMetaData.class, dataSourceClassName, new
Properties()).orElse(RequiredSPIRegistry.getRegisteredService(DataSourcePoolMetaData.class));
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/DBCPDataSourcePoolMetaData.java
similarity index 55%
copy from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
copy to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/DBCPDataSourcePoolMetaData.java
index 368f664..67a5889 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/DBCPDataSourcePoolMetaData.java
@@ -15,18 +15,35 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.datasource.pool.metadata.impl;
+package org.apache.shardingsphere.infra.datasource.pool.metadata.type;
+import lombok.Getter;
+import lombok.SneakyThrows;
+import org.apache.commons.dbcp2.BasicDataSource;
import
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
+import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.Map;
+import java.util.Properties;
/**
- * Default data source pool meta data.
+ * Hikari data source pool meta data.
*/
-public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaData {
+@Getter
+public final class DBCPDataSourcePoolMetaData implements
DataSourcePoolMetaData<BasicDataSource> {
+
+ private final Collection<String> transientFieldNames = new LinkedList<>();
+
+ public DBCPDataSourcePoolMetaData() {
+ buildTransientFieldNames();
+ }
+
+ private void buildTransientFieldNames() {
+ transientFieldNames.add("closed");
+ }
@Override
public Map<String, Object> getDefaultProperties() {
@@ -44,27 +61,30 @@ public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaDa
}
@Override
- public String getJdbcUrlFieldName() {
- return null;
+ public String getJdbcUrl(final BasicDataSource targetDataSource) {
+ return targetDataSource.getUrl();
}
@Override
public String getJdbcUrlPropertiesFieldName() {
- return null;
+ return "connectionProperties";
}
@Override
- public Collection<String> getTransientFieldNames() {
- return Collections.emptyList();
+ @SneakyThrows(ReflectiveOperationException.class)
+ public Properties getJdbcUrlProperties(final BasicDataSource
targetDataSource) {
+ Field field =
BasicDataSource.class.getDeclaredField("connectionProperties");
+ field.setAccessible(true);
+ return (Properties) field.get(targetDataSource);
}
@Override
- public String getType() {
- return "Default";
+ public void appendJdbcUrlProperties(final String key, final String value,
final BasicDataSource targetDataSource) {
+ targetDataSource.addConnectionProperty(key, value);
}
@Override
- public boolean isDefault() {
- return true;
+ public String getType() {
+ return BasicDataSource.class.getName();
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/DefaultDataSourcePoolMetaData.java
similarity index 81%
copy from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
copy to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/DefaultDataSourcePoolMetaData.java
index 368f664..77f256c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/DefaultDataSourcePoolMetaData.java
@@ -15,18 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.datasource.pool.metadata.impl;
+package org.apache.shardingsphere.infra.datasource.pool.metadata.type;
import
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
+import javax.sql.DataSource;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
+import java.util.Properties;
/**
* Default data source pool meta data.
*/
-public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaData {
+public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaData<DataSource> {
@Override
public Map<String, Object> getDefaultProperties() {
@@ -44,7 +46,7 @@ public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaDa
}
@Override
- public String getJdbcUrlFieldName() {
+ public String getJdbcUrl(final DataSource targetDataSource) {
return null;
}
@@ -54,6 +56,15 @@ public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaDa
}
@Override
+ public Properties getJdbcUrlProperties(final DataSource targetDataSource) {
+ return null;
+ }
+
+ @Override
+ public void appendJdbcUrlProperties(final String key, final String value,
final DataSource targetDataSource) {
+ }
+
+ @Override
public Collection<String> getTransientFieldNames() {
return Collections.emptyList();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/HikariDataSourcePoolMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/HikariDataSourcePoolMetaData.java
similarity index 85%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/HikariDataSourcePoolMetaData.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/HikariDataSourcePoolMetaData.java
index 4d8cb6c..a0d1dbb 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/HikariDataSourcePoolMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/HikariDataSourcePoolMetaData.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.datasource.pool.metadata.impl;
+package org.apache.shardingsphere.infra.datasource.pool.metadata.type;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
@@ -25,12 +25,13 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Properties;
/**
* Hikari data source pool meta data.
*/
@Getter
-public final class HikariDataSourcePoolMetaData implements
DataSourcePoolMetaData {
+public final class HikariDataSourcePoolMetaData implements
DataSourcePoolMetaData<HikariDataSource> {
private final Map<String, Object> defaultProperties = new HashMap<>(6, 1);
@@ -78,8 +79,8 @@ public final class HikariDataSourcePoolMetaData implements
DataSourcePoolMetaDat
}
@Override
- public String getJdbcUrlFieldName() {
- return "jdbcUrl";
+ public String getJdbcUrl(final HikariDataSource targetDataSource) {
+ return targetDataSource.getJdbcUrl();
}
@Override
@@ -88,6 +89,16 @@ public final class HikariDataSourcePoolMetaData implements
DataSourcePoolMetaDat
}
@Override
+ public Properties getJdbcUrlProperties(final HikariDataSource
targetDataSource) {
+ return targetDataSource.getDataSourceProperties();
+ }
+
+ @Override
+ public void appendJdbcUrlProperties(final String key, final String value,
final HikariDataSource targetDataSource) {
+ targetDataSource.getDataSourceProperties().put(key, value);
+ }
+
+ @Override
public String getType() {
return HikariDataSource.class.getName();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/TomcatDBCPDataSourcePoolMetaData.java
similarity index 54%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/TomcatDBCPDataSourcePoolMetaData.java
index 368f664..4d80f69 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/impl/DefaultDataSourcePoolMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/pool/metadata/type/TomcatDBCPDataSourcePoolMetaData.java
@@ -15,18 +15,35 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.datasource.pool.metadata.impl;
+package org.apache.shardingsphere.infra.datasource.pool.metadata.type;
+import lombok.Getter;
+import lombok.SneakyThrows;
import
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
+import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
+import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.Map;
+import java.util.Properties;
/**
- * Default data source pool meta data.
+ * Tomcat JDBC data source pool meta data.
*/
-public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaData {
+@Getter
+public final class TomcatDBCPDataSourcePoolMetaData implements
DataSourcePoolMetaData<BasicDataSource> {
+
+ private final Collection<String> transientFieldNames = new LinkedList<>();
+
+ public TomcatDBCPDataSourcePoolMetaData() {
+ buildTransientFieldNames();
+ }
+
+ private void buildTransientFieldNames() {
+ transientFieldNames.add("closed");
+ }
@Override
public Map<String, Object> getDefaultProperties() {
@@ -44,27 +61,30 @@ public final class DefaultDataSourcePoolMetaData implements
DataSourcePoolMetaDa
}
@Override
- public String getJdbcUrlFieldName() {
- return null;
+ public String getJdbcUrl(final BasicDataSource targetDataSource) {
+ return targetDataSource.getUrl();
}
@Override
public String getJdbcUrlPropertiesFieldName() {
- return null;
+ return "connectionProperties";
}
@Override
- public Collection<String> getTransientFieldNames() {
- return Collections.emptyList();
+ @SneakyThrows(ReflectiveOperationException.class)
+ public Properties getJdbcUrlProperties(final BasicDataSource
targetDataSource) {
+ Field field =
BasicDataSource.class.getDeclaredField("connectionProperties");
+ field.setAccessible(true);
+ return (Properties) field.get(targetDataSource);
}
@Override
- public String getType() {
- return "Default";
+ public void appendJdbcUrlProperties(final String key, final String value,
final BasicDataSource targetDataSource) {
+ targetDataSource.addConnectionProperty(key, value);
}
@Override
- public boolean isDefault() {
- return true;
+ public String getType() {
+ return BasicDataSource.class.getName();
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourceProperties.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourceProperties.java
index 6b254cf..be7ccb4 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourceProperties.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/props/DataSourceProperties.java
@@ -47,7 +47,7 @@ public final class DataSourceProperties {
public DataSourceProperties(final String dataSourceClassName, final
Map<String, Object> props) {
this.dataSourceClassName = dataSourceClassName;
- DataSourcePoolMetaData poolMetaData =
DataSourcePoolMetaDataFactory.newInstance(dataSourceClassName);
+ DataSourcePoolMetaData<?> poolMetaData =
DataSourcePoolMetaDataFactory.newInstance(dataSourceClassName);
Map<String, String> propertySynonyms =
poolMetaData.getPropertySynonyms();
connectionPropertySynonyms = new ConnectionPropertySynonyms(props,
propertySynonyms);
poolPropertySynonyms = new PoolPropertySynonyms(props,
propertySynonyms);
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 1104308..887a48a 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
@@ -76,7 +76,7 @@ public final class DataSourcePropertiesCreator {
private static Map<String, Object> createProperties(final DataSource
dataSource) {
Map<String, Object> result = new LinkedHashMap<>();
- DataSourcePoolMetaData poolMetaData =
DataSourcePoolMetaDataFactory.newInstance(dataSource.getClass().getName());
+ DataSourcePoolMetaData<?> poolMetaData =
DataSourcePoolMetaDataFactory.newInstance(dataSource.getClass().getName());
for (Entry<String, Object> entry : new
DataSourceReflection(dataSource).convertToProperties().entrySet()) {
String propertyName = entry.getKey();
Object propertyValue = entry.getValue();
@@ -87,7 +87,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/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
b/shardingsphere-infra/shardingsphere-infra-common/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
index 0083f4f..728a397 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
@@ -15,5 +15,7 @@
# limitations under the License.
#
-org.apache.shardingsphere.infra.datasource.pool.metadata.impl.DefaultDataSourcePoolMetaData
-org.apache.shardingsphere.infra.datasource.pool.metadata.impl.HikariDataSourcePoolMetaData
+org.apache.shardingsphere.infra.datasource.pool.metadata.type.DefaultDataSourcePoolMetaData
+org.apache.shardingsphere.infra.datasource.pool.metadata.type.HikariDataSourcePoolMetaData
+org.apache.shardingsphere.infra.datasource.pool.metadata.type.DBCPDataSourcePoolMetaData
+org.apache.shardingsphere.infra.datasource.pool.metadata.type.TomcatDBCPDataSourcePoolMetaData
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreatorTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreatorTest.java
index 6d0796b..a8f129c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreatorTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolCreatorTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.datasource.pool.creator;
-import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import org.apache.shardingsphere.test.mock.MockedDataSource;
@@ -82,18 +81,4 @@ public final class DataSourcePoolCreatorTest {
result.put("password", "root");
return result;
}
-
- @Test
- public void assertCreateHikariDataSource() {
- assertThat(DataSourcePoolCreator.create(new
DataSourceProperties(HikariDataSource.class.getName(),
createHikariProperties())), instanceOf(HikariDataSource.class));
- }
-
- private Map<String, Object> createHikariProperties() {
- Map<String, Object> result = new HashMap<>();
- result.put("jdbcUrl", "jdbc:mock://127.0.0.1/foo_ds");
- result.put("driverClassName", MockedDataSource.class.getName());
- result.put("username", "root");
- result.put("password", "root");
- return result;
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/DBCPDataSourcePoolCreatorTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/DBCPDataSourcePoolCreatorTest.java
new file mode 100644
index 0000000..edff9c2
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/DBCPDataSourcePoolCreatorTest.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.datasource.pool.creator.type;
+
+import lombok.SneakyThrows;
+import org.apache.commons.dbcp2.BasicDataSource;
+import
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
+import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.test.mock.MockedDataSource;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public final class DBCPDataSourcePoolCreatorTest {
+
+ @Test
+ public void assertCreateDataSource() {
+ BasicDataSource actual = (BasicDataSource)
DataSourcePoolCreator.create(new
DataSourceProperties(BasicDataSource.class.getName(),
createDataSourceProperties()));
+ assertThat(actual.getUrl(), is("jdbc:mock://127.0.0.1/foo_ds"));
+ assertThat(actual.getDriverClassName(),
is(MockedDataSource.class.getName()));
+ assertThat(actual.getUsername(), is("root"));
+ assertThat(actual.getPassword(), is("root"));
+ assertThat(getConnectionProperties(actual),
is(createJdbcUrlProperties()));
+ }
+
+ private Map<String, Object> createDataSourceProperties() {
+ Map<String, Object> result = new HashMap<>();
+ result.put("url", "jdbc:mock://127.0.0.1/foo_ds");
+ result.put("driverClassName", MockedDataSource.class.getName());
+ result.put("username", "root");
+ result.put("password", "root");
+ result.put("connectionProperties", createJdbcUrlProperties());
+ return result;
+ }
+
+ private Properties createJdbcUrlProperties() {
+ Properties result = new Properties();
+ result.put("foo", "foo_value");
+ result.put("bar", "bar_value");
+ return result;
+ }
+
+ @SneakyThrows(ReflectiveOperationException.class)
+ private Properties getConnectionProperties(final BasicDataSource actual) {
+ Field field =
actual.getClass().getDeclaredField("connectionProperties");
+ field.setAccessible(true);
+ return (Properties) field.get(actual);
+ }
+}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/HikariDataSourcePoolCreatorTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/HikariDataSourcePoolCreatorTest.java
new file mode 100644
index 0000000..0024949
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/HikariDataSourcePoolCreatorTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.datasource.pool.creator.type;
+
+import com.zaxxer.hikari.HikariDataSource;
+import
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
+import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.test.mock.MockedDataSource;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public final class HikariDataSourcePoolCreatorTest {
+
+ @Test
+ public void assertCreateDataSource() {
+ HikariDataSource actual = (HikariDataSource)
DataSourcePoolCreator.create(new
DataSourceProperties(HikariDataSource.class.getName(),
createDataSourceProperties()));
+ assertThat(actual.getJdbcUrl(), is("jdbc:mock://127.0.0.1/foo_ds"));
+ assertThat(actual.getDriverClassName(),
is(MockedDataSource.class.getName()));
+ assertThat(actual.getUsername(), is("root"));
+ assertThat(actual.getPassword(), is("root"));
+ assertThat(actual.getDataSourceProperties(),
is(createJdbcUrlProperties()));
+ }
+
+ private Map<String, Object> createDataSourceProperties() {
+ Map<String, Object> result = new HashMap<>();
+ result.put("jdbcUrl", "jdbc:mock://127.0.0.1/foo_ds");
+ result.put("driverClassName", MockedDataSource.class.getName());
+ result.put("username", "root");
+ result.put("password", "root");
+ result.put("dataSourceProperties", createJdbcUrlProperties());
+ return result;
+ }
+
+ private Properties createJdbcUrlProperties() {
+ Properties result = new Properties();
+ result.put("foo", "foo_value");
+ result.put("bar", "bar_value");
+ return result;
+ }
+}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/TomcatDBCPDataSourcePoolCreatorTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/TomcatDBCPDataSourcePoolCreatorTest.java
new file mode 100644
index 0000000..229562d
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/creator/type/TomcatDBCPDataSourcePoolCreatorTest.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.datasource.pool.creator.type;
+
+import lombok.SneakyThrows;
+import
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
+import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.test.mock.MockedDataSource;
+import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public final class TomcatDBCPDataSourcePoolCreatorTest {
+
+ @Test
+ public void assertCreateDataSource() {
+ BasicDataSource actual = (BasicDataSource)
DataSourcePoolCreator.create(new
DataSourceProperties(BasicDataSource.class.getName(),
createDataSourceProperties()));
+ assertThat(actual.getUrl(), is("jdbc:mock://127.0.0.1/foo_ds"));
+ assertThat(actual.getDriverClassName(),
is(MockedDataSource.class.getName()));
+ assertThat(actual.getUsername(), is("root"));
+ assertThat(actual.getPassword(), is("root"));
+ assertThat(getConnectionProperties(actual),
is(createJdbcUrlProperties()));
+ }
+
+ private Map<String, Object> createDataSourceProperties() {
+ Map<String, Object> result = new HashMap<>();
+ result.put("url", "jdbc:mock://127.0.0.1/foo_ds");
+ result.put("driverClassName", MockedDataSource.class.getName());
+ result.put("username", "root");
+ result.put("password", "root");
+ result.put("connectionProperties", createJdbcUrlProperties());
+ return result;
+ }
+
+ private Properties createJdbcUrlProperties() {
+ Properties result = new Properties();
+ result.put("foo", "foo_value");
+ result.put("bar", "bar_value");
+ return result;
+ }
+
+ @SneakyThrows(ReflectiveOperationException.class)
+ private Properties getConnectionProperties(final BasicDataSource actual) {
+ Field field =
actual.getClass().getDeclaredField("connectionProperties");
+ field.setAccessible(true);
+ return (Properties) field.get(actual);
+ }
+}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactoryTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactoryTest.java
index 1cb4b38..b3b7db1 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactoryTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/pool/metadata/DataSourcePoolMetaDataFactoryTest.java
@@ -18,8 +18,8 @@
package org.apache.shardingsphere.infra.datasource.pool.metadata;
import com.zaxxer.hikari.HikariDataSource;
-import
org.apache.shardingsphere.infra.datasource.pool.metadata.impl.DefaultDataSourcePoolMetaData;
-import
org.apache.shardingsphere.infra.datasource.pool.metadata.impl.HikariDataSourcePoolMetaData;
+import
org.apache.shardingsphere.infra.datasource.pool.metadata.type.DefaultDataSourcePoolMetaData;
+import
org.apache.shardingsphere.infra.datasource.pool.metadata.type.HikariDataSourcePoolMetaData;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.instanceOf;
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 71eb71f..fa230a6 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
@@ -24,8 +24,9 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
-public final class MockedDataSourcePoolMetaData implements
DataSourcePoolMetaData {
+public final class MockedDataSourcePoolMetaData implements
DataSourcePoolMetaData<MockedDataSource> {
@Override
public Map<String, Object> getDefaultProperties() {
@@ -51,13 +52,22 @@ public final class MockedDataSourcePoolMetaData implements
DataSourcePoolMetaDat
}
@Override
- public String getJdbcUrlFieldName() {
- return "url";
+ public String getJdbcUrl(final MockedDataSource targetDataSource) {
+ return targetDataSource.getUrl();
}
@Override
public String getJdbcUrlPropertiesFieldName() {
- return "jdbcUrlProperties";
+ return null;
+ }
+
+ @Override
+ public Properties getJdbcUrlProperties(final MockedDataSource
targetDataSource) {
+ return new Properties();
+ }
+
+ @Override
+ public void appendJdbcUrlProperties(final String key, final String value,
final MockedDataSource targetDataSource) {
}
@Override
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesTest.java
index 434599b..805db92 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/datasource/props/DataSourcePropertiesTest.java
@@ -67,7 +67,7 @@ public final class DataSourcePropertiesTest {
}
@Test
- public void assertgetAllLocalProperties() {
+ public void assertGetAllLocalProperties() {
DataSourceProperties originalDataSourceProps = new
DataSourceProperties(MockedDataSource.class.getName(), getProperties());
Map<String, Object> actualAllProperties =
originalDataSourceProps.getAllLocalProperties();
assertNotNull(actualAllProperties);
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/pom.xml
b/shardingsphere-jdbc/shardingsphere-jdbc-core/pom.xml
index 1acc265..ae5580c 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/pom.xml
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/pom.xml
@@ -155,6 +155,10 @@
<artifactId>commons-dbcp2</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ </dependency>
+ <dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
</dependency>
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/pom.xml
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/pom.xml
index d1b8ec2..ee043ce 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/pom.xml
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/pom.xml
@@ -89,5 +89,14 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/pom.xml
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/pom.xml
index 20505fa..51d5582 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/pom.xml
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/pom.xml
@@ -95,6 +95,15 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ </dependency>
<dependency>
<groupId>org.springframework</groupId>
diff --git a/shardingsphere-mode/shardingsphere-mode-core/pom.xml
b/shardingsphere-mode/shardingsphere-mode-core/pom.xml
index 1ee569f..7ea582d 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/pom.xml
+++ b/shardingsphere-mode/shardingsphere-mode-core/pom.xml
@@ -51,5 +51,15 @@
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/pom.xml
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/pom.xml
index c80497b..5099d54 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/pom.xml
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/pom.xml
@@ -56,5 +56,16 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/pom.xml
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/pom.xml
index 7ea2339..b61fb92 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/pom.xml
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/pom.xml
@@ -46,5 +46,16 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/pom.xml
b/shardingsphere-proxy/shardingsphere-proxy-backend/pom.xml
index 6f1cc45..dfb8240 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/pom.xml
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/pom.xml
@@ -177,6 +177,14 @@
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-dbcp</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>