View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.pool2.impl;
18  
19  import java.time.Duration;
20  
21  import org.apache.commons.pool2.BaseObject;
22  
23  /**
24   * 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
25   * the public constants.
26   * <p>
27   * This class is not thread-safe.
28   * </p>
29   *
30   * @param <T> Type of element pooled.
31   * @since 2.0
32   */
33  public abstract class BaseObjectPoolConfig<T> extends BaseObject implements Cloneable {
34  
35      /**
36       * The default value for the {@code lifo} configuration attribute: {@value}.
37       *
38       * @see GenericObjectPool#getLifo()
39       * @see GenericKeyedObjectPool#getLifo()
40       */
41      public static final boolean DEFAULT_LIFO = true;
42  
43      /**
44       * The default value for the {@code fairness} configuration attribute: {@value}.
45       *
46       * @see GenericObjectPool#getFairness()
47       * @see GenericKeyedObjectPool#getFairness()
48       */
49      public static final boolean DEFAULT_FAIRNESS = false;
50  
51      /**
52       * The default value for the {@code maxWait} configuration attribute: {@value}.
53       *
54       * @see GenericObjectPool#getMaxWaitDuration()
55       * @see GenericKeyedObjectPool#getMaxWaitDuration()
56       * @deprecated Use {@link #DEFAULT_MAX_WAIT}.
57       */
58      @Deprecated
59      public static final long DEFAULT_MAX_WAIT_MILLIS = -1L;
60  
61      /**
62       * The default value for the {@code maxWait} configuration attribute.
63       *
64       * @see GenericObjectPool#getMaxWaitDuration()
65       * @see GenericKeyedObjectPool#getMaxWaitDuration()
66       * @since 2.10.0
67       */
68      public static final Duration DEFAULT_MAX_WAIT = Duration.ofMillis(DEFAULT_MAX_WAIT_MILLIS);
69  
70      /**
71       * The default value for the {@code minEvictableIdleDuration} configuration attribute: {@value}.
72       *
73       * @see GenericObjectPool#getMinEvictableIdleDuration()
74       * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
75       * @deprecated Use {@link #DEFAULT_MIN_EVICTABLE_IDLE_TIME}.
76       */
77      @Deprecated
78      public static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 1000L * 60L * 30L;
79  
80      /**
81       * The default value for the {@code minEvictableIdleDuration} configuration attribute.
82       *
83       * @see GenericObjectPool#getMinEvictableIdleDuration()
84       * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
85       * @since 2.11.0
86       */
87      public static final Duration DEFAULT_MIN_EVICTABLE_IDLE_DURATION = Duration.ofMillis(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
88  
89      /**
90       * The default value for the {@code minEvictableIdleDuration} configuration attribute.
91       *
92       * @see GenericObjectPool#getMinEvictableIdleDuration()
93       * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
94       * @since 2.10.0
95       * @deprecated Use {@link #DEFAULT_MIN_EVICTABLE_IDLE_DURATION}.
96       */
97      @Deprecated
98      public static final Duration DEFAULT_MIN_EVICTABLE_IDLE_TIME = Duration.ofMillis(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS);
99  
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      * Constructs a new instance.
296      */
297     public BaseObjectPoolConfig() {
298         // empty
299     }
300 
301     /**
302      * Gets the value for the {@code blockWhenExhausted} configuration attribute for pools created with this configuration instance.
303      *
304      * @return The current setting of {@code blockWhenExhausted} for this configuration instance
305      * @see GenericObjectPool#getBlockWhenExhausted()
306      * @see GenericKeyedObjectPool#getBlockWhenExhausted()
307      */
308     public boolean getBlockWhenExhausted() {
309         return blockWhenExhausted;
310     }
311 
312     /**
313      * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
314      *
315      * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
316      * @see GenericObjectPool#getDurationBetweenEvictionRuns()
317      * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
318      * @since 2.11.0
319      */
320     public Duration getDurationBetweenEvictionRuns() {
321         return durationBetweenEvictionRuns;
322     }
323 
324     /**
325      * Gets the value for the {@code evictionPolicyClass} configuration attribute for pools created with this configuration instance.
326      *
327      * @return The current setting of {@code evictionPolicyClass} for this configuration instance
328      * @see GenericObjectPool#getEvictionPolicy()
329      * @see GenericKeyedObjectPool#getEvictionPolicy()
330      * @since 2.6.0
331      */
332     public EvictionPolicy<T> getEvictionPolicy() {
333         return evictionPolicy;
334     }
335 
336     /**
337      * Gets the value for the {@code evictionPolicyClassName} configuration attribute for pools created with this configuration instance.
338      *
339      * @return The current setting of {@code evictionPolicyClassName} for this configuration instance
340      * @see GenericObjectPool#getEvictionPolicyClassName()
341      * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
342      */
343     public String getEvictionPolicyClassName() {
344         return evictionPolicyClassName;
345     }
346 
347     /**
348      * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
349      *
350      * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
351      * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
352      * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
353      * @since 2.10.0
354      * @deprecated Use {@link #getEvictorShutdownTimeoutDuration()}.
355      */
356     @Deprecated
357     public Duration getEvictorShutdownTimeout() {
358         return evictorShutdownTimeoutDuration;
359     }
360 
361     /**
362      * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
363      *
364      * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
365      * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
366      * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
367      * @since 2.11.0
368      */
369     public Duration getEvictorShutdownTimeoutDuration() {
370         return evictorShutdownTimeoutDuration;
371     }
372 
373     /**
374      * Gets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
375      *
376      * @return The current setting of {@code evictorShutdownTimeout} for this configuration instance
377      * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
378      * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
379      * @deprecated Use {@link #getEvictorShutdownTimeout()}.
380      */
381     @Deprecated
382     public long getEvictorShutdownTimeoutMillis() {
383         return evictorShutdownTimeoutDuration.toMillis();
384     }
385 
386     /**
387      * Gets the value for the {@code fairness} configuration attribute for pools created with this configuration instance.
388      *
389      * @return The current setting of {@code fairness} for this configuration instance
390      * @see GenericObjectPool#getFairness()
391      * @see GenericKeyedObjectPool#getFairness()
392      */
393     public boolean getFairness() {
394         return fairness;
395     }
396 
397     /**
398      * Gets the value of the flag that determines if JMX will be enabled for pools created with this configuration instance.
399      *
400      * @return The current setting of {@code jmxEnabled} for this configuration instance
401      */
402     public boolean getJmxEnabled() {
403         return jmxEnabled;
404     }
405 
406     /**
407      * 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
408      * of {@code null} means that the pool will define the JMX name base.
409      *
410      * @return The current setting of {@code jmxNameBase} for this configuration instance
411      */
412     public String getJmxNameBase() {
413         return jmxNameBase;
414     }
415 
416     /**
417      * 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.
418      *
419      * @return The current setting of {@code jmxNamePrefix} for this configuration instance
420      */
421     public String getJmxNamePrefix() {
422         return jmxNamePrefix;
423     }
424 
425     /**
426      * Gets the value for the {@code lifo} configuration attribute for pools created with this configuration instance.
427      *
428      * @return The current setting of {@code lifo} for this configuration instance
429      * @see GenericObjectPool#getLifo()
430      * @see GenericKeyedObjectPool#getLifo()
431      */
432     public boolean getLifo() {
433         return lifo;
434     }
435 
436     /**
437      * Gets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
438      *
439      * @return The current setting of {@code maxWait} for this configuration instance
440      * @see GenericObjectPool#getMaxWaitDuration()
441      * @see GenericKeyedObjectPool#getMaxWaitDuration()
442      * @since 2.11.0
443      */
444     public Duration getMaxWaitDuration() {
445         return maxWaitDuration;
446     }
447 
448     /**
449      * Gets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
450      *
451      * @return The current setting of {@code maxWait} for this configuration instance
452      * @see GenericObjectPool#getMaxWaitDuration()
453      * @see GenericKeyedObjectPool#getMaxWaitDuration()
454      * @deprecated Use {@link #getMaxWaitDuration()}.
455      */
456     @Deprecated
457     public long getMaxWaitMillis() {
458         return maxWaitDuration.toMillis();
459     }
460 
461     /**
462      * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
463      *
464      * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
465      * @see GenericObjectPool#getMinEvictableIdleDuration()
466      * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
467      * @since 2.11.0
468      */
469     public Duration getMinEvictableIdleDuration() {
470         return minEvictableIdleDuration;
471     }
472 
473     /**
474      * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
475      *
476      * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
477      * @see GenericObjectPool#getMinEvictableIdleDuration()
478      * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
479      * @since 2.10.0
480      * @deprecated Use {@link #getMinEvictableIdleDuration()}.
481      */
482     @Deprecated
483     public Duration getMinEvictableIdleTime() {
484         return minEvictableIdleDuration;
485     }
486 
487     /**
488      * Gets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
489      *
490      * @return The current setting of {@code minEvictableIdleTime} for this configuration instance
491      * @see GenericObjectPool#getMinEvictableIdleDuration()
492      * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
493      * @deprecated Use {@link #getMinEvictableIdleTime()}.
494      */
495     @Deprecated
496     public long getMinEvictableIdleTimeMillis() {
497         return minEvictableIdleDuration.toMillis();
498     }
499 
500     /**
501      * Gets the value for the {@code numTestsPerEvictionRun} configuration attribute for pools created with this configuration instance.
502      *
503      * @return The current setting of {@code numTestsPerEvictionRun} for this configuration instance
504      * @see GenericObjectPool#getNumTestsPerEvictionRun()
505      * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
506      */
507     public int getNumTestsPerEvictionRun() {
508         return numTestsPerEvictionRun;
509     }
510 
511     /**
512      * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
513      *
514      * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
515      * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
516      * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
517      * @since 2.11.0
518      */
519     public Duration getSoftMinEvictableIdleDuration() {
520         return softMinEvictableIdleDuration;
521     }
522 
523     /**
524      * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
525      *
526      * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
527      * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
528      * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
529      * @since 2.10.0
530      * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
531      */
532     @Deprecated
533     public Duration getSoftMinEvictableIdleTime() {
534         return softMinEvictableIdleDuration;
535     }
536 
537     /**
538      * Gets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
539      *
540      * @return The current setting of {@code softMinEvictableIdleTime} for this configuration instance
541      * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
542      * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
543      * @deprecated Use {@link #getSoftMinEvictableIdleDuration()}.
544      */
545     @Deprecated
546     public long getSoftMinEvictableIdleTimeMillis() {
547         return softMinEvictableIdleDuration.toMillis();
548     }
549 
550     /**
551      * Gets the value for the {@code testOnBorrow} configuration attribute for pools created with this configuration instance.
552      *
553      * @return The current setting of {@code testOnBorrow} for this configuration instance
554      * @see GenericObjectPool#getTestOnBorrow()
555      * @see GenericKeyedObjectPool#getTestOnBorrow()
556      */
557     public boolean getTestOnBorrow() {
558         return testOnBorrow;
559     }
560 
561     /**
562      * Gets the value for the {@code testOnCreate} configuration attribute for pools created with this configuration instance.
563      *
564      * @return The current setting of {@code testOnCreate} for this configuration instance
565      * @see GenericObjectPool#getTestOnCreate()
566      * @see GenericKeyedObjectPool#getTestOnCreate()
567      * @since 2.2
568      */
569     public boolean getTestOnCreate() {
570         return testOnCreate;
571     }
572 
573     /**
574      * Gets the value for the {@code testOnReturn} configuration attribute for pools created with this configuration instance.
575      *
576      * @return The current setting of {@code testOnReturn} for this configuration instance
577      * @see GenericObjectPool#getTestOnReturn()
578      * @see GenericKeyedObjectPool#getTestOnReturn()
579      */
580     public boolean getTestOnReturn() {
581         return testOnReturn;
582     }
583 
584     /**
585      * Gets the value for the {@code testWhileIdle} configuration attribute for pools created with this configuration instance.
586      *
587      * @return The current setting of {@code testWhileIdle} for this configuration instance
588      * @see GenericObjectPool#getTestWhileIdle()
589      * @see GenericKeyedObjectPool#getTestWhileIdle()
590      */
591     public boolean getTestWhileIdle() {
592         return testWhileIdle;
593     }
594 
595     /**
596      * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
597      *
598      * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
599      * @see GenericObjectPool#getDurationBetweenEvictionRuns()
600      * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
601      * @since 2.10.0
602      * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
603      */
604     @Deprecated
605     public Duration getTimeBetweenEvictionRuns() {
606         return durationBetweenEvictionRuns;
607     }
608 
609     /**
610      * Gets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
611      *
612      * @return The current setting of {@code timeBetweenEvictionRuns} for this configuration instance
613      * @see GenericObjectPool#getDurationBetweenEvictionRuns()
614      * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
615      * @deprecated Use {@link #getDurationBetweenEvictionRuns()}.
616      */
617     @Deprecated
618     public long getTimeBetweenEvictionRunsMillis() {
619         return durationBetweenEvictionRuns.toMillis();
620     }
621 
622     /**
623      * Sets the value for the {@code blockWhenExhausted} configuration attribute for pools created with this configuration instance.
624      *
625      * @param blockWhenExhausted The new setting of {@code blockWhenExhausted} for this configuration instance
626      * @see GenericObjectPool#getBlockWhenExhausted()
627      * @see GenericKeyedObjectPool#getBlockWhenExhausted()
628      */
629     public void setBlockWhenExhausted(final boolean blockWhenExhausted) {
630         this.blockWhenExhausted = blockWhenExhausted;
631     }
632 
633     /**
634      * Sets the value for the {@code evictionPolicyClass} configuration attribute for pools created with this configuration instance.
635      *
636      * @param evictionPolicy The new setting of {@code evictionPolicyClass} for this configuration instance
637      * @see GenericObjectPool#getEvictionPolicy()
638      * @see GenericKeyedObjectPool#getEvictionPolicy()
639      * @since 2.6.0
640      */
641     public void setEvictionPolicy(final EvictionPolicy<T> evictionPolicy) {
642         this.evictionPolicy = evictionPolicy;
643     }
644 
645     /**
646      * Sets the value for the {@code evictionPolicyClassName} configuration attribute for pools created with this configuration instance.
647      *
648      * @param evictionPolicyClassName The new setting of {@code evictionPolicyClassName} for this configuration instance
649      * @see GenericObjectPool#getEvictionPolicyClassName()
650      * @see GenericKeyedObjectPool#getEvictionPolicyClassName()
651      */
652     public void setEvictionPolicyClassName(final String evictionPolicyClassName) {
653         this.evictionPolicyClassName = evictionPolicyClassName;
654     }
655 
656     /**
657      * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
658      *
659      * @param evictorShutdownTimeoutDuration The new setting of {@code evictorShutdownTimeout} for this configuration instance
660      * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
661      * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
662      * @since 2.11.0
663      */
664     public void setEvictorShutdownTimeout(final Duration evictorShutdownTimeoutDuration) {
665         this.evictorShutdownTimeoutDuration = PoolImplUtils.nonNull(evictorShutdownTimeoutDuration, DEFAULT_EVICTOR_SHUTDOWN_TIMEOUT);
666     }
667 
668     /**
669      * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
670      *
671      * @param evictorShutdownTimeout The new setting of {@code evictorShutdownTimeout} for this configuration instance
672      * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
673      * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
674      * @since 2.10.0
675      * @deprecated Use {@link #setEvictorShutdownTimeout(Duration)}.
676      */
677     @Deprecated
678     public void setEvictorShutdownTimeoutMillis(final Duration evictorShutdownTimeout) {
679         setEvictorShutdownTimeout(evictorShutdownTimeout);
680     }
681 
682     /**
683      * Sets the value for the {@code evictorShutdownTimeout} configuration attribute for pools created with this configuration instance.
684      *
685      * @param evictorShutdownTimeoutMillis The new setting of {@code evictorShutdownTimeout} for this configuration instance
686      * @see GenericObjectPool#getEvictorShutdownTimeoutDuration()
687      * @see GenericKeyedObjectPool#getEvictorShutdownTimeoutDuration()
688      * @deprecated Use {@link #setEvictorShutdownTimeout(Duration)}.
689      */
690     @Deprecated
691     public void setEvictorShutdownTimeoutMillis(final long evictorShutdownTimeoutMillis) {
692         setEvictorShutdownTimeout(Duration.ofMillis(evictorShutdownTimeoutMillis));
693     }
694 
695     /**
696      * Sets the value for the {@code fairness} configuration attribute for pools created with this configuration instance.
697      *
698      * @param fairness The new setting of {@code fairness} for this configuration instance
699      * @see GenericObjectPool#getFairness()
700      * @see GenericKeyedObjectPool#getFairness()
701      */
702     public void setFairness(final boolean fairness) {
703         this.fairness = fairness;
704     }
705 
706     /**
707      * Sets the value of the flag that determines if JMX will be enabled for pools created with this configuration instance.
708      *
709      * @param jmxEnabled The new setting of {@code jmxEnabled} for this configuration instance
710      */
711     public void setJmxEnabled(final boolean jmxEnabled) {
712         this.jmxEnabled = jmxEnabled;
713     }
714 
715     /**
716      * 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
717      * of {@code null} means that the pool will define the JMX name base.
718      *
719      * @param jmxNameBase The new setting of {@code jmxNameBase} for this configuration instance
720      */
721     public void setJmxNameBase(final String jmxNameBase) {
722         this.jmxNameBase = jmxNameBase;
723     }
724 
725     /**
726      * 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.
727      *
728      * @param jmxNamePrefix The new setting of {@code jmxNamePrefix} for this configuration instance
729      */
730     public void setJmxNamePrefix(final String jmxNamePrefix) {
731         this.jmxNamePrefix = jmxNamePrefix;
732     }
733 
734     /**
735      * Sets the value for the {@code lifo} configuration attribute for pools created with this configuration instance.
736      *
737      * @param lifo The new setting of {@code lifo} for this configuration instance
738      * @see GenericObjectPool#getLifo()
739      * @see GenericKeyedObjectPool#getLifo()
740      */
741     public void setLifo(final boolean lifo) {
742         this.lifo = lifo;
743     }
744 
745     /**
746      * Sets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
747      *
748      * @param maxWaitDuration The new setting of {@code maxWaitDuration} for this configuration instance
749      * @see GenericObjectPool#getMaxWaitDuration()
750      * @see GenericKeyedObjectPool#getMaxWaitDuration()
751      * @since 2.11.0
752      */
753     public void setMaxWait(final Duration maxWaitDuration) {
754         this.maxWaitDuration = PoolImplUtils.nonNull(maxWaitDuration, DEFAULT_MAX_WAIT);
755     }
756 
757     /**
758      * Sets the value for the {@code maxWait} configuration attribute for pools created with this configuration instance.
759      *
760      * @param maxWaitMillis The new setting of {@code maxWaitMillis} for this configuration instance
761      * @see GenericObjectPool#getMaxWaitDuration()
762      * @see GenericKeyedObjectPool#getMaxWaitDuration()
763      * @deprecated Use {@link #setMaxWait(Duration)}.
764      */
765     @Deprecated
766     public void setMaxWaitMillis(final long maxWaitMillis) {
767         setMaxWait(Duration.ofMillis(maxWaitMillis));
768     }
769 
770     /**
771      * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
772      *
773      * @param minEvictableIdleTime The new setting of {@code minEvictableIdleTime} for this configuration instance
774      * @see GenericObjectPool#getMinEvictableIdleDuration()
775      * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
776      * @since 2.12.0
777      */
778     public void setMinEvictableIdleDuration(final Duration minEvictableIdleTime) {
779         this.minEvictableIdleDuration = PoolImplUtils.nonNull(minEvictableIdleTime, DEFAULT_MIN_EVICTABLE_IDLE_TIME);
780     }
781 
782     /**
783      * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
784      *
785      * @param minEvictableIdleTime The new setting of {@code minEvictableIdleTime} for this configuration instance
786      * @see GenericObjectPool#getMinEvictableIdleDuration()
787      * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
788      * @since 2.10.0
789      * @deprecated Use {@link #setMinEvictableIdleDuration(Duration)}.
790      */
791     @Deprecated
792     public void setMinEvictableIdleTime(final Duration minEvictableIdleTime) {
793         this.minEvictableIdleDuration = PoolImplUtils.nonNull(minEvictableIdleTime, DEFAULT_MIN_EVICTABLE_IDLE_TIME);
794     }
795 
796     /**
797      * Sets the value for the {@code minEvictableIdleTime} configuration attribute for pools created with this configuration instance.
798      *
799      * @param minEvictableIdleTimeMillis The new setting of {@code minEvictableIdleTime} for this configuration instance
800      * @see GenericObjectPool#getMinEvictableIdleDuration()
801      * @see GenericKeyedObjectPool#getMinEvictableIdleDuration()
802      * @deprecated Use {@link #setMinEvictableIdleDuration(Duration)}.
803      */
804     @Deprecated
805     public void setMinEvictableIdleTimeMillis(final long minEvictableIdleTimeMillis) {
806         this.minEvictableIdleDuration = Duration.ofMillis(minEvictableIdleTimeMillis);
807     }
808 
809     /**
810      * Sets the value for the {@code numTestsPerEvictionRun} configuration attribute for pools created with this configuration instance.
811      *
812      * @param numTestsPerEvictionRun The new setting of {@code numTestsPerEvictionRun} for this configuration instance
813      * @see GenericObjectPool#getNumTestsPerEvictionRun()
814      * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun()
815      */
816     public void setNumTestsPerEvictionRun(final int numTestsPerEvictionRun) {
817         this.numTestsPerEvictionRun = numTestsPerEvictionRun;
818     }
819 
820     /**
821      * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
822      *
823      * @param softMinEvictableIdleTime The new setting of {@code softMinEvictableIdleTime} for this configuration instance
824      * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
825      * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
826      * @since 2.12.0
827      */
828     public void setSoftMinEvictableIdleDuration(final Duration softMinEvictableIdleTime) {
829         this.softMinEvictableIdleDuration = PoolImplUtils.nonNull(softMinEvictableIdleTime, DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME);
830     }
831 
832     /**
833      * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
834      *
835      * @param softMinEvictableIdleTime The new setting of {@code softMinEvictableIdleTime} for this configuration instance
836      * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
837      * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
838      * @since 2.10.0
839      * @deprecated Use {@link #setSoftMinEvictableIdleDuration(Duration)}.
840      */
841     @Deprecated
842     public void setSoftMinEvictableIdleTime(final Duration softMinEvictableIdleTime) {
843         this.softMinEvictableIdleDuration = PoolImplUtils.nonNull(softMinEvictableIdleTime, DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME);
844     }
845 
846     /**
847      * Sets the value for the {@code softMinEvictableIdleTime} configuration attribute for pools created with this configuration instance.
848      *
849      * @param softMinEvictableIdleTimeMillis The new setting of {@code softMinEvictableIdleTime} for this configuration instance
850      * @see GenericObjectPool#getSoftMinEvictableIdleDuration()
851      * @see GenericKeyedObjectPool#getSoftMinEvictableIdleDuration()
852      * @deprecated Use {@link #setSoftMinEvictableIdleDuration(Duration)}.
853      */
854     @Deprecated
855     public void setSoftMinEvictableIdleTimeMillis(final long softMinEvictableIdleTimeMillis) {
856         setSoftMinEvictableIdleTime(Duration.ofMillis(softMinEvictableIdleTimeMillis));
857     }
858 
859     /**
860      * Sets the value for the {@code testOnBorrow} configuration attribute for pools created with this configuration instance.
861      *
862      * @param testOnBorrow The new setting of {@code testOnBorrow} for this configuration instance
863      * @see GenericObjectPool#getTestOnBorrow()
864      * @see GenericKeyedObjectPool#getTestOnBorrow()
865      */
866     public void setTestOnBorrow(final boolean testOnBorrow) {
867         this.testOnBorrow = testOnBorrow;
868     }
869 
870     /**
871      * Sets the value for the {@code testOnCreate} configuration attribute for pools created with this configuration instance.
872      *
873      * @param testOnCreate The new setting of {@code testOnCreate} for this configuration instance
874      * @see GenericObjectPool#getTestOnCreate()
875      * @see GenericKeyedObjectPool#getTestOnCreate()
876      * @since 2.2
877      */
878     public void setTestOnCreate(final boolean testOnCreate) {
879         this.testOnCreate = testOnCreate;
880     }
881 
882     /**
883      * Sets the value for the {@code testOnReturn} configuration attribute for pools created with this configuration instance.
884      *
885      * @param testOnReturn The new setting of {@code testOnReturn} for this configuration instance
886      * @see GenericObjectPool#getTestOnReturn()
887      * @see GenericKeyedObjectPool#getTestOnReturn()
888      */
889     public void setTestOnReturn(final boolean testOnReturn) {
890         this.testOnReturn = testOnReturn;
891     }
892 
893     /**
894      * Sets the value for the {@code testWhileIdle} configuration attribute for pools created with this configuration instance.
895      *
896      * @param testWhileIdle The new setting of {@code testWhileIdle} for this configuration instance
897      * @see GenericObjectPool#getTestWhileIdle()
898      * @see GenericKeyedObjectPool#getTestWhileIdle()
899      */
900     public void setTestWhileIdle(final boolean testWhileIdle) {
901         this.testWhileIdle = testWhileIdle;
902     }
903 
904     /**
905      * Sets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
906      *
907      * @param timeBetweenEvictionRuns The new setting of {@code timeBetweenEvictionRuns} for this configuration instance
908      * @see GenericObjectPool#getDurationBetweenEvictionRuns()
909      * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
910      * @since 2.10.0
911      */
912     public void setTimeBetweenEvictionRuns(final Duration timeBetweenEvictionRuns) {
913         this.durationBetweenEvictionRuns = PoolImplUtils.nonNull(timeBetweenEvictionRuns, DEFAULT_DURATION_BETWEEN_EVICTION_RUNS);
914     }
915 
916     /**
917      * Sets the value for the {@code timeBetweenEvictionRuns} configuration attribute for pools created with this configuration instance.
918      *
919      * @param timeBetweenEvictionRunsMillis The new setting of {@code timeBetweenEvictionRuns} for this configuration instance
920      * @see GenericObjectPool#getDurationBetweenEvictionRuns()
921      * @see GenericKeyedObjectPool#getDurationBetweenEvictionRuns()
922      * @deprecated Use {@link #setTimeBetweenEvictionRuns(Duration)}.
923      */
924     @Deprecated
925     public void setTimeBetweenEvictionRunsMillis(final long timeBetweenEvictionRunsMillis) {
926         setTimeBetweenEvictionRuns(Duration.ofMillis(timeBetweenEvictionRunsMillis));
927     }
928 
929     @Override
930     protected void toStringAppendFields(final StringBuilder builder) {
931         builder.append("lifo=");
932         builder.append(lifo);
933         builder.append(", fairness=");
934         builder.append(fairness);
935         builder.append(", maxWaitDuration=");
936         builder.append(maxWaitDuration);
937         builder.append(", minEvictableIdleTime=");
938         builder.append(minEvictableIdleDuration);
939         builder.append(", softMinEvictableIdleTime=");
940         builder.append(softMinEvictableIdleDuration);
941         builder.append(", numTestsPerEvictionRun=");
942         builder.append(numTestsPerEvictionRun);
943         builder.append(", evictionPolicyClassName=");
944         builder.append(evictionPolicyClassName);
945         builder.append(", testOnCreate=");
946         builder.append(testOnCreate);
947         builder.append(", testOnBorrow=");
948         builder.append(testOnBorrow);
949         builder.append(", testOnReturn=");
950         builder.append(testOnReturn);
951         builder.append(", testWhileIdle=");
952         builder.append(testWhileIdle);
953         builder.append(", timeBetweenEvictionRuns=");
954         builder.append(durationBetweenEvictionRuns);
955         builder.append(", blockWhenExhausted=");
956         builder.append(blockWhenExhausted);
957         builder.append(", jmxEnabled=");
958         builder.append(jmxEnabled);
959         builder.append(", jmxNamePrefix=");
960         builder.append(jmxNamePrefix);
961         builder.append(", jmxNameBase=");
962         builder.append(jmxNameBase);
963     }
964 }