В чем разница между JTA и локальной транзакцией?
Пример, показывающий, когда использовать JTA и когда использовать локальную транзакцию, было бы замечательно.
В чем разница между JTA и локальной транзакцией?
Пример, показывающий, когда использовать JTA и когда использовать локальную транзакцию, было бы замечательно.
JTA
- это общий API для управления транзакциями на Java. Он позволяет запускать, совершать и откатывать транзакции нейтральным ресурсом. Состояние транзакции обычно хранится в TLS (локальное хранилище потоков) и может быть передано другим методам в стеке вызовов без необходимости использования какого-либо явного контекстного объекта. Транзакционные ресурсы могут присоединяться к текущей транзакции. Если в такой транзакции участвует более одного ресурса, по крайней мере один из них должен быть так называемым ресурсом XA.
A resource local transaction
- это транзакция, которая у вас есть с определенным единственным ресурсом, используя свой собственный API. Такая транзакция обычно не распространяется на другие методы в стеке вызовов, и вам необходимо передать некоторый явный объект контекста. В большинстве локальных транзакций ресурсов невозможно иметь несколько ресурсов, участвующих в одной транзакции.
Вы использовали бы локальную транзакцию ресурсов, например, для низкоуровневого кода JDBC в Java SE. Здесь объект контекста выражается экземпляром java.sql.Connection
. Другими примерами локальных транзакций ресурсов являются разработчики, создающие корпоративные приложения в 2002 году. Поскольку менеджеры транзакций (используемые JTA) были дорогими, закрытыми источниками и сложными вещами для настройки в эту эпоху, люди пошли с более дешевыми и более легкими для получения локальных вариантов ресурсов.
Вы использовали бы транзакцию JTA в основном в любом другом сценарии. Очень простые, маленькие, бесплатные и с открытым исходным кодом серверы, такие как TomEE (25MB) или GlassFish (35MB), поддерживают JTA из коробки. Там ничего не настроить, и они просто работают.
Наконец, такие технологии, как EJB и Spring, упрощают использование JTA, предлагая declarative transactions
. В большинстве случаев рекомендуется использовать их, поскольку они проще, чище и менее подвержены ошибкам. И EJB, и Spring могут использовать JTA под крышками.
API транзакций Java (JTA) - это один из API-интерфейсов Java Enterprise Edition (Java EE), позволяющий выполнять распределенные транзакции через несколько ресурсов XA в среде Java.
Тип транзакции должен быть установлен в "RESOURCE_LOCAL" для приложения Java SE и для "JTA" для приложения Java EE. "RESOURCE_LOCAL" может отлично работать в некоторых веб-приложениях, развернутых на Tomcat, но может вызвать проблемы при запуске приложения в среде Glassfish.
Если вы работаете над распределенными транзакциями, вы должны использовать "JTA" в качестве менеджера транзакций.
Приложение J2EE включает в себя суппорт с DT через 2 спецификации
JTA --- > реализация Java Transaction API.highe и всегда включена
JTS --- > Служба транзакций Java.