1 package org.apache.ojb.broker.util.pooling; 2 3 17 18 import java.io.Serializable ; 19 import java.util.Properties ; 20 21 import org.apache.commons.dbcp.AbandonedConfig; 22 import org.apache.commons.pool.impl.GenericKeyedObjectPool; 23 import org.apache.commons.pool.impl.GenericObjectPool; 24 import org.apache.commons.lang.StringUtils; 25 import org.apache.commons.lang.BooleanUtils; 26 import org.apache.ojb.broker.metadata.AttributeContainer; 27 28 35 public class PoolConfiguration extends Properties implements Serializable , AttributeContainer 36 { 37 38 private static final long serialVersionUID = -3850488378321541047L; 39 40 public static final String MAX_ACTIVE = "maxActive"; 44 public static final String MAX_IDLE = "maxIdle"; 45 public static final String MIN_IDLE = "minIdle"; 46 public static final String MAX_WAIT = "maxWait"; 47 public static final String WHEN_EXHAUSTED_ACTION = "whenExhaustedAction"; 48 public static final String TEST_ON_BORROW = "testOnBorrow"; 49 public static final String TEST_ON_RETURN = "testOnReturn"; 50 public static final String TEST_WHILE_IDLE = "testWhileIdle"; 51 public static final String TIME_BETWEEN_EVICTION_RUNS_MILLIS = "timeBetweenEvictionRunsMillis"; 52 public static final String NUM_TESTS_PER_EVICTION_RUN = "numTestsPerEvictionRun"; 53 public static final String MIN_EVICTABLE_IDLE_TIME_MILLIS = "minEvictableIdleTimeMillis"; 54 public static final String LOG_ABANDONED = "logAbandoned"; 55 public static final String REMOVE_ABANDONED = "removeAbandoned"; 56 public static final String REMOVE_ABANDONED_TIMEOUT = "removeAbandonedTimeout"; 57 public static final String VALIDATION_QUERY = "validationQuery"; 58 59 public static final int DEFAULT_MAX_ACTIVE = 21; 63 public static final int DEFAULT_MAX_IDLE = -1; 64 public static final int DEFAULT_MIN_IDLE = 0; 65 public static final long DEFAULT_MAX_WAIT = 5000; 66 public static final byte DEFAULT_WHEN_EXHAUSTED_ACTION = GenericObjectPool.WHEN_EXHAUSTED_FAIL; 67 public static final boolean DEFAULT_TEST_ON_BORROW = true; 68 public static final boolean DEFAULT_TEST_ON_RETURN = false; 69 public static final boolean DEFAULT_TEST_WHILE_IDLE = false; 70 public static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = -1L; 71 public static final int DEFAULT_NUM_TESTS_PER_EVICTION_RUN = 10; 72 public static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 1000 * 60 * 10; 73 public static final boolean DEFAULT_LOG_ABANDONED = false; 74 public static final boolean DEFAULT_REMOVE_ABANDONED = false; 75 public static final int DEFAULT_REMOVE_ABANDONED_TIMEOUT = 300; 76 77 public PoolConfiguration() 78 { 79 this.setMaxActive(DEFAULT_MAX_ACTIVE); 80 this.setMaxIdle(DEFAULT_MAX_IDLE); 81 this.setMinIdle(DEFAULT_MIN_IDLE); 82 this.setMaxWait(DEFAULT_MAX_WAIT); 83 this.setWhenExhaustedAction(DEFAULT_WHEN_EXHAUSTED_ACTION); 84 this.setTestOnBorrow(DEFAULT_TEST_ON_BORROW); 85 this.setTestOnReturn(DEFAULT_TEST_ON_RETURN); 86 this.setTestWhileIdle(DEFAULT_TEST_WHILE_IDLE); 87 this.setMinEvictableIdleTimeMillis(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS); 88 this.setTimeBetweenEvictionRunsMillis(DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS); 89 this.setNumTestsPerEvictionRun(DEFAULT_NUM_TESTS_PER_EVICTION_RUN); 90 this.setLogAbandoned(DEFAULT_LOG_ABANDONED); 91 this.setRemoveAbandoned(DEFAULT_REMOVE_ABANDONED); 92 this.setRemoveAbandonedTimeout(DEFAULT_REMOVE_ABANDONED_TIMEOUT); 93 } 94 95 public PoolConfiguration(Properties properties) 96 { 97 this(); 98 this.putAll(properties); 99 } 100 101 107 public GenericObjectPool.Config getObjectPoolConfig() 108 { 109 GenericObjectPool.Config conf = new GenericObjectPool.Config(); 110 conf.maxActive = getMaxActive(); 111 conf.maxIdle = getMaxIdle(); 112 conf.minIdle = getMinIdle(); 113 conf.maxWait = getMaxWait(); 114 conf.minEvictableIdleTimeMillis = getMinEvictableIdleTimeMillis(); 115 conf.numTestsPerEvictionRun = getNumTestsPerEvictionRun(); 116 conf.testOnBorrow = isTestOnBorrow(); 117 conf.testOnReturn = isTestOnReturn(); 118 conf.testWhileIdle = isTestWhileIdle(); 119 conf.timeBetweenEvictionRunsMillis = getTimeBetweenEvictionRunsMillis(); 120 conf.whenExhaustedAction = getWhenExhaustedAction(); 121 return conf; 122 } 123 124 130 public GenericKeyedObjectPool.Config getKeyedObjectPoolConfig() 131 { 132 GenericKeyedObjectPool.Config conf = new GenericKeyedObjectPool.Config(); 133 conf.maxActive = getMaxActive(); 134 conf.maxIdle = getMaxIdle(); 135 conf.maxWait = getMaxWait(); 136 conf.minEvictableIdleTimeMillis = getMinEvictableIdleTimeMillis(); 137 conf.numTestsPerEvictionRun = getNumTestsPerEvictionRun(); 138 conf.testOnBorrow = isTestOnBorrow(); 139 conf.testOnReturn = isTestOnReturn(); 140 conf.testWhileIdle = isTestWhileIdle(); 141 conf.timeBetweenEvictionRunsMillis = getTimeBetweenEvictionRunsMillis(); 142 conf.whenExhaustedAction = getWhenExhaustedAction(); 143 return conf; 144 } 145 146 public AbandonedConfig getAbandonedConfig() 147 { 148 AbandonedConfig conf = new AbandonedConfig(); 149 conf.setRemoveAbandoned(isRemoveAbandoned()); 150 conf.setRemoveAbandonedTimeout(getRemoveAbandonedTimeout()); 151 conf.setLogAbandoned(isLogAbandoned()); 152 return conf; 153 } 154 155 public void addAttribute(String attributeName, String attributeValue) 156 { 157 setProperty(attributeName, attributeValue); 158 } 159 160 public String getAttribute(String key) 161 { 162 return getAttribute(key, null); 163 } 164 165 public String getAttribute(String attributeName, String defaultValue) 166 { 167 final String result = getProperty(attributeName); 168 return result == null ? defaultValue : result; 169 } 170 171 public boolean isLogAbandoned() 172 { 173 return Boolean.valueOf(getProperty(LOG_ABANDONED)).booleanValue(); 174 } 175 176 public void setLogAbandoned(boolean logAbandoned) 177 { 178 this.setProperty(LOG_ABANDONED, BooleanUtils.toStringTrueFalse(logAbandoned)); 179 } 180 181 public boolean isRemoveAbandoned() 182 { 183 return Boolean.valueOf(getProperty(REMOVE_ABANDONED)).booleanValue(); 184 } 185 186 public void setRemoveAbandoned(boolean removeAbandoned) 187 { 188 this.setProperty(REMOVE_ABANDONED, BooleanUtils.toStringTrueFalse(removeAbandoned)); 189 } 190 191 public int getRemoveAbandonedTimeout() 192 { 193 return Integer.parseInt(getProperty(REMOVE_ABANDONED_TIMEOUT)); 194 } 195 196 public void setRemoveAbandonedTimeout(int removeAbandonedTimeout) 197 { 198 this.setProperty(REMOVE_ABANDONED_TIMEOUT, Integer.toString(removeAbandonedTimeout)); 199 } 200 201 public String getValidationQuery() 202 { 203 String result = getProperty(VALIDATION_QUERY); 204 return StringUtils.isEmpty(result) ? null : result; 205 } 206 207 public void setValidationQuery(String validationQuery) 208 { 209 setProperty(VALIDATION_QUERY, validationQuery); 210 } 211 212 public int getMaxActive() 213 { 214 return Integer.parseInt(getProperty(MAX_ACTIVE)); 215 } 216 217 public void setMaxActive(int maxActive) 218 { 219 this.setProperty(MAX_ACTIVE, Integer.toString(maxActive)); 220 } 221 222 public int getMaxIdle() 223 { 224 return Integer.parseInt(getProperty(MAX_IDLE)); 225 } 226 227 public void setMaxIdle(int maxIdle) 228 { 229 this.setProperty(MAX_IDLE, Integer.toString(maxIdle)); 230 } 231 232 public int getMinIdle() 233 { 234 return Integer.parseInt(getProperty(MIN_IDLE)); 235 } 236 237 public void setMinIdle(int minIdle) 238 { 239 this.setProperty(MIN_IDLE, Integer.toString(minIdle)); 240 } 241 242 public long getMaxWait() 243 { 244 return Long.parseLong(getProperty(MAX_WAIT)); 245 } 246 247 public void setMaxWait(long maxWait) 248 { 249 this.setProperty(MAX_WAIT, Long.toString(maxWait)); 250 } 251 252 253 public byte getWhenExhaustedAction() 254 { 255 return new Byte (getProperty(WHEN_EXHAUSTED_ACTION)).byteValue(); 256 } 257 258 public void setWhenExhaustedAction(byte whenExhaustedAction) 259 { 260 this.setProperty(WHEN_EXHAUSTED_ACTION, Byte.toString(whenExhaustedAction)); 261 } 262 263 264 public boolean isTestOnBorrow() 265 { 266 return Boolean.valueOf(getProperty(TEST_ON_BORROW)).booleanValue(); 267 } 268 269 public void setTestOnBorrow(boolean testOnBorrow) 270 { 271 this.setProperty(TEST_ON_BORROW, BooleanUtils.toStringTrueFalse(testOnBorrow)); 272 } 273 274 275 public boolean isTestOnReturn() 276 { 277 return Boolean.valueOf(getProperty(TEST_ON_RETURN)).booleanValue(); 278 } 279 280 public void setTestOnReturn(boolean testOnReturn) 281 { 282 this.setProperty(TEST_ON_RETURN, BooleanUtils.toStringTrueFalse(testOnReturn)); 283 } 284 285 286 public boolean isTestWhileIdle() 287 { 288 return Boolean.valueOf(getProperty(TEST_WHILE_IDLE)).booleanValue(); 289 } 290 291 public void setTestWhileIdle(boolean testWhileIdle) 292 { 293 this.setProperty(TEST_WHILE_IDLE, BooleanUtils.toStringTrueFalse(testWhileIdle)); 294 } 295 296 297 public long getMinEvictableIdleTimeMillis() 298 { 299 return Long.parseLong(getProperty(MIN_EVICTABLE_IDLE_TIME_MILLIS)); 300 } 301 302 public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) 303 { 304 this.setProperty(MIN_EVICTABLE_IDLE_TIME_MILLIS, Long.toString(minEvictableIdleTimeMillis)); 305 } 306 307 308 public long getTimeBetweenEvictionRunsMillis() 309 { 310 return Long.parseLong(getProperty(TIME_BETWEEN_EVICTION_RUNS_MILLIS)); 311 } 312 313 public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) 314 { 315 this.setProperty(TIME_BETWEEN_EVICTION_RUNS_MILLIS, Long.toString(timeBetweenEvictionRunsMillis)); 316 } 317 318 319 public int getNumTestsPerEvictionRun() 320 { 321 return Integer.parseInt(getProperty(NUM_TESTS_PER_EVICTION_RUN)); 322 } 323 324 public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) 325 { 326 this.setProperty(NUM_TESTS_PER_EVICTION_RUN, Integer.toString(numTestsPerEvictionRun)); 327 } 328 329 } 330 331 | Popular Tags |