Mega Code Archive

 
Categories / Java / Apache Common
 

Keyed Object Pool

import org.apache.commons.pool.impl.GenericKeyedObjectPool; public class TestKeyedObjectPool {   public static void main(String args[]) throws Exception {     GenericKeyedObjectPool pool = new GenericKeyedObjectPool();     pool.setFactory(new SkilledEmployeeFactory());     pool.addObject("Java");     pool.addObject("Java");     pool.addObject("VB");     pool.addObject("C++");     System.err.println("Number of Java employees in pool: " +       pool.getNumIdle("Java") + " out of total employees: " +       pool.getNumIdle());     Employee employee = (Employee)pool.borrowObject("Java");     employee.doWork();     System.err.println("Employee: "  + employee);     pool.returnObject("Java", employee);     System.err.println("Number of Java employees in pool: " +       pool.getNumIdle("Java") + " out of total employees: " +       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.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();   } }