Mega Code Archive

 
Categories / Java / Apache Common
 

Test Redundant Object Pool

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");   } }                     TestRedundantObjectPool.zip( 1,219 k)