В чем разница между JTA и локальной транзакцией?


85

В чем разница между JTA и локальной транзакцией?

Пример, который показывает, когда использовать JTA, а когда использовать локальную транзакцию, был бы отличным.

Ответы:


137

JTA- это общий API для управления транзакциями в Java. Он позволяет запускать, фиксировать и откатывать транзакции без использования ресурсов. Статус транзакции обычно хранится в TLS (локальное хранилище потоков) и может быть передан другим методам в стеке вызовов без необходимости передачи какого-либо явного объекта контекста. Транзакционные ресурсы могут присоединяться к текущей транзакции. Если в такой транзакции участвует более одного ресурса, по крайней мере один из них должен быть так называемым ресурсом XA.

А 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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.