У чому різниця між JTA та локальною транзакцією?


84

У чому різниця між JTA та локальною транзакцією?

Приклад, який показує, коли використовувати JTA, а коли - локальну транзакцію, був би чудовим.

Відповіді:


136

JTAце загальний API для управління транзакціями на Java. Це дозволяє запускати, фіксувати та відмовляти транзакції нейтрально до ресурсів. Статус транзакції, як правило, зберігається в TLS (Thread Local Storage) і може бути переданий іншим методам у стеку викликів без необхідності передачі явного контекстного об'єкта. Транзакційні ресурси можуть приєднатися до поточної транзакції. Якщо в такій транзакції бере участь більше одного ресурсу, принаймні один із них повинен бути так званим ресурсом XA.

A resource local transaction- це транзакція, яку ви маєте з певним єдиним ресурсом, використовуючи свій власний API. Така транзакція, як правило, не поширюється на інші методи у стеку викликів, і вам потрібно передавати якийсь явний контекстний об'єкт навколо. У більшості місцевих транзакцій ресурсів неможливо мати кілька ресурсів, що беруть участь в одній транзакції.

Ви б використовували локальну транзакцію ресурсу, наприклад, для коду JDBC низького рівня в Java SE. Тут об'єкт контексту виражається екземпляром java.sql.Connection. Іншими прикладами локальних транзакцій ресурсів є розробники, що створюють корпоративні додатки приблизно в 2002 році. Оскільки менеджери транзакцій (використовувані JTA) були дорогими, закритими та складними речами для налаштування приблизно в ту епоху, люди ходили з дешевими та простішими місцевими варіантами ресурсів.

Ви б використовували транзакцію JTA практично в усіх інших сценаріях. Дуже прості, невеликі, безкоштовні сервери з відкритим кодом, такі як TomEE (25 МБ) або GlassFish (35 МБ), мають підтримку JTA. Немає чого налаштовувати, і вони просто працюють.

Нарешті, такі технології, як EJB та Spring, роблять навіть JTA простішим у використанні, пропонуючи declarative transactions. У більшості випадків рекомендується використовувати такі, оскільки вони простіші, чистіші та менш схильні до помилок. І EJB, і Spring можуть використовувати JTA під ковдрами.


5
+1 для пояснення історії та розвитку використання JTA (EJB, Spring тощо).
Марко

4

Для типу транзакції слід встановити значення "RESOURCE_LOCAL" для додатка Java SE та "JTA" для додатка Java EE. "RESOURCE_LOCAL" може добре працювати в деяких веб-програмах, розгорнутих на Tomcat, але може спричинити проблеми, коли ви запускаєте програму в середовищі glassfish.

Якщо ви працюєте над розподіленими транзакціями, ви повинні використовувати "JTA" як менеджер транзакцій.


1

API транзакцій Java (JTA) - це один з API Java Enterprise Edition (Java EE), що дозволяє здійснювати розподілені транзакції між різними ресурсами XA в середовищі Java.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.