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