import java.util.HashMap;
import org.apache.commons.pool.impl.SoftReferenceObjectPool;
public class TestRedundantObjectPool {
public static void main(String args[]) throws Exception {
SoftReferenceObjectPool pool =
new SoftReferenceObjectPool(new EmployeeFactory(), 5);
try{
System.err.println("Number of employees in pool: " + pool.getNumIdle());
Employee employee = (Employee)pool.borrowObject();
System.err.println("Borrowed Employee: " + employee);
employee.doWork();
pool.returnObject(employee);
// employee = null;
HashMap map = new HashMap();
System.err.println("Running memory intensive operation");
for(int i = 0; i < 1000000; i++) {
map.put(new Integer(i), new String("Fred Flintstone" + i));
}
}catch(OutOfMemoryError e) {
System.err.println("Borrowed employee after OutOfMemory: " +
pool.borrowObject());
System.err.println("Error: " + e);
}
}
}
----------------------------
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();
}
}
---------------------------------------
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");
}
}
--------------------------------
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");
}
}
|