This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git
The following commit(s) were added to refs/heads/master by this push: new 2153203 Add and reuse DriverAdapterCPDS.{get|set}DurationBetweenEvictionRuns(), deprecate {get|set}TimeBetweenEvictionRunsMillis(). 2153203 is described below commit 21532035d5a3e9443226523a3da0f4fb62dafacd Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Sat Jun 5 09:30:18 2021 -0400 Add and reuse DriverAdapterCPDS.{get|set}DurationBetweenEvictionRuns(), deprecate {get|set}TimeBetweenEvictionRunsMillis(). --- src/changes/changes.xml | 11 +++-- .../dbcp2/cpdsadapter/DriverAdapterCPDS.java | 52 ++++++++++++++++++---- .../dbcp2/datasources/InstanceKeyDataSource.java | 10 ++--- .../dbcp2/cpdsadapter/TestDriverAdapterCPDS.java | 1 + 4 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index bb61802..499bbd7 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -67,13 +67,16 @@ The <action> type attribute can be add,update,fix,remove. </action> <action dev="ggregory" type="add" due-to="Frank Gasdorf, Gary Gregory"> Add and reuse DataSourceMXBean. - </action> + </action> + <action dev="ggregory" type="add" due-to="Frank Gasdorf, Gary Gregory"> + Add and reuse DriverAdapterCPDS.{get|set}DurationBetweenEvictionRuns(), deprecate {get|set}TimeBetweenEvictionRunsMillis(). + </action> <!-- FIXES --> <action dev="ggregory" type="fix" issue="DBCP-569" due-to="Florent Guillaume"> - Fix test random failure on TestSynchronizationOrder.testInterposedSynchronization, #84. + Fix test random failure on TestSynchronizationOrder.testInterposedSynchronization, #84. </action> <action dev="ggregory" type="fix" issue="DBCP-568" due-to="Florent Guillaume"> - ManagedConnection must clear its cached state after transaction completes, #75. + ManagedConnection must clear its cached state after transaction completes, #75. </action> <action dev="ggregory" type="fix" due-to="Arturo Bernal"> Minor Improvements #78. @@ -121,7 +124,7 @@ The <action> type attribute can be add,update,fix,remove. org.apache.commons.dbcp2.PStmtKey.getColumnNames() may expose internal representation by returning PStmtKey.columnNames. </action> <action issue="DBCP-578" dev="ggregory" type="fix" due-to="Arturo Bernal"> - Use Collections.synchronizedList Instead Of Vector #101. + Use Collections.synchronizedList() Instead Of Vector #101. </action> <action issue="DBCP-576" dev="ggregory" type="fix" due-to="Arturo Bernal"> Simplify and inline variables #99. diff --git a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java index e11dc40..ce1a9a9 100644 --- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java +++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java @@ -22,6 +22,7 @@ import java.io.Serializable; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; +import java.time.Duration; import java.util.Hashtable; import java.util.Properties; import java.util.logging.Logger; @@ -109,10 +110,11 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl /** Log stream. NOT USED */ private transient PrintWriter logWriter; + // PreparedStatement pool properties private boolean poolPreparedStatements; private int maxIdle = 10; - private long timeBetweenEvictionRunsMillis = BaseObjectPoolConfig.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS; + private Duration durationBetweenEvictionRuns = BaseObjectPoolConfig.DEFAULT_TIME_BETWEEN_EVICTION_RUNS; private int numTestsPerEvictionRun = -1; private int minEvictableIdleTimeMillis = -1; @@ -130,7 +132,7 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl private boolean accessToUnderlyingConnectionAllowed; /** - * Default no-arg constructor for Serialization + * Default no-argument constructor for Serialization */ public DriverAdapterCPDS() { } @@ -158,8 +160,8 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl } /** - * Gets the value of description. This property is here for use by the code which will deploy this datasource. It is - * not used internally. + * Gets the value of description. This property is here for use by the code which will deploy this data source. It + * is not used internally. * * @return value of description, may be null. * @see #setDescription(String) @@ -205,7 +207,7 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl * @return the value of maxIdle */ public int getMaxIdle() { - return this.maxIdle; + return maxIdle; } /** @@ -388,7 +390,7 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl if (getMaxPreparedStatements() <= 0) { // Since there is no limit, create a prepared statement pool with an eviction thread; // evictor settings are the same as the connection pool settings. - config.setTimeBetweenEvictionRunsMillis(getTimeBetweenEvictionRunsMillis()); + config.setTimeBetweenEvictionRuns(getDurationBetweenEvictionRuns()); config.setNumTestsPerEvictionRun(getNumTestsPerEvictionRun()); config.setMinEvictableIdleTimeMillis(getMinEvictableIdleTimeMillis()); } else { @@ -425,6 +427,7 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl ref.add(new StringRefAddr("poolPreparedStatements", String.valueOf(isPoolPreparedStatements()))); ref.add(new StringRefAddr("maxIdle", String.valueOf(getMaxIdle()))); + ref.add(new StringRefAddr("durationBetweenEvictionRuns", String.valueOf(getDurationBetweenEvictionRuns()))); ref.add(new StringRefAddr("timeBetweenEvictionRunsMillis", String.valueOf(getTimeBetweenEvictionRunsMillis()))); ref.add(new StringRefAddr("numTestsPerEvictionRun", String.valueOf(getNumTestsPerEvictionRun()))); ref.add(new StringRefAddr("minEvictableIdleTimeMillis", String.valueOf(getMinEvictableIdleTimeMillis()))); @@ -438,14 +441,28 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl } /** + * Gets the duration to sleep between runs of the idle object evictor thread. When non-positive, no + * idle object evictor thread will be run. + * + * @return the value of the evictor thread timer + * @see #setDurationBetweenEvictionRuns(Duration) + * @since 2.9.0 + */ + public Duration getDurationBetweenEvictionRuns() { + return durationBetweenEvictionRuns; + } + + /** * Gets the number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no * idle object evictor thread will be run. * * @return the value of the evictor thread timer * @see #setTimeBetweenEvictionRunsMillis(long) + * @deprecated Use {@link #getDurationBetweenEvictionRuns()}. */ + @Deprecated public long getTimeBetweenEvictionRunsMillis() { - return timeBetweenEvictionRunsMillis; + return durationBetweenEvictionRuns.toMillis(); } /** @@ -656,6 +673,21 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl } /** + * Sets the duration to sleep between runs of the idle object evictor thread. When non-positive, no + * idle object evictor thread will be run. + * + * @param durationBetweenEvictionRuns The duration to sleep between runs of the idle object evictor + * thread. When non-positive, no idle object evictor thread will be run. + * @see #getDurationBetweenEvictionRuns() + * @throws IllegalStateException if {@link #getPooledConnection()} has been called + * @since 2.9.0 + */ + public void setDurationBetweenEvictionRuns(final Duration durationBetweenEvictionRuns) { + assertInitializationAllowed(); + this.durationBetweenEvictionRuns = durationBetweenEvictionRuns; + } + + /** * Sets the number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no * idle object evictor thread will be run. * @@ -663,10 +695,12 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl * thread. When non-positive, no idle object evictor thread will be run. * @see #getTimeBetweenEvictionRunsMillis() * @throws IllegalStateException if {@link #getPooledConnection()} has been called + * @deprecated Use {@link #setDurationBetweenEvictionRuns(Duration)}. */ + @Deprecated public void setTimeBetweenEvictionRunsMillis(final long timeBetweenEvictionRunsMillis) { assertInitializationAllowed(); - this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; + this.durationBetweenEvictionRuns = Duration.ofMillis(timeBetweenEvictionRunsMillis); } /** @@ -715,7 +749,7 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl builder.append(", maxIdle="); builder.append(maxIdle); builder.append(", timeBetweenEvictionRunsMillis="); - builder.append(timeBetweenEvictionRunsMillis); + builder.append(durationBetweenEvictionRuns); builder.append(", numTestsPerEvictionRun="); builder.append(numTestsPerEvictionRun); builder.append(", minEvictableIdleTimeMillis="); diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java b/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java index b97be75..f20b955 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java @@ -960,14 +960,14 @@ public abstract class InstanceKeyDataSource implements DataSource, Referenceable } } - final Connection con = info.getPooledConnection().getConnection(); + final Connection connection = info.getPooledConnection().getConnection(); try { - setupDefaults(con, userName); - con.clearWarnings(); - return con; + setupDefaults(connection, userName); + connection.clearWarnings(); + return connection; } catch (final SQLException ex) { try { - con.close(); + connection.close(); } catch (final Exception exc) { getLogWriter().println("ignoring exception during close: " + exc); } diff --git a/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java b/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java index 865b038..c5fd358 100644 --- a/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java +++ b/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java @@ -333,6 +333,7 @@ public class TestDriverAdapterCPDS { pcds.setMaxIdle(100); assertEquals(100, pcds.getMaxIdle()); pcds.setTimeBetweenEvictionRunsMillis(100); + assertEquals(100, pcds.getDurationBetweenEvictionRuns().toMillis()); assertEquals(100, pcds.getTimeBetweenEvictionRunsMillis()); pcds.setNumTestsPerEvictionRun(1); assertEquals(1, pcds.getNumTestsPerEvictionRun());