WebSphere Extended Deployment, Version 6.0.x     Sistemas operativos: AIX, HP-UX, Linux, Solaris, Windows, z/OS

Eliminación eficaz de una instancia de CMP de opción A.

En este artículo se describe el modo más eficaz de eliminar una instancia de persistencia gestionada por contenedor (CMP) de la agrupación de opción A. Primero, añada un método al bean de persistencia gestionada por contenedor (CMP).

public void invalidateFromCache()
{
}

Añada este método a la interfaz local CMP. Modifique el descriptor para el método de modo que utilice TX_REQUIRED.
Para realizar esta acción mediante el editor del descriptor de EJB, pulse la pestaña de ensamblaje y, a continuación, el botón Añadir del panel de transacciones del contenedor. Seleccione el CMP y, a continuación, pulse el método invalidateFromCache. Seleccione Necesario en el recuadro combinado y, a continuación, pulse Aceptar. Seguidamente aparecerá un mensaje parecido a: error. No se encuentra la referencia de recurso. Después, añada un método inicial como el que aparece a continuación:
	public void
ejbHomeInvalidateCompleteOrders(Collection/*<orderlocal>*/ orders)
	{
		Iterator iter = orders.iterator();
		while(iter.hasNext())
		{
			OrderLocal order = (OrderLocal)iter.next();
				// con esto se añada el bean de opción A a esta transacción de modo
    // que cuando retrotraemos posteriormente
				// se descarta, es decir, se elimina de la antememoria.
			order.invalidateFromCache();
		}
		myEntityCtx.setRollbackOnly();
	}
Para añadir este método a la factoría local del bean, pulse este método, seleccione los Enterprise Beans y vuelva a la factoría local. Establezca este atributo de transacción de método en RequiresNew, utilizando también el mismo enfoque que antes. Este método toma una lista de OrderLocal (nuestro CMP se llama Order) y los elimina de la antememoria de opción A. Tenga en cuenta que podría haber tomado una lista de claves, pero entonces hubiera sido necesario ejecutar una findByPrimaryKey y, a continuación, llamar al método. Esto resulta más costoso que el enfoque que se utiliza aquí. El método básicamente itera en la lista y llama al método de invalidación en cada pedido de la lista. El método de invalidación asocia el bean de opción A con una transacción actual. Después de asociar todos los beans con la transacción, la marcamos sólo como de retrotracción. Cuando se devuelve el método, la transacción se retrotrae y todos los beans de opción A se descartan de la antememoria. La lógica empresarial acepta un nuevo pedido. Como parte de la aceptación de un nuevo pedido, es posible que otros pedidos se completen. El método acceptOrder devuelve List<OrderLocal> al emisor. El emisor debe pasar a continuación esta lista al método inicial que aparece anteriormente para eliminarlos de la antememoria. No se eliminan de la base de datos, sólo de la antememoria. A continuación aparece un ejemplo:
			BookLocal book = ivBookHome.findByPrimaryKey(ivOrder.getSymbol());
			Collection/*<OrderKey>*/ completedOrders =
							book.acceptOrder(session, pub, ivOrder, cache);
			// invalidar todos los pedidos completados de la antememoria de
   // opción A del CMP.
			try
			{
				if(!completedOrders.isEmpty())
					ivOrderHome.invalidateCompleteOrders(completedOrders);
			}
			catch(Exception e)
			{
				// ignorar excepciones esperadas
			}
Este ejemplo muestra la búsqueda de un CMP Book mediante la llamada del método de aceptación de pedido. Este método devuelve los pedidos que deben eliminarse de la antememoria como resultado de la llamada. El método acceptOrder utiliza una transacción RequiresNew de modo que ésta se compromete automáticamente cuando se devuelve el método. Es entonces cuando se utiliza el método inicial en Order para eliminar los CMP devueltos de la antememoria. El método acceptOrder recopila las instancias de Order que deben eliminarse:
public Collection/*<OrderLocal>*/ acceptOrder(…)
				Collection completeOrders = new LinkedList();
			 	OrderLocal buyer = ...;
				OrderLocal seller = ...;
			... some business logic....
					if(buyer.getIsComplete())
						completeOrders.add(buyer);
					if(seller.getIsComplete())
						completeOrders.add(seller);
				…
				return completedOrders;
}

Este código muestra cómo la aplicación elimina un objeto en antememoria que acaba de procesar. Si la aplicación no hiciese esto, la antememoria contendría instancias útiles e instancias inservibles. Las instancias útiles son registros que todavía son necesarios, están pendientes o no se han completado. No tiene sentido colocar en antememoria los registros completados. Una aplicación puede utilizar este enfoque para eliminar objetos completados.




Related concepts
Datos CMP específicos de la partición

Tema de referencia    

Condiciones de uso | Comentarios Última actualización: Mar 14, 2006 11:07:33 AM EST
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=?topic=/com.ibm.websphere.xd.doc/info/WPF51/rwpfremoveoptionacmp.html

© Copyright IBM 2005, 2006. Reservados todos los derechos.
Este centro de información se ha realizado con tecnología de Eclipse. (http://www.eclipse.org)