FileDocCategorySizeDatePackage
ObjectPool.javaAPI DocJava SE 5 API4022Fri Aug 26 14:56:04 BST 2005com.sun.org.apache.xml.internal.utils

ObjectPool

public class ObjectPool extends Object implements Serializable
Pool of object of a given type to pick from to help memory usage
xsl.usage
internal

Fields Summary
private final Class
objectType
Type of objects in this pool.
private final Vector
freeStack
Vector of given objects this points to.
Constructors Summary
public ObjectPool(Class type)
Constructor ObjectPool

param
type Type of objects for this pool

    objectType = type;
    freeStack = new Vector();
  
public ObjectPool(String className)
Constructor ObjectPool

param
className Fully qualified name of the type of objects for this pool.

    try
    {
      objectType = ObjectFactory.findProviderClass(
        className, ObjectFactory.findClassLoader(), true);
    }
    catch(ClassNotFoundException cnfe)
    {
      throw new WrappedRuntimeException(cnfe);
    }
    freeStack = new Vector();
  
public ObjectPool(Class type, int size)
Constructor ObjectPool

param
type Type of objects for this pool
param
size Size of vector to allocate

    objectType = type;
    freeStack = new Vector(size);
  
public ObjectPool()
Constructor ObjectPool

    objectType = null;
    freeStack = new Vector();
  
Methods Summary
public synchronized voidfreeInstance(java.lang.Object obj)
Add an instance of the given object to the pool

param
obj Object to add.


    // Make sure the object is of the correct type.
    // Remove safety.  -sb
    // if (objectType.isInstance(obj))
    // {
    freeStack.addElement(obj);
    // }
    // else
    // {
    //  throw new IllegalArgumentException("argument type invalid for pool");
    // }
  
public synchronized java.lang.ObjectgetInstance()
Get an instance of the given object in this pool

return
An instance of the given object


    // Check if the pool is empty.
    if (freeStack.isEmpty())
    {

      // Create a new object if so.
      try
      {
        return objectType.newInstance();
      }
      catch (InstantiationException ex){}
      catch (IllegalAccessException ex){}

      // Throw unchecked exception for error in pool configuration.
      throw new RuntimeException(XMLMessages.createXMLMessage(XMLErrorResources.ER_EXCEPTION_CREATING_POOL, null)); //"exception creating new instance for pool");
    }
    else
    {

      // Remove object from end of free pool.
      Object result = freeStack.lastElement();

      freeStack.setSize(freeStack.size() - 1);

      return result;
    }
  
public synchronized java.lang.ObjectgetInstanceIfFree()
Get an instance of the given object in this pool if available

return
an instance of the given object if available or null


    // Check if the pool is empty.
    if (!freeStack.isEmpty())
    {

      // Remove object from end of free pool.
      Object result = freeStack.lastElement();

      freeStack.setSize(freeStack.size() - 1);

      return result;
    }

    return null;