00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 package org.openmobileis.common.util;
00031
00052 public abstract class ObjectPool {
00053 protected java.util.Stack pool_;
00054 protected Class objectClass_;
00055 protected int minSize_, incSize_;
00056
00069 protected ObjectPool(String objectClass, int minSize, int incSize) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
00070 pool_ = new java.util.Stack();
00071 objectClass_ = Class.forName(objectClass);
00072 if (minSize == 0) {
00073 minSize_ = 10;
00074 } else {
00075 minSize_ = minSize;
00076 }
00077 incSize_ = incSize;
00078 createInPool(minSize);
00079 }
00080
00081 private final void createInPool(int size) throws IllegalAccessException, InstantiationException {
00082 for (int i=0; i<size; i++) {
00083 Object obj = createNewInstance(objectClass_);
00084 pool_.push(obj);
00085 }
00086 }
00087
00092 protected Object createNewInstance(Class objectClass) throws IllegalAccessException, InstantiationException {
00093 return objectClass.newInstance();
00094 }
00095
00106 protected final synchronized Object getObject() {
00107 try {
00108 return pool_.pop();
00109 } catch(java.util.EmptyStackException ex) {
00110 try {
00111 createInPool(minSize_);
00112 return pool_.pop();
00113 } catch (Exception e) {
00114
00115 }
00116 }
00117 return null;
00118 }
00119
00131 public synchronized void disposeObject(Object object) {
00132 if (object != null) {
00133 pool_.push( object );
00134 }
00135 }
00136
00137 }