Jaka jest różnica między JTA a lokalną transakcją?

84

Jaka jest różnica między JTA a lokalną transakcją?

Przykład, który pokazuje, kiedy używać JTA, a kiedy transakcji lokalnej, byłby świetny.

user1127214
źródło

Odpowiedzi:

136

JTAto ogólny interfejs API do zarządzania transakcjami w Javie. Umożliwia rozpoczynanie, zatwierdzanie i wycofywanie transakcji w sposób neutralny pod względem zasobów. Status transakcyjny jest zwykle przechowywany w TLS (Thread Local Storage) i może być propagowany do innych metod w stosie wywołań bez konieczności przekazywania jakiegoś jawnego obiektu kontekstu. Zasoby transakcyjne mogą dołączyć do trwającej transakcji. Jeżeli w takiej transakcji bierze udział więcej niż jeden zasób, przynajmniej jeden z nich musi być tak zwanym zasobem XA.

A resource local transactionto transakcja, którą masz z określonym pojedynczym zasobem przy użyciu własnego, określonego interfejsu API. Taka transakcja zwykle nie jest propagowana do innych metod w stosie wywołań i wymagane jest przekazanie jakiegoś jawnego obiektu kontekstu. W większości lokalnych transakcji dotyczących zasobów nie jest możliwe, aby wiele zasobów uczestniczyło w tej samej transakcji.

Możesz użyć lokalnej transakcji zasobu na przykład w kodzie JDBC niskiego poziomu w języku Java SE. Tutaj obiekt kontekstu jest wyrażony przez instancję java.sql.Connection. Innymi przykładami lokalnych transakcji zasobów są programiści tworzący aplikacje dla przedsiębiorstw około 2002 r. Ponieważ menedżery transakcji (używane przez JTA) były drogie, zamknięte i skomplikowane do konfiguracji w tamtej epoce, ludzie zdecydowali się na tańsze i łatwiejsze do uzyskania warianty lokalne zasobów.

Używałbyś transakcji JTA w zasadzie w każdym innym scenariuszu. Bardzo proste, małe, bezpłatne i otwarte serwery, takie jak TomEE (25 MB) lub GlassFish (35 MB), mają obsługę JTA po wyjęciu z pudełka. Nie ma nic do skonfigurowania i po prostu działają.

Wreszcie, technologie takie jak EJB i Spring sprawiają, że nawet JTA jest łatwiejsze w użyciu, oferując declarative transactions. W większości przypadków zaleca się ich używanie, ponieważ są one łatwiejsze, czystsze i mniej podatne na błędy. Zarówno EJB, jak i Spring mogą używać JTA pod osłonami.

Arjan Tijms
źródło
5
+1 za wyjaśnienie historii i rozwoju zastosowań JTA (EJB, Spring itp.).
Marco
4

Typ transakcji należy ustawić na „RESOURCE_LOCAL” dla aplikacji Java SE i na „JTA” dla aplikacji Java EE. „RESOURCE_LOCAL” może działać poprawnie w przypadku niektórych aplikacji internetowych wdrożonych na serwerze Tomcat, ale może powodować problemy podczas uruchamiania aplikacji w środowisku Glassfish.

Jeśli pracujesz nad transakcjami rozproszonymi, musisz użyć „JTA” jako menedżera transakcji.

Mayank Jalotra
źródło
1

Java Transaction API (JTA) to jeden z interfejsów API Java Enterprise Edition (Java EE), który umożliwia przeprowadzanie rozproszonych transakcji w wielu zasobach XA w środowisku Java.

sun007
źródło
-1

Aplikacja J2EE zawiera wsparcie dla DT do 2 specyfikacji
JTA ---> Java Transaction API. Implementacja na wysokim poziomie i jest zawsze włączona
JTS ---> Java Transaction Service.

czuć się dobrze i programować
źródło