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 019/** 020 * Provides the implementation for the common attributes shared by the 021 * sub-classes. New instances of this class will be created using the defaults 022 * defined by the public constants. 023 * <p> 024 * This class is not thread-safe. 025 * 026 * @version $Revision: $ 027 * 028 * @since 2.0 029 */ 030public abstract class BaseObjectPoolConfig implements Cloneable { 031 032 /** 033 * The default value for the {@code lifo} configuration attribute. 034 * @see GenericObjectPool#getLifo() 035 * @see GenericKeyedObjectPool#getLifo() 036 */ 037 public static final boolean DEFAULT_LIFO = true; 038 039 /** 040 * The default value for the {@code maxWait} configuration attribute. 041 * @see GenericObjectPool#getMaxWaitMillis() 042 * @see GenericKeyedObjectPool#getMaxWaitMillis() 043 */ 044 public static final long DEFAULT_MAX_WAIT_MILLIS = -1L; 045 046 /** 047 * The default value for the {@code minEvictableIdleTimeMillis} 048 * configuration attribute. 049 * @see GenericObjectPool#getMinEvictableIdleTimeMillis() 050 * @see GenericKeyedObjectPool#getMinEvictableIdleTimeMillis() 051 */ 052 public static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 053 1000L * 60L * 30L; 054 055 /** 056 * The default value for the {@code softMinEvictableIdleTimeMillis} 057 * configuration attribute. 058 * @see GenericObjectPool#getSoftMinEvictableIdleTimeMillis() 059 * @see GenericKeyedObjectPool#getSoftMinEvictableIdleTimeMillis() 060 */ 061 public static final long DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS = -1; 062 063 /** 064 * The default value for the {@code numTestsPerEvictionRun} configuration 065 * attribute. 066 * @see GenericObjectPool#getNumTestsPerEvictionRun() 067 * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun() 068 */ 069 public static final int DEFAULT_NUM_TESTS_PER_EVICTION_RUN = 3; 070 071 /** 072 * The default value for the {@code testOnBorrow} configuration attribute. 073 * @see GenericObjectPool#getTestOnBorrow() 074 * @see GenericKeyedObjectPool#getTestOnBorrow() 075 */ 076 public static final boolean DEFAULT_TEST_ON_BORROW = false; 077 078 /** 079 * The default value for the {@code testOnReturn} configuration attribute. 080 * @see GenericObjectPool#getTestOnReturn() 081 * @see GenericKeyedObjectPool#getTestOnReturn() 082 */ 083 public static final boolean DEFAULT_TEST_ON_RETURN = false; 084 085 /** 086 * The default value for the {@code testWhileIdle} configuration attribute. 087 * @see GenericObjectPool#getTestWhileIdle() 088 * @see GenericKeyedObjectPool#getTestWhileIdle() 089 */ 090 public static final boolean DEFAULT_TEST_WHILE_IDLE = false; 091 092 /** 093 * The default value for the {@code timeBetweenEvictionRunsMillis} 094 * configuration attribute. 095 * @see GenericObjectPool#getTimeBetweenEvictionRunsMillis() 096 * @see GenericKeyedObjectPool#getTimeBetweenEvictionRunsMillis() 097 */ 098 public static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = -1L; 099 100 /** 101 * The default value for the {@code blockWhenExhausted} configuration 102 * attribute. 103 * @see GenericObjectPool#getBlockWhenExhausted() 104 * @see GenericKeyedObjectPool#getBlockWhenExhausted() 105 */ 106 public static final boolean DEFAULT_BLOCK_WHEN_EXHAUSTED = true; 107 108 /** 109 * The default value for enabling JMX for pools created with a configuration 110 * instance. 111 */ 112 public static final boolean DEFAULT_JMX_ENABLE = true; 113 114 /** 115 * The default value for the prefix used to name JMX enabled pools created 116 * with a configuration instance. 117 * @see GenericObjectPool#getJmxName() 118 * @see GenericKeyedObjectPool#getJmxName() 119 */ 120 public static final String DEFAULT_JMX_NAME_PREFIX = "pool"; 121 122 /** 123 * The default value for the base name to use to name JMX enabled pools 124 * created with a configuration instance. The default is <code>null</code> 125 * which means the pool will provide the base name to use. 126 * @see GenericObjectPool#getJmxName() 127 * @see GenericKeyedObjectPool#getJmxName() 128 */ 129 public static final String DEFAULT_JMX_NAME_BASE = null; 130 131 /** 132 * The default value for the {@code evictionPolicyClassName} configuration 133 * attribute. 134 * @see GenericObjectPool#getEvictionPolicyClassName() 135 * @see GenericKeyedObjectPool#getEvictionPolicyClassName() 136 */ 137 public static final String DEFAULT_EVICTION_POLICY_CLASS_NAME = 138 "org.apache.commons.pool2.impl.DefaultEvictionPolicy"; 139 140 141 private boolean lifo = DEFAULT_LIFO; 142 143 private long maxWaitMillis = DEFAULT_MAX_WAIT_MILLIS; 144 145 private long minEvictableIdleTimeMillis = 146 DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS; 147 148 private long softMinEvictableIdleTimeMillis = 149 DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS; 150 151 private int numTestsPerEvictionRun = 152 DEFAULT_NUM_TESTS_PER_EVICTION_RUN; 153 154 private String evictionPolicyClassName = DEFAULT_EVICTION_POLICY_CLASS_NAME; 155 156 private boolean testOnBorrow = DEFAULT_TEST_ON_BORROW; 157 158 private boolean testOnReturn = DEFAULT_TEST_ON_RETURN; 159 160 private boolean testWhileIdle = DEFAULT_TEST_WHILE_IDLE; 161 162 private long timeBetweenEvictionRunsMillis = 163 DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS; 164 165 private boolean blockWhenExhausted = DEFAULT_BLOCK_WHEN_EXHAUSTED; 166 167 private boolean jmxEnabled = DEFAULT_JMX_ENABLE; 168 169 // TODO Consider changing this to a single property for 3.x 170 private String jmxNamePrefix = DEFAULT_JMX_NAME_PREFIX; 171 172 private String jmxNameBase = DEFAULT_JMX_NAME_PREFIX; 173 174 175 /** 176 * Get the value for the {@code lifo} configuration attribute for pools 177 * created with this configuration instance. 178 * 179 * @return The current setting of {@code lifo} for this configuration 180 * instance 181 * 182 * @see GenericObjectPool#getLifo() 183 * @see GenericKeyedObjectPool#getLifo() 184 */ 185 public boolean getLifo() { 186 return lifo; 187 } 188 189 /** 190 * Set the value for the {@code lifo} configuration attribute for pools 191 * created with this configuration instance. 192 * 193 * @param lifo The new setting of {@code lifo} 194 * for this configuration instance 195 * 196 * @see GenericObjectPool#getLifo() 197 * @see GenericKeyedObjectPool#getLifo() 198 */ 199 public void setLifo(boolean lifo) { 200 this.lifo = lifo; 201 } 202 203 /** 204 * Get the value for the {@code maxWait} configuration attribute for pools 205 * created with this configuration instance. 206 * 207 * @return The current setting of {@code maxWait} for this 208 * configuration instance 209 * 210 * @see GenericObjectPool#getMaxWaitMillis() 211 * @see GenericKeyedObjectPool#getMaxWaitMillis() 212 */ 213 public long getMaxWaitMillis() { 214 return maxWaitMillis; 215 } 216 217 /** 218 * Set the value for the {@code maxWait} configuration attribute for pools 219 * created with this configuration instance. 220 * 221 * @param maxWaitMillis The new setting of {@code maxWaitMillis} 222 * for this configuration instance 223 * 224 * @see GenericObjectPool#getMaxWaitMillis() 225 * @see GenericKeyedObjectPool#getMaxWaitMillis() 226 */ 227 public void setMaxWaitMillis(long maxWaitMillis) { 228 this.maxWaitMillis = maxWaitMillis; 229 } 230 231 /** 232 * Get the value for the {@code minEvictableIdleTimeMillis} configuration 233 * attribute for pools created with this configuration instance. 234 * 235 * @return The current setting of {@code minEvictableIdleTimeMillis} for 236 * this configuration instance 237 * 238 * @see GenericObjectPool#getMinEvictableIdleTimeMillis() 239 * @see GenericKeyedObjectPool#getMinEvictableIdleTimeMillis() 240 */ 241 public long getMinEvictableIdleTimeMillis() { 242 return minEvictableIdleTimeMillis; 243 } 244 245 /** 246 * Set the value for the {@code minEvictableIdleTimeMillis} configuration 247 * attribute for pools created with this configuration instance. 248 * 249 * @param minEvictableIdleTimeMillis The new setting of 250 * {@code minEvictableIdleTimeMillis} for this configuration instance 251 * 252 * @see GenericObjectPool#getMinEvictableIdleTimeMillis() 253 * @see GenericKeyedObjectPool#getMinEvictableIdleTimeMillis() 254 */ 255 public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { 256 this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; 257 } 258 259 /** 260 * Get the value for the {@code softMinEvictableIdleTimeMillis} 261 * configuration attribute for pools created with this configuration 262 * instance. 263 * 264 * @return The current setting of {@code softMinEvictableIdleTimeMillis} 265 * for this configuration instance 266 * 267 * @see GenericObjectPool#getSoftMinEvictableIdleTimeMillis() 268 * @see GenericKeyedObjectPool#getSoftMinEvictableIdleTimeMillis() 269 */ 270 public long getSoftMinEvictableIdleTimeMillis() { 271 return softMinEvictableIdleTimeMillis; 272 } 273 274 /** 275 * Set the value for the {@code softMinEvictableIdleTimeMillis} 276 * configuration attribute for pools created with this configuration 277 * instance. 278 * 279 * @param softMinEvictableIdleTimeMillis The new setting of 280 * {@code softMinEvictableIdleTimeMillis} for this configuration 281 * instance 282 * 283 * @see GenericObjectPool#getSoftMinEvictableIdleTimeMillis() 284 * @see GenericKeyedObjectPool#getSoftMinEvictableIdleTimeMillis() 285 */ 286 public void setSoftMinEvictableIdleTimeMillis( 287 long softMinEvictableIdleTimeMillis) { 288 this.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis; 289 } 290 291 /** 292 * Get the value for the {@code numTestsPerEvictionRun} configuration 293 * attribute for pools created with this configuration instance. 294 * 295 * @return The current setting of {@code numTestsPerEvictionRun} for this 296 * configuration instance 297 * 298 * @see GenericObjectPool#getNumTestsPerEvictionRun() 299 * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun() 300 */ 301 public int getNumTestsPerEvictionRun() { 302 return numTestsPerEvictionRun; 303 } 304 305 /** 306 * Set the value for the {@code numTestsPerEvictionRun} configuration 307 * attribute for pools created with this configuration instance. 308 * 309 * @param numTestsPerEvictionRun The new setting of 310 * {@code numTestsPerEvictionRun} for this configuration instance 311 * 312 * @see GenericObjectPool#getNumTestsPerEvictionRun() 313 * @see GenericKeyedObjectPool#getNumTestsPerEvictionRun() 314 */ 315 public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) { 316 this.numTestsPerEvictionRun = numTestsPerEvictionRun; 317 } 318 319 /** 320 * Get the value for the {@code testOnBorrow} configuration attribute for 321 * pools created with this configuration instance. 322 * 323 * @return The current setting of {@code testOnBorrow} for this 324 * configuration instance 325 * 326 * @see GenericObjectPool#getTestOnBorrow() 327 * @see GenericKeyedObjectPool#getTestOnBorrow() 328 */ 329 public boolean getTestOnBorrow() { 330 return testOnBorrow; 331 } 332 333 /** 334 * Set the value for the {@code testOnBorrow} configuration attribute for 335 * pools created with this configuration instance. 336 * 337 * @param testOnBorrow The new setting of {@code testOnBorrow} 338 * for this configuration instance 339 * 340 * @see GenericObjectPool#getTestOnBorrow() 341 * @see GenericKeyedObjectPool#getTestOnBorrow() 342 */ 343 public void setTestOnBorrow(boolean testOnBorrow) { 344 this.testOnBorrow = testOnBorrow; 345 } 346 347 /** 348 * Get the value for the {@code testOnReturn} configuration attribute for 349 * pools created with this configuration instance. 350 * 351 * @return The current setting of {@code testOnReturn} for this 352 * configuration instance 353 * 354 * @see GenericObjectPool#getTestOnReturn() 355 * @see GenericKeyedObjectPool#getTestOnReturn() 356 */ 357 public boolean getTestOnReturn() { 358 return testOnReturn; 359 } 360 361 /** 362 * Set the value for the {@code testOnReturn} configuration attribute for 363 * pools created with this configuration instance. 364 * 365 * @param testOnReturn The new setting of {@code testOnReturn} 366 * for this configuration instance 367 * 368 * @see GenericObjectPool#getTestOnReturn() 369 * @see GenericKeyedObjectPool#getTestOnReturn() 370 */ 371 public void setTestOnReturn(boolean testOnReturn) { 372 this.testOnReturn = testOnReturn; 373 } 374 375 /** 376 * Get the value for the {@code testWhileIdle} configuration attribute for 377 * pools created with this configuration instance. 378 * 379 * @return The current setting of {@code testWhileIdle} for this 380 * configuration instance 381 * 382 * @see GenericObjectPool#getTestWhileIdle() 383 * @see GenericKeyedObjectPool#getTestWhileIdle() 384 */ 385 public boolean getTestWhileIdle() { 386 return testWhileIdle; 387 } 388 389 /** 390 * Set the value for the {@code testWhileIdle} configuration attribute for 391 * pools created with this configuration instance. 392 * 393 * @param testWhileIdle The new setting of {@code testWhileIdle} 394 * for this configuration instance 395 * 396 * @see GenericObjectPool#getTestWhileIdle() 397 * @see GenericKeyedObjectPool#getTestWhileIdle() 398 */ 399 public void setTestWhileIdle(boolean testWhileIdle) { 400 this.testWhileIdle = testWhileIdle; 401 } 402 403 /** 404 * Get the value for the {@code timeBetweenEvictionRunsMillis} configuration 405 * attribute for pools created with this configuration instance. 406 * 407 * @return The current setting of {@code timeBetweenEvictionRunsMillis} for 408 * this configuration instance 409 * 410 * @see GenericObjectPool#getTimeBetweenEvictionRunsMillis() 411 * @see GenericKeyedObjectPool#getTimeBetweenEvictionRunsMillis() 412 */ 413 public long getTimeBetweenEvictionRunsMillis() { 414 return timeBetweenEvictionRunsMillis; 415 } 416 417 /** 418 * Set the value for the {@code timeBetweenEvictionRunsMillis} configuration 419 * attribute for pools created with this configuration instance. 420 * 421 * @param timeBetweenEvictionRunsMillis The new setting of 422 * {@code timeBetweenEvictionRunsMillis} for this configuration 423 * instance 424 * 425 * @see GenericObjectPool#getTimeBetweenEvictionRunsMillis() 426 * @see GenericKeyedObjectPool#getTimeBetweenEvictionRunsMillis() 427 */ 428 public void setTimeBetweenEvictionRunsMillis( 429 long timeBetweenEvictionRunsMillis) { 430 this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; 431 } 432 433 /** 434 * Get the value for the {@code evictionPolicyClassName} configuration 435 * attribute for pools created with this configuration instance. 436 * 437 * @return The current setting of {@code evictionPolicyClassName} for this 438 * configuration instance 439 * 440 * @see GenericObjectPool#getEvictionPolicyClassName() 441 * @see GenericKeyedObjectPool#getEvictionPolicyClassName() 442 */ 443 public String getEvictionPolicyClassName() { 444 return evictionPolicyClassName; 445 } 446 447 /** 448 * Set the value for the {@code evictionPolicyClassName} configuration 449 * attribute for pools created with this configuration instance. 450 * 451 * @param evictionPolicyClassName The new setting of 452 * {@code evictionPolicyClassName} for this configuration instance 453 * 454 * @see GenericObjectPool#getEvictionPolicyClassName() 455 * @see GenericKeyedObjectPool#getEvictionPolicyClassName() 456 */ 457 public void setEvictionPolicyClassName(String evictionPolicyClassName) { 458 this.evictionPolicyClassName = evictionPolicyClassName; 459 } 460 461 /** 462 * Get the value for the {@code blockWhenExhausted} configuration attribute 463 * for pools created with this configuration instance. 464 * 465 * @return The current setting of {@code blockWhenExhausted} for this 466 * configuration instance 467 * 468 * @see GenericObjectPool#getBlockWhenExhausted() 469 * @see GenericKeyedObjectPool#getBlockWhenExhausted() 470 */ 471 public boolean getBlockWhenExhausted() { 472 return blockWhenExhausted; 473 } 474 475 /** 476 * Set the value for the {@code blockWhenExhausted} configuration attribute 477 * for pools created with this configuration instance. 478 * 479 * @param blockWhenExhausted The new setting of {@code blockWhenExhausted} 480 * for this configuration instance 481 * 482 * @see GenericObjectPool#getBlockWhenExhausted() 483 * @see GenericKeyedObjectPool#getBlockWhenExhausted() 484 */ 485 public void setBlockWhenExhausted(boolean blockWhenExhausted) { 486 this.blockWhenExhausted = blockWhenExhausted; 487 } 488 489 /** 490 * Gets the value of the flag that determines if JMX will be enabled for 491 * pools created with this configuration instance. 492 * 493 * @return The current setting of {@code jmxEnabled} for this configuration 494 * instance 495 */ 496 public boolean getJmxEnabled() { 497 return jmxEnabled; 498 } 499 500 /** 501 * Sets the value of the flag that determines if JMX will be enabled for 502 * pools created with this configuration instance. 503 * 504 * @param jmxEnabled The new setting of {@code jmxEnabled} 505 * for this configuration instance 506 */ 507 public void setJmxEnabled(boolean jmxEnabled) { 508 this.jmxEnabled = jmxEnabled; 509 } 510 511 /** 512 * Gets the value of the JMX name base that will be used as part of the 513 * name assigned to JMX enabled pools created with this configuration 514 * instance. A value of <code>null</code> means that the pool will define 515 * the JMX name base. 516 * 517 * @return The current setting of {@code jmxNameBase} for this 518 * configuration instance 519 */ 520 public String getJmxNameBase() { 521 return jmxNameBase; 522 } 523 524 /** 525 * Sets the value of the JMX name base that will be used as part of the 526 * name assigned to JMX enabled pools created with this configuration 527 * instance. A value of <code>null</code> means that the pool will define 528 * the JMX name base. 529 * 530 * @param jmxNameBase The new setting of {@code jmxNameBase} 531 * for this configuration instance 532 */ 533 public void setJmxNameBase(String jmxNameBase) { 534 this.jmxNameBase = jmxNameBase; 535 } 536 537 /** 538 * Gets the value of the JMX name prefix that will be used as part of the 539 * name assigned to JMX enabled pools created with this configuration 540 * instance. 541 * 542 * @return The current setting of {@code jmxNamePrefix} for this 543 * configuration instance 544 */ 545 public String getJmxNamePrefix() { 546 return jmxNamePrefix; 547 } 548 549 /** 550 * Sets the value of the JMX name prefix that will be used as part of the 551 * name assigned to JMX enabled pools created with this configuration 552 * instance. 553 * 554 * @param jmxNamePrefix The new setting of {@code jmxNamePrefix} 555 * for this configuration instance 556 */ 557 public void setJmxNamePrefix(String jmxNamePrefix) { 558 this.jmxNamePrefix = jmxNamePrefix; 559 } 560}