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 * https://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 * A simple structure encapsulating the configuration for a 021 * {@link GenericKeyedObjectPool}. 022 * 023 * <p> 024 * This class is not thread-safe; it is only intended to be used to provide 025 * attributes used when creating a pool. 026 * </p> 027 * 028 * @param <T> Type of element pooled. 029 * @since 2.0 030 */ 031public class GenericKeyedObjectPoolConfig<T> extends BaseObjectPoolConfig<T> { 032 033 /** 034 * The default value for the {@code maxTotalPerKey} configuration attribute: {@value}. 035 * 036 * @see GenericKeyedObjectPool#getMaxTotalPerKey() 037 */ 038 public static final int DEFAULT_MAX_TOTAL_PER_KEY = 8; 039 040 /** 041 * The default value for the {@code maxTotal} configuration attribute: {@value}. 042 * 043 * @see GenericKeyedObjectPool#getMaxTotal() 044 */ 045 public static final int DEFAULT_MAX_TOTAL = -1; 046 047 /** 048 * The default value for the {@code minIdlePerKey} configuration attribute: {@value}. 049 * 050 * @see GenericKeyedObjectPool#getMinIdlePerKey() 051 */ 052 public static final int DEFAULT_MIN_IDLE_PER_KEY = 0; 053 054 /** 055 * The default value for the {@code maxIdlePerKey} configuration attribute: {@value}. 056 * 057 * @see GenericKeyedObjectPool#getMaxIdlePerKey() 058 */ 059 public static final int DEFAULT_MAX_IDLE_PER_KEY = 8; 060 061 /** 062 * The default value for the {@code reuseCapacityOnReturn} configuration attribute: {@value}. 063 * 064 * @see GenericKeyedObjectPool#getReuseCapacityOnReturn() 065 * @since 2.13.0 066 */ 067 public static final boolean DEFAULT_REUSE_CAPACITY_ON_RETURN = true; 068 069 /** 070 * The default value for the {@code reuseCapacityOnMaintenance} configuration attribute: {@value}. 071 * 072 * @see GenericKeyedObjectPool#getReuseCapacityOnMaintenance() 073 * @since 2.13.0 074 */ 075 public static final boolean DEFAULT_REUSE_CAPACITY_ON_MAINTENANCE = false; 076 077 private int minIdlePerKey = DEFAULT_MIN_IDLE_PER_KEY; 078 079 private int maxIdlePerKey = DEFAULT_MAX_IDLE_PER_KEY; 080 081 private int maxTotalPerKey = DEFAULT_MAX_TOTAL_PER_KEY; 082 083 private int maxTotal = DEFAULT_MAX_TOTAL; 084 085 private boolean reuseCapacityOnReturn = DEFAULT_REUSE_CAPACITY_ON_RETURN; 086 087 private boolean reuseCapacityOnMaintenance = DEFAULT_REUSE_CAPACITY_ON_MAINTENANCE; 088 089 /** 090 * Constructs a new configuration with default settings. 091 */ 092 public GenericKeyedObjectPoolConfig() { 093 } 094 095 @SuppressWarnings("unchecked") 096 @Override 097 public GenericKeyedObjectPoolConfig<T> clone() { 098 try { 099 return (GenericKeyedObjectPoolConfig<T>) super.clone(); 100 } catch (final CloneNotSupportedException e) { 101 throw new AssertionError(); // Can't happen 102 } 103 } 104 105 /** 106 * Gets the value for the {@code maxIdlePerKey} configuration attribute 107 * for pools created with this configuration instance. 108 * 109 * @return The current setting of {@code maxIdlePerKey} for this 110 * configuration instance 111 * 112 * @see GenericKeyedObjectPool#getMaxIdlePerKey() 113 */ 114 public int getMaxIdlePerKey() { 115 return maxIdlePerKey; 116 } 117 118 /** 119 * Gets the value for the {@code maxTotal} configuration attribute 120 * for pools created with this configuration instance. 121 * 122 * @return The current setting of {@code maxTotal} for this 123 * configuration instance 124 * 125 * @see GenericKeyedObjectPool#getMaxTotal() 126 */ 127 public int getMaxTotal() { 128 return maxTotal; 129 } 130 131 /** 132 * Gets the value for the {@code maxTotalPerKey} configuration attribute 133 * for pools created with this configuration instance. 134 * 135 * @return The current setting of {@code maxTotalPerKey} for this 136 * configuration instance 137 * 138 * @see GenericKeyedObjectPool#getMaxTotalPerKey() 139 */ 140 public int getMaxTotalPerKey() { 141 return maxTotalPerKey; 142 } 143 144 /** 145 * Gets the value for the {@code minIdlePerKey} configuration attribute 146 * for pools created with this configuration instance. 147 * 148 * @return The current setting of {@code minIdlePerKey} for this 149 * configuration instance 150 * 151 * @see GenericKeyedObjectPool#getMinIdlePerKey() 152 */ 153 public int getMinIdlePerKey() { 154 return minIdlePerKey; 155 } 156 157 /** 158 * Gets the value for the {@code reuseCapacityOnMaintenance} configuration attribute 159 * for pools created with this configuration instance. 160 * 161 * @return The current setting of {@code reuseCapacityOnMaintenance} for this 162 * configuration instance 163 * 164 * @see GenericKeyedObjectPool#getReuseCapacityOnMaintenance() 165 * @since 2.13.0 166 */ 167 public boolean getReuseCapacityOnMaintenance() { 168 return reuseCapacityOnMaintenance; 169 } 170 171 /** 172 * Gets the value for the {@code reuseCapacityOnReturn} configuration attribute 173 * for pools created with this configuration instance. 174 * 175 * @return The current setting of {@code reuseCapacityOnReturn} for this 176 * configuration instance 177 * 178 * @see GenericKeyedObjectPool#getReuseCapacityOnReturn() 179 * @since 2.13.0 180 */ 181 public boolean getReuseCapacityOnReturn() { 182 return reuseCapacityOnReturn; 183 } 184 185 /** 186 * Sets the value for the {@code maxIdlePerKey} configuration attribute for 187 * pools created with this configuration instance. 188 * 189 * @param maxIdlePerKey The new setting of {@code maxIdlePerKey} 190 * for this configuration instance 191 * 192 * @see GenericKeyedObjectPool#setMaxIdlePerKey(int) 193 */ 194 public void setMaxIdlePerKey(final int maxIdlePerKey) { 195 this.maxIdlePerKey = maxIdlePerKey; 196 } 197 198 /** 199 * Sets the value for the {@code maxTotal} configuration attribute for 200 * pools created with this configuration instance. 201 * 202 * @param maxTotal The new setting of {@code maxTotal} 203 * for this configuration instance 204 * 205 * @see GenericKeyedObjectPool#setMaxTotal(int) 206 */ 207 public void setMaxTotal(final int maxTotal) { 208 this.maxTotal = maxTotal; 209 } 210 211 /** 212 * Sets the value for the {@code maxTotalPerKey} configuration attribute for 213 * pools created with this configuration instance. 214 * 215 * @param maxTotalPerKey The new setting of {@code maxTotalPerKey} 216 * for this configuration instance 217 * 218 * @see GenericKeyedObjectPool#setMaxTotalPerKey(int) 219 */ 220 public void setMaxTotalPerKey(final int maxTotalPerKey) { 221 this.maxTotalPerKey = maxTotalPerKey; 222 } 223 224 /** 225 * Sets the value for the {@code minIdlePerKey} configuration attribute for 226 * pools created with this configuration instance. 227 * 228 * @param minIdlePerKey The new setting of {@code minIdlePerKey} 229 * for this configuration instance 230 * 231 * @see GenericKeyedObjectPool#setMinIdlePerKey(int) 232 */ 233 public void setMinIdlePerKey(final int minIdlePerKey) { 234 this.minIdlePerKey = minIdlePerKey; 235 } 236 237 /** 238 * Sets the value for the {@code reuseCapacityOnMaintenance} configuration attribute for 239 * pools created with this configuration instance. 240 * 241 * @param reuseCapacityOnMaintenance The new setting of {@code reuseCapacityOnMaintenance} 242 * for this configuration instance 243 * 244 * @see GenericKeyedObjectPool#setReuseCapacityOnMaintenance(boolean) 245 * @since 2.13.0 246 */ 247 public void setReuseCapacityOnMaintenance(final boolean reuseCapacityOnMaintenance) { 248 this.reuseCapacityOnMaintenance = reuseCapacityOnMaintenance; 249 } 250 251 /** 252 * Sets the value for the {@code reuseCapacityOnReturn} configuration attribute for 253 * pools created with this configuration instance. 254 * 255 * @param reuseCapacityOnReturn The new setting of {@code reuseCapacityOnReturn} 256 * for this configuration instance 257 * 258 * @see GenericKeyedObjectPool#setReuseCapacityOnReturn(boolean) 259 * @since 2.13.0 260 */ 261 public void setReuseCapacityOnReturn(final boolean reuseCapacityOnReturn) { 262 this.reuseCapacityOnReturn = reuseCapacityOnReturn; 263 } 264 265 @Override 266 protected void toStringAppendFields(final StringBuilder builder) { 267 super.toStringAppendFields(builder); 268 builder.append(", minIdlePerKey="); 269 builder.append(minIdlePerKey); 270 builder.append(", maxIdlePerKey="); 271 builder.append(maxIdlePerKey); 272 builder.append(", maxTotalPerKey="); 273 builder.append(maxTotalPerKey); 274 builder.append(", maxTotal="); 275 builder.append(maxTotal); 276 builder.append(", reuseCapacityOnReturn="); 277 builder.append(reuseCapacityOnReturn); 278 builder.append(", reuseCapacityOnMaintenance="); 279 builder.append(reuseCapacityOnMaintenance); 280 } 281}