Qual é a diferença entre JTA e uma transação local?
Um exemplo que mostra quando usar JTA e quando usar uma transação local seria ótimo.
Qual é a diferença entre JTA e uma transação local?
Um exemplo que mostra quando usar JTA e quando usar uma transação local seria ótimo.
Respostas:
JTA
é uma API geral para gerenciamento de transações em Java. Ele permite que você inicie, confirme e reverta transações de uma maneira neutra em relação aos recursos. O status transacional é normalmente armazenado em TLS (Thread Local Storage) e pode ser propagado para outros métodos em uma pilha de chamadas sem a necessidade de transmitir algum objeto de contexto explícito. Recursos transacionais podem se juntar à transação em andamento. Se houver mais de um recurso participando de tal transação, pelo menos um deles deve ser um chamado recurso XA.
A resource local transaction
é uma transação que você tem com um único recurso específico usando sua própria API específica. Essa transação normalmente não se propaga para outros métodos em uma pilha de chamadas e você deve passar algum objeto de contexto explícito. Na maioria das transações locais de recursos, não é possível ter vários recursos participando da mesma transação.
Você usaria uma transação local de recurso em, por exemplo, código JDBC de baixo nível em Java SE. Aqui, o objeto de contexto é expresso por uma instância de java.sql.Connection
. Outros exemplos de transações locais de recursos são os desenvolvedores que criam aplicativos empresariais por volta de 2002. Como os gerenciadores de transações (usados pela JTA) eram caros, de código fechado e coisas complicadas de configurar naquela época, as pessoas optaram por obter variantes locais de recursos mais baratas e fáceis.
Você usaria uma transação JTA basicamente em todos os outros cenários. Servidores muito simples, pequenos, gratuitos e de código aberto como TomEE (25 MB) ou GlassFish (35 MB) têm suporte JTA fora da caixa. Não há nada para configurar e eles simplesmente funcionam.
Por fim, tecnologias como EJB e Spring tornam até JTA mais fácil de usar, oferecendo declarative transactions
. Na maioria dos casos, é aconselhável usá-los porque são mais fáceis, limpos e menos sujeitos a erros. Tanto o EJB quanto o Spring podem usar o JTA sob as cobertas.
O tipo de transação deve ser definido como "RESOURCE_LOCAL" para o aplicativo Java SE e como "JTA" para o aplicativo Java EE. "RESOURCE_LOCAL" pode funcionar bem em alguns aplicativos da web implantados no Tomcat, mas pode causar problemas quando você executa seu aplicativo no ambiente glassfish.
Se estiver trabalhando em transações distribuídas, você deve usar "JTA" como gerenciador de transações.
O aplicativo J2EE inclui suporte para DT por meio de 2 especificações
JTA ---> Java Transaction API.implementação de nível superior e está sempre habilitado para
JTS ---> Java Transaction Service.