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

Rimozione di un'istanza CMP dell'opzione A

In questa sezione viene descritto il modo più efficiente per rimuovere un'istanza CMP (Container-Managed Persistence) dal pool dell'opzione A. Per prima cosa, aggiungere un metodo al bean CMP (Container-Managed Persistence).

public void invalidateFromCache()
{
}

Aggiungere questo metodo all'interfaccia locale CMP. Modificare il descrittore per il metodo in modo che utilizzi TX_REQUIRED.
È possibile far ciò utilizzando l'editor dei descrittori EJB selezionando la scheda di assemblaggio e facendo clic sul pulsante Aggiungi nel pannello delle transazioni del contenitore. Selezionare il CMP, quindi fare clic sul metodo invalidateFromCache. Selezionare Richiesto dalla casella combinata, quindi fare clic su OK. Dovrebbe ad esempio essere visualizzato Errore! Origine riferimento non trovata. Successivamente, aggiungere un metodo principale come il seguente:
	public void ejbHomeInvalidateCompleteOrders(Collection/*<orderlocal>*/ orders)
	{
		Iterator iter = orders.iterator();
		while(iter.hasNext())
		{
			OrderLocal order = (OrderLocal)iter.next();
				// this just adds the option A bean to this transaction so that when 
       we rollback below
				// it gets discarded, i.e. removed from the cache.
			order.invalidateFromCache();
		}
		myEntityCtx.setRollbackOnly();
	}
Aggiungere questo metodo alla directory principale locale del bean facendo clic con il tastino destro del mouse sul metodo, selezionando Bean enterprise e passando lla directory principale locale. Impostare l'attributo della transazione di questo metodo su RequiresNew utilizzando lo stesso approccio. Questo metodo prende un elenco di OrderLocal (il nostro CMP si chiama Order) e li rimuove dalla cache dell'opzione A. Da notare che si sarebbe potuto prendere un elenco di chiavi ma poi sarebbe stato necessario eseguire findByPrimaryKey e richiamare quindi il metodo. Questa operazione è più complicata dell'approccio qui discusso. Il metodo viene iterato sull'elenco e richiama il metodo di invalidazione su ogni ordine dell'elenco. Il metodo di invalidazione associa il bean dell'opzione A alla transazione corrente. Una volta associato il bean alla transazione, questo viene contrassegnato come solo per il roll back. Quando il metodo restituisce un valore, viene eseguito il rollback della transazione e i bean dell'opzione A associati vengono eliminati dalla cache. La logica aziendale accetta un nuovo ordine. Come parte del processo di accettazione di un nuovo ordine, è possibile che vengano completati altri ordini. Il metodo acceptOrder restituisce un elenco <OrderLocal> al chiamante. Il chiamante deve quindi inviare questo elenco al metodo principale per rimuoverli dalla cache. Essi non vengono eliminati dal database, solo dalla cache. Di seguito è riportato un esempio:
			BookLocal book = ivBookHome.findByPrimaryKey(ivOrder.getSymbol());
			Collection/*<OrderKey>*/ completedOrders = 
							book.acceptOrder(session, pub, ivOrder, cache);
			// invalidate all completed orders from the CMP option A cache.
			try {
				if(!completedOrders.isEmpty())
					ivOrderHome.invalidateCompleteOrders(completedOrders);
			}
catch (Exception e)
			{
				// ignore expected exception
			}
Tale esempio mostra la ricerca di un CMP di registro, richiamando il metodo di accettazione dell'ordine. Questo metodo restituisce gli ordini necessari che devono essere rimossi dalla cache come risultato della chiamata. Il metodo acceptOrder utilizza una transazione RequiresNew in modo che venga eseguito automaticamente il commit della transazione quando il metodo restituisce un valore. È possibile utilizzare il metodo principale su Order per rimuovere i CMP restituiti dalla cache. Il metodo acceptOrder raccoglie tutte le istanze di Order che devono essere rimosse:
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;
}

Questo codice dimostra l'applicazione che rimuove un oggetto memorizzato nella cache che ha terminato l'elaborazione. Se l'applicazione non ha eseguito tale operazione, allora la cache contiene ancora sia le istanze utili che quelle inutili. Le istanze utili sono quelle ancora necessarie o che sono in sospeso o non completate. Non ha alcun senso memorizzare nella cache i record completati. Un'applicazione può utilizzare questo approccio per rimuovere gli oggetti completati.




Related concepts
Dati CMP specifici della partizione

Argomento Riferimenti    

Termini di utilizzo | Commenti Ultimo aggiornamento: Mar 20, 2006 1:10:47 PM 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. Tutti i diritti riservati.
Questo centro informazioni utilizza la tecnologia Eclipse. (http://www.eclipse.org)