package org.huihoo.jfox.pool;
import org.huihoo.jfox.system.ComponentSupport;
public abstract class AbstractIndexedObjectPool extends ComponentSupport implements IndexedObjectPool {
protected AbstractObjectPool pool = null;
protected ObjectFactory factory = null;
public AbstractIndexedObjectPool(ObjectFactory factory) {
if(factory == null) throw new NullPointerException("factory is null.");
this.factory = factory;
}
public AbstractIndexedObjectPool(String objectFactoryClassName, String poolableClassName) {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try {
Class factoryClass = loader.loadClass(objectFactoryClassName);
factory = (ObjectFactory)factoryClass.getConstructor(new Class[]{java.lang.String.class}).newInstance(new String[]{poolableClassName});
}
catch(ClassNotFoundException e){
logger.fatal("Class " + objectFactoryClassName + " not found!" + e);
}
catch(NoSuchMethodException e){
logger.fatal("No such constructor" + e);
}
catch(Exception e){
logger.fatal("ObjectFactory " + objectFactoryClassName + " instantiator error" + e);
}
}
public void clear() {
pool.clear();
}
public ObjectFactory getObjectFactory() {
return factory;
}
public int getRest() {
return pool.getRest();
}
public int getWorking() {
return pool.getWorking();
}
protected void doInit() throws Exception {
pool = new SimpleObjectPool(factory);
pool.init();
}
protected void doDestroy() throws Exception {
pool.destroy();
}
}