В чем разница между JTA и локальной транзакцией?
Пример, который показывает, когда использовать JTA, а когда использовать локальную транзакцию, был бы отличным.
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 под прикрытием.
Тип транзакции должен быть установлен на «RESOURCE_LOCAL» для приложения Java SE и на «JTA» для приложения Java EE. RESOURCE_LOCAL может нормально работать в некоторых веб-приложениях, развернутых на Tomcat, но может вызывать проблемы при запуске приложения в среде Glassfish.
Если вы работаете с распределенными транзакциями, вы должны использовать «JTA» в качестве менеджера транзакций.
источник
Java Transaction API (JTA) - это один из API Java Enterprise Edition (Java EE), позволяющий выполнять распределенные транзакции между несколькими ресурсами XA в среде Java.
источник
Приложение J2EE включает поддержку DT через 2 спецификации
JTA ---> Java Transaction API. Реализация на высоком уровне и всегда включен
JTS ---> Java Transaction Service.
источник