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

duanzhengqiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-plugin.git

commit 1bfd2c36b99e36014cf7617949511bc2dc22d61d
Author: duanzhengqiang <[email protected]>
AuthorDate: Mon Sep 25 16:24:29 2023 +0800

    Move dbcp and c3p0 datasource pool to shardingsphere plugin
---
 {feature => features}/encrypt/pom.xml              |   2 +-
 {feature => features}/encrypt/sm/pom.xml           |   5 -
 .../encrypt/sm/algorithm/SM3EncryptAlgorithm.java  |   6 +-
 .../encrypt/sm/algorithm/SM4EncryptAlgorithm.java  |  10 +-
 ...che.shardingsphere.encrypt.spi.EncryptAlgorithm |   0
 .../sm/algorithm/SM3EncryptAlgorithmTest.java      |   5 +-
 .../sm/algorithm/SM4EncryptAlgorithmTest.java      |  18 ++--
 {feature => features}/pom.xml                      |   2 +-
 {feature => features}/sharding/cosid/pom.xml       |   0
 .../cosid/algorithm/CosIdAlgorithmConstants.java   |   0
 .../keygen/CosIdKeyGenerateAlgorithm.java          |   0
 .../keygen/CosIdSnowflakeKeyGenerateAlgorithm.java |   0
 .../AbstractCosIdIntervalShardingAlgorithm.java    |   0
 .../interval/CosIdIntervalShardingAlgorithm.java   |   0
 .../CosIdSnowflakeIntervalShardingAlgorithm.java   |   0
 .../sharding/mod/CosIdModShardingAlgorithm.java    |   0
 ...hardingsphere.sharding.spi.KeyGenerateAlgorithm |   0
 ...e.shardingsphere.sharding.spi.ShardingAlgorithm |   0
 .../keygen/CosIdKeyGenerateAlgorithmTest.java      |   0
 .../CosIdSnowflakeKeyGenerateAlgorithmTest.java    |   0
 .../keygen/fixture/WorkerIdGeneratorFixture.java   |   0
 {feature => features}/sharding/nanoid/pom.xml      |   0
 .../keygen/NanoIdKeyGenerateAlgorithm.java         |   0
 ...hardingsphere.sharding.spi.KeyGenerateAlgorithm |   0
 .../keygen/NanoIdKeyGenerateAlgorithmTest.java     |   0
 {feature => features}/sharding/pom.xml             |   2 +-
 .../sm => infra/data-source-pool/c3p0}/pom.xml     |  32 +++----
 .../metadata/C3P0DataSourcePoolFieldMetaData.java  |  22 +++--
 .../c3p0/metadata/C3P0DataSourcePoolMetaData.java  | 103 +++++++++++++++++++++
 ...datasource.pool.metadata.DataSourcePoolMetaData |   2 +-
 .../creator/C3P0DataSourcePoolCreatorTest.java     |  61 ++++++++++++
 .../sm => infra/data-source-pool/dbcp}/pom.xml     |  32 +++----
 .../metadata/DBCPDataSourcePoolFieldMetaData.java  |  22 +++--
 .../dbcp/metadata/DBCPDataSourcePoolMetaData.java  |  77 +++++++++++++++
 ...datasource.pool.metadata.DataSourcePoolMetaData |   2 +-
 .../creator/DBCPDataSourcePoolCreatorTest.java     |  66 +++++++++++++
 .../encrypt => infra/data-source-pool}/pom.xml     |   7 +-
 {feature => infra}/pom.xml                         |   5 +-
 pom.xml                                            |   9 +-
 39 files changed, 394 insertions(+), 96 deletions(-)

diff --git a/feature/encrypt/pom.xml b/features/encrypt/pom.xml
similarity index 95%
copy from feature/encrypt/pom.xml
copy to features/encrypt/pom.xml
index 30066ce..b8be577 100644
--- a/feature/encrypt/pom.xml
+++ b/features/encrypt/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
-        <artifactId>shardingsphere-plugin-feature</artifactId>
+        <artifactId>shardingsphere-plugin-features</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-plugin-feature-encrypt</artifactId>
diff --git a/feature/encrypt/sm/pom.xml b/features/encrypt/sm/pom.xml
similarity index 95%
copy from feature/encrypt/sm/pom.xml
copy to features/encrypt/sm/pom.xml
index 6413797..236ca37 100644
--- a/feature/encrypt/sm/pom.xml
+++ b/features/encrypt/sm/pom.xml
@@ -50,11 +50,6 @@
             <artifactId>commons-codec</artifactId>
             <version>${commons-codec.version}</version>
         </dependency>
-        
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
     </dependencies>
     
     <build>
diff --git 
a/feature/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithm.java
 
b/features/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithm.java
similarity index 97%
rename from 
feature/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithm.java
rename to 
features/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithm.java
index 33317c0..d930d2c 100644
--- 
a/feature/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithm.java
+++ 
b/features/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithm.java
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.encrypt.sm.algorithm;
 
 import lombok.EqualsAndHashCode;
 import org.apache.commons.codec.binary.Hex;
+import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
 import 
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
 import 
org.apache.shardingsphere.encrypt.exception.algorithm.EncryptAlgorithmInitializationException;
-import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import org.bouncycastle.crypto.digests.SM3Digest;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
@@ -34,7 +34,7 @@ import java.util.Properties;
  * SM3 encrypt algorithm.
  */
 @EqualsAndHashCode
-public final class SM3EncryptAlgorithm implements 
StandardEncryptAlgorithm<Object, String> {
+public final class SM3EncryptAlgorithm implements StandardEncryptAlgorithm {
     
     static {
         Security.addProvider(new BouncyCastleProvider());
@@ -64,7 +64,7 @@ public final class SM3EncryptAlgorithm implements 
StandardEncryptAlgorithm<Objec
     }
     
     @Override
-    public Object decrypt(final String cipherValue, final EncryptContext 
encryptContext) {
+    public Object decrypt(final Object cipherValue, final EncryptContext 
encryptContext) {
         return cipherValue;
     }
     
diff --git 
a/feature/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithm.java
 
b/features/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithm.java
similarity index 96%
rename from 
feature/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithm.java
rename to 
features/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithm.java
index 61035f1..dd12653 100644
--- 
a/feature/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithm.java
+++ 
b/features/encrypt/sm/src/main/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithm.java
@@ -21,9 +21,9 @@ import lombok.EqualsAndHashCode;
 import lombok.SneakyThrows;
 import org.apache.commons.codec.DecoderException;
 import org.apache.commons.codec.binary.Hex;
+import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
 import 
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
 import 
org.apache.shardingsphere.encrypt.exception.algorithm.EncryptAlgorithmInitializationException;
-import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 
@@ -42,7 +42,7 @@ import java.util.Set;
  * SM4 encrypt algorithm.
  */
 @EqualsAndHashCode
-public final class SM4EncryptAlgorithm implements 
StandardEncryptAlgorithm<Object, String> {
+public final class SM4EncryptAlgorithm implements StandardEncryptAlgorithm {
     
     static {
         Security.addProvider(new BouncyCastleProvider());
@@ -113,7 +113,7 @@ public final class SM4EncryptAlgorithm implements 
StandardEncryptAlgorithm<Objec
     }
     
     @Override
-    public String encrypt(final Object plainValue, final EncryptContext 
encryptContext) {
+    public Object encrypt(final Object plainValue, final EncryptContext 
encryptContext) {
         return null == plainValue ? null : 
Hex.encodeHexString(encrypt(String.valueOf(plainValue).getBytes(StandardCharsets.UTF_8)));
     }
     
@@ -122,8 +122,8 @@ public final class SM4EncryptAlgorithm implements 
StandardEncryptAlgorithm<Objec
     }
     
     @Override
-    public Object decrypt(final String cipherValue, final EncryptContext 
encryptContext) {
-        return null == cipherValue ? null : new 
String(decrypt(fromHexString(cipherValue)), StandardCharsets.UTF_8);
+    public Object decrypt(final Object cipherValue, final EncryptContext 
encryptContext) {
+        return null == cipherValue ? null : new 
String(decrypt(fromHexString(String.valueOf(cipherValue))), 
StandardCharsets.UTF_8);
     }
     
     private byte[] decrypt(final byte[] cipherValue) {
diff --git 
a/feature/encrypt/sm/src/main/resources/META-INF/services/org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm
 
b/features/encrypt/sm/src/main/resources/META-INF/services/org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm
similarity index 100%
rename from 
feature/encrypt/sm/src/main/resources/META-INF/services/org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm
rename to 
features/encrypt/sm/src/main/resources/META-INF/services/org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm
diff --git 
a/feature/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithmTest.java
 
b/features/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithmTest.java
similarity index 92%
rename from 
feature/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithmTest.java
rename to 
features/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithmTest.java
index f17a43b..d76a9f4 100644
--- 
a/feature/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithmTest.java
+++ 
b/features/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM3EncryptAlgorithmTest.java
@@ -33,14 +33,13 @@ import static org.mockito.Mockito.mock;
 
 class SM3EncryptAlgorithmTest {
     
-    private StandardEncryptAlgorithm<Object, String> encryptAlgorithm;
+    private StandardEncryptAlgorithm encryptAlgorithm;
     
-    @SuppressWarnings("unchecked")
     @BeforeEach
     void setUp() {
         Properties props = new Properties();
         props.put("sm3-salt", "test1234");
-        encryptAlgorithm = (StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM3", props);
+        encryptAlgorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM3", props);
     }
     
     @Test
diff --git 
a/feature/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithmTest.java
 
b/features/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithmTest.java
similarity index 72%
rename from 
feature/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithmTest.java
rename to 
features/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithmTest.java
index b9b815a..bc1b6b3 100644
--- 
a/feature/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithmTest.java
+++ 
b/features/encrypt/sm/src/test/java/org/apache/shardingsphere/encrypt/sm/algorithm/SM4EncryptAlgorithmTest.java
@@ -42,31 +42,27 @@ class SM4EncryptAlgorithmTest {
         assertThrows(EncryptAlgorithmInitializationException.class, () -> 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", props));
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertEncryptNullValue() {
-        StandardEncryptAlgorithm<Object, String> algorithm = 
(StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
+        StandardEncryptAlgorithm algorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
         assertNull(algorithm.encrypt(null, mock(EncryptContext.class)));
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertEncryptWithECBMode() {
-        StandardEncryptAlgorithm<Object, String> algorithm = 
(StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
+        StandardEncryptAlgorithm algorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
         assertThat(algorithm.encrypt("test", mock(EncryptContext.class)), 
is("028654f2ca4f575dee9e1faae85dadde"));
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertDecryptNullValue() {
-        StandardEncryptAlgorithm<Object, String> algorithm = 
(StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
+        StandardEncryptAlgorithm algorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
         assertNull(algorithm.decrypt(null, mock(EncryptContext.class)));
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertDecryptWithECBMode() {
-        StandardEncryptAlgorithm<Object, String> algorithm = 
(StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
+        StandardEncryptAlgorithm algorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createECBProperties());
         assertThat(algorithm.decrypt("028654f2ca4f575dee9e1faae85dadde", 
mock(EncryptContext.class)).toString(), is("test"));
     }
     
@@ -78,17 +74,15 @@ class SM4EncryptAlgorithmTest {
         return result;
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertEncryptWithCBCMode() {
-        StandardEncryptAlgorithm<Object, String> algorithm = 
(StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createCBCProperties());
+        StandardEncryptAlgorithm algorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createCBCProperties());
         assertThat(algorithm.encrypt("test", mock(EncryptContext.class)), 
is("dca2127b57ba8cac36a0914e0208dc11"));
     }
     
-    @SuppressWarnings("unchecked")
     @Test
     void assertDecrypt() {
-        StandardEncryptAlgorithm<Object, String> algorithm = 
(StandardEncryptAlgorithm<Object, String>) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createCBCProperties());
+        StandardEncryptAlgorithm algorithm = (StandardEncryptAlgorithm) 
TypedSPILoader.getService(EncryptAlgorithm.class, "SM4", createCBCProperties());
         assertThat(algorithm.decrypt("dca2127b57ba8cac36a0914e0208dc11", 
mock(EncryptContext.class)).toString(), is("test"));
     }
     
diff --git a/feature/pom.xml b/features/pom.xml
similarity index 96%
copy from feature/pom.xml
copy to features/pom.xml
index e9d45e9..4129810 100644
--- a/feature/pom.xml
+++ b/features/pom.xml
@@ -23,7 +23,7 @@
         <artifactId>shardingsphere-plugin</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
-    <artifactId>shardingsphere-plugin-feature</artifactId>
+    <artifactId>shardingsphere-plugin-features</artifactId>
     <packaging>pom</packaging>
     <name>${project.artifactId}</name>
     
diff --git a/feature/sharding/cosid/pom.xml b/features/sharding/cosid/pom.xml
similarity index 100%
rename from feature/sharding/cosid/pom.xml
rename to features/sharding/cosid/pom.xml
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/CosIdAlgorithmConstants.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/CosIdAlgorithmConstants.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/CosIdAlgorithmConstants.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/CosIdAlgorithmConstants.java
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithm.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithm.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithm.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithm.java
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdIntervalShardingAlgorithm.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdIntervalShardingAlgorithm.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdIntervalShardingAlgorithm.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdIntervalShardingAlgorithm.java
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdSnowflakeIntervalShardingAlgorithm.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdSnowflakeIntervalShardingAlgorithm.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdSnowflakeIntervalShardingAlgorithm.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/CosIdSnowflakeIntervalShardingAlgorithm.java
diff --git 
a/feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
 
b/features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
similarity index 100%
rename from 
feature/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
rename to 
features/sharding/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
diff --git 
a/feature/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
 
b/features/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
similarity index 100%
rename from 
feature/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
rename to 
features/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
diff --git 
a/feature/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.ShardingAlgorithm
 
b/features/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.ShardingAlgorithm
similarity index 100%
rename from 
feature/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.ShardingAlgorithm
rename to 
features/sharding/cosid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.ShardingAlgorithm
diff --git 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithmTest.java
 
b/features/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithmTest.java
similarity index 100%
rename from 
feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithmTest.java
rename to 
features/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdKeyGenerateAlgorithmTest.java
diff --git 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
 
b/features/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
similarity index 100%
rename from 
feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
rename to 
features/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
diff --git 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
 
b/features/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
similarity index 100%
copy from 
feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
copy to 
features/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
diff --git a/feature/sharding/nanoid/pom.xml b/features/sharding/nanoid/pom.xml
similarity index 100%
rename from feature/sharding/nanoid/pom.xml
rename to features/sharding/nanoid/pom.xml
diff --git 
a/feature/sharding/nanoid/src/main/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithm.java
 
b/features/sharding/nanoid/src/main/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithm.java
similarity index 100%
rename from 
feature/sharding/nanoid/src/main/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithm.java
rename to 
features/sharding/nanoid/src/main/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithm.java
diff --git 
a/feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
 
b/features/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
similarity index 100%
copy from 
feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
copy to 
features/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
diff --git 
a/feature/sharding/nanoid/src/test/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithmTest.java
 
b/features/sharding/nanoid/src/test/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithmTest.java
similarity index 100%
rename from 
feature/sharding/nanoid/src/test/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithmTest.java
rename to 
features/sharding/nanoid/src/test/java/org/apache/shardingsphere/sharding/nanoid/algorithm/keygen/NanoIdKeyGenerateAlgorithmTest.java
diff --git a/feature/sharding/pom.xml b/features/sharding/pom.xml
similarity index 95%
rename from feature/sharding/pom.xml
rename to features/sharding/pom.xml
index 9eb1de1..c59a67f 100644
--- a/feature/sharding/pom.xml
+++ b/features/sharding/pom.xml
@@ -20,7 +20,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
-        <artifactId>shardingsphere-plugin-feature</artifactId>
+        <artifactId>shardingsphere-plugin-features</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-plugin-feature-sharding</artifactId>
diff --git a/feature/encrypt/sm/pom.xml b/infra/data-source-pool/c3p0/pom.xml
similarity index 75%
copy from feature/encrypt/sm/pom.xml
copy to infra/data-source-pool/c3p0/pom.xml
index 6413797..e6dfa55 100644
--- a/feature/encrypt/sm/pom.xml
+++ b/infra/data-source-pool/c3p0/pom.xml
@@ -20,40 +20,36 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
-        <artifactId>shardingsphere-plugin-feature-encrypt</artifactId>
+        <artifactId>shardingsphere-plugin-infra-data-source-pool</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
-    <artifactId>shardingsphere-plugin-feature-encrypt-sm</artifactId>
+    <artifactId>shardingsphere-plugin-infra-data-source-pool-c3p0</artifactId>
     <name>${project.artifactId}</name>
     
     <dependencies>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-encrypt-api</artifactId>
+            <artifactId>shardingsphere-infra-data-source-pool-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-encrypt-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk15on</artifactId>
-            <version>${bouncycastle.version}</version>
+            <groupId>com.mchange</groupId>
+            <artifactId>c3p0</artifactId>
+            <version>${c3p0.version}</version>
         </dependency>
         
         <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>${commons-codec.version}</version>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-test-fixture-database</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
         </dependency>
-        
         <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-test-util</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
         </dependency>
     </dependencies>
     
diff --git 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
 
b/infra/data-source-pool/c3p0/src/main/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/metadata/C3P0DataSourcePoolFieldMetaData.java
similarity index 63%
copy from 
feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
copy to 
infra/data-source-pool/c3p0/src/main/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/metadata/C3P0DataSourcePoolFieldMetaData.java
index 1587f46..959e61c 100644
--- 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
+++ 
b/infra/data-source-pool/c3p0/src/main/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/metadata/C3P0DataSourcePoolFieldMetaData.java
@@ -15,20 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.cosid.algorithm.keygen.fixture;
+package org.apache.shardingsphere.infra.datasource.pool.c3p0.metadata;
 
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolFieldMetaData;
 
-import java.util.Properties;
-
-@RequiredArgsConstructor
-public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
+/**
+ * C3P0 data source pool field meta data.
+ */
+public final class C3P0DataSourcePoolFieldMetaData implements 
DataSourcePoolFieldMetaData {
     
-    private final int fixtureWorkerId;
+    @Override
+    public String getJdbcUrlFieldName() {
+        return "jdbcUrl";
+    }
     
     @Override
-    public int generate(final Properties props) {
-        return fixtureWorkerId;
+    public String getJdbcUrlPropertiesFieldName() {
+        return "properties";
     }
 }
diff --git 
a/infra/data-source-pool/c3p0/src/main/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/metadata/C3P0DataSourcePoolMetaData.java
 
b/infra/data-source-pool/c3p0/src/main/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/metadata/C3P0DataSourcePoolMetaData.java
new file mode 100644
index 0000000..66027a8
--- /dev/null
+++ 
b/infra/data-source-pool/c3p0/src/main/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/metadata/C3P0DataSourcePoolMetaData.java
@@ -0,0 +1,103 @@
+/*
+ * 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.c3p0.metadata;
+
+import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+/**
+ * C3P0 data source pool meta data.
+ */
+public final class C3P0DataSourcePoolMetaData implements 
DataSourcePoolMetaData {
+    
+    private static final Map<String, Object> DEFAULT_PROPS = new HashMap<>(6, 
1F);
+    
+    private static final Map<String, Object> SKIPPED_PROPS = new HashMap<>(2, 
1F);
+    
+    private static final Map<String, String> PROP_SYNONYMS = new HashMap<>(5, 
1F);
+    
+    private static final Collection<String> TRANSIENT_FIELD_NAMES = new 
LinkedList<>();
+    
+    static {
+        buildDefaultProperties();
+        buildInvalidProperties();
+        buildPropertySynonyms();
+        buildTransientFieldNames();
+    }
+    
+    private static void buildDefaultProperties() {
+        DEFAULT_PROPS.put("checkoutTimeout", 20 * 1000L);
+        DEFAULT_PROPS.put("maxIdleTime", 60 * 1000L);
+        DEFAULT_PROPS.put("maxIdleTimeExcessConnections", 30 * 70 * 1000L);
+        DEFAULT_PROPS.put("maxPoolSize", 15);
+        DEFAULT_PROPS.put("minPoolSize", 3);
+        DEFAULT_PROPS.put("readOnly", false);
+    }
+    
+    private static void buildInvalidProperties() {
+        SKIPPED_PROPS.put("minPoolSize", -1);
+        SKIPPED_PROPS.put("maxPoolSize", -1);
+    }
+    
+    private static void buildPropertySynonyms() {
+        PROP_SYNONYMS.put("username", "user");
+        PROP_SYNONYMS.put("url", "jdbcUrl");
+        PROP_SYNONYMS.put("connectionTimeoutMilliseconds", "checkoutTimeout");
+        PROP_SYNONYMS.put("idleTimeoutMilliseconds", "maxIdleTime");
+        PROP_SYNONYMS.put("maxLifetimeMilliseconds", 
"maxIdleTimeExcessConnections");
+    }
+    
+    private static void buildTransientFieldNames() {
+        TRANSIENT_FIELD_NAMES.add("running");
+        TRANSIENT_FIELD_NAMES.add("closed");
+    }
+    
+    @Override
+    public Map<String, Object> getDefaultProperties() {
+        return DEFAULT_PROPS;
+    }
+    
+    @Override
+    public Map<String, Object> getSkippedProperties() {
+        return SKIPPED_PROPS;
+    }
+    
+    @Override
+    public Map<String, String> getPropertySynonyms() {
+        return PROP_SYNONYMS;
+    }
+    
+    @Override
+    public Collection<String> getTransientFieldNames() {
+        return TRANSIENT_FIELD_NAMES;
+    }
+    
+    @Override
+    public C3P0DataSourcePoolFieldMetaData getFieldMetaData() {
+        return new C3P0DataSourcePoolFieldMetaData();
+    }
+    
+    @Override
+    public String getType() {
+        return "com.mchange.v2.c3p0.ComboPooledDataSource";
+    }
+}
diff --git 
a/feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
 
b/infra/data-source-pool/c3p0/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
similarity index 89%
copy from 
feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
copy to 
infra/data-source-pool/c3p0/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
index 759153d..7aaac6f 100644
--- 
a/feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
+++ 
b/infra/data-source-pool/c3p0/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.sharding.nanoid.algorithm.keygen.NanoIdKeyGenerateAlgorithm
+org.apache.shardingsphere.infra.datasource.pool.c3p0.metadata.C3P0DataSourcePoolMetaData
diff --git 
a/infra/data-source-pool/c3p0/src/test/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/creator/C3P0DataSourcePoolCreatorTest.java
 
b/infra/data-source-pool/c3p0/src/test/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/creator/C3P0DataSourcePoolCreatorTest.java
new file mode 100644
index 0000000..7e4e2f5
--- /dev/null
+++ 
b/infra/data-source-pool/c3p0/src/test/java/org/apache/shardingsphere/infra/datasource/pool/c3p0/creator/C3P0DataSourcePoolCreatorTest.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.c3p0.creator;
+
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+import 
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+class C3P0DataSourcePoolCreatorTest {
+    
+    @Test
+    void assertCreateDataSource() {
+        ComboPooledDataSource actual = (ComboPooledDataSource) 
DataSourcePoolCreator.create(new 
DataSourcePoolProperties(ComboPooledDataSource.class.getName(), 
createDataSourcePoolProperties()));
+        assertThat(actual.getJdbcUrl(), is("jdbc:mock://127.0.0.1/foo_ds"));
+        assertThat(actual.getUser(), is("root"));
+        assertThat(actual.getPassword(), is("root"));
+        Properties props = new Properties();
+        props.put("foo", "foo_value");
+        props.put("bar", "bar_value");
+        props.put("password", "root");
+        props.put("user", "root");
+        assertThat(actual.getProperties(), is(props));
+    }
+    
+    private Map<String, Object> createDataSourcePoolProperties() {
+        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");
+        Properties props = new Properties();
+        props.put("foo", "foo_value");
+        props.put("bar", "bar_value");
+        result.put("properties", props);
+        return result;
+    }
+}
diff --git a/feature/encrypt/sm/pom.xml b/infra/data-source-pool/dbcp/pom.xml
similarity index 75%
rename from feature/encrypt/sm/pom.xml
rename to infra/data-source-pool/dbcp/pom.xml
index 6413797..12abfe0 100644
--- a/feature/encrypt/sm/pom.xml
+++ b/infra/data-source-pool/dbcp/pom.xml
@@ -20,40 +20,36 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
-        <artifactId>shardingsphere-plugin-feature-encrypt</artifactId>
+        <artifactId>shardingsphere-plugin-infra-data-source-pool</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
-    <artifactId>shardingsphere-plugin-feature-encrypt-sm</artifactId>
+    <artifactId>shardingsphere-plugin-infra-data-source-pool-dbcp</artifactId>
     <name>${project.artifactId}</name>
     
     <dependencies>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-encrypt-api</artifactId>
+            <artifactId>shardingsphere-infra-data-source-pool-core</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-encrypt-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk15on</artifactId>
-            <version>${bouncycastle.version}</version>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+            <version>${commons-dbcp2.version}</version>
         </dependency>
         
         <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>${commons-codec.version}</version>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-test-fixture-database</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
         </dependency>
-        
         <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-test-util</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
         </dependency>
     </dependencies>
     
diff --git 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
 
b/infra/data-source-pool/dbcp/src/main/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/metadata/DBCPDataSourcePoolFieldMetaData.java
similarity index 63%
rename from 
feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
rename to 
infra/data-source-pool/dbcp/src/main/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/metadata/DBCPDataSourcePoolFieldMetaData.java
index 1587f46..cec9416 100644
--- 
a/feature/sharding/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
+++ 
b/infra/data-source-pool/dbcp/src/main/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/metadata/DBCPDataSourcePoolFieldMetaData.java
@@ -15,20 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.cosid.algorithm.keygen.fixture;
+package org.apache.shardingsphere.infra.datasource.pool.dbcp.metadata;
 
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolFieldMetaData;
 
-import java.util.Properties;
-
-@RequiredArgsConstructor
-public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
+/**
+ * DBCP data source pool field meta data.
+ */
+public final class DBCPDataSourcePoolFieldMetaData implements 
DataSourcePoolFieldMetaData {
     
-    private final int fixtureWorkerId;
+    @Override
+    public String getJdbcUrlFieldName() {
+        return "url";
+    }
     
     @Override
-    public int generate(final Properties props) {
-        return fixtureWorkerId;
+    public String getJdbcUrlPropertiesFieldName() {
+        return "connectionProperties";
     }
 }
diff --git 
a/infra/data-source-pool/dbcp/src/main/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/metadata/DBCPDataSourcePoolMetaData.java
 
b/infra/data-source-pool/dbcp/src/main/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/metadata/DBCPDataSourcePoolMetaData.java
new file mode 100644
index 0000000..d0dd558
--- /dev/null
+++ 
b/infra/data-source-pool/dbcp/src/main/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/metadata/DBCPDataSourcePoolMetaData.java
@@ -0,0 +1,77 @@
+/*
+ * 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.dbcp.metadata;
+
+import 
org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.Map;
+
+/**
+ * DBCP data source pool meta data.
+ */
+public final class DBCPDataSourcePoolMetaData implements 
DataSourcePoolMetaData {
+    
+    private static final Collection<String> TRANSIENT_FIELD_NAMES = new 
LinkedList<>();
+    
+    static {
+        buildTransientFieldNames();
+    }
+    
+    private static void buildTransientFieldNames() {
+        TRANSIENT_FIELD_NAMES.add("closed");
+    }
+    
+    @Override
+    public Map<String, Object> getDefaultProperties() {
+        return Collections.emptyMap();
+    }
+    
+    @Override
+    public Map<String, Object> getSkippedProperties() {
+        return Collections.emptyMap();
+    }
+    
+    @Override
+    public Map<String, String> getPropertySynonyms() {
+        return Collections.emptyMap();
+    }
+    
+    @Override
+    public Collection<String> getTransientFieldNames() {
+        return TRANSIENT_FIELD_NAMES;
+    }
+    
+    @Override
+    public DBCPDataSourcePoolFieldMetaData getFieldMetaData() {
+        return new DBCPDataSourcePoolFieldMetaData();
+    }
+    
+    @Override
+    public String getType() {
+        return "org.apache.commons.dbcp2.BasicDataSource";
+    }
+    
+    @Override
+    public Collection<Object> getTypeAliases() {
+        return Arrays.asList("org.apache.commons.dbcp.BasicDataSource", 
"org.apache.tomcat.dbcp.dbcp2.BasicDataSource");
+    }
+}
diff --git 
a/feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
 
b/infra/data-source-pool/dbcp/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
similarity index 89%
rename from 
feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
rename to 
infra/data-source-pool/dbcp/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
index 759153d..289a77e 100644
--- 
a/feature/sharding/nanoid/src/main/resources/META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
+++ 
b/infra/data-source-pool/dbcp/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.sharding.nanoid.algorithm.keygen.NanoIdKeyGenerateAlgorithm
+org.apache.shardingsphere.infra.datasource.pool.dbcp.metadata.DBCPDataSourcePoolMetaData
diff --git 
a/infra/data-source-pool/dbcp/src/test/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/creator/DBCPDataSourcePoolCreatorTest.java
 
b/infra/data-source-pool/dbcp/src/test/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/creator/DBCPDataSourcePoolCreatorTest.java
new file mode 100644
index 0000000..cc637a9
--- /dev/null
+++ 
b/infra/data-source-pool/dbcp/src/test/java/org/apache/shardingsphere/infra/datasource/pool/dbcp/creator/DBCPDataSourcePoolCreatorTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.dbcp.creator;
+
+import lombok.SneakyThrows;
+import org.apache.commons.dbcp2.BasicDataSource;
+import 
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
+import org.junit.jupiter.api.Test;
+import org.mockito.internal.configuration.plugins.Plugins;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+class DBCPDataSourcePoolCreatorTest {
+    
+    @Test
+    void assertCreateDataSource() {
+        BasicDataSource actual = (BasicDataSource) 
DataSourcePoolCreator.create(new 
DataSourcePoolProperties(BasicDataSource.class.getName(), 
createDataSourcePoolProperties()));
+        assertThat(actual.getUrl(), is("jdbc:mock://127.0.0.1/foo_ds"));
+        assertThat(actual.getUsername(), is("root"));
+        assertThat(actual.getPassword(), is("root"));
+        Properties props = new Properties();
+        props.put("foo", "foo_value");
+        props.put("bar", "bar_value");
+        assertThat(getConnectionProperties(actual), is(props));
+    }
+    
+    private Map<String, Object> createDataSourcePoolProperties() {
+        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");
+        Properties props = new Properties();
+        props.put("foo", "foo_value");
+        props.put("bar", "bar_value");
+        result.put("connectionProperties", props);
+        return result;
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private Properties getConnectionProperties(final BasicDataSource actual) {
+        return (Properties) 
Plugins.getMemberAccessor().get(BasicDataSource.class.getDeclaredField("connectionProperties"),
 actual);
+    }
+}
diff --git a/feature/encrypt/pom.xml b/infra/data-source-pool/pom.xml
similarity index 87%
rename from feature/encrypt/pom.xml
rename to infra/data-source-pool/pom.xml
index 30066ce..5e72328 100644
--- a/feature/encrypt/pom.xml
+++ b/infra/data-source-pool/pom.xml
@@ -20,14 +20,15 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
-        <artifactId>shardingsphere-plugin-feature</artifactId>
+        <artifactId>shardingsphere-plugin-infra</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
-    <artifactId>shardingsphere-plugin-feature-encrypt</artifactId>
+    <artifactId>shardingsphere-plugin-infra-data-source-pool</artifactId>
     <packaging>pom</packaging>
     <name>${project.artifactId}</name>
     
     <modules>
-        <module>sm</module>
+        <module>c3p0</module>
+        <module>dbcp</module>
     </modules>
 </project>
diff --git a/feature/pom.xml b/infra/pom.xml
similarity index 91%
rename from feature/pom.xml
rename to infra/pom.xml
index e9d45e9..d105d4b 100644
--- a/feature/pom.xml
+++ b/infra/pom.xml
@@ -23,12 +23,11 @@
         <artifactId>shardingsphere-plugin</artifactId>
         <version>5.4.1-SNAPSHOT</version>
     </parent>
-    <artifactId>shardingsphere-plugin-feature</artifactId>
+    <artifactId>shardingsphere-plugin-infra</artifactId>
     <packaging>pom</packaging>
     <name>${project.artifactId}</name>
     
     <modules>
-        <module>sharding</module>
-        <module>encrypt</module>
+        <module>data-source-pool</module>
     </modules>
 </project>
diff --git a/pom.xml b/pom.xml
index 00e01ce..19867d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,8 @@
     <description>Provide plugins for ShardingSphere pluggable 
architecture</description>
     
     <modules>
-        <module>feature</module>
+        <module>features</module>
+        <module>infra</module>
     </modules>
     
     <properties>
@@ -51,6 +52,8 @@
         <hamcrest.version>2.2</hamcrest.version>
         <mockito.version>4.11.0</mockito.version>
         <bouncycastle.version>1.70</bouncycastle.version>
+        <c3p0.version>0.9.5.5</c3p0.version>
+        <commons-dbcp2.version>2.9.0</commons-dbcp2.version>
         <commons-codec.version>1.15</commons-codec.version>
         <lombok.version>1.18.20</lombok.version>
         <junit.version>5.9.2</junit.version>
@@ -139,6 +142,10 @@
     </build>
     
     <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-api</artifactId>

Reply via email to