    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 *      http://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    private boolean lifo = DEFAULT_LIFO;
    258
    259    private boolean fairness = DEFAULT_FAIRNESS;
    260
    261    private Duration maxWaitDuration = DEFAULT_MAX_WAIT;
    262
    263    private Duration minEvictableIdleDuration = DEFAULT_MIN_EVICTABLE_IDLE_TIME;
    264
    265    private Duration evictorShutdownTimeoutDuration = DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT;
    266
    267    private Duration softMinEvictableIdleDuration = DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME;
    268
    269    private int numTestsPerEvictionRun = DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
    270
    271    private EvictionPolicy<T> evictionPolicy; // Only 2.6.0 applications set this
    272
    273    private String evictionPolicyClassName = DEFAULT_EVICTION_POLICY_CLASS_NAME;
    274
    275    private boolean testOnCreate = DEFAULT_TEST_ON_CREATE;
    276
    277    private boolean testOnBorrow = DEFAULT_TEST_ON_BORROW;
    278
    279    private boolean testOnReturn = DEFAULT_TEST_ON_RETURN;
    280
    281    private boolean testWhileIdle = DEFAULT_TEST_WHILE_IDLE;
    282
    283    private Duration durationBetweenEvictionRuns = DEFAULT_DURATION_BETWEEN_EVICTION_RUNS;
    284
    285    private boolean blockWhenExhausted = DEFAULT_BLOCK_WHEN_EXHAUSTED;
    286
    287    private boolean jmxEnabled = DEFAULT_JMX_ENABLE;
    288
    289    // TODO Consider changing this to a single property for 3.x
    290    private String jmxNamePrefix = DEFAULT_JMX_NAME_PREFIX;
    291
    292    private String jmxNameBase = DEFAULT_JMX_NAME_BASE;
    293
    294    /**
    295     * Gets the value for the {@code blockWhenExhausted} configuration attribute for pools created with this configuration instance.
    296     *
    297     * @return The current setting of {@code blockWhenExhausted} for this configuration instance
    298     * @see GenericObjectPool#getBlockWhenExhausted()
    299     * @see GenericKeyedObjectPool#getBlockWhenExhausted()
    300     */
    301    public boolean getBlockWhenExhausted() {
    302        return blockWhenExhausted;
    303    }
    304
    305    /**
    306     * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    307     *
    308     * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
    309     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    310     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    311     * @since 2.11.0
    312     */
    313    public Duration getDurationBetweenEvictionRuns() {
    314        return durationBetweenEvictionRuns;
    315    }
    316
    317    /**
    318     * Gets the value for the {@code evictionPolicyClass} configuration attribute for pools created with this configuration instance.
    319     *
    320     * @return The current setting of {@code evictionPolicyClass} for this configuration instance
    321     * @see GenericObjectPool#getEvictionPolicy()
    322     * @see GenericKeyedObjectPool#getEvictionPolicy()
    323     * @since 2.6.0
    324     */
    325    public EvictionPolicy<T> getEvictionPolicy() {
    326        return evictionPolicy;
    327    }
    328
    329    /**
    330     * Gets the value for the {@code evictionPolicyClassName} configuration attribute for pools created with this configuration instance.
    331     *
    332     * @return The current setting of {@code evictionPolicyClassName} for this configuration instance
    333     * @see GenericObjectPool#getEvictionPolicyClassName()
    334     * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
    335     */
    336    public String getEvictionPolicyClassName() {
    337        return evictionPolicyClassName;
    338    }
    339
    340    /**
    341     * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    342     *
    343     * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
    344     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    345     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    346     * @since 2.10.0
    347     * @deprecated Use {@link #getEvictorShutdownTimeoutDuration()}.
    348     */
    349    @Deprecated
    350    public Duration getEvictorShutdownTimeout() {
    351        return evictorShutdownTimeoutDuration;
    352    }
    353
    354    /**
    355     * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    356     *
    357     * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
    358     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    359     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    360     * @since 2.11.0
    361     */
    362    public Duration getEvictorShutdownTimeoutDuration() {
    363        return evictorShutdownTimeoutDuration;
    364    }
    365
    366    /**
    367     * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    368     *
    369     * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
    370     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    371     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    372     * @deprecated Use {@link #getEvictorShutdownTimeout()}.
    373     */
    374    @Deprecated
    375    public long getEvictorShutdownTimeoutMillis() {
    376        return evictorShutdownTimeoutDuration.toMillis();
    377    }
    378
    379    /**
    380     * Gets the value for the {@code fairness} configuration attribute for pools created with this configuration instance.
    381     *
    382     * @return The current setting of {@code fairness} for this configuration instance
    383     * @see GenericObjectPool#getFairness()
    384     * @see GenericKeyedObjectPool#getFairness()
    385     */
    386    public boolean getFairness() {
    387        return fairness;
    388    }
    389
    390    /**
    391     * Gets the value of the flag that determines if JMX will be enabled for pools created with this configuration instance.
    392     *
    393     * @return The current setting of {@code jmxEnabled} for this configuration instance
    394     */
    395    public boolean getJmxEnabled() {
    396        return jmxEnabled;
    397    }
    398
    399    /**
    400     * 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
    401     * of {@code null} means that the pool will define the JMX name base.
    402     *
    403     * @return The current setting of {@code jmxNameBase} for this configuration instance
    404     */
    405    public String getJmxNameBase() {
    406        return jmxNameBase;
    407    }
    408
    409    /**
    410     * 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.
    411     *
    412     * @return The current setting of {@code jmxNamePrefix} for this configuration instance
    413     */
    414    public String getJmxNamePrefix() {
    415        return jmxNamePrefix;
    416    }
    417
    418    /**
    419     * Gets the value for the {@code lifo} configuration attribute for pools created with this configuration instance.
    420     *
    421     * @return The current setting of {@code lifo} for this configuration instance
    422     * @see GenericObjectPool#getLifo()
    423     * @see GenericKeyedObjectPool#getLifo()
    424     */
    425    public boolean getLifo() {
    426        return lifo;
    427    }
    428
    429    /**
    430     * Gets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    431     *
    432     * @return The current setting of {@code maxWait} for this configuration instance
    433     * @see GenericObjectPool#getMaxWaitDuration()
    434     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    435     * @since 2.11.0
    436     */
    437    public Duration getMaxWaitDuration() {
    438        return maxWaitDuration;
    439    }
    440
    441    /**
    442     * Gets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    443     *
    444     * @return The current setting of {@code maxWait} for this configuration instance
    445     * @see GenericObjectPool#getMaxWaitDuration()
    446     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    447     * @deprecated Use {@link #getMaxWaitDuration()}.
    448     */
    449    @Deprecated
    450    public long getMaxWaitMillis() {
    451        return maxWaitDuration.toMillis();
    452    }
    453
    454    /**
    455     * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    456     *
    457     * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
    458     * @see GenericObjectPool#getMinEvictableIdleDuration()
    459     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    460     * @since 2.11.0
    461     */
    462    public Duration getMinEvictableIdleDuration() {
    463        return minEvictableIdleDuration;
    464    }
    465
    466    /**
    467     * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    468     *
    469     * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
    470     * @see GenericObjectPool#getMinEvictableIdleDuration()
    471     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    472     * @since 2.10.0
    473     * @deprecated Use {@link #getMinEvictableIdleDuration()}.
    474     */
    475    @Deprecated
    476    public Duration getMinEvictableIdleTime() {
    477        return minEvictableIdleDuration;
    478    }
    479
    480    /**
    481     * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    482     *
    483     * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
    484     * @see GenericObjectPool#getMinEvictableIdleDuration()
    485     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    486     * @deprecated Use {@link #getMinEvictableIdleTime()}.
    487     */
    488    @Deprecated
    489    public long getMinEvictableIdleTimeMillis() {
    490        return minEvictableIdleDuration.toMillis();
    491    }
    492
    493    /**
    494     * Gets the value for the {@code numTestsPerEvictionRun} configuration attribute for pools created with this configuration instance.
    495     *
    496     * @return The current setting of {@code numTestsPerEvictionRun} for this configuration instance
    497     * @see GenericObjectPool#getNumTestsPerEvictionRun()
    498     * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
    499     */
    500    public int getNumTestsPerEvictionRun() {
    501        return numTestsPerEvictionRun;
    502    }
    503
    504    /**
    505     * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    506     *
    507     * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
    508     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    509     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    510     * @since 2.11.0
    511     */
    512    public Duration getSoftMinEvictableIdleDuration() {
    513        return softMinEvictableIdleDuration;
    514    }
    515
    516    /**
    517     * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    518     *
    519     * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
    520     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    521     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    522     * @since 2.10.0
    523     * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
    524     */
    525    @Deprecated
    526    public Duration getSoftMinEvictableIdleTime() {
    527        return softMinEvictableIdleDuration;
    528    }
    529
    530    /**
    531     * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    532     *
    533     * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
    534     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    535     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    536     * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
    537     */
    538    @Deprecated
    539    public long getSoftMinEvictableIdleTimeMillis() {
    540        return softMinEvictableIdleDuration.toMillis();
    541    }
    542
    543    /**
    544     * Gets the value for the {@code testOnBorrow} configuration attribute for pools created with this configuration instance.
    545     *
    546     * @return The current setting of {@code testOnBorrow} for this configuration instance
    547     * @see GenericObjectPool#getTestOnBorrow()
    548     * @see GenericKeyedObjectPool#getTestOnBorrow()
    549     */
    550    public boolean getTestOnBorrow() {
    551        return testOnBorrow;
    552    }
    553
    554    /**
    555     * Gets the value for the {@code testOnCreate} configuration attribute for pools created with this configuration instance.
    556     *
    557     * @return The current setting of {@code testOnCreate} for this configuration instance
    558     * @see GenericObjectPool#getTestOnCreate()
    559     * @see GenericKeyedObjectPool#getTestOnCreate()
    560     * @since 2.2
    561     */
    562    public boolean getTestOnCreate() {
    563        return testOnCreate;
    564    }
    565
    566    /**
    567     * Gets the value for the {@code testOnReturn} configuration attribute for pools created with this configuration instance.
    568     *
    569     * @return The current setting of {@code testOnReturn} for this configuration instance
    570     * @see GenericObjectPool#getTestOnReturn()
    571     * @see GenericKeyedObjectPool#getTestOnReturn()
    572     */
    573    public boolean getTestOnReturn() {
    574        return testOnReturn;
    575    }
    576
    577    /**
    578     * Gets the value for the {@code testWhileIdle} configuration attribute for pools created with this configuration instance.
    579     *
    580     * @return The current setting of {@code testWhileIdle} for this configuration instance
    581     * @see GenericObjectPool#getTestWhileIdle()
    582     * @see GenericKeyedObjectPool#getTestWhileIdle()
    583     */
    584    public boolean getTestWhileIdle() {
    585        return testWhileIdle;
    586    }
    587
    588    /**
    589     * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    590     *
    591     * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
    592     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    593     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    594     * @since 2.10.0
    595     * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
    596     */
    597    @Deprecated
    598    public Duration getTimeBetweenEvictionRuns() {
    599        return durationBetweenEvictionRuns;
    600    }
    601
    602    /**
    603     * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    604     *
    605     * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
    606     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    607     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    608     * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
    609     */
    610    @Deprecated
    611    public long getTimeBetweenEvictionRunsMillis() {
    612        return durationBetweenEvictionRuns.toMillis();
    613    }
    614
    615    /**
    616     * Sets the value for the {@code blockWhenExhausted} configuration attribute for pools created with this configuration instance.
    617     *
    618     * @param blockWhenExhausted The new setting of {@code blockWhenExhausted} for this configuration instance
    619     * @see GenericObjectPool#getBlockWhenExhausted()
    620     * @see GenericKeyedObjectPool#getBlockWhenExhausted()
    621     */
    622    public void setBlockWhenExhausted(final boolean blockWhenExhausted) {
    623        this.blockWhenExhausted = blockWhenExhausted;
    624    }
    625
    626    /**
    627     * Sets the value for the {@code evictionPolicyClass} configuration attribute for pools created with this configuration instance.
    628     *
    629     * @param evictionPolicy The new setting of {@code evictionPolicyClass} for this configuration instance
    630     * @see GenericObjectPool#getEvictionPolicy()
    631     * @see GenericKeyedObjectPool#getEvictionPolicy()
    632     * @since 2.6.0
    633     */
    634    public void setEvictionPolicy(final EvictionPolicy<T> evictionPolicy) {
    635        this.evictionPolicy = evictionPolicy;
    636    }
    637
    638    /**
    639     * Sets the value for the {@code evictionPolicyClassName} configuration attribute for pools created with this configuration instance.
    640     *
    641     * @param evictionPolicyClassName The new setting of {@code evictionPolicyClassName} for this configuration instance
    642     * @see GenericObjectPool#getEvictionPolicyClassName()
    643     * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
    644     */
    645    public void setEvictionPolicyClassName(final String evictionPolicyClassName) {
    646        this.evictionPolicyClassName = evictionPolicyClassName;
    647    }
    648
    649    /**
    650     * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    651     *
    652     * @param evictorShutdownTimeoutDuration The new setting of {@code evictorShutdownTimeout} for this configuration instance
    653     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    654     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    655     * @since 2.11.0
    656     */
    657    public void setEvictorShutdownTimeout(final Duration evictorShutdownTimeoutDuration) {
    658        this.evictorShutdownTimeoutDuration = PoolImplUtils.nonNull(evictorShutdownTimeoutDuration, DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT);
    659    }
    660
    661    /**
    662     * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    663     *
    664     * @param evictorShutdownTimeout The new setting of {@code evictorShutdownTimeout} for this configuration instance
    665     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    666     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    667     * @since 2.10.0
    668     * @deprecated Use {@link #setEvictorShutdownTimeout(Duration)}.
    669     */
    670    @Deprecated
    671    public void setEvictorShutdownTimeoutMillis(final Duration evictorShutdownTimeout) {
    672        setEvictorShutdownTimeout(evictorShutdownTimeout);
    673    }
    674
    675    /**
    676     * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
    677     *
    678     * @param evictorShutdownTimeoutMillis The new setting of {@code evictorShutdownTimeout} for this configuration instance
    679     * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
    680     * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
    681     * @deprecated Use {@link #setEvictorShutdownTimeout(Duration)}.
    682     */
    683    @Deprecated
    684    public void setEvictorShutdownTimeoutMillis(final long evictorShutdownTimeoutMillis) {
    685        setEvictorShutdownTimeout(Duration.ofMillis(evictorShutdownTimeoutMillis));
    686    }
    687
    688    /**
    689     * Sets the value for the {@code fairness} configuration attribute for pools created with this configuration instance.
    690     *
    691     * @param fairness The new setting of {@code fairness} for this configuration instance
    692     * @see GenericObjectPool#getFairness()
    693     * @see GenericKeyedObjectPool#getFairness()
    694     */
    695    public void setFairness(final boolean fairness) {
    696        this.fairness = fairness;
    697    }
    698
    699    /**
    700     * Sets the value of the flag that determines if JMX will be enabled for pools created with this configuration instance.
    701     *
    702     * @param jmxEnabled The new setting of {@code jmxEnabled} for this configuration instance
    703     */
    704    public void setJmxEnabled(final boolean jmxEnabled) {
    705        this.jmxEnabled = jmxEnabled;
    706    }
    707
    708    /**
    709     * 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
    710     * of {@code null} means that the pool will define the JMX name base.
    711     *
    712     * @param jmxNameBase The new setting of {@code jmxNameBase} for this configuration instance
    713     */
    714    public void setJmxNameBase(final String jmxNameBase) {
    715        this.jmxNameBase = jmxNameBase;
    716    }
    717
    718    /**
    719     * 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.
    720     *
    721     * @param jmxNamePrefix The new setting of {@code jmxNamePrefix} for this configuration instance
    722     */
    723    public void setJmxNamePrefix(final String jmxNamePrefix) {
    724        this.jmxNamePrefix = jmxNamePrefix;
    725    }
    726
    727    /**
    728     * Sets the value for the {@code lifo} configuration attribute for pools created with this configuration instance.
    729     *
    730     * @param lifo The new setting of {@code lifo} for this configuration instance
    731     * @see GenericObjectPool#getLifo()
    732     * @see GenericKeyedObjectPool#getLifo()
    733     */
    734    public void setLifo(final boolean lifo) {
    735        this.lifo = lifo;
    736    }
    737
    738    /**
    739     * Sets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    740     *
    741     * @param maxWaitDuration The new setting of {@code maxWaitDuration} for this configuration instance
    742     * @see GenericObjectPool#getMaxWaitDuration()
    743     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    744     * @since 2.11.0
    745     */
    746    public void setMaxWait(final Duration maxWaitDuration) {
    747        this.maxWaitDuration = PoolImplUtils.nonNull(maxWaitDuration, DEFAULT_MAX_WAIT);
    748    }
    749
    750    /**
    751     * Sets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
    752     *
    753     * @param maxWaitMillis The new setting of {@code maxWaitMillis} for this configuration instance
    754     * @see GenericObjectPool#getMaxWaitDuration()
    755     * @see GenericKeyedObjectPool#getMaxWaitDuration()
    756     * @deprecated Use {@link #setMaxWait(Duration)}.
    757     */
    758    @Deprecated
    759    public void setMaxWaitMillis(final long maxWaitMillis) {
    760        setMaxWait(Duration.ofMillis(maxWaitMillis));
    761    }
    762
    763    /**
    764     * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    765     *
    766     * @param minEvictableIdleTime The new setting of {@code minEvictableIdleTime} for this configuration instance
    767     * @see GenericObjectPool#getMinEvictableIdleDuration()
    768     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    769     * @since 2.12.0
    770     */
    771    public void setMinEvictableIdleDuration(final Duration minEvictableIdleTime) {
    772        this.minEvictableIdleDuration = PoolImplUtils.nonNull(minEvictableIdleTime, DEFAULT_MIN_EVICTABLE_IDLE_TIME);
    773    }
    774
    775    /**
    776     * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    777     *
    778     * @param minEvictableIdleTime The new setting of {@code minEvictableIdleTime} for this configuration instance
    779     * @see GenericObjectPool#getMinEvictableIdleDuration()
    780     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    781     * @since 2.10.0
    782     * @deprecated Use {@link #setMinEvictableIdleDuration(Duration)}.
    783     */
    784    @Deprecated
    785    public void setMinEvictableIdleTime(final Duration minEvictableIdleTime) {
    786        this.minEvictableIdleDuration = PoolImplUtils.nonNull(minEvictableIdleTime, DEFAULT_MIN_EVICTABLE_IDLE_TIME);
    787    }
    788
    789    /**
    790     * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    791     *
    792     * @param minEvictableIdleTimeMillis The new setting of {@code minEvictableIdleTime} for this configuration instance
    793     * @see GenericObjectPool#getMinEvictableIdleDuration()
    794     * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
    795     * @deprecated Use {@link #setMinEvictableIdleDuration(Duration)}.
    796     */
    797    @Deprecated
    798    public void setMinEvictableIdleTimeMillis(final long minEvictableIdleTimeMillis) {
    799        this.minEvictableIdleDuration = Duration.ofMillis(minEvictableIdleTimeMillis);
    800    }
    801
    802    /**
    803     * Sets the value for the {@code numTestsPerEvictionRun} configuration attribute for pools created with this configuration instance.
    804     *
    805     * @param numTestsPerEvictionRun The new setting of {@code numTestsPerEvictionRun} for this configuration instance
    806     * @see GenericObjectPool#getNumTestsPerEvictionRun()
    807     * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
    808     */
    809    public void setNumTestsPerEvictionRun(final int numTestsPerEvictionRun) {
    810        this.numTestsPerEvictionRun = numTestsPerEvictionRun;
    811    }
    812
    813    /**
    814     * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    815     *
    816     * @param softMinEvictableIdleTime The new setting of {@code softMinEvictableIdleTime} for this configuration instance
    817     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    818     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    819     * @since 2.12.0
    820     */
    821    public void setSoftMinEvictableIdleDuration(final Duration softMinEvictableIdleTime) {
    822        this.softMinEvictableIdleDuration = PoolImplUtils.nonNull(softMinEvictableIdleTime, DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME);
    823    }
    824
    825    /**
    826     * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    827     *
    828     * @param softMinEvictableIdleTime The new setting of {@code softMinEvictableIdleTime} for this configuration instance
    829     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    830     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    831     * @since 2.10.0
    832     * @deprecated Use {@link #setSoftMinEvictableIdleDuration(Duration)}.
    833     */
    834    @Deprecated
    835    public void setSoftMinEvictableIdleTime(final Duration softMinEvictableIdleTime) {
    836        this.softMinEvictableIdleDuration = PoolImplUtils.nonNull(softMinEvictableIdleTime, DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME);
    837    }
    838
    839    /**
    840     * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
    841     *
    842     * @param softMinEvictableIdleTimeMillis The new setting of {@code softMinEvictableIdleTime} for this configuration instance
    843     * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
    844     * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
    845     * @deprecated Use {@link #setSoftMinEvictableIdleDuration(Duration)}.
    846     */
    847    @Deprecated
    848    public void setSoftMinEvictableIdleTimeMillis(final long softMinEvictableIdleTimeMillis) {
    849        setSoftMinEvictableIdleTime(Duration.ofMillis(softMinEvictableIdleTimeMillis));
    850    }
    851
    852    /**
    853     * Sets the value for the {@code testOnBorrow} configuration attribute for pools created with this configuration instance.
    854     *
    855     * @param testOnBorrow The new setting of {@code testOnBorrow} for this configuration instance
    856     * @see GenericObjectPool#getTestOnBorrow()
    857     * @see GenericKeyedObjectPool#getTestOnBorrow()
    858     */
    859    public void setTestOnBorrow(final boolean testOnBorrow) {
    860        this.testOnBorrow = testOnBorrow;
    861    }
    862
    863    /**
    864     * Sets the value for the {@code testOnCreate} configuration attribute for pools created with this configuration instance.
    865     *
    866     * @param testOnCreate The new setting of {@code testOnCreate} for this configuration instance
    867     * @see GenericObjectPool#getTestOnCreate()
    868     * @see GenericKeyedObjectPool#getTestOnCreate()
    869     * @since 2.2
    870     */
    871    public void setTestOnCreate(final boolean testOnCreate) {
    872        this.testOnCreate = testOnCreate;
    873    }
    874
    875    /**
    876     * Sets the value for the {@code testOnReturn} configuration attribute for pools created with this configuration instance.
    877     *
    878     * @param testOnReturn The new setting of {@code testOnReturn} for this configuration instance
    879     * @see GenericObjectPool#getTestOnReturn()
    880     * @see GenericKeyedObjectPool#getTestOnReturn()
    881     */
    882    public void setTestOnReturn(final boolean testOnReturn) {
    883        this.testOnReturn = testOnReturn;
    884    }
    885
    886    /**
    887     * Sets the value for the {@code testWhileIdle} configuration attribute for pools created with this configuration instance.
    888     *
    889     * @param testWhileIdle The new setting of {@code testWhileIdle} for this configuration instance
    890     * @see GenericObjectPool#getTestWhileIdle()
    891     * @see GenericKeyedObjectPool#getTestWhileIdle()
    892     */
    893    public void setTestWhileIdle(final boolean testWhileIdle) {
    894        this.testWhileIdle = testWhileIdle;
    895    }
    896
    897    /**
    898     * Sets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    899     *
    900     * @param timeBetweenEvictionRuns The new setting of {@code timeBetweenEvictionRuns} for this configuration instance
    901     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    902     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    903     * @since 2.10.0
    904     */
    905    public void setTimeBetweenEvictionRuns(final Duration timeBetweenEvictionRuns) {
    906        this.durationBetweenEvictionRuns = PoolImplUtils.nonNull(timeBetweenEvictionRuns, DEFAULT_DURATION_BETWEEN_EVICTION_RUNS);
    907    }
    908
    909    /**
    910     * Sets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
    911     *
    912     * @param timeBetweenEvictionRunsMillis The new setting of {@code timeBetweenEvictionRuns} for this configuration instance
    913     * @see GenericObjectPool#getDurationBetweenEvictionRuns()
    914     * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
    915     * @deprecated Use {@link #setTimeBetweenEvictionRuns(Duration)}.
    916     */
    917    @Deprecated
    918    public void setTimeBetweenEvictionRunsMillis(final long timeBetweenEvictionRunsMillis) {
    919        setTimeBetweenEvictionRuns(Duration.ofMillis(timeBetweenEvictionRunsMillis));
    920    }
    921
    922    @Override
    923    protected void toStringAppendFields(final StringBuilder builder) {
    924        builder.append("lifo=");
    925        builder.append(lifo);
    926        builder.append(", fairness=");
    927        builder.append(fairness);
    928        builder.append(", maxWaitDuration=");
    929        builder.append(maxWaitDuration);
    930        builder.append(", minEvictableIdleTime=");
    931        builder.append(minEvictableIdleDuration);
    932        builder.append(", softMinEvictableIdleTime=");
    933        builder.append(softMinEvictableIdleDuration);
    934        builder.append(", numTestsPerEvictionRun=");
    935        builder.append(numTestsPerEvictionRun);
    936        builder.append(", evictionPolicyClassName=");
    937        builder.append(evictionPolicyClassName);
    938        builder.append(", testOnCreate=");
    939        builder.append(testOnCreate);
    940        builder.append(", testOnBorrow=");
    941        builder.append(testOnBorrow);
    942        builder.append(", testOnReturn=");
    943        builder.append(testOnReturn);
    944        builder.append(", testWhileIdle=");
    945        builder.append(testWhileIdle);
    946        builder.append(", timeBetweenEvictionRuns=");
    947        builder.append(durationBetweenEvictionRuns);
    948        builder.append(", blockWhenExhausted=");
    949        builder.append(blockWhenExhausted);
    950        builder.append(", jmxEnabled=");
    951        builder.append(jmxEnabled);
    952        builder.append(", jmxNamePrefix=");
    953        builder.append(jmxNamePrefix);
    954        builder.append(", jmxNameBase=");
    955        builder.append(jmxNameBase);
    956    }
    957}