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