From 3bb61ac69214179da4eb6e6c4b46ad642c4b52a4 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 26 Jan 2026 17:08:22 +0100 Subject: [PATCH 1/2] JCR-4521: Update commons-dbcp dependency to 2.14.0 --- jackrabbit-core/pom.xml | 6 +++--- .../core/util/db/ConnectionFactoryTest.java | 4 ++-- jackrabbit-data/pom.xml | 6 +++--- .../jackrabbit/core/util/db/ConnectionFactory.java | 14 ++++++++------ 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 38e66998930..0d514a9ef87 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -233,9 +233,9 @@ org.apache.jackrabbit.core.version.RemoveAndAddVersionLabelXATest#testVersionLab commons-io - commons-dbcp - commons-dbcp - 1.4 + org.apache.commons + commons-dbcp2 + 2.14.0 javax.jcr diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java index 46fbf6bcff8..e65c41f722a 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java @@ -24,7 +24,7 @@ import junit.framework.TestCase; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; import org.apache.derby.iapi.jdbc.EngineConnection; import org.apache.jackrabbit.core.config.ConfigurationException; import org.apache.jackrabbit.core.config.DataSourceConfig; @@ -146,7 +146,7 @@ public void testClose() throws Exception { } private void assertPoolDefaults(BasicDataSource ds, String validationQuery, int maxCons) { - assertEquals(maxCons, ds.getMaxActive()); + assertEquals(maxCons, ds.getMaxTotal()); assertEquals(validationQuery, ds.getValidationQuery()); assertTrue(ds.getDefaultAutoCommit()); assertFalse(ds.getTestOnBorrow()); diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index b669e82d280..ba9e5bd7d31 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -86,9 +86,9 @@ commons-io - commons-dbcp - commons-dbcp - 1.4 + org.apache.commons + commons-dbcp2 + 2.14.0 true diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java index 65f63eb5694..2d1b17d7732 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java @@ -30,9 +30,9 @@ import javax.naming.NamingException; import javax.sql.DataSource; -import org.apache.commons.dbcp.BasicDataSource; -import org.apache.commons.dbcp.DelegatingConnection; -import org.apache.commons.pool.impl.GenericObjectPool; +import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.commons.dbcp2.DelegatingConnection; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.jackrabbit.core.config.DataSourceConfig; import org.apache.jackrabbit.core.config.DataSourceConfig.DataSourceDefinition; import org.apache.jackrabbit.util.Base64; @@ -102,7 +102,7 @@ public void registerDataSources(DataSourceConfig dsc) throws RepositoryException BasicDataSource bds = getDriverDataSource(driverClass, def.getUrl(), def.getUser(), def.getPassword()); if (def.getMaxPoolSize() > 0) { - bds.setMaxActive(def.getMaxPoolSize()); + bds.setMaxTotal(def.getMaxPoolSize()); } if (def.getValidationQuery() != null && !"".equals(def.getValidationQuery().trim())) { bds.setValidationQuery(def.getValidationQuery()); @@ -348,12 +348,14 @@ private BasicDataSource getDriverDataSource( ds.setTestWhileIdle(true); ds.setTimeBetweenEvictionRunsMillis(600000); // 10 Minutes ds.setMinEvictableIdleTimeMillis(60000); // 1 Minute - ds.setMaxActive(-1); // unlimited - ds.setMaxIdle(GenericObjectPool.DEFAULT_MAX_IDLE + 10); + ds.setMaxTotal(-1); // unlimited + ds.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE + 10); ds.setValidationQuery(guessValidationQuery(url)); ds.setAccessToUnderlyingConnectionAllowed(true); ds.setPoolPreparedStatements(Boolean.valueOf(System.getProperty(SYSTEM_PROPERTY_POOL_PREPARED_STATEMENTS, "true"))); ds.setMaxOpenPreparedStatements(-1); // unlimited + // this helps to discover unusable connections of a shut-down database without executing a validation query + ds.setCacheState(false); return ds; } From eb8145dbb04afe7672edfd4dc47278e27d7590dc Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 26 Jan 2026 19:29:58 +0100 Subject: [PATCH 2/2] JCR-4521: Update commons-dbcp dependency to 2.14.0 - Sonar service --- .../apache/jackrabbit/core/util/db/ConnectionFactory.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java index 2d1b17d7732..fe173111759 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java @@ -20,6 +20,7 @@ import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; +import java.time.Duration; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -334,7 +335,7 @@ private BasicDataSource getDriverDataSource( if (instance != null) { if (instance.jdbcCompliant()) { // JCR-3445 At the moment the PostgreSQL isn't compliant because it doesn't implement this method... - ds.setValidationQueryTimeout(3); + ds.setValidationQueryTimeout(Duration.ofSeconds(3)); } } ds.setDriverClassName(driverClass.getName()); @@ -346,8 +347,8 @@ private BasicDataSource getDriverDataSource( ds.setDefaultAutoCommit(true); ds.setTestOnBorrow(false); ds.setTestWhileIdle(true); - ds.setTimeBetweenEvictionRunsMillis(600000); // 10 Minutes - ds.setMinEvictableIdleTimeMillis(60000); // 1 Minute + ds.setDurationBetweenEvictionRuns(Duration.ofMinutes(10)); + ds.setMinEvictableIdle(Duration.ofMinutes(1)); ds.setMaxTotal(-1); // unlimited ds.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE + 10); ds.setValidationQuery(guessValidationQuery(url));