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

Removendo de Forma Eficiente uma Instância CMP de Opção A

Este artigo descreve a maneira mais eficiente de remover uma instância CMP (Container-Managed Persistence) do conjunto da opção A. Primeiro, inclua um método em seu bean CMP (Container-managed Persistence).

public void invalidateFromCache()
{
}

Inclua este método na interface local CMP. Modifique o descritor para o método para que ele utilize TX_REQUIRED.
Isto pode ser feito utilizando o editor do descritor EJB clicando na guia Montagem e, em seguida, clicando no botão Incluir no painel de transações do contêiner. Selecione o CMP e, em seguida, clique no método invalidateFromCache. Selecione Requerido na caixa de combinação e, em seguida, clique em OK. Você deve ver algo como: erro! Origem de referência não localizada. Em seguida, inclua um método home como o seguinte:
	public void ejbHomeInvalidateCompleteOrders(Collection/*<orderlocal>*/ orders)
	{
		Iterator iter = orders.iterator();
		while(iter.hasNext())
		{
			OrderLocal order = (OrderLocal)iter.next();
				// isto apenas inclui o bean da opção A nesta transação para que, quando
       houver for efetuado o rollback abaixo,
				// ele seja descartado, ou seja, removido do cache.
			order.invalidateFromCache();
		}
		myEntityCtx.setRollbackOnly();
	}
Inclua este método no home local do bean clicando com o botão direito no método, selecione Beans Corporativos e, em seguida, faça a promoção para o home local. Defina este atributo de transação do método como RequiresNew utilizando também a mesma abordagem de antes. Este método utiliza uma Lista de OrderLocal (nosso CMP é chamado Order) e os remove do cache da opção A. Observe que foi necessário utilizar uma Lista de chaves mas, em seguida, foi necessário executar um findByPrimaryKey e, em seguida, chamar o método. Isto é mais dispendioso do que a abordagem feita aqui. Basicamente, o método faz iteração na lista e chama o método invalidate em cada pedido da lista. O método invalidate associa o bean da opção A à transação atual. Quando cada bean estiver associado à transação, ela será marcada como apenas rollback. Quando o método é retornado, é efetuado rollback da transação e todos os beans da opção A associados são descartados do cache. A lógica de negócios aceita uma nova ordem. Como parte da aceitação de um novo pedido, é possível que vários outros pedidos sejam concluídos. O método acceptOrder retorna um List<OrderLocal> ao responsável pela chamada. O responsável pela chamada deve, então, transmitir esta lista para o método home acima para removê-los do cache. Eles não são excluídos do banco de dados, apenas do cache. Segue um exemplo:
			BookLocal book = ivBookHome.findByPrimaryKey(ivOrder.getSymbol());
			Collection/*<OrderKey>*/ completedOrders =
							book.acceptOrder(session, pub, ivOrder, cache);
			// invalidar todos os pedidos concluídos do cache da Opção A de CMP.
			try
			{
				if(!completedOrders.isEmpty())
					ivOrderHome.invalidateCompleteOrders(completedOrders);
			}
			catch(Exception e)
			{
				// ignorar exceção esperada
			}
Isso mostra a consulta de um CMP Book, chamando seu método accept order. Este método retorna os pedidos que precisam ser removidos do cache como resultado da chamada. O método acceptOrder utiliza uma transação RequiresNew para que sua transação seja confirmada automaticamente quando este método for retornado. Em seguida, utilize o método home em Order para remover os CMPs retornados do cache. O método acceptOrder coleta todas as instâncias de Order que precisam ser removidas:
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 demonstra o aplicativo removendo o objeto armazenado em cache do qual ele concluiu o processamento. Se o aplicativo não fez isso, o cache possui instâncias úteis e inúteis. As úteis são registros dos quais ele ainda precisa ou estão pendentes ou não concluídas. Não há um ponto no armazenamento em cache de registros concluídos. Um aplicativo pode utilizar essa abordagem para remover os objetos concluídos.




Related concepts
Dados CMP Específicos de Partição

Tópico de Referência    

Termos de Uso | Feedback Última atualização: Mar 21, 2006 12:52:01 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. Todos os Direitos Reservados.
Este centro de informações é desenvolvido em tecnologia Eclipse. (http://www.eclipse.org)