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.
JTA
to 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 transaction
to 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.
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.
źródło
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.
źródło
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.
źródło