From 6acaa5590efe501e210d83da35248eb1ea004924 Mon Sep 17 00:00:00 2001 From: Ole Osterhagen Date: Sun, 4 Jan 2026 19:48:13 +0100 Subject: [PATCH] JCR-4521: Update commons-dbcp dependency to 2.14.0 The caching of the readOnly and autoCommit settings is deactivated in order to detect invalid connections from a shut-down Derby database. This corresponds to the behavior in Commons DBCP 1.x. --- 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; }