Suporte JTA

O suporte JTA (Java™ Transaction API) fornece interfaces de programação de aplicativo (APIs), além da interface UserTransaction que é definida na especificação JTA 1.1.

Essas interfaces incluem a interface TransactionSynchronizationRegistry, definida na especificação JTA 1.1 e as seguintes extensões de API:
  • Interface SynchronizationCallback
  • Interface ExtendedJTATransaction
  • Interface UOWSynchronizationRegistry
  • Interface UOWManager
As APIs fornecem as seguintes funções:
  • Acesso a identificadores de transação globais e locais associados ao encadeamento.

    O identificador global é baseado no identificador de transação no objeto CosTransactions::PropagationContext: e o identificador local identifica a transação exclusivamente na JVM (Java Virtual Machine) local.

  • Um retorno de chamada de sincronização de transação que qualquer componente de aplicativo corporativo pode usar para registrar interesse na conclusão da transação.

    Aplicativos avançados podem usar esse retorno de chamada para limpar atualizações antes da conclusão da transação e limpar o estado depois da conclusão da transação. Especificações Java EE (e relacionado) posicionam essa função normalmente como o domínio dos contêineres de aplicativo corporativo.

    Componentes como gerenciadores de persistência, adaptadores de recursos, enterprise beans e componentes de aplicativo da Web podem se registrar com uma transação JTA.

As informações a seguir são uma visão geral das interfaces fornecidas pelo suporte JTA. Para obter informações mais detalhadas, consulte a documentação da API gerada.

Interface SynchronizationCallback

Um objeto que implementa essa interface é incluído em uma lista uma vez pela interface ExtendedJTATransaction e recebe notificação de conclusão da transação.

Embora um objeto que implemente essa interface possa ser executado em uma plataforma Java para servidor de aplicativos corporativos, não há componente de aplicativo corporativo específico ativo quando esse objeto é chamado. Por isso, o objeto tem limitado o acesso direto a quaisquer recursos de aplicativo corporativo. Especificamente, o objeto não tem nenhum acesso ao espaço de nomes java: ou a qualquer recurso mediado pelo contêiner. Esse objeto pode armazenar em cache uma referência para um componente de aplicativo corporativo (por exemplo, um bean de sessão sem estado) ao qual ele foi delegado. O objeto então teria todo o acesso usual aos recursos de aplicativo corporativo. Por exemplo, você poderia utilizar o objeto para obter uma conexão JDBC (Java Database Connectivity) e enviar atualizações para um banco de dados durante o método beforeCompletion.

Interface ExtendedJTATransaction

Essa interface é uma extensão do modelo de programação do WebSphere ao suporte JTA Java EE. Um objeto que implementa essa interface é ligado pelos contêineres de aplicativos corporativos no WebSphere Application Server que suportam essa interface, em java:comp/websphere/ExtendedJTATransaction. O acesso a esse objeto, quando chamado de contêiner EJB (Enterprise JavaBeans), não é restrito às transações gerenciadas por contêiner.

Um aplicativo utiliza uma consulta JNDI (Java Naming and Directory Interface) de java:comp/websphere/ExtendedJTATransaction para obter um objeto ExtendedJTATransaction, que o aplicativo utiliza conforme mostrado no exemplo a seguir:
ExtendedJTATransaction exJTA = (ExtendedJTATransaction)ctx.lookup("
	java:comp/websphere/ExtendedJTATransaction");
SynchronizationCallback sync = new SynchronizationCallback();
exJTA.registerSynchronizationCallback(sync);
O objeto ExtendedJTATransaction suporta o registro de um ou mais objetos SynchronizationCallback fornecidos pelo aplicativo. Dependendo de como o retorno de chamada é registrado, cada retorno de chamada registrado é chamado em um dos seguintes pontos:
  • Ao final de cada transação executada no servidor de aplicativos, se a transação for iniciada localmente ou importada
  • Ao final da transação para a qual o retorno de chamada foi registrado.
Recurso Reprovado Recurso Reprovado: Neste release, o método registerSynchronizationCallbackForCurrentTran é reprovado. Use o método registerInterposedSynchronization da interface TransactionSynchronizationRegistry no lugar.depfeat

Interface TransactionSynchronizationRegistry

Essa interface é definida na especificação JTA 1.1. Componentes de aplicativo de nível de sistema, como gerenciadores de persistência, adaptadores de recursos, enterprise beans e componentes de aplicativo da Web, podem usar essa interface para se registrar com uma transação JTA. Em seguida, por exemplo, o componente pode limpar um cache quando a transação for concluída.

Para obter a interface TransactionSynchronizationRegistry, use uma consulta de JNDI de java:comp/TransactionSynchronizationRegistry.

Recurso Reprovado Recurso Reprovado: Utilize o método registerInterposedSynchronization para registrar uma instância de sincronização em vez do método registerSynchronizationCallbackForCurrentTran da interface ExtendedJTATransaction, reprovada neste release.depfeat

Interface UOWSynchronizationRegistry

Esta interface fornece as mesmas funções que a interface TransactionSynchronizationRegistry, mas é aplicável a todos os tipos de unidades de trabalho (UOWs) suportadas pelo WebSphere Application Server:
  • Transações de JTA
  • LTCs (local transaction containments)
  • Contextos ActivitySession
Componentes do servidor de aplicativo de nível de sistema, como gerenciadores de persistência, adaptadores de recursos, enterprise beans e componentes de aplicativo da Web, podem usar essa interface para se registrar com uma transação JTA. O componente pode fazer o seguinte:
  • Registrar objetos de sincronização com semântica especial de ordenação.
  • Associar objetos de recursos à UOW.
  • Obter o contexto da UOW atual.
  • Obter o status atual da UOW.
  • Marcar a UOW atual para recuperação.

Para obter a interface UOWSynchronizationRegistry, utilize uma consulta JNDI de java:comp/websphere/UOWSynchronizationRegistry. Esta interface está disponível apenas em um ambiente do servidor.

O exemplo a seguir registra uma sincronização interposta com o UOW atual:
// Retrieve an instance of the UOWSynchronizationRegistry interface from JNDI.
final InitialContext initialContext = new InitialContext();
final UOWSynchronizationRegistry uowSyncRegistry =
		(UOWSynchronizationRegistry)initialContext.lookup("java:comp/websphere/UOWSynchronizationRegistry");

// Instanciar uma classe que implementa a interface javax.transaction.Synchronization
final Synchronization sync = new SynchronizationImpl();

// Registrar o objeto Synchronization com o UOW atual.
uowSynchronizationRegistry.registerInterposedSynchronization(sync);

Interface UOWManager

A interface UOWManager é equivalente à interface TransactionManager da JTA, que define os métodos que permitem que um servidor de aplicativos gerencie os limites da transação. Os aplicativos podem usar a interface UOWManager para manipular os contextos de UOW no produto. A interface UOWManager se aplica a todos os tipos de UOWs que o WebSphere Application Server suporta; ou seja, transações JTA, contenções de transações locais (LTCs) e contextos ActivitySession. O código de aplicativo pode ser executado em um tipo específico de UOW sem a necessidade de usar um enterprise bean configurado adequadamente. Normalmente, a lógica executada no escopo da UOW é encapsulada em uma classe interna anônima. Componentes do servidor de aplicativo de nível de sistema, como gerenciadores de persistência, adaptadores de recursos, enterprise beans e componentes de aplicativo da Web, podem usar essa interface.

O WebSphere Application Server não fornece uma interface TransactionManager na API ou na interface de programação do sistema (SPI). A interface UOWManager fornece funções equivalentes, mas o WebSphere Application Server mantém o controle e integridade dos contextos da UOW.

Para obter a interface UOWManager em um ambiente gerenciado pelo contêiner, utilize uma consulta JNDI de java:comp/websphere/UOWManager. Para obter a interface UOWManager fora de um ambiente gerenciador por contêiner, use a classe UOWManagerFactory. Esta interface está disponível apenas em um ambiente do servidor.

É possível usar a interface UOWManager para migrar um aplicativo da Web para usar componentes da Web em vez de enterprise beans, mas manter o controle sobre as UOWs. Por exemplo, um aplicativo da Web usa atualmente a interface UserTransaction para iniciar uma transação global, fazer uma chamada para um método em um enterprise bean de sessão que é configurado como não suportado para se encarregar de alguns trabalhos não transacionais e concluir a transação global. É possível mover a lógica encapsulada no método EJB de sessão para o método de execução de uma implementação de UOWAction. Em seguida, substitua o código no componente da Web que chama o enterprise bean de sessão por uma chamada para o método runUnderUOW de uma interface UOWManager para solicitar que essa lógica seja executada em uma transação local. Dessa maneira, você mantém o mesmo nível de controle nas UOWs que tinha com o aplicativo original.

O exemplo a seguir executa algum trabalho transacional no escopo de uma nova transação lógica. O trabalho transacional é executado em uma classe interna anônima que implementa o método run da interface UOWAction. As exceções verificadas criadas pelo método de execução não afetam o resultado da transação.
// Retrieve an instance of the UOWManager interface from JNDI.
final InitialContext initialContext = new InitialContext();
final UOWManager uowManager = (UOWManager)initialContext.lookup("java:comp/websphere/UOWManager");

try
{
	// Chamar o método runUnderUOW, que indica que a lógica deve ser executada em uma transação 
	// global e que qualquer transação global existente não deve ser unida, isto é, 
	// o trabalho deve ser executado no escopo de uma nova transação global.
	uowManager.runUnderUOW(UOWSynchronizationRegistry.UOW_TYPE_GLOBAL_TRANSACTION, false, new UOWAction()
	{
 		public void run() throws Exception
 		{
			// Desempenhar trabalho transacional aqui.
 		}
	});
}

catch (UOWActionException uowae)
{
	// O trabalho transacional resultou em uma exceção verificada sendo lançada.
}

catch (UOWException uowe)
{
	// A conclusão do UOW falhou inesperadamente. Use o método getCause de 
	// UOWException para recuperar a causa da falha.
}

Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjta_extjta
Nome do arquivo: cjta_extjta.html