¿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.
JTA
es 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 transaction
es 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.
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.
fuente
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.
fuente
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.
fuente