    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one or more
    003 * contributor license agreements.  See the NOTICE file distributed with
    004 * this work for additional information regarding copyright ownership.
    005 * The ASF licenses this file to You under the Apache License, Version 2.0
    006 * (the "License"); you may not use this file except in compliance with
    007 * the License.  You may obtain a copy of the License at
    008 *
    009 *      https://www.apache.org/licenses/LICENSE-2.0
    010 *
    011 * Unless required by applicable law or agreed to in writing, software
    012 * distributed under the License is distributed on an "AS IS" BASIS,
    013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014 * See the License for the specific language governing permissions and
    015 * limitations under the License.
    016 */
    017package org.apache.commons.pool2.impl;
    018
    019import java.time.Duration;
    020
    021import org.apache.commons.pool2.BaseObject;
    022
    023/**
    024 * Provides the implementation for the common attributes shared by the sub-classes. New instances of this class will be created using the defaults defined by
    025 * the public constants.
    026 * <p>
    027 * This class is not thread-safe.
    028 * </p>
    029 *
    030 * @param <T> Type of element pooled.
    031 * @since 2.0
    032 */
    033public abstract class BaseObjectPoolConfig<T> extends BaseObject implements Cloneable {
    034
    035    /**
    036     * The default value for the {@code lifo} configuration attribute: {@value}.
    037     *
    038     * @see GenericObjectPool#getLifo()
    039     * @see GenericKeyedObjectPool#getLifo()
    040     */
    041    public static final boolean DEFAULT_LIFO = true;
    042
    043    /**
    044     * The default value for the {@code fairness} configuration attribute: {@value}.
    045     *
    046     * @see GenericObjectPool#getFairness()
    047     * @see GenericKeyedObjectPool#getFairness()
    048     */
    049    public static final boolean DEFAULT_FAIRNESS = false;
    050
    051    /**
    052     * The default value for the {@code maxWait} configuration attribute: {@value}.
    053     *
    054     * @see GenericObjectPool#getMaxWaitDuration()
    055     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    056     * @deprecated Use {@link #DEFAULT_MAX_WAIT}.
    057     */
    058    @Deprecated
    059    public static final long DEFAULT_MAX_WAIT_MILLIS = -1L;
    060
    061    /**
    062     * The default value for the {@code maxWait} configuration attribute.
    063     *
    064     * @see GenericObjectPool#getMaxWaitDuration()
    065     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    066     * @since 2.10.0
    067     */
    068    public static final Duration DEFAULT_MAX_WAIT = Duration.ofMillis(DEFAULT_MAX_WAIT_MILLIS);
    069
    070    /**
    071     * The default value for the {@code minEvictableIdleDuration} configuration attribute: {@value}.
    072     *
    073     * @see GenericObjectPool#getMinEvictableIdleDuration()
    074     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    075     * @deprecated Use {@link #DEFAULT_MIN_EVICTABLE_IDLE_TIME}.
    076     */
    077    @Deprecated
    078    public static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 1000L * 60L * 30L;
    079
    080    /**
    081     * The default value for the {@code minEvictableIdleDuration} configuration attribute.
    082     *
    083     * @see GenericObjectPool#getMinEvictableIdleDuration()
    084     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    085     * @since 2.11.0
    086     */
    087    public static final Duration DEFAULT_MIN_EVICTABLE_IDLE_DURATION = Duration.ofMillis(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
    088
    089    /**
    090     * The default value for the {@code minEvictableIdleDuration} configuration attribute.
    091     *
    092     * @see GenericObjectPool#getMinEvictableIdleDuration()
    093     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    094     * @since 2.10.0
    095     * @deprecated Use {@link #DEFAULT_MIN_EVICTABLE_IDLE_DURATION}.
    096     */
    097    @Deprecated
    098    public static final Duration DEFAULT_MIN_EVICTABLE_IDLE_TIME = Duration.ofMillis(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
    099
    100    /**
    101     * The default value for the {@code softMinEvictableIdleTime} configuration attribute: {@value}.
    102     *
    103     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    104     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    105     * @deprecated Use {@link #DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME}.
    106     */
    107    @Deprecated
    108    public static final long DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS = -1;
    109
    110    /**
    111     * The default value for the {@code softMinEvictableIdleTime} configuration attribute.
    112     *
    113     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    114     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    115     * @since 2.10.0
    116     * @deprecated Use {@link #DEFAULT_SOFT_MIN_EVICTABLE_IDLE_DURATION}.
    117     */
    118    @Deprecated
    119    public static final Duration DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME = Duration.ofMillis(DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
    120
    121    /**
    122     * The default value for the {@code softMinEvictableIdleTime} configuration attribute.
    123     *
    124     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    125     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    126     * @since 2.11.0
    127     */
    128    public static final Duration DEFAULT_SOFT_MIN_EVICTABLE_IDLE_DURATION = Duration.ofMillis(DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
    129
    130    /**
    131     * The default value for {@code evictorShutdownTimeout} configuration attribute: {@value}.
    132     *
    133     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    134     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    135     * @deprecated Use {@link #DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT}.
    136     */
    137    @Deprecated
    138    public static final long DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT_MILLIS = 10L * 1000L;
    139
    140    /**
    141     * The default value for {@code evictorShutdownTimeout} configuration attribute.
    142     *
    143     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    144     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    145     * @since 2.10.0
    146     */
    147    public static final Duration DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT = Duration.ofMillis(DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT_MILLIS);
    148
    149    /**
    150     * The default value for the {@code numTestsPerEvictionRun} configuration attribute: {@value}.
    151     *
    152     * @see GenericObjectPool#getNumTestsPerEvictionRun()
    153     * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
    154     */
    155    public static final int DEFAULT_NUM_TESTS_PER_EVICTION_RUN = 3;
    156
    157    /**
    158     * The default value for the {@code testOnCreate} configuration attribute: {@value}.
    159     *
    160     * @see GenericObjectPool#getTestOnCreate()
    161     * @see GenericKeyedObjectPool#getTestOnCreate()
    162     * @since 2.2
    163     */
    164    public static final boolean DEFAULT_TEST_ON_CREATE = false;
    165
    166    /**
    167     * The default value for the {@code testOnBorrow} configuration attribute: {@value}.
    168     *
    169     * @see GenericObjectPool#getTestOnBorrow()
    170     * @see GenericKeyedObjectPool#getTestOnBorrow()
    171     */
    172    public static final boolean DEFAULT_TEST_ON_BORROW = false;
    173
    174    /**
    175     * The default value for the {@code testOnReturn} configuration attribute: {@value}.
    176     *
    177     * @see GenericObjectPool#getTestOnReturn()
    178     * @see GenericKeyedObjectPool#getTestOnReturn()
    179     */
    180    public static final boolean DEFAULT_TEST_ON_RETURN = false;
    181
    182    /**
    183     * The default value for the {@code testWhileIdle} configuration attribute: {@value}.
    184     *
    185     * @see GenericObjectPool#getTestWhileIdle()
    186     * @see GenericKeyedObjectPool#getTestWhileIdle()
    187     */
    188    public static final boolean DEFAULT_TEST_WHILE_IDLE = false;
    189
    190    /**
    191     * The default value for the {@code timeBetweenEvictionRuns} configuration attribute: {@value}.
    192     *
    193     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    194     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    195     * @deprecated Use {@link #DEFAULT_TIME_BETWEEN_EVICTION_RUNS}.
    196     */
    197    @Deprecated
    198    public static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = -1L;
    199
    200    /**
    201     * The default value for the {@code timeBetweenEvictionRuns} configuration attribute.
    202     *
    203     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    204     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    205     * @since 2.12.0
    206     */
    207    public static final Duration DEFAULT_DURATION_BETWEEN_EVICTION_RUNS = Duration.ofMillis(DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS);
    208
    209    /**
    210     * The default value for the {@code timeBetweenEvictionRuns} configuration attribute.
    211     *
    212     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    213     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    214     * @deprecated Use {@link #DEFAULT_DURATION_BETWEEN_EVICTION_RUNS}.
    215     */
    216    @Deprecated
    217    public static final Duration DEFAULT_TIME_BETWEEN_EVICTION_RUNS = Duration.ofMillis(DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS);
    218
    219    /**
    220     * The default value for the {@code blockWhenExhausted} configuration attribute: {@value}.
    221     *
    222     * @see GenericObjectPool#getBlockWhenExhausted()
    223     * @see GenericKeyedObjectPool#getBlockWhenExhausted()
    224     */
    225    public static final boolean DEFAULT_BLOCK_WHEN_EXHAUSTED = true;
    226
    227    /**
    228     * The default value for enabling JMX for pools created with a configuration instance: {@value}.
    229     */
    230    public static final boolean DEFAULT_JMX_ENABLE = true;
    231
    232    /**
    233     * The default value for the prefix used to name JMX enabled pools created with a configuration instance: {@value}.
    234     *
    235     * @see GenericObjectPool#getJmxName()
    236     * @see GenericKeyedObjectPool#getJmxName()
    237     */
    238    public static final String DEFAULT_JMX_NAME_PREFIX = "pool";
    239
    240    /**
    241     * The default value for the base name to use to name JMX enabled pools created with a configuration instance. The default is {@code null} which means the
    242     * pool will provide the base name to use.
    243     *
    244     * @see GenericObjectPool#getJmxName()
    245     * @see GenericKeyedObjectPool#getJmxName()
    246     */
    247    public static final String DEFAULT_JMX_NAME_BASE = null;
    248
    249    /**
    250     * The default value for the {@code evictionPolicyClassName} configuration attribute.
    251     *
    252     * @see GenericObjectPool#getEvictionPolicyClassName()
    253     * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
    254     */
    255    public static final String DEFAULT_EVICTION_POLICY_CLASS_NAME = DefaultEvictionPolicy.class.getName();
    256
    257    /**
    258     * The default value for the {@code collectDetailedStatistics} configuration
    259     * attribute. When {@code true}, the pool will collect detailed timing statistics
    260     * for monitoring purposes. When {@code false}, detailed statistics collection
    261     * is disabled, improving performance under high load.
    262     * <p>
    263     * This setting affects data collection for mean active time, mean idle time, and mean borrow wait time.
    264     * </p>
    265     *
    266     * @since 2.13.0
    267     */
    268    public static final boolean DEFAULT_COLLECT_DETAILED_STATISTICS = true;
    269
    270    private boolean lifo = DEFAULT_LIFO;
    271
    272    private boolean fairness = DEFAULT_FAIRNESS;
    273
    274    private Duration maxWaitDuration = DEFAULT_MAX_WAIT;
    275
    276    private Duration minEvictableIdleDuration = DEFAULT_MIN_EVICTABLE_IDLE_TIME;
    277
    278    private Duration evictorShutdownTimeoutDuration = DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT;
    279
    280    private Duration softMinEvictableIdleDuration = DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME;
    281
    282    private int numTestsPerEvictionRun = DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
    283
    284    private EvictionPolicy<T> evictionPolicy; // Only 2.6.0 applications set this
    285
    286    private String evictionPolicyClassName = DEFAULT_EVICTION_POLICY_CLASS_NAME;
    287
    288    private boolean testOnCreate = DEFAULT_TEST_ON_CREATE;
    289
    290    private boolean testOnBorrow = DEFAULT_TEST_ON_BORROW;
    291
    292    private boolean testOnReturn = DEFAULT_TEST_ON_RETURN;
    293
    294    private boolean testWhileIdle = DEFAULT_TEST_WHILE_IDLE;
    295
    296    private Duration durationBetweenEvictionRuns = DEFAULT_DURATION_BETWEEN_EVICTION_RUNS;
    297
    298    private boolean blockWhenExhausted = DEFAULT_BLOCK_WHEN_EXHAUSTED;
    299
    300    private boolean jmxEnabled = DEFAULT_JMX_ENABLE;
    301
    302    // TODO Consider changing this to a single property for 3.x
    303    private String jmxNamePrefix = DEFAULT_JMX_NAME_PREFIX;
    304
    305    private String jmxNameBase = DEFAULT_JMX_NAME_BASE;
    306
    307    private boolean collectDetailedStatistics = DEFAULT_COLLECT_DETAILED_STATISTICS;
    308
    309    /**
    310     * Constructs a new instance.
    311     */
    312    public BaseObjectPoolConfig() {
    313        // empty
    314    }
    315
    316    /**
    317     * Gets the value for the {@code blockWhenExhausted} configuration attribute for pools created with this configuration instance.
    318     *
    319     * @return The current setting of {@code blockWhenExhausted} for this configuration instance
    320     * @see GenericObjectPool#getBlockWhenExhausted()
    321     * @see GenericKeyedObjectPool#getBlockWhenExhausted()
    322     */
    323    public boolean getBlockWhenExhausted() {
    324        return blockWhenExhausted;
    325    }
    326
    327    /**
    328     * Gets the value for the {@code collectDetailedStatistics} configuration attribute
    329     * for pools created with this configuration instance.
    330     * <p>
    331     * This setting affects data collection for mean active time, mean idle time, and mean borrow wait time.
    332     * </p>
    333     *
    334     * @return  {@code true} if detailed statistics collection is enabled,
    335     *          {@code false} if disabled for improved performance.
    336     * @see GenericObjectPool#getCollectDetailedStatistics()
    337     * @see GenericKeyedObjectPool#getCollectDetailedStatistics()
    338     * @since 2.13.0
    339     */
    340    public boolean getCollectDetailedStatistics() {
    341        return collectDetailedStatistics;
    342    }
    343
    344    /**
    345     * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    346     *
    347     * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
    348     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    349     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    350     * @since 2.11.0
    351     */
    352    public Duration getDurationBetweenEvictionRuns() {
    353        return durationBetweenEvictionRuns;
    354    }
    355
    356    /**
    357     * Gets the value for the {@code evictionPolicyClass} configuration attribute for pools created with this configuration instance.
    358     *
    359     * @return The current setting of {@code evictionPolicyClass} for this configuration instance
    360     * @see GenericObjectPool#getEvictionPolicy()
    361     * @see GenericKeyedObjectPool#getEvictionPolicy()
    362     * @since 2.6.0
    363     */
    364    public EvictionPolicy<T> getEvictionPolicy() {
    365        return evictionPolicy;
    366    }
    367
    368    /**
    369     * Gets the value for the {@code evictionPolicyClassName} configuration attribute for pools created with this configuration instance.
    370     *
    371     * @return The current setting of {@code evictionPolicyClassName} for this configuration instance
    372     * @see GenericObjectPool#getEvictionPolicyClassName()
    373     * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
    374     */
    375    public String getEvictionPolicyClassName() {
    376        return evictionPolicyClassName;
    377    }
    378
    379    /**
    380     * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    381     *
    382     * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
    383     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    384     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    385     * @since 2.10.0
    386     * @deprecated Use {@link #getEvictorShutdownTimeoutDuration()}.
    387     */
    388    @Deprecated
    389    public Duration getEvictorShutdownTimeout() {
    390        return evictorShutdownTimeoutDuration;
    391    }
    392
    393    /**
    394     * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    395     *
    396     * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
    397     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    398     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    399     * @since 2.11.0
    400     */
    401    public Duration getEvictorShutdownTimeoutDuration() {
    402        return evictorShutdownTimeoutDuration;
    403    }
    404
    405    /**
    406     * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    407     *
    408     * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
    409     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    410     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    411     * @deprecated Use {@link #getEvictorShutdownTimeout()}.
    412     */
    413    @Deprecated
    414    public long getEvictorShutdownTimeoutMillis() {
    415        return evictorShutdownTimeoutDuration.toMillis();
    416    }
    417
    418    /**
    419     * Gets the value for the {@code fairness} configuration attribute for pools created with this configuration instance.
    420     *
    421     * @return The current setting of {@code fairness} for this configuration instance
    422     * @see GenericObjectPool#getFairness()
    423     * @see GenericKeyedObjectPool#getFairness()
    424     */
    425    public boolean getFairness() {
    426        return fairness;
    427    }
    428
    429    /**
    430     * Gets the value of the flag that determines if JMX will be enabled for pools created with this configuration instance.
    431     *
    432     * @return The current setting of {@code jmxEnabled} for this configuration instance
    433     */
    434    public boolean getJmxEnabled() {
    435        return jmxEnabled;
    436    }
    437
    438    /**
    439     * Gets the value of the JMX name base that will be used as part of the name assigned to JMX enabled pools created with this configuration instance. A value
    440     * of {@code null} means that the pool will define the JMX name base.
    441     *
    442     * @return The current setting of {@code jmxNameBase} for this configuration instance
    443     */
    444    public String getJmxNameBase() {
    445        return jmxNameBase;
    446    }
    447
    448    /**
    449     * Gets the value of the JMX name prefix that will be used as part of the name assigned to JMX enabled pools created with this configuration instance.
    450     *
    451     * @return The current setting of {@code jmxNamePrefix} for this configuration instance
    452     */
    453    public String getJmxNamePrefix() {
    454        return jmxNamePrefix;
    455    }
    456
    457    /**
    458     * Gets the value for the {@code lifo} configuration attribute for pools created with this configuration instance.
    459     *
    460     * @return The current setting of {@code lifo} for this configuration instance
    461     * @see GenericObjectPool#getLifo()
    462     * @see GenericKeyedObjectPool#getLifo()
    463     */
    464    public boolean getLifo() {
    465        return lifo;
    466    }
    467
    468    /**
    469     * Gets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    470     *
    471     * @return The current setting of {@code maxWait} for this configuration instance
    472     * @see GenericObjectPool#getMaxWaitDuration()
    473     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    474     * @since 2.11.0
    475     */
    476    public Duration getMaxWaitDuration() {
    477        return maxWaitDuration;
    478    }
    479
    480    /**
    481     * Gets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    482     *
    483     * @return The current setting of {@code maxWait} for this configuration instance
    484     * @see GenericObjectPool#getMaxWaitDuration()
    485     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    486     * @deprecated Use {@link #getMaxWaitDuration()}.
    487     */
    488    @Deprecated
    489    public long getMaxWaitMillis() {
    490        return maxWaitDuration.toMillis();
    491    }
    492
    493    /**
    494     * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    495     *
    496     * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
    497     * @see GenericObjectPool#getMinEvictableIdleDuration()
    498     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    499     * @since 2.11.0
    500     */
    501    public Duration getMinEvictableIdleDuration() {
    502        return minEvictableIdleDuration;
    503    }
    504
    505    /**
    506     * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    507     *
    508     * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
    509     * @see GenericObjectPool#getMinEvictableIdleDuration()
    510     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    511     * @since 2.10.0
    512     * @deprecated Use {@link #getMinEvictableIdleDuration()}.
    513     */
    514    @Deprecated
    515    public Duration getMinEvictableIdleTime() {
    516        return minEvictableIdleDuration;
    517    }
    518
    519    /**
    520     * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    521     *
    522     * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
    523     * @see GenericObjectPool#getMinEvictableIdleDuration()
    524     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    525     * @deprecated Use {@link #getMinEvictableIdleTime()}.
    526     */
    527    @Deprecated
    528    public long getMinEvictableIdleTimeMillis() {
    529        return minEvictableIdleDuration.toMillis();
    530    }
    531
    532    /**
    533     * Gets the value for the {@code numTestsPerEvictionRun} configuration attribute for pools created with this configuration instance.
    534     *
    535     * @return The current setting of {@code numTestsPerEvictionRun} for this configuration instance
    536     * @see GenericObjectPool#getNumTestsPerEvictionRun()
    537     * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
    538     */
    539    public int getNumTestsPerEvictionRun() {
    540        return numTestsPerEvictionRun;
    541    }
    542
    543    /**
    544     * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    545     *
    546     * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
    547     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    548     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    549     * @since 2.11.0
    550     */
    551    public Duration getSoftMinEvictableIdleDuration() {
    552        return softMinEvictableIdleDuration;
    553    }
    554
    555    /**
    556     * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    557     *
    558     * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
    559     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    560     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    561     * @since 2.10.0
    562     * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
    563     */
    564    @Deprecated
    565    public Duration getSoftMinEvictableIdleTime() {
    566        return softMinEvictableIdleDuration;
    567    }
    568
    569    /**
    570     * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    571     *
    572     * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
    573     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    574     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    575     * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
    576     */
    577    @Deprecated
    578    public long getSoftMinEvictableIdleTimeMillis() {
    579        return softMinEvictableIdleDuration.toMillis();
    580    }
    581
    582    /**
    583     * Gets the value for the {@code testOnBorrow} configuration attribute for pools created with this configuration instance.
    584     *
    585     * @return The current setting of {@code testOnBorrow} for this configuration instance
    586     * @see GenericObjectPool#getTestOnBorrow()
    587     * @see GenericKeyedObjectPool#getTestOnBorrow()
    588     */
    589    public boolean getTestOnBorrow() {
    590        return testOnBorrow;
    591    }
    592
    593    /**
    594     * Gets the value for the {@code testOnCreate} configuration attribute for pools created with this configuration instance.
    595     *
    596     * @return The current setting of {@code testOnCreate} for this configuration instance
    597     * @see GenericObjectPool#getTestOnCreate()
    598     * @see GenericKeyedObjectPool#getTestOnCreate()
    599     * @since 2.2
    600     */
    601    public boolean getTestOnCreate() {
    602        return testOnCreate;
    603    }
    604
    605    /**
    606     * Gets the value for the {@code testOnReturn} configuration attribute for pools created with this configuration instance.
    607     *
    608     * @return The current setting of {@code testOnReturn} for this configuration instance
    609     * @see GenericObjectPool#getTestOnReturn()
    610     * @see GenericKeyedObjectPool#getTestOnReturn()
    611     */
    612    public boolean getTestOnReturn() {
    613        return testOnReturn;
    614    }
    615
    616    /**
    617     * Gets the value for the {@code testWhileIdle} configuration attribute for pools created with this configuration instance.
    618     *
    619     * @return The current setting of {@code testWhileIdle} for this configuration instance
    620     * @see GenericObjectPool#getTestWhileIdle()
    621     * @see GenericKeyedObjectPool#getTestWhileIdle()
    622     */
    623    public boolean getTestWhileIdle() {
    624        return testWhileIdle;
    625    }
    626
    627    /**
    628     * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    629     *
    630     * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
    631     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    632     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    633     * @since 2.10.0
    634     * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
    635     */
    636    @Deprecated
    637    public Duration getTimeBetweenEvictionRuns() {
    638        return durationBetweenEvictionRuns;
    639    }
    640
    641    /**
    642     * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    643     *
    644     * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
    645     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    646     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    647     * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
    648     */
    649    @Deprecated
    650    public long getTimeBetweenEvictionRunsMillis() {
    651        return durationBetweenEvictionRuns.toMillis();
    652    }
    653
    654    /**
    655     * Sets the value for the {@code blockWhenExhausted} configuration attribute for pools created with this configuration instance.
    656     *
    657     * @param blockWhenExhausted The new setting of {@code blockWhenExhausted} for this configuration instance
    658     * @see GenericObjectPool#getBlockWhenExhausted()
    659     * @see GenericKeyedObjectPool#getBlockWhenExhausted()
    660     */
    661    public void setBlockWhenExhausted(final boolean blockWhenExhausted) {
    662        this.blockWhenExhausted = blockWhenExhausted;
    663    }
    664
    665    /**
    666     * Sets the value for the {@code collectDetailedStatistics} configuration attribute
    667     * for pools created with this configuration instance. When {@code false}, the pool
    668     * will not collect detailed timing statistics, improving performance under high load
    669     * at the cost of reduced monitoring capabilities.
    670     * <p>
    671     * This setting affects data collection for mean active time, mean idle time, and mean borrow wait time.
    672     * </p>
    673     *
    674     * @param collectDetailedStatistics The new setting of {@code collectDetailedStatistics}
    675     *        for this configuration instance.
    676     * @see GenericObjectPool#getCollectDetailedStatistics()
    677     * @see GenericKeyedObjectPool#getCollectDetailedStatistics()
    678     * @since 2.13.0
    679     */
    680    public void setCollectDetailedStatistics(final boolean collectDetailedStatistics) {
    681        this.collectDetailedStatistics = collectDetailedStatistics;
    682    }
    683
    684    /**
    685     * Sets the value for the {@code evictionPolicyClass} configuration attribute for pools created with this configuration instance.
    686     *
    687     * @param evictionPolicy The new setting of {@code evictionPolicyClass} for this configuration instance
    688     * @see GenericObjectPool#getEvictionPolicy()
    689     * @see GenericKeyedObjectPool#getEvictionPolicy()
    690     * @since 2.6.0
    691     */
    692    public void setEvictionPolicy(final EvictionPolicy<T> evictionPolicy) {
    693        this.evictionPolicy = evictionPolicy;
    694    }
    695
    696    /**
    697     * Sets the value for the {@code evictionPolicyClassName} configuration attribute for pools created with this configuration instance.
    698     *
    699     * @param evictionPolicyClassName The new setting of {@code evictionPolicyClassName} for this configuration instance
    700     * @see GenericObjectPool#getEvictionPolicyClassName()
    701     * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
    702     */
    703    public void setEvictionPolicyClassName(final String evictionPolicyClassName) {
    704        this.evictionPolicyClassName = evictionPolicyClassName;
    705    }
    706
    707    /**
    708     * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    709     *
    710     * @param evictorShutdownTimeoutDuration The new setting of {@code evictorShutdownTimeout} for this configuration instance
    711     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    712     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    713     * @since 2.11.0
    714     */
    715    public void setEvictorShutdownTimeout(final Duration evictorShutdownTimeoutDuration) {
    716        this.evictorShutdownTimeoutDuration = PoolImplUtils.nonNull(evictorShutdownTimeoutDuration, DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT);
    717    }
    718
    719    /**
    720     * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    721     *
    722     * @param evictorShutdownTimeout The new setting of {@code evictorShutdownTimeout} for this configuration instance
    723     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    724     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    725     * @since 2.10.0
    726     * @deprecated Use {@link #setEvictorShutdownTimeout(Duration)}.
    727     */
    728    @Deprecated
    729    public void setEvictorShutdownTimeoutMillis(final Duration evictorShutdownTimeout) {
    730        setEvictorShutdownTimeout(evictorShutdownTimeout);
    731    }
    732
    733    /**
    734     * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    735     *
    736     * @param evictorShutdownTimeoutMillis The new setting of {@code evictorShutdownTimeout} for this configuration instance
    737     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    738     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    739     * @deprecated Use {@link #setEvictorShutdownTimeout(Duration)}.
    740     */
    741    @Deprecated
    742    public void setEvictorShutdownTimeoutMillis(final long evictorShutdownTimeoutMillis) {
    743        setEvictorShutdownTimeout(Duration.ofMillis(evictorShutdownTimeoutMillis));
    744    }
    745
    746    /**
    747     * Sets the value for the {@code fairness} configuration attribute for pools created with this configuration instance.
    748     *
    749     * @param fairness The new setting of {@code fairness} for this configuration instance
    750     * @see GenericObjectPool#getFairness()
    751     * @see GenericKeyedObjectPool#getFairness()
    752     */
    753    public void setFairness(final boolean fairness) {
    754        this.fairness = fairness;
    755    }
    756
    757    /**
    758     * Sets the value of the flag that determines if JMX will be enabled for pools created with this configuration instance.
    759     *
    760     * @param jmxEnabled The new setting of {@code jmxEnabled} for this configuration instance
    761     */
    762    public void setJmxEnabled(final boolean jmxEnabled) {
    763        this.jmxEnabled = jmxEnabled;
    764    }
    765
    766    /**
    767     * Sets the value of the JMX name base that will be used as part of the name assigned to JMX enabled pools created with this configuration instance. A value
    768     * of {@code null} means that the pool will define the JMX name base.
    769     *
    770     * @param jmxNameBase The new setting of {@code jmxNameBase} for this configuration instance
    771     */
    772    public void setJmxNameBase(final String jmxNameBase) {
    773        this.jmxNameBase = jmxNameBase;
    774    }
    775
    776    /**
    777     * Sets the value of the JMX name prefix that will be used as part of the name assigned to JMX enabled pools created with this configuration instance.
    778     *
    779     * @param jmxNamePrefix The new setting of {@code jmxNamePrefix} for this configuration instance
    780     */
    781    public void setJmxNamePrefix(final String jmxNamePrefix) {
    782        this.jmxNamePrefix = jmxNamePrefix;
    783    }
    784
    785    /**
    786     * Sets the value for the {@code lifo} configuration attribute for pools created with this configuration instance.
    787     *
    788     * @param lifo The new setting of {@code lifo} for this configuration instance
    789     * @see GenericObjectPool#getLifo()
    790     * @see GenericKeyedObjectPool#getLifo()
    791     */
    792    public void setLifo(final boolean lifo) {
    793        this.lifo = lifo;
    794    }
    795
    796    /**
    797     * Sets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    798     *
    799     * @param maxWaitDuration The new setting of {@code maxWaitDuration} for this configuration instance
    800     * @see GenericObjectPool#getMaxWaitDuration()
    801     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    802     * @since 2.11.0
    803     */
    804    public void setMaxWait(final Duration maxWaitDuration) {
    805        this.maxWaitDuration = PoolImplUtils.nonNull(maxWaitDuration, DEFAULT_MAX_WAIT);
    806    }
    807
    808    /**
    809     * Sets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    810     *
    811     * @param maxWaitMillis The new setting of {@code maxWaitMillis} for this configuration instance
    812     * @see GenericObjectPool#getMaxWaitDuration()
    813     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    814     * @deprecated Use {@link #setMaxWait(Duration)}.
    815     */
    816    @Deprecated
    817    public void setMaxWaitMillis(final long maxWaitMillis) {
    818        setMaxWait(Duration.ofMillis(maxWaitMillis));
    819    }
    820
    821    /**
    822     * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    823     *
    824     * @param minEvictableIdleTime The new setting of {@code minEvictableIdleTime} for this configuration instance
    825     * @see GenericObjectPool#getMinEvictableIdleDuration()
    826     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    827     * @since 2.12.0
    828     */
    829    public void setMinEvictableIdleDuration(final Duration minEvictableIdleTime) {
    830        this.minEvictableIdleDuration = PoolImplUtils.nonNull(minEvictableIdleTime, DEFAULT_MIN_EVICTABLE_IDLE_TIME);
    831    }
    832
    833    /**
    834     * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    835     *
    836     * @param minEvictableIdleTime The new setting of {@code minEvictableIdleTime} for this configuration instance
    837     * @see GenericObjectPool#getMinEvictableIdleDuration()
    838     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    839     * @since 2.10.0
    840     * @deprecated Use {@link #setMinEvictableIdleDuration(Duration)}.
    841     */
    842    @Deprecated
    843    public void setMinEvictableIdleTime(final Duration minEvictableIdleTime) {
    844        this.minEvictableIdleDuration = PoolImplUtils.nonNull(minEvictableIdleTime, DEFAULT_MIN_EVICTABLE_IDLE_TIME);
    845    }
    846
    847    /**
    848     * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    849     *
    850     * @param minEvictableIdleTimeMillis The new setting of {@code minEvictableIdleTime} for this configuration instance
    851     * @see GenericObjectPool#getMinEvictableIdleDuration()
    852     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    853     * @deprecated Use {@link #setMinEvictableIdleDuration(Duration)}.
    854     */
    855    @Deprecated
    856    public void setMinEvictableIdleTimeMillis(final long minEvictableIdleTimeMillis) {
    857        this.minEvictableIdleDuration = Duration.ofMillis(minEvictableIdleTimeMillis);
    858    }
    859
    860    /**
    861     * Sets the value for the {@code numTestsPerEvictionRun} configuration attribute for pools created with this configuration instance.
    862     *
    863     * @param numTestsPerEvictionRun The new setting of {@code numTestsPerEvictionRun} for this configuration instance
    864     * @see GenericObjectPool#getNumTestsPerEvictionRun()
    865     * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
    866     */
    867    public void setNumTestsPerEvictionRun(final int numTestsPerEvictionRun) {
    868        this.numTestsPerEvictionRun = numTestsPerEvictionRun;
    869    }
    870
    871    /**
    872     * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    873     *
    874     * @param softMinEvictableIdleTime The new setting of {@code softMinEvictableIdleTime} for this configuration instance
    875     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    876     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    877     * @since 2.12.0
    878     */
    879    public void setSoftMinEvictableIdleDuration(final Duration softMinEvictableIdleTime) {
    880        this.softMinEvictableIdleDuration = PoolImplUtils.nonNull(softMinEvictableIdleTime, DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME);
    881    }
    882
    883    /**
    884     * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    885     *
    886     * @param softMinEvictableIdleTime The new setting of {@code softMinEvictableIdleTime} for this configuration instance
    887     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    888     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    889     * @since 2.10.0
    890     * @deprecated Use {@link #setSoftMinEvictableIdleDuration(Duration)}.
    891     */
    892    @Deprecated
    893    public void setSoftMinEvictableIdleTime(final Duration softMinEvictableIdleTime) {
    894        this.softMinEvictableIdleDuration = PoolImplUtils.nonNull(softMinEvictableIdleTime, DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME);
    895    }
    896
    897    /**
    898     * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    899     *
    900     * @param softMinEvictableIdleTimeMillis The new setting of {@code softMinEvictableIdleTime} for this configuration instance
    901     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    902     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    903     * @deprecated Use {@link #setSoftMinEvictableIdleDuration(Duration)}.
    904     */
    905    @Deprecated
    906    public void setSoftMinEvictableIdleTimeMillis(final long softMinEvictableIdleTimeMillis) {
    907        setSoftMinEvictableIdleTime(Duration.ofMillis(softMinEvictableIdleTimeMillis));
    908    }
    909
    910    /**
    911     * Sets the value for the {@code testOnBorrow} configuration attribute for pools created with this configuration instance.
    912     *
    913     * @param testOnBorrow The new setting of {@code testOnBorrow} for this configuration instance
    914     * @see GenericObjectPool#getTestOnBorrow()
    915     * @see GenericKeyedObjectPool#getTestOnBorrow()
    916     */
    917    public void setTestOnBorrow(final boolean testOnBorrow) {
    918        this.testOnBorrow = testOnBorrow;
    919    }
    920
    921    /**
    922     * Sets the value for the {@code testOnCreate} configuration attribute for pools created with this configuration instance.
    923     *
    924     * @param testOnCreate The new setting of {@code testOnCreate} for this configuration instance
    925     * @see GenericObjectPool#getTestOnCreate()
    926     * @see GenericKeyedObjectPool#getTestOnCreate()
    927     * @since 2.2
    928     */
    929    public void setTestOnCreate(final boolean testOnCreate) {
    930        this.testOnCreate = testOnCreate;
    931    }
    932
    933    /**
    934     * Sets the value for the {@code testOnReturn} configuration attribute for pools created with this configuration instance.
    935     *
    936     * @param testOnReturn The new setting of {@code testOnReturn} for this configuration instance
    937     * @see GenericObjectPool#getTestOnReturn()
    938     * @see GenericKeyedObjectPool#getTestOnReturn()
    939     */
    940    public void setTestOnReturn(final boolean testOnReturn) {
    941        this.testOnReturn = testOnReturn;
    942    }
    943
    944    /**
    945     * Sets the value for the {@code testWhileIdle} configuration attribute for pools created with this configuration instance.
    946     *
    947     * @param testWhileIdle The new setting of {@code testWhileIdle} for this configuration instance
    948     * @see GenericObjectPool#getTestWhileIdle()
    949     * @see GenericKeyedObjectPool#getTestWhileIdle()
    950     */
    951    public void setTestWhileIdle(final boolean testWhileIdle) {
    952        this.testWhileIdle = testWhileIdle;
    953    }
    954
    955    /**
    956     * Sets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    957     *
    958     * @param timeBetweenEvictionRuns The new setting of {@code timeBetweenEvictionRuns} for this configuration instance
    959     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    960     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    961     * @since 2.10.0
    962     */
    963    public void setTimeBetweenEvictionRuns(final Duration timeBetweenEvictionRuns) {
    964        this.durationBetweenEvictionRuns = PoolImplUtils.nonNull(timeBetweenEvictionRuns, DEFAULT_DURATION_BETWEEN_EVICTION_RUNS);
    965    }
    966
    967    /**
    968     * Sets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    969     *
    970     * @param timeBetweenEvictionRunsMillis The new setting of {@code timeBetweenEvictionRuns} for this configuration instance
    971     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    972     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    973     * @deprecated Use {@link #setTimeBetweenEvictionRuns(Duration)}.
    974     */
    975    @Deprecated
    976    public void setTimeBetweenEvictionRunsMillis(final long timeBetweenEvictionRunsMillis) {
    977        setTimeBetweenEvictionRuns(Duration.ofMillis(timeBetweenEvictionRunsMillis));
    978    }
    979
    980    @Override
    981    protected void toStringAppendFields(final StringBuilder builder) {
    982        builder.append("lifo=");
    983        builder.append(lifo);
    984        builder.append(", fairness=");
    985        builder.append(fairness);
    986        builder.append(", maxWaitDuration=");
    987        builder.append(maxWaitDuration);
    988        builder.append(", minEvictableIdleTime=");
    989        builder.append(minEvictableIdleDuration);
    990        builder.append(", softMinEvictableIdleTime=");
    991        builder.append(softMinEvictableIdleDuration);
    992        builder.append(", numTestsPerEvictionRun=");
    993        builder.append(numTestsPerEvictionRun);
    994        builder.append(", evictionPolicyClassName=");
    995        builder.append(evictionPolicyClassName);
    996        builder.append(", testOnCreate=");
    997        builder.append(testOnCreate);
    998        builder.append(", testOnBorrow=");
    999        builder.append(testOnBorrow);
    1000        builder.append(", testOnReturn=");
    1001        builder.append(testOnReturn);
    1002        builder.append(", testWhileIdle=");
    1003        builder.append(testWhileIdle);
    1004        builder.append(", timeBetweenEvictionRuns=");
    1005        builder.append(durationBetweenEvictionRuns);
    1006        builder.append(", blockWhenExhausted=");
    1007        builder.append(blockWhenExhausted);
    1008        builder.append(", jmxEnabled=");
    1009        builder.append(jmxEnabled);
    1010        builder.append(", jmxNamePrefix=");
    1011        builder.append(jmxNamePrefix);
    1012        builder.append(", jmxNameBase=");
    1013        builder.append(jmxNameBase);
    1014        builder.append(", collectDetailedStatistics=");
    1015        builder.append(collectDetailedStatistics);
    1016    }
    1017}