Qual è la differenza tra JTA e una transazione locale?


85

Qual è la differenza tra JTA e una transazione locale?

Un esempio che mostra quando utilizzare JTA e quando utilizzare una transazione locale sarebbe fantastico.

Risposte:


137

JTAè un'API generale per la gestione delle transazioni in Java. Ti consente di avviare, eseguire il commit e il rollback delle transazioni in modo neutrale rispetto alle risorse. Lo stato della transazione viene in genere archiviato in TLS (Thread Local Storage) e può essere propagato ad altri metodi in uno stack di chiamate senza la necessità di passare un oggetto di contesto esplicito. Le risorse transazionali possono unirsi alla transazione in corso. Se c'è più di una risorsa che partecipa a una tale transazione, almeno una di esse deve essere una cosiddetta risorsa XA.

A resource local transactionè una transazione che hai con una singola risorsa specifica utilizzando la sua API specifica. Tale transazione in genere non si propaga ad altri metodi in uno stack di chiamate e ti viene richiesto di passare un oggetto di contesto esplicito in giro. Nella maggior parte delle transazioni locali delle risorse non è possibile avere più risorse che partecipano alla stessa transazione.

Si utilizzerà una transazione locale della risorsa, ad esempio, nel codice JDBC di basso livello in Java SE. Qui l'oggetto contesto è espresso da un'istanza di java.sql.Connection. Altri esempi di transazioni locali di risorse sono gli sviluppatori che creano applicazioni aziendali intorno al 2002. Poiché i gestori di transazioni (usati da JTA) erano costosi, closed source e cose complicate da configurare in quell'epoca, le persone optarono per le varianti locali più economiche e facili da ottenere.

Utilizzeresti una transazione JTA praticamente in ogni altro scenario. Server molto semplici, piccoli, gratuiti e open source come TomEE (25 MB) o GlassFish (35 MB) hanno il supporto JTA pronto all'uso. Non c'è niente da configurare e funzionano e basta.

Infine, tecnologie come EJB e Spring rendono anche JTA più facile da usare offrendo declarative transactions. Nella maggior parte dei casi si consiglia di utilizzarli in quanto sono più facili, puliti e meno soggetti a errori. Sia EJB che Spring possono utilizzare JTA sotto le coperte.


5
+1 per aver spiegato la storia e lo sviluppo degli usi JTA (EJB, Spring, ecc.).
Marco

4

Il tipo di transazione deve essere impostato su "RESOURCE_LOCAL" per l'applicazione Java SE e su "JTA" per l'applicazione Java EE. "RESOURCE_LOCAL" potrebbe funzionare correttamente su alcune applicazioni Web distribuite su Tomcat, ma potrebbe causare problemi quando si esegue l'applicazione in ambiente glassfish.

Se stai lavorando su transazioni distribuite, devi usare "JTA" come gestore delle transazioni.


1

Java Transaction API (JTA) è una delle API Java Enterprise Edition (Java EE) che consente di eseguire transazioni distribuite su più risorse XA in un ambiente Java.


-1

L'applicazione J2EE include il supporto per DT attraverso 2 specifiche
JTA ---> Java Transaction API. Implementazione a livello superiore ed è sempre abilitato
JTS ---> Java Transaction Service.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.