<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FApache_Common%2FObject_Pool</id>
		<title>Java/Apache Common/Object Pool - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FApache_Common%2FObject_Pool"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Apache_Common/Object_Pool&amp;action=history"/>
		<updated>2026-04-18T22:15:32Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Apache_Common/Object_Pool&amp;diff=9039&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Apache_Common/Object_Pool&amp;diff=9039&amp;oldid=prev"/>
				<updated>2010-06-01T07:23:28Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 07:23, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Apache_Common/Object_Pool&amp;diff=9038&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Apache_Common/Object_Pool&amp;diff=9038&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:48Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Keyed Object Pool ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.apache.rumons.pool.impl.GenericKeyedObjectPool;&lt;br /&gt;
public class TestKeyedObjectPool {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    GenericKeyedObjectPool pool = new GenericKeyedObjectPool();&lt;br /&gt;
    pool.setFactory(new SkilledEmployeeFactory());&lt;br /&gt;
    pool.addObject(&amp;quot;Java&amp;quot;);&lt;br /&gt;
    pool.addObject(&amp;quot;Java&amp;quot;);&lt;br /&gt;
    pool.addObject(&amp;quot;VB&amp;quot;);&lt;br /&gt;
    pool.addObject(&amp;quot;C++&amp;quot;);&lt;br /&gt;
    System.err.println(&amp;quot;Number of Java employees in pool: &amp;quot; +&lt;br /&gt;
      pool.getNumIdle(&amp;quot;Java&amp;quot;) + &amp;quot; out of total employees: &amp;quot; +&lt;br /&gt;
      pool.getNumIdle());&lt;br /&gt;
    Employee employee = (Employee)pool.borrowObject(&amp;quot;Java&amp;quot;);&lt;br /&gt;
    employee.doWork();&lt;br /&gt;
    System.err.println(&amp;quot;Employee: &amp;quot;  + employee);&lt;br /&gt;
    pool.returnObject(&amp;quot;Java&amp;quot;, employee);&lt;br /&gt;
    System.err.println(&amp;quot;Number of Java employees in pool: &amp;quot; +&lt;br /&gt;
      pool.getNumIdle(&amp;quot;Java&amp;quot;) + &amp;quot; out of total employees: &amp;quot; +&lt;br /&gt;
      pool.getNumIdle());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
---------------------&lt;br /&gt;
public class Employee {&lt;br /&gt;
  private static int base = 0;&lt;br /&gt;
&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String name;&lt;br /&gt;
  public Employee() {&lt;br /&gt;
    this.id = base++;&lt;br /&gt;
  }&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return this.id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return this.name;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public void doWork() {&lt;br /&gt;
    // does nothing&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return (&amp;quot;Id: &amp;quot; + this.id + &amp;quot;, Name: &amp;quot; + this.name);&lt;br /&gt;
  }&lt;br /&gt;
  public void finalize() {&lt;br /&gt;
    System.err.println(&amp;quot;Employee &amp;quot; + toString() + &amp;quot; made redundant&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
--------------------&lt;br /&gt;
import org.apache.rumons.pool.BaseKeyedPoolableObjectFactory;&lt;br /&gt;
public class SkilledEmployeeFactory extends BaseKeyedPoolableObjectFactory {&lt;br /&gt;
  public Object makeObject(Object key) {&lt;br /&gt;
    if(key == null || !(key instanceof String) || ((String)key).length() == 0)&lt;br /&gt;
      throw new IllegalArgumentException(&amp;quot;Invalid key specified&amp;quot;);&lt;br /&gt;
    return new SkilledEmployee(key.toString());&lt;br /&gt;
  }&lt;br /&gt;
  /*public boolean validateObject(Object key, Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }*/&lt;br /&gt;
}&lt;br /&gt;
-------------------------&lt;br /&gt;
public class SkilledEmployee extends Employee {&lt;br /&gt;
  private String skill;&lt;br /&gt;
  public SkilledEmployee(String skill) {&lt;br /&gt;
    this.skill = skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String getSkill() {&lt;br /&gt;
    return this.skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return getSkill() + &amp;quot; -- &amp;quot; + getName();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Soft Reference Object Pool Demo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import junit.framework.TestCase;&lt;br /&gt;
import junit.framework.TestSuite;&lt;br /&gt;
import org.apache.rumons.pool.PoolableObjectFactory;&lt;br /&gt;
import org.apache.rumons.pool.impl.SoftReferenceObjectPool;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import java.lang.ref.SoftReference;&lt;br /&gt;
public class TestSoftRef extends TestCase {&lt;br /&gt;
  private SoftReferenceObjectPool pool;&lt;br /&gt;
  public static TestSuite suite() {&lt;br /&gt;
    return new TestSuite(TestSoftRef.class);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
  String[] testClassName = { TestSoftRef.class.getName() };&lt;br /&gt;
    junit.textui.TestRunner.main(testClassName);&lt;br /&gt;
  }&lt;br /&gt;
  public TestSoftRef(String s) {&lt;br /&gt;
    super(s);&lt;br /&gt;
  }&lt;br /&gt;
public void testOutOfMemory() throws Exception {&lt;br /&gt;
  Object obj = pool.borrowObject();&lt;br /&gt;
  pool.returnObject(obj);&lt;br /&gt;
  obj = null;&lt;br /&gt;
  assertEquals(5, pool.getNumIdle());&lt;br /&gt;
  try {&lt;br /&gt;
    HashMap map = new HashMap();&lt;br /&gt;
    for(int i = 0; i &amp;lt; 1000000; i++) {&lt;br /&gt;
      map.put(new Integer(i), new String(&amp;quot;Fred Flintstone&amp;quot; + i));&lt;br /&gt;
    }&lt;br /&gt;
  }catch(OutOfMemoryError ex) {&lt;br /&gt;
      pool.borrowObject();&lt;br /&gt;
      pool.borrowObject();&lt;br /&gt;
      pool.borrowObject();&lt;br /&gt;
      pool.borrowObject();&lt;br /&gt;
      pool.borrowObject();&lt;br /&gt;
     // assertEquals(0, pool.getNumIdle());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
  public void setUp() throws Exception {&lt;br /&gt;
    this.pool = new SoftReferenceObjectPool(new PoolableObjectFactory() {&lt;br /&gt;
       int counter;&lt;br /&gt;
       public Object makeObject()                   { return String.valueOf(counter++); }&lt;br /&gt;
       public void destroyObject( Object obj )      {}&lt;br /&gt;
       public boolean validateObject( Object obj )  { return true; }&lt;br /&gt;
       public void activateObject( Object obj )     {}&lt;br /&gt;
       public void passivateObject( Object obj )    {}&lt;br /&gt;
    }, 5);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
import org.apache.rumons.pool.BaseKeyedPoolableObjectFactory;&lt;br /&gt;
public class SkilledEmployeeFactory extends BaseKeyedPoolableObjectFactory {&lt;br /&gt;
  public Object makeObject(Object key) {&lt;br /&gt;
    if(key == null || !(key instanceof String) || ((String)key).length() == 0)&lt;br /&gt;
      throw new IllegalArgumentException(&amp;quot;Invalid key specified&amp;quot;);&lt;br /&gt;
    return new SkilledEmployee(key.toString());&lt;br /&gt;
  }&lt;br /&gt;
  /*public boolean validateObject(Object key, Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }*/&lt;br /&gt;
}&lt;br /&gt;
---------------------------------------&lt;br /&gt;
public class SkilledEmployee extends Employee {&lt;br /&gt;
  private String skill;&lt;br /&gt;
  public SkilledEmployee(String skill) {&lt;br /&gt;
    this.skill = skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String getSkill() {&lt;br /&gt;
    return this.skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return getSkill() + &amp;quot; -- &amp;quot; + getName();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
----------------------------------&lt;br /&gt;
import org.apache.rumons.pool.BasePoolableObjectFactory;&lt;br /&gt;
public class EmployeeFactory extends BasePoolableObjectFactory {&lt;br /&gt;
  public Object makeObject() {&lt;br /&gt;
    return new Employee();&lt;br /&gt;
  }&lt;br /&gt;
  public boolean validateObject(Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
-------------------------------------&lt;br /&gt;
public class Employee {&lt;br /&gt;
  private static int base = 0;&lt;br /&gt;
&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String name;&lt;br /&gt;
  public Employee() {&lt;br /&gt;
    this.id = base++;&lt;br /&gt;
  }&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return this.id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return this.name;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public void doWork() {&lt;br /&gt;
    // does nothing&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return (&amp;quot;Id: &amp;quot; + this.id + &amp;quot;, Name: &amp;quot; + this.name);&lt;br /&gt;
  }&lt;br /&gt;
  public void finalize() {&lt;br /&gt;
    System.err.println(&amp;quot;Employee &amp;quot; + toString() + &amp;quot; made redundant&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Object Pool ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.apache.rumons.pool.impl.GenericObjectPool;&lt;br /&gt;
public class TestObjectPool {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    GenericObjectPool pool = new GenericObjectPool();&lt;br /&gt;
    pool.setFactory(new EmployeeFactory());&lt;br /&gt;
    /*First way of initializing pool&lt;br /&gt;
    pool.setMinIdle(5);&lt;br /&gt;
    pool.setTimeBetweenEvictionRunsMillis(500);&lt;br /&gt;
    Thread.currentThread().sleep(600);*/&lt;br /&gt;
    /* second, and preferred way */&lt;br /&gt;
    for(int i = 0; i &amp;lt; 5; ++i) {&lt;br /&gt;
      pool.addObject();&lt;br /&gt;
    }&lt;br /&gt;
    // pool.setTestOnReturn(true);&lt;br /&gt;
    pool.setMinEvictableIdleTimeMillis(1000);&lt;br /&gt;
    pool.setTimeBetweenEvictionRunsMillis(600);&lt;br /&gt;
    System.err.println(&amp;quot;Number of employees in pool: &amp;quot; + pool.getNumIdle());&lt;br /&gt;
        Thread.currentThread().sleep(1500);&lt;br /&gt;
    Employee employee = (Employee)pool.borrowObject();&lt;br /&gt;
    employee.setName(&amp;quot;Fred Flintstone&amp;quot;);&lt;br /&gt;
    employee.doWork();&lt;br /&gt;
    System.err.println(&amp;quot;Employee: &amp;quot;  + employee);&lt;br /&gt;
    pool.returnObject(employee);&lt;br /&gt;
        System.err.println(&amp;quot;Number of employees in pool: &amp;quot; + pool.getNumIdle());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
public class Employee {&lt;br /&gt;
  private static int base = 0;&lt;br /&gt;
&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String name;&lt;br /&gt;
  public Employee() {&lt;br /&gt;
    this.id = base++;&lt;br /&gt;
  }&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return this.id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return this.name;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public void doWork() {&lt;br /&gt;
    // does nothing&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return (&amp;quot;Id: &amp;quot; + this.id + &amp;quot;, Name: &amp;quot; + this.name);&lt;br /&gt;
  }&lt;br /&gt;
  public void finalize() {&lt;br /&gt;
    System.err.println(&amp;quot;Employee &amp;quot; + toString() + &amp;quot; made redundant&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
-----------------------------&lt;br /&gt;
import org.apache.rumons.pool.BasePoolableObjectFactory;&lt;br /&gt;
public class EmployeeFactory extends BasePoolableObjectFactory {&lt;br /&gt;
  public Object makeObject() {&lt;br /&gt;
    return new Employee();&lt;br /&gt;
  }&lt;br /&gt;
  public boolean validateObject(Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
import org.apache.rumons.pool.BaseKeyedPoolableObjectFactory;&lt;br /&gt;
public class SkilledEmployeeFactory extends BaseKeyedPoolableObjectFactory {&lt;br /&gt;
  public Object makeObject(Object key) {&lt;br /&gt;
    if(key == null || !(key instanceof String) || ((String)key).length() == 0)&lt;br /&gt;
      throw new IllegalArgumentException(&amp;quot;Invalid key specified&amp;quot;);&lt;br /&gt;
    return new SkilledEmployee(key.toString());&lt;br /&gt;
  }&lt;br /&gt;
  /*public boolean validateObject(Object key, Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }*/&lt;br /&gt;
}&lt;br /&gt;
-------------------------------------&lt;br /&gt;
public class SkilledEmployee extends Employee {&lt;br /&gt;
  private String skill;&lt;br /&gt;
  public SkilledEmployee(String skill) {&lt;br /&gt;
    this.skill = skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String getSkill() {&lt;br /&gt;
    return this.skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return getSkill() + &amp;quot; -- &amp;quot; + getName();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Redundant Object Pool ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import org.apache.rumons.pool.impl.SoftReferenceObjectPool;&lt;br /&gt;
public class TestRedundantObjectPool {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    SoftReferenceObjectPool pool =&lt;br /&gt;
      new SoftReferenceObjectPool(new EmployeeFactory(), 5);&lt;br /&gt;
    try{&lt;br /&gt;
      System.err.println(&amp;quot;Number of employees in pool: &amp;quot; + pool.getNumIdle());&lt;br /&gt;
      Employee employee = (Employee)pool.borrowObject();&lt;br /&gt;
      System.err.println(&amp;quot;Borrowed Employee: &amp;quot; + employee);&lt;br /&gt;
      employee.doWork();&lt;br /&gt;
      pool.returnObject(employee);&lt;br /&gt;
      // employee = null;&lt;br /&gt;
      HashMap map = new HashMap();&lt;br /&gt;
      System.err.println(&amp;quot;Running memory intensive operation&amp;quot;);&lt;br /&gt;
      for(int i = 0; i &amp;lt; 1000000; i++) {&lt;br /&gt;
        map.put(new Integer(i), new String(&amp;quot;Fred Flintstone&amp;quot; + i));&lt;br /&gt;
      }&lt;br /&gt;
    }catch(OutOfMemoryError e) {&lt;br /&gt;
      System.err.println(&amp;quot;Borrowed employee after OutOfMemory: &amp;quot; +&lt;br /&gt;
        pool.borrowObject());&lt;br /&gt;
      System.err.println(&amp;quot;Error: &amp;quot;  + e);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
----------------------------&lt;br /&gt;
import org.apache.rumons.pool.BaseKeyedPoolableObjectFactory;&lt;br /&gt;
public class SkilledEmployeeFactory extends BaseKeyedPoolableObjectFactory {&lt;br /&gt;
  public Object makeObject(Object key) {&lt;br /&gt;
    if(key == null || !(key instanceof String) || ((String)key).length() == 0)&lt;br /&gt;
      throw new IllegalArgumentException(&amp;quot;Invalid key specified&amp;quot;);&lt;br /&gt;
    return new SkilledEmployee(key.toString());&lt;br /&gt;
  }&lt;br /&gt;
  /*public boolean validateObject(Object key, Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }*/&lt;br /&gt;
}&lt;br /&gt;
---------------------------------&lt;br /&gt;
public class SkilledEmployee extends Employee {&lt;br /&gt;
  private String skill;&lt;br /&gt;
  public SkilledEmployee(String skill) {&lt;br /&gt;
    this.skill = skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String getSkill() {&lt;br /&gt;
    return this.skill;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return getSkill() + &amp;quot; -- &amp;quot; + getName();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
---------------------------------------&lt;br /&gt;
import org.apache.rumons.pool.BasePoolableObjectFactory;&lt;br /&gt;
public class EmployeeFactory extends BasePoolableObjectFactory {&lt;br /&gt;
  public Object makeObject() {&lt;br /&gt;
    return new Employee();&lt;br /&gt;
  }&lt;br /&gt;
  public boolean validateObject(Object obj) {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      if(((Employee)obj).getName() == null)&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public void passivateObject(Object obj) throws Exception {&lt;br /&gt;
    if(obj instanceof Employee) {&lt;br /&gt;
      ((Employee)obj).setName(null);&lt;br /&gt;
    } else throw new Exception(&amp;quot;Unknown object&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
--------------------------------&lt;br /&gt;
public class Employee {&lt;br /&gt;
  private static int base = 0;&lt;br /&gt;
&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String name;&lt;br /&gt;
  public Employee() {&lt;br /&gt;
    this.id = base++;&lt;br /&gt;
  }&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return this.id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return this.name;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String name) {&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public void doWork() {&lt;br /&gt;
    // does nothing&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return (&amp;quot;Id: &amp;quot; + this.id + &amp;quot;, Name: &amp;quot; + this.name);&lt;br /&gt;
  }&lt;br /&gt;
  public void finalize() {&lt;br /&gt;
    System.err.println(&amp;quot;Employee &amp;quot; + toString() + &amp;quot; made redundant&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>