использовать JTA транзакцию или нет? - PullRequest
7 голосов
/ 17 января 2011

Я занимаюсь разработкой приложения J2EE, которое развернуто на сервере приложений JBoss. Приложение состоит из компонента EJB 2.x и веб-компонента и работает на локальном компьютере или на удаленном сервере. База данных является либо Oracle, либо SQL Server и не находится в распределенном окружении.

Я использую Hibernate 3.6 (реализация JPA 2.0) для транзакций. Должен ли я использовать JTA, которая является транзакцией, управляемой контейнером, или она переусердствовала для ее использования?

В настоящее время я использую JTA, и оказывается, что он работает нормально, но с некоторыми небольшими проблемами, которые я не знаю, связано ли это с управлением транзакциями или нет. Будет ли проще или надежнее использовать локальное управление транзакциями?

Ответы [ 2 ]

16 голосов
/ 22 января 2011

Транзакции JTA всегда рекомендуются над другими типами API транзакций, особенно если вы ссылаетесь на собственные транзакции, которые все еще являются частью JPA API.Обратите внимание, что вы не можете сказать «JTA против локальных транзакций ресурса», поскольку JTA фактически управляет локальными транзакциями ресурса среди других.

Гэвин Кинг (создатель Hibernate) однажды указал в интервью, что этот специфический для JPA API былошибка и то, что гораздо более гибкий JTA API должен быть предпочтительным.Особенно при использовании декларативных транзакций, JTA очень легкий.Слово overkill на самом деле больше применимо к использованию API собственных транзакций JPA, чем к использованию JTA.

Есть что сказать о выборе между использованием XA или ресурсов локальных транзакций с JTA.См. Мой ответ здесь для получения более подробной информации об этом: транзакции JTA или LOCAL в JPA2 + Hibernate 3.6.0?

Мне действительно интересно, почему вы используете EJB 2 в сочетании с JPA 2.0.EJB 3.1 будет гораздо более логичным выбором.EJB 2 полностью устарел (будет удален в Java EE 7).

1 голос
/ 29 июля 2011

Я бы порекомендовал использовать транзакцию XA, даже если в данный момент приложение обращается только к одному ресурсу (базе данных). Resons:

1) В будущем, если приложение решит включить какой-либо другой транзакционный ресурс помимо текущей базы данных, это будет легче, поскольку управление транзакциями XA уже установлено, и несколько транзакционных ресурсов могут быть объединены в один сделка.

2) Поскольку в настоящее время у вас есть единственный транзакционный ресурс, я не думаю, что производительность будет снижаться при использовании XA по сравнению с локальной транзакцией. Причина в том, что менеджеры транзакций XA / JTA уже проводят некоторую оптимизацию для случаев одного транзакционного ресурса (они называют это однофазной оптимизацией).

Надеюсь, это поможет.

Нитин

...