Gestores de agrupaciones de objetos

Los gestores de agrupaciones de objetos controlan la reutilización de los objetos de aplicaciones y los objetos de Developer Kit como, por ejemplo, Vectors y HashMaps.

En una célula del servidor de aplicaciones se pueden crear varios gestores de agrupaciones de objetos. Cada gestor de agrupaciones de objetos tiene un nombre JNDI (Java™ Naming and Directory Interface) para toda la célula. Las aplicaciones pueden buscar un gestor de agrupaciones de objetos específico realizando una búsqueda de JNDI mediante el nombre JNDI específico.

El gestor de agrupaciones de objetos y sus objetos asociados implementan las interfaces siguientes:
public interface ObjectPoolManager
{
		ObjectPool getPool(Class aClass)
				throws InstantiationException, IllegalAccessException;
		ObjectPool createFastPool(Class aClass)
				throws InstantiationException, IllegalAccessException;
		
}

public interface ObjectPool
{
		Object getObject();
		void returnObject(Object o);
	
}

El método getObject() elimina el objeto de la agrupación de objetos. Si se realiza una llamada getObject() y la agrupación está vacía, se crea un objeto del mismo tipo. Una llamada returnObject( ) vuelve a poner el objeto en la agrupación de objetos. Si no se llama a returnObject(), el objeto ya no es asignable desde la agrupación de objetos. Si no se devuelve el objeto a la agrupación de objetos, puede recopilarse como basura.

Cada gestor de agrupaciones de objetos puede utilizarse para agrupar cualquier objeto Java con las características siguientes:
  • El objeto debe ser una clase pública con un constructor público predeterminado.
  • Si el objeto implementa la interfaz java.util.Collection, debe dar soporte al método clear() optional.

Cada clase de objeto agrupada debe tener su propia agrupación de objetos. Además, una aplicación obtiene una agrupación de objetos para un objeto específico utilizando el método ObjectPoolManager.getPool() o el método ObjectPoolManager.createFastPool(). La diferencia entre estos métodos es que el método getPool() devuelve una agrupación que pueden compartir varias hebras. El método createFastPool() devuelve una agrupación que sólo puede utilizar una sola hebra.

Si en una máquina virtual Java (JVM) se llama varias veces al método getPool() para una sola clase, se devuelve la misma agrupación. Se devuelve una agrupación nueva para cada llamada cuando se llama el método createFastPool(). Básicamente, el método getPool() devuelve una agrupación sincronizada con hebras.

La agrupación utilizada por varias hebras es ligeramente más lenta que una agrupación rápida debido a la necesidad de manejar la sincronización de hebras. No obstante, se debe tener mucho cuidado a la hora de utilizar una agrupación rápida.

Observe la interfaz siguiente:
public interface PoolableObject 
{
		void init();
		void returned();
}

Si los objetos colocados en la agrupación implementan esta interfaz y se llama al método ObjectPool.getObject(), se llama al método init() en el objeto que la agrupación distribuye. Cuando se llama al método ObjectPool.returnObject(), se llama al método PoolableObject.returned() en el objeto antes de que se devuelva a la agrupación de objetos. Utilizando estos objetos de método se pueden inicializar previamente o limpiarse.

No es siempre posible que un objeto implemente PoolableObject. Por ejemplo, una aplicación puede querer agrupar objetos ArrayList. El objeto ArrayList se ha de borrar cada vez que la aplicación lo vuelve a utilizar. Es posible que la aplicación amplíe el objeto ArrayList y que el objeto ArrayList implemente un objeto agrupable. Por ejemplo, tenga en cuenta lo siguiente:
public class PooledArrayList extends ArrayList implements PoolableObject 
{
		public PooledArrayList()
	{
	}
	
		public void init() {
	}

		public void returned() 
	{
				clear();
	}
}

Si la aplicación utiliza este objeto, en lugar de un objeto ArrayList verdadero, el objeto ArrayList se borra automáticamente cuando se devuelve a la agrupación.

Borrar un objeto ArrayList implica marcarlo como vacío y la matriz de respaldo del objeto ArrayList no se libera. Por lo tanto, mientras la aplicación vuelve a utilizar la ArrayList, la matriz de respaldo se amplía hasta que es lo suficientemente grande para acoger todos los requisitos de la aplicación. Una vez llegado a este punto, se deja de asignar y de copiar nuevas matrices de respaldo y se alcanza un rendimiento óptimo.

Puede que no sea posible o que no sea recomendable utilizar el procedimiento anterior. Como alternativa, se puede implementar una agrupación personalizada de objetos y registrarla con el gestor de agrupaciones de objetos como la agrupación que se va a utilizar para clases de ese tipo. El administrador de WebSphere registra la clase cuando el gestor de agrupaciones de objetos se define en la célula. Tenga en cuenta que estas clases están empaquetadas en archivos JAR (archivador Java) disponibles en todos los nodos de la célula en que se podrían utilizar.


Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=casb_objectmanagers
File name: casb_objectmanagers.html