XxxxMXBean interfaces are (arguably) a special case since they exist to expose methods via JMX.

I wouldn't expect any users of DBCP to be implementing this interface.

If we think there is a real risk that users have implemented this interface (for what use case?) then I can add default implementations for those methods.

Mark



On 05/01/2022 19:36, Gary Gregory wrote:
If you add methods to an existing interface, this will break binary
compatibility unless you add them as default methods. Or am i missing
something?

Gary

On Wed, Jan 5, 2022, 14:10 <[email protected]> wrote:

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

markt 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 28eb33b  Update MXBean for use of Duration with BasicDataSource
28eb33b is described below

commit 28eb33b5b3551de2e630a4cb59dc3bc5506f8114
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Jan 5 19:07:51 2022 +0000

     Update MXBean for use of Duration with BasicDataSource
---
  .../org/apache/commons/dbcp2/BasicDataSource.java  |  7 ++
  .../org/apache/commons/dbcp2/DataSourceMXBean.java | 77
++++++++++++++++++++++
  .../commons/dbcp2/TestBasicDataSourceMXBean.java   | 37 +++++++++++
  3 files changed, 121 insertions(+)

diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
index 07615d2..bb451cd 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
@@ -1064,6 +1064,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       * @return the maximum permitted duration of a connection.
       * @since 2.10.0
       */
+    @Override
      public Duration getMaxConnDuration() {
          return maxConnDuration;
      }
@@ -1123,6 +1124,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       * @return the maxWaitDuration property value.
       * @since 2.10.0
       */
+    @Override
      public synchronized Duration getMaxWaitDuration() {
          return this.maxWaitDuration;
      }
@@ -1147,6 +1149,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       * @see #setMinEvictableIdle(Duration)
       * @since 2.10.0
       */
+    @Override
      public synchronized Duration getMinEvictableIdleDuration() {
          return this.minEvictableIdleDuration;
      }
@@ -1324,6 +1327,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       * @return Timeout before an abandoned connection can be removed.
       * @since 2.10.0
       */
+    @Override
      public Duration getRemoveAbandonedTimeoutDuration() {
          return abandonedConfig == null ? Duration.ofSeconds(300) :
abandonedConfig.getRemoveAbandonedTimeoutDuration();
      }
@@ -1353,6 +1357,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       *         there are minIdle idle connections in the pool
       * @since 2.10.0
       */
+    @Override
      public synchronized Duration getSoftMinEvictableIdleDuration() {
          return softMinEvictableIdleDuration;
      }
@@ -1429,6 +1434,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       * @see #setDurationBetweenEvictionRuns(Duration)
       * @since 2.10.0
       */
+    @Override
      public synchronized Duration getDurationBetweenEvictionRuns() {
          return this.durationBetweenEvictionRuns;
      }
@@ -1482,6 +1488,7 @@ public class BasicDataSource implements DataSource,
BasicDataSourceMXBean, MBean
       *
       * @return the timeout in seconds before connection validation
queries fail.
       */
+    @Override
      public Duration getValidationQueryTimeoutDuration() {
          return validationQueryTimeoutDuration;
      }
diff --git a/src/main/java/org/apache/commons/dbcp2/DataSourceMXBean.java
b/src/main/java/org/apache/commons/dbcp2/DataSourceMXBean.java
index 56fb5c8..9922542 100644
--- a/src/main/java/org/apache/commons/dbcp2/DataSourceMXBean.java
+++ b/src/main/java/org/apache/commons/dbcp2/DataSourceMXBean.java
@@ -17,6 +17,7 @@
  package org.apache.commons.dbcp2;

  import java.sql.SQLException;
+import java.time.Duration;

  /**
   * Defines the methods that will be made available via
@@ -138,10 +139,21 @@ public interface DataSourceMXBean {
      boolean getLogExpiredConnections();

      /**
+     * See {@link BasicDataSource#getMaxConnDuration()}.
+     *
+     * @return {@link BasicDataSource#getMaxConnDuration()}.
+     * @since 2.10.0
+     */
+    Duration getMaxConnDuration();
+
+    /**
       * See {@link BasicDataSource#getMaxConnLifetimeMillis()}.
       *
       * @return {@link BasicDataSource#getMaxConnLifetimeMillis()}.
+     *
+     * @deprecated Use {@link #getMaxConnDuration()}.
       */
+    @Deprecated
      long getMaxConnLifetimeMillis();

      /**
@@ -166,17 +178,39 @@ public interface DataSourceMXBean {
      int getMaxTotal();

      /**
+     * See {@link BasicDataSource#getMaxWaitDuration()}.
+     *
+     * @return {@link BasicDataSource#getMaxWaitDuration()}.
+     * @since 2.10.0
+     */
+    Duration getMaxWaitDuration();
+
+    /**
       * See {@link BasicDataSource#getMaxWaitMillis()}.
       *
       * @return {@link BasicDataSource#getMaxWaitMillis()}.
+     *
+     * @deprecated Use {@link #getMaxWaitDuration()}.
       */
+    @Deprecated
      long getMaxWaitMillis();

      /**
+     * See {@link BasicDataSource#getMinEvictableIdleDuration()}.
+     *
+     * @return {@link BasicDataSource#getMinEvictableIdleDuration()}.
+     * @since 2.10.0
+     */
+    Duration getMinEvictableIdleDuration();
+
+    /**
       * See {@link BasicDataSource#getMinEvictableIdleTimeMillis()}.
       *
       * @return {@link BasicDataSource#getMinEvictableIdleTimeMillis()}.
+     *
+     * @deprecated Use {@link #getMinEvictableIdleDuration()}.
       */
+    @Deprecated
      long getMinEvictableIdleTimeMillis();

      /**
@@ -222,17 +256,39 @@ public interface DataSourceMXBean {
      boolean getRemoveAbandonedOnMaintenance();

      /**
+     * See {@link BasicDataSource#getRemoveAbandonedTimeoutDuration()}.
+     *
+     * @return {@link
BasicDataSource#getRemoveAbandonedTimeoutDuration()}.
+     * @since 2.10.0
+     */
+    Duration getRemoveAbandonedTimeoutDuration();
+
+    /**
       * See {@link BasicDataSource#getRemoveAbandonedTimeout()}.
       *
       * @return {@link BasicDataSource#getRemoveAbandonedTimeout()}.
+     *
+     * @deprecated Use {@link #getRemoveAbandonedTimeoutDuration()}.
       */
+    @Deprecated
      int getRemoveAbandonedTimeout();

      /**
+     * See {@link BasicDataSource#getSoftMinEvictableIdleDuration()}.
+     *
+     * @return {@link BasicDataSource#getSoftMinEvictableIdleDuration()}.
+     * @since 2.10.0
+     */
+    Duration getSoftMinEvictableIdleDuration();
+
+    /**
       * See {@link BasicDataSource#getSoftMinEvictableIdleTimeMillis()}.
       *
       * @return {@link
BasicDataSource#getSoftMinEvictableIdleTimeMillis()}.
+     *
+     * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
       */
+    @Deprecated
      long getSoftMinEvictableIdleTimeMillis();

      /**
@@ -257,10 +313,20 @@ public interface DataSourceMXBean {
      boolean getTestWhileIdle();

      /**
+     * See {@link BasicDataSource#getDurationBetweenEvictionRuns()}.
+     *
+     * @return {@link BasicDataSource#getDurationBetweenEvictionRuns()}.
+     * @since 2.10.0
+     */
+    Duration getDurationBetweenEvictionRuns();
+
+    /**
       * See {@link BasicDataSource#getTimeBetweenEvictionRunsMillis()}.
       *
       * @return {@link BasicDataSource#getTimeBetweenEvictionRunsMillis()}.
+     * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
       */
+    @Deprecated
      long getTimeBetweenEvictionRunsMillis();

      /**
@@ -285,10 +351,21 @@ public interface DataSourceMXBean {
      String getValidationQuery();

      /**
+     * See {@link BasicDataSource#getValidationQueryTimeoutDuration()}.
+     *
+     * @return {@link
BasicDataSource#getValidationQueryTimeoutDuration()}.
+     * @since 2.10.0
+     */
+    Duration getValidationQueryTimeoutDuration();
+
+    /**
       * See {@link BasicDataSource#getValidationQueryTimeout()}.
       *
       * @return {@link BasicDataSource#getValidationQueryTimeout()}.
+     *
+     * @deprecated Use {@link #getValidationQueryTimeoutDuration()}.
       */
+    @Deprecated
      int getValidationQueryTimeout();

      /**
diff --git
a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceMXBean.java
b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceMXBean.java
index bde0cbf..65d4276 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceMXBean.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceMXBean.java
@@ -17,6 +17,8 @@

  package org.apache.commons.dbcp2;

+import java.time.Duration;
+
  import static org.junit.jupiter.api.Assertions.assertNull;

  import org.junit.jupiter.api.Test;
@@ -99,6 +101,11 @@ public class TestBasicDataSourceMXBean {
          }

          @Override
+        public Duration getMaxConnDuration() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public long getMaxConnLifetimeMillis() {
              return 0;
          }
@@ -119,11 +126,21 @@ public class TestBasicDataSourceMXBean {
          }

          @Override
+        public Duration getMaxWaitDuration() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public long getMaxWaitMillis() {
              return 0;
          }

          @Override
+        public Duration getMinEvictableIdleDuration() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public long getMinEvictableIdleTimeMillis() {
              return 0;
          }
@@ -164,11 +181,21 @@ public class TestBasicDataSourceMXBean {
          }

          @Override
+        public Duration getRemoveAbandonedTimeoutDuration() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public int getRemoveAbandonedTimeout() {
              return 0;
          }

          @Override
+        public Duration getSoftMinEvictableIdleDuration() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public long getSoftMinEvictableIdleTimeMillis() {
              return 0;
          }
@@ -189,6 +216,11 @@ public class TestBasicDataSourceMXBean {
          }

          @Override
+        public Duration getDurationBetweenEvictionRuns() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public long getTimeBetweenEvictionRunsMillis() {
              return 0;
          }
@@ -209,6 +241,11 @@ public class TestBasicDataSourceMXBean {
          }

          @Override
+        public Duration getValidationQueryTimeoutDuration() {
+            return Duration.ZERO;
+        }
+
+        @Override
          public int getValidationQueryTimeout() {
              return 0;
          }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to