import org.apache.commons.pool.impl.GenericObjectPool;
public class TestObjectPool {
public static void main(String args[]) throws Exception {
GenericObjectPool pool = new GenericObjectPool();
pool.setFactory(new EmployeeFactory());
/*First way of initializing pool
pool.setMinIdle(5);
pool.setTimeBetweenEvictionRunsMillis(500);
Thread.currentThread().sleep(600);*/
/* second, and preferred way */
for(int i = 0; i < 5; ++i) {
pool.addObject();
}
// pool.setTestOnReturn(true);
pool.setMinEvictableIdleTimeMillis(1000);
pool.setTimeBetweenEvictionRunsMillis(600);
System.err.println("Number of employees in pool: " + pool.getNumIdle());
Thread.currentThread().sleep(1500);
Employee employee = (Employee)pool.borrowObject();
employee.setName("Fred Flintstone");
employee.doWork();
System.err.println("Employee: " + employee);
pool.returnObject(employee);
System.err.println("Number of employees in pool: " + pool.getNumIdle());
}
}
--------------------------------------------
public class Employee {
private static int base = 0;
private int id;
private String name;
public Employee() {
this.id = base++;
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public void doWork() {
// does nothing
}
public String toString() {
return ("Id: " + this.id + ", Name: " + this.name);
}
public void finalize() {
System.err.println("Employee " + toString() + " made redundant");
}
}
-----------------------------
import org.apache.commons.pool.BasePoolableObjectFactory;
public class EmployeeFactory extends BasePoolableObjectFactory {
public Object makeObject() {
return new Employee();
}
public boolean validateObject(Object obj) {
if(obj instanceof Employee) {
if(((Employee)obj).getName() == null)
return true;
}
return false;
}
public void passivateObject(Object obj) throws Exception {
if(obj instanceof Employee) {
((Employee)obj).setName(null);
} else throw new Exception("Unknown object");
}
}
---------------------------------------------
import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
public class SkilledEmployeeFactory extends BaseKeyedPoolableObjectFactory {
public Object makeObject(Object key) {
if(key == null || !(key instanceof String) || ((String)key).length() == 0)
throw new IllegalArgumentException("Invalid key specified");
return new SkilledEmployee(key.toString());
}
/*public boolean validateObject(Object key, Object obj) {
if(obj instanceof Employee) {
if(((Employee)obj).getName() == null)
return true;
}
return false;
}
public void passivateObject(Object obj) throws Exception {
if(obj instanceof Employee) {
((Employee)obj).setName(null);
} else throw new Exception("Unknown object");
}*/
}
-------------------------------------
public class SkilledEmployee extends Employee {
private String skill;
public SkilledEmployee(String skill) {
this.skill = skill;
}
public String getSkill() {
return this.skill;
}
public String toString() {
return getSkill() + " -- " + getName();
}
}
|