WebSphere Extended Deployment, Version 6.0.x     Systèmes d'exploitation : AIX, HP-UX, Linux, Solaris, Windows, z/OS

Suppression d'une instance CMP option A

Le présent article décrit la procédure la plus efficace pour supprimer une instance CMP du pool option A. Ajoutez d'abord une méthode au bean CMP (Container-Managed Persistence).

public void invalidateFromCache()
{
}

Ajoutez cette méthode à l'interface locale CMP. Modifiez le descripteur de la méthode afin qu'il utilise TX_REQUIRED.
Pour effectuer cette opération, vous pouvez utiliser l'éditeur de descripteur d'EJB en cliquant sur l'onglet d'assemblage et le bouton Ajouter. Sélectionnez la persistance CMP, puis cliquez sur la méthode invalidateFromCache. Sélectionnez "Requis" dans la liste et cliquez sur OK. Un message de type ,Erreur, source de référence introuvable" doit apparaître. Ajoutons à présent une méthode home comparable à celle présentée ci-dessous :
	public void ejbHomeInvalidateCompleteOrders(Collection/*<orderlocal>*/ orders)
	{
		Iterator iter = orders.iterator();
		while(iter.hasNext())
		{
			OrderLocal order = (OrderLocal)iter.next();
				// Le bean option A est simplement ajouté à cette transaction afin 
       d'être supprimé, c'est-à-dire retiré de la mémoire cache
				// lors d'une annulation.
			order.invalidateFromCache();
		}
		myEntityCtx.setRollbackOnly();
	}
Cliquez sur cette méthode à l'aide du bouton droit de la souris pour l'ajouter à l'interface home locale du bean et effectuez une procédure de promotion vers l'interface home locale. Associez cet attribut de transaction de la méthode à la valeur RequiresNew en utilisant la même procédure que précédemment. Cette méthode utilise une liste d'éléments "OrderLocal" (CMP s'appelle Order) et les supprime de la mémoire cache Option A. Il aurait été possible d'utiliser une liste de clés mais dans ce cas, vous devez exécuter findByPrimaryKey, puis appeler la méthode. Cette procédure est plus complexe que celle présentée ici. Cette méthode effectue une itération sur la liste et appelle la méthode d'invalidation sur chaque élément (order) de la liste. La méthode d'invalidation associe le bean option A à la transaction en cours. Une fois que tous les beans sont associés à la transaction en cours, ils sont marqués pour invalidation uniquement. Lorsque la méthode renvoie les données, la transaction est annulée et tous les beans option A sont supprimés de la mémoire cache. La logique métier accepte une nouvelle commande (order). Lors de l'acceptation de la nouvelle commande, il est possible que plusieurs autres commandes aient été traitées. La méthode acceptOrder renvoie un élément List<OrderLocal> à l'appelant. L'appelant doit ensuite transmettre la liste à la méthode home ci-dessus pour supprimer les entrées de la mémoire cache. Elles ne sont pas supprimées de la base de données, uniquement de la mémoire cache. Voici un exemple :
			BookLocal book = ivBookHome.findByPrimaryKey(ivOrder.getSymbol());
			Collection/*<OrderKey>*/ completedOrders = 
							book.acceptOrder(session, pub, ivOrder, cache);
			// invalide toutes les éléments "orders" de la mémoire cache option A CMP.
			try
			{
				if(!completedOrders.isEmpty())
					ivOrderHome.invalidateCompleteOrders(completedOrders);
			}
			catch(Exception e)
			{
				// ignorer l'exception prévue
			}
Cet exemple présente la procédure de recherche d'un objet CMP Book avec l'appel de sa méthode d'acceptation de commandes (accept order). Cette méthode renvoie les éléments "order" à supprimer de la mémoire cache à la suite de l'appel. La méthode acceptOrder utilisant une transaction RequiresNew, sa transaction est automatiquement validée lorsque la méthode renvoie les données. La méthode home est uniquement utilisée avec Order pour supprimer les éléments CMP renvoyés de la mémoire cache. La méthode acceptOrder collecte toutes les instances Order qui doivent être supprimées :
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;
}

Ce code présente une application qui supprime un objet mis en cache dont le traitement est terminé. Si l'application n'effectue pas cette opération, la mémoire cache comporte à la fois des instances utiles et des instances inutiles. Les instances utiles correspondent à des enregistrements dont l'application a encore besoin, en attente ou en cours de traitement. Il est inutile de conserver les enregistrements traités en mémoire cache. Une application peut utiliser cette procédure pour supprimer les objets déjà traités.




Related concepts
Données CMP propres à une partition

Rubrique Référence    

Conditions d'utilisation | Commentaires Dernière mise à jour le : Mar 16, 2006 10:01:30 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. All Rights Reserved.
Ce centre de documentation s'appuie sur la technologie Eclipse. (http://www.eclipse.org)