¿Cuál es la diferencia entre JTA y una transacción local?

84

¿Cuál es la diferencia entre JTA y una transacción local?

Un ejemplo que muestre cuándo usar JTA y cuándo usar una transacción local sería genial.

usuario1127214
fuente

Respuestas:

136

JTAes una API general para administrar transacciones en Java. Le permite iniciar, confirmar y revertir transacciones de una manera neutral en cuanto a recursos. El estado transaccional generalmente se almacena en TLS (Thread Local Storage) y se puede propagar a otros métodos en una pila de llamadas sin necesidad de pasar algún objeto de contexto explícito. Los recursos transaccionales pueden unirse a la transacción en curso. Si hay más de un recurso participando en dicha transacción, al menos uno de ellos tiene que ser un recurso denominado XA.

A resource local transactiones una transacción que tiene con un único recurso específico que utiliza su propia API específica. Esta transacción normalmente no se propaga a otros métodos en una pila de llamadas y debe pasar algún objeto de contexto explícito. En la mayoría de las transacciones locales de recursos no es posible tener varios recursos participando en la misma transacción.

Utilizaría una transacción local de recursos en, por ejemplo, código JDBC de bajo nivel en Java SE. Aquí, el objeto de contexto se expresa mediante una instancia de java.sql.Connection. Otros ejemplos de transacciones locales de recursos son los desarrolladores que crean aplicaciones empresariales alrededor de 2002. Dado que los administradores de transacciones (utilizados por JTA) eran costosos, de código cerrado y cosas complicadas de configurar en esa época, la gente optó por las variantes locales de recursos más baratas y fáciles de obtener.

Utilizaría una transacción JTA básicamente en cualquier otro escenario. Los servidores muy simples, pequeños, gratuitos y de código abierto como TomEE (25 MB) o GlassFish (35 MB) tienen soporte JTA listo para usar. No hay nada que configurar y simplemente funcionan.

Finalmente, tecnologías como EJB y Spring hacen que incluso JTA sea más fácil de usar al ofrecer declarative transactions. En la mayoría de los casos, se recomienda utilizarlos, ya que son más fáciles, más limpios y menos propensos a errores. Tanto EJB como Spring pueden usar JTA debajo de las cubiertas.

Arjan Tijms
fuente
5
+1 para explicar la historia y el desarrollo de los usos de JTA (EJB, Spring, etc.).
Marco
4

El tipo de transacción debe establecerse en "RESOURCE_LOCAL" para la aplicación Java SE y en "JTA" para la aplicación Java EE. "RESOURCE_LOCAL" puede funcionar bien en algunas aplicaciones web implementadas en Tomcat, pero puede causar problemas cuando ejecuta su aplicación en un entorno glassfish.

Si está trabajando en transacciones distribuidas, debe usar "JTA" como su administrador de transacciones.

Mayank Jalotra
fuente
1

La API de transacciones de Java (JTA) es una de las API de Java Enterprise Edition (Java EE) que permite realizar transacciones distribuidas en varios recursos XA en un entorno Java.

sun007
fuente
-1

La aplicación J2EE incluye soporte para DT a través de 2 especificaciones
JTA ---> Java Transaction API. Implementación de alto nivel y siempre está habilitado
JTS ---> Java Transaction Service.

sentirse bien y programar
fuente