В чем разница между JTA и локальной транзакцией? - PullRequest
79 голосов
/ 04 марта 2012

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

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

Ответы [ 4 ]

131 голосов
/ 04 марта 2012

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

A resource local transaction - это транзакция, которую вы используете с конкретным единственным ресурсом, используясвой собственный специфический API.Такая транзакция обычно не распространяется на другие методы в стеке вызовов, и вам необходимо передать некоторый явный объект контекста.В большинстве локальных транзакций ресурсов невозможно иметь несколько ресурсов, участвующих в одной и той же транзакции.

Вы можете использовать локальную транзакцию ресурса, например, в низкоуровневом коде JDBC в Java SE.Здесь контекстный объект выражается экземпляром java.sql.Connection.Другими примерами локальных транзакций ресурсов являются разработчики, создающие корпоративные приложения примерно в 2002 году. Поскольку менеджеры транзакций (используемые JTA) были дорогими, с закрытым исходным кодом и сложными для установки в то время, люди пошли с более дешевыми и легкими для получения локальных вариантов ресурсов.1008 *

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

Наконец, такие технологии, как EJB и Spring, облегчают использование даже JTA, предлагая declarative transactions.В большинстве случаев рекомендуется использовать их, поскольку они проще, чище и менее подвержены ошибкам.И EJB, и Spring могут использовать JTA под крышками.

3 голосов
/ 04 февраля 2016

Тип транзакции должен быть установлен равным «RESOURCE_LOCAL» для приложения Java SE и «JTA» для приложения Java EE.«RESOURCE_LOCAL» может нормально работать в некоторых веб-приложениях, развернутых на Tomcat, но может вызвать проблемы при запуске приложения в среде Glassfish.

Если вы работаете с распределенными транзакциями, вы должны использовать «JTA» в качестве менеджера транзакций.

1 голос
/ 29 июня 2013

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

0 голосов
/ 24 февраля 2014

Приложение J2EE включает поддержку от DT до 2 спецификаций
JTA ---> реализация Java Transaction API.highe-уровня и всегда включена
JTS ---> Java Transaction Service.

...