У чому різниця між JTA та локальною транзакцією?
Приклад, який показує, коли використовувати JTA, а коли - локальну транзакцію, був би чудовим.
У чому різниця між JTA та локальною транзакцією?
Приклад, який показує, коли використовувати JTA, а коли - локальну транзакцію, був би чудовим.
Відповіді:
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 під ковдрами.
Для типу транзакції слід встановити значення "RESOURCE_LOCAL" для додатка Java SE та "JTA" для додатка Java EE. "RESOURCE_LOCAL" може добре працювати в деяких веб-програмах, розгорнутих на Tomcat, але може спричинити проблеми, коли ви запускаєте програму в середовищі glassfish.
Якщо ви працюєте над розподіленими транзакціями, ви повинні використовувати "JTA" як менеджер транзакцій.
Додаток J2EE включає допоміжний файл DT через 2 специфікації
JTA ---> Java Transaction API. Реалізація високого рівня і завжди ввімкнено
JTS ---> Java Transaction Service.