diff --git a/core-java-persistence/pom.xml b/core-java-persistence/pom.xml
new file mode 100644
index 0000000000..0cb142c7b8
--- /dev/null
+++ b/core-java-persistence/pom.xml
@@ -0,0 +1,59 @@
+
+ 4.0.0
+ com.baeldung.core-java-persistence
+ core-java-persistence
+ 0.1.0-SNAPSHOT
+ jar
+ core-java-persistence
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+ com.h2database
+ h2
+ ${h2database.version}
+
+
+ org.apache.commons
+ commons-dbcp2
+ ${commons-dbcp2.version}
+
+
+ com.zaxxer
+ HikariCP
+ ${HikariCP.version}
+
+
+ com.mchange
+ c3p0
+ ${c3p0.version}
+
+
+
+ core-java-persistence
+
+
+ src/main/resources
+ true
+
+
+
+
+ 3.10.0
+ 1.4.197
+ 2.4.0
+ 3.2.0
+ 0.9.5.2
+
+
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java b/core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java
similarity index 93%
rename from core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java
rename to core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java
index 1934d0cfc2..289db18c53 100644
--- a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java
+++ b/core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java
@@ -1,85 +1,92 @@
-package com.baeldung.connectionpool.connectionpools;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class BasicConnectionPool implements ConnectionPool {
-
- private final String url;
- private final String user;
- private final String password;
- private final List connectionPool;
- private final List usedConnections = new ArrayList<>();
- private static final int INITIAL_POOL_SIZE = 10;
- private final int MAX_POOL_SIZE = 20;
-
- public static BasicConnectionPool create(String url, String user, String password) throws SQLException {
- List pool = new ArrayList<>(INITIAL_POOL_SIZE);
- for (int i = 0; i < INITIAL_POOL_SIZE; i++) {
- pool.add(createConnection(url, user, password));
- }
- return new BasicConnectionPool(url, user, password, pool);
- }
-
- private BasicConnectionPool(String url, String user, String password, List connectionPool) {
- this.url = url;
- this.user = user;
- this.password = password;
- this.connectionPool = connectionPool;
- }
-
- @Override
- public Connection getConnection() throws SQLException {
- if (connectionPool.isEmpty()) {
- if (usedConnections.size() < MAX_POOL_SIZE) {
- connectionPool.add(createConnection(url, user, password));
- } else {
- throw new RuntimeException("Maximum pool size reached, no available connections!");
- }
- }
-
- Connection connection = connectionPool.remove(connectionPool.size() - 1);
- usedConnections.add(connection);
- return connection;
- }
-
- @Override
- public boolean releaseConnection(Connection connection) {
- connectionPool.add(connection);
- return usedConnections.remove(connection);
- }
-
- private static Connection createConnection(String url, String user, String password) throws SQLException {
- return DriverManager.getConnection(url, user, password);
- }
-
- public int getSize() {
- return connectionPool.size() + usedConnections.size();
- }
-
- @Override
- public String getUrl() {
- return url;
- }
-
- @Override
- public String getUser() {
- return user;
- }
-
- @Override
- public String getPassword() {
- return password;
- }
-
- public void shutdown() throws SQLException {
- usedConnections.forEach(this::releaseConnection);
- for (Connection c : connectionPool) {
- c.close();
- }
- connectionPool.clear();
- }
-}
+package com.baeldung.connectionpool;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BasicConnectionPool implements ConnectionPool {
+
+ private final String url;
+ private final String user;
+ private final String password;
+ private final List connectionPool;
+ private final List usedConnections = new ArrayList<>();
+ private static final int INITIAL_POOL_SIZE = 10;
+ private final int MAX_POOL_SIZE = 20;
+
+ public static BasicConnectionPool create(String url, String user, String password) throws SQLException {
+ List pool = new ArrayList<>(INITIAL_POOL_SIZE);
+ for (int i = 0; i < INITIAL_POOL_SIZE; i++) {
+ pool.add(createConnection(url, user, password));
+ }
+ return new BasicConnectionPool(url, user, password, pool);
+ }
+
+ private BasicConnectionPool(String url, String user, String password, List connectionPool) {
+ this.url = url;
+ this.user = user;
+ this.password = password;
+ this.connectionPool = connectionPool;
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ if (connectionPool.isEmpty()) {
+ if (usedConnections.size() < MAX_POOL_SIZE) {
+ connectionPool.add(createConnection(url, user, password));
+ } else {
+ throw new RuntimeException("Maximum pool size reached, no available connections!");
+ }
+ }
+
+ Connection connection = connectionPool.remove(connectionPool.size() - 1);
+ usedConnections.add(connection);
+ return connection;
+ }
+
+ @Override
+ public boolean releaseConnection(Connection connection) {
+ connectionPool.add(connection);
+ return usedConnections.remove(connection);
+ }
+
+ private static Connection createConnection(String url, String user, String password) throws SQLException {
+ return DriverManager.getConnection(url, user, password);
+ }
+
+ @Override
+ public int getSize() {
+ return connectionPool.size() + usedConnections.size();
+ }
+
+ @Override
+ public List getConnectionPool() {
+ return connectionPool;
+ }
+
+ @Override
+ public String getUrl() {
+ return url;
+ }
+
+ @Override
+ public String getUser() {
+ return user;
+ }
+
+ @Override
+ public String getPassword() {
+ return password;
+ }
+
+ @Override
+ public void shutdown() throws SQLException {
+ usedConnections.forEach(this::releaseConnection);
+ for (Connection c : connectionPool) {
+ c.close();
+ }
+ connectionPool.clear();
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/C3poDataSource.java b/core-java-persistence/src/main/java/com/baeldung/connectionpool/C3poDataSource.java
similarity index 89%
rename from core-java/src/main/java/com/baeldung/connectionpool/connectionpools/C3poDataSource.java
rename to core-java-persistence/src/main/java/com/baeldung/connectionpool/C3poDataSource.java
index 5b91f707a9..78642459d5 100644
--- a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/C3poDataSource.java
+++ b/core-java-persistence/src/main/java/com/baeldung/connectionpool/C3poDataSource.java
@@ -1,28 +1,28 @@
-package com.baeldung.connectionpool.connectionpools;
-
-import com.mchange.v2.c3p0.ComboPooledDataSource;
-import java.beans.PropertyVetoException;
-import java.sql.Connection;
-import java.sql.SQLException;
-
-public class C3poDataSource {
-
- private static final ComboPooledDataSource cpds = new ComboPooledDataSource();
-
- static {
- try {
- cpds.setDriverClass("org.h2.Driver");
- cpds.setJdbcUrl("jdbc:h2:mem:test");
- cpds.setUser("user");
- cpds.setPassword("password");
- } catch (PropertyVetoException e) {
- e.printStackTrace();
- }
- }
-
- public static Connection getConnection() throws SQLException {
- return cpds.getConnection();
- }
-
- private C3poDataSource(){}
+package com.baeldung.connectionpool;
+
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+import java.beans.PropertyVetoException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class C3poDataSource {
+
+ private static final ComboPooledDataSource cpds = new ComboPooledDataSource();
+
+ static {
+ try {
+ cpds.setDriverClass("org.h2.Driver");
+ cpds.setJdbcUrl("jdbc:h2:mem:test");
+ cpds.setUser("user");
+ cpds.setPassword("password");
+ } catch (PropertyVetoException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static Connection getConnection() throws SQLException {
+ return cpds.getConnection();
+ }
+
+ private C3poDataSource(){}
}
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/ConnectionPool.java b/core-java-persistence/src/main/java/com/baeldung/connectionpool/ConnectionPool.java
similarity index 66%
rename from core-java/src/main/java/com/baeldung/connectionpool/connectionpools/ConnectionPool.java
rename to core-java-persistence/src/main/java/com/baeldung/connectionpool/ConnectionPool.java
index 3d5ad06c3d..fa9355721b 100644
--- a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/ConnectionPool.java
+++ b/core-java-persistence/src/main/java/com/baeldung/connectionpool/ConnectionPool.java
@@ -1,18 +1,24 @@
-package com.baeldung.connectionpool.connectionpools;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.List;
-
-public interface ConnectionPool {
-
- Connection getConnection() throws SQLException;
-
- boolean releaseConnection(Connection connection);
-
- String getUrl();
-
- String getUser();
-
- String getPassword();
+package com.baeldung.connectionpool;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public interface ConnectionPool {
+
+ Connection getConnection() throws SQLException;
+
+ boolean releaseConnection(Connection connection);
+
+ List getConnectionPool();
+
+ int getSize();
+
+ String getUrl();
+
+ String getUser();
+
+ String getPassword();
+
+ void shutdown() throws SQLException;;
}
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/DBCPDataSource.java b/core-java-persistence/src/main/java/com/baeldung/connectionpool/DBCPDataSource.java
similarity index 88%
rename from core-java/src/main/java/com/baeldung/connectionpool/connectionpools/DBCPDataSource.java
rename to core-java-persistence/src/main/java/com/baeldung/connectionpool/DBCPDataSource.java
index 2f33cde883..1e33a08d46 100644
--- a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/DBCPDataSource.java
+++ b/core-java-persistence/src/main/java/com/baeldung/connectionpool/DBCPDataSource.java
@@ -1,25 +1,25 @@
-package com.baeldung.connectionpool.connectionpools;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import org.apache.commons.dbcp2.BasicDataSource;
-
-public class DBCPDataSource {
-
- private static final BasicDataSource ds = new BasicDataSource();
-
- static {
- ds.setUrl("jdbc:h2:mem:test");
- ds.setUsername("user");
- ds.setPassword("password");
- ds.setMinIdle(5);
- ds.setMaxIdle(10);
- ds.setMaxOpenPreparedStatements(100);
- }
-
- public static Connection getConnection() throws SQLException {
- return ds.getConnection();
- }
-
- private DBCPDataSource(){}
-}
+package com.baeldung.connectionpool;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.apache.commons.dbcp2.BasicDataSource;
+
+public class DBCPDataSource {
+
+ private static final BasicDataSource ds = new BasicDataSource();
+
+ static {
+ ds.setUrl("jdbc:h2:mem:test");
+ ds.setUsername("user");
+ ds.setPassword("password");
+ ds.setMinIdle(5);
+ ds.setMaxIdle(10);
+ ds.setMaxOpenPreparedStatements(100);
+ }
+
+ public static Connection getConnection() throws SQLException {
+ return ds.getConnection();
+ }
+
+ private DBCPDataSource(){}
+}
diff --git a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/HikariCPDataSource.java b/core-java-persistence/src/main/java/com/baeldung/connectionpool/HikariCPDataSource.java
similarity index 91%
rename from core-java/src/main/java/com/baeldung/connectionpool/connectionpools/HikariCPDataSource.java
rename to core-java-persistence/src/main/java/com/baeldung/connectionpool/HikariCPDataSource.java
index 5ed2de181d..cc0cc24520 100644
--- a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/HikariCPDataSource.java
+++ b/core-java-persistence/src/main/java/com/baeldung/connectionpool/HikariCPDataSource.java
@@ -1,28 +1,28 @@
-package com.baeldung.connectionpool.connectionpools;
-
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
-
-public class HikariCPDataSource {
-
- private static final HikariConfig config = new HikariConfig();
- private static final HikariDataSource ds;
-
- static {
- config.setJdbcUrl("jdbc:h2:mem:test");
- config.setUsername("user");
- config.setPassword("password");
- config.addDataSourceProperty("cachePrepStmts", "true");
- config.addDataSourceProperty("prepStmtCacheSize", "250");
- config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
- ds = new HikariDataSource(config);
- }
-
- public static Connection getConnection() throws SQLException {
- return ds.getConnection();
- }
-
- private HikariCPDataSource(){}
-}
+package com.baeldung.connectionpool;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class HikariCPDataSource {
+
+ private static final HikariConfig config = new HikariConfig();
+ private static final HikariDataSource ds;
+
+ static {
+ config.setJdbcUrl("jdbc:h2:mem:test");
+ config.setUsername("user");
+ config.setPassword("password");
+ config.addDataSourceProperty("cachePrepStmts", "true");
+ config.addDataSourceProperty("prepStmtCacheSize", "250");
+ config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
+ ds = new HikariDataSource(config);
+ }
+
+ public static Connection getConnection() throws SQLException {
+ return ds.getConnection();
+ }
+
+ private HikariCPDataSource(){}
+}
diff --git a/core-java/src/test/java/com/baeldung/connectionpool/BasicConnectionPoolUnitTest.java b/core-java-persistence/src/test/java/com/baeldung/connectionpool/BasicConnectionPoolUnitTest.java
similarity index 91%
rename from core-java/src/test/java/com/baeldung/connectionpool/BasicConnectionPoolUnitTest.java
rename to core-java-persistence/src/test/java/com/baeldung/connectionpool/BasicConnectionPoolUnitTest.java
index 5edc6bba94..479cd0db25 100644
--- a/core-java/src/test/java/com/baeldung/connectionpool/BasicConnectionPoolUnitTest.java
+++ b/core-java-persistence/src/test/java/com/baeldung/connectionpool/BasicConnectionPoolUnitTest.java
@@ -1,10 +1,8 @@
package com.baeldung.connectionpool;
-import com.baeldung.connectionpool.connectionpools.BasicConnectionPool;
-import com.baeldung.connectionpool.connectionpools.ConnectionPool;
import java.sql.Connection;
import java.sql.SQLException;
-import java.util.List;
+
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
diff --git a/core-java/src/test/java/com/baeldung/connectionpool/C3poDataSourceUnitTest.java b/core-java-persistence/src/test/java/com/baeldung/connectionpool/C3poDataSourceUnitTest.java
similarity index 81%
rename from core-java/src/test/java/com/baeldung/connectionpool/C3poDataSourceUnitTest.java
rename to core-java-persistence/src/test/java/com/baeldung/connectionpool/C3poDataSourceUnitTest.java
index a02daa40f6..a07fa9e74b 100644
--- a/core-java/src/test/java/com/baeldung/connectionpool/C3poDataSourceUnitTest.java
+++ b/core-java-persistence/src/test/java/com/baeldung/connectionpool/C3poDataSourceUnitTest.java
@@ -1,6 +1,5 @@
package com.baeldung.connectionpool;
-import com.baeldung.connectionpool.connectionpools.C3poDataSource;
import java.sql.SQLException;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
diff --git a/core-java/src/test/java/com/baeldung/connectionpool/DBCPDataSourceUnitTest.java b/core-java-persistence/src/test/java/com/baeldung/connectionpool/DBCPDataSourceUnitTest.java
similarity index 81%
rename from core-java/src/test/java/com/baeldung/connectionpool/DBCPDataSourceUnitTest.java
rename to core-java-persistence/src/test/java/com/baeldung/connectionpool/DBCPDataSourceUnitTest.java
index 9583eedf4b..43aaf330b6 100644
--- a/core-java/src/test/java/com/baeldung/connectionpool/DBCPDataSourceUnitTest.java
+++ b/core-java-persistence/src/test/java/com/baeldung/connectionpool/DBCPDataSourceUnitTest.java
@@ -1,6 +1,5 @@
package com.baeldung.connectionpool;
-import com.baeldung.connectionpool.connectionpools.DBCPDataSource;
import java.sql.SQLException;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
diff --git a/core-java/src/test/java/com/baeldung/connectionpool/HikariCPDataSourceUnitTest.java b/core-java-persistence/src/test/java/com/baeldung/connectionpool/HikariCPDataSourceUnitTest.java
similarity index 81%
rename from core-java/src/test/java/com/baeldung/connectionpool/HikariCPDataSourceUnitTest.java
rename to core-java-persistence/src/test/java/com/baeldung/connectionpool/HikariCPDataSourceUnitTest.java
index 6b78815797..b20ce70efd 100644
--- a/core-java/src/test/java/com/baeldung/connectionpool/HikariCPDataSourceUnitTest.java
+++ b/core-java-persistence/src/test/java/com/baeldung/connectionpool/HikariCPDataSourceUnitTest.java
@@ -1,6 +1,5 @@
package com.baeldung.connectionpool;
-import com.baeldung.connectionpool.connectionpools.HikariCPDataSource;
import java.sql.SQLException;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
diff --git a/core-java/pom.xml b/core-java/pom.xml
index 0b69685e14..b83cb478d4 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -158,21 +158,6 @@
jmimemagic
${jmime-magic.version}
-
- org.apache.commons
- commons-dbcp2
- ${commons-dbcp2.version}
-
-
- com.zaxxer
- HikariCP
- ${HikariCP.version}
-
-
- com.mchange
- c3p0
- ${c3p0.version}
-
org.javassist
@@ -544,11 +529,6 @@
3.10.0
-
- 2.4.0
- 3.2.0
- 0.9.5.2
-
2.19.1
4.3.4.RELEASE
diff --git a/pom.xml b/pom.xml
index 263e4df637..1730449509 100644
--- a/pom.xml
+++ b/pom.xml
@@ -312,6 +312,7 @@
core-java-collections
core-java-io
core-java-8
+ core-java-persistence
core-kotlin
core-groovy
core-java-concurrency
@@ -877,7 +878,7 @@
spring-static-resources
hazelcast
hbase
-
+
hystrix
image-processing
immutables
@@ -906,11 +907,11 @@
linkrest
logging-modules/log-mdc
logging-modules/log4j
-
+
logging-modules/logback
lombok
mapstruct
-
+
maven
mesos-marathon
msf4j
@@ -962,25 +963,25 @@
spring-cucumber
spring-ejb
spring-aop
-
+
persistence-modules/spring-data-dynamodb
spring-data-keyvalue
spring-data-mongodb
persistence-modules/spring-data-neo4j
-
+
spring-data-rest
persistence-modules/spring-data-solr
spring-dispatcher-servlet
spring-exceptions
spring-freemarker
persistence-modules/spring-hibernate-3
-
+
persistence-modules/spring-hibernate-5
persistence-modules/spring-data-eclipselink
spring-integration
spring-jenkins-pipeline
spring-jersey
-
+
spring-jms
spring-jooq
persistence-modules/spring-jpa
@@ -1041,13 +1042,13 @@
testing-modules/testing
testing-modules/testng
video-tutorials
-
+
xmlunit-2
struts-2
apache-velocity
apache-solrj
rabbitmq
-
+
persistence-modules/spring-data-gemfire
mybatis
spring-drools
@@ -1090,7 +1091,7 @@
vertx
metrics
httpclient
-
+
jmeter
-->
@@ -1233,6 +1234,4 @@
3.8
-
-
-
+
\ No newline at end of file