В чем разница между JTA и локальной транзакцией?
Пример, который показывает, когда использовать JTA и когда использовать локальную транзакцию, был бы замечательным.
В чем разница между JTA и локальной транзакцией?
Пример, который показывает, когда использовать JTA и когда использовать локальную транзакцию, был бы замечательным.
JTA — это общий API для управления транзакциями в Java. Это позволяет вам запускать, фиксировать и откатывать транзакции нейтральным к ресурсам способом. Состояние транзакции обычно хранится в TLS (Thread Local Storage) и может быть распространено на другие методы в стеке вызовов без необходимости передачи какого-либо явного объекта контекста. Транзакционные ресурсы могут присоединяться к текущей транзакции. Если в такой транзакции участвует более одного ресурса, по крайней мере один из них должен быть так называемым ресурсом 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» в качестве менеджера транзакций.
API транзакций Java (JTA) — это один из API Java Enterprise Edition (Java EE), позволяющий выполнять распределенные транзакции между несколькими ресурсами XA в среде Java.
Приложение J2EE включает поддержку двух спецификаций
JTA --->Java Transaction API.Высокоуровневая реализация и всегда включена
JTS --->Java Transaction Service.