В чем разница между @Resource UserTransaction и EntityManager.getTransaction ()

См. this :

В среде Microsoft .NET сборка является частично скомпилированной библиотекой кода для использования при развертывании, управлении версиями и безопасности

BLOCKQUOTE>

30
задан Pascal Thivent 1 September 2010 в 21:47
поделиться

1 ответ

EJB - это транзакционные компоненты. Транзакция может управляться либо самим сервером приложения (CMT - транзакция, управляемая контейнером), либо вручную вами внутри EJB (BMT - транзакция, управляемая компонентом).

EJB поддерживает распределенную транзакцию через спецификацию JTA. Распределенная транзакция управляется с помощью UserTransaction , который имеет методы begin , commit , откат .

При использовании CMT сервер приложений запускает, фиксирует и откатывает транзакцию (согласно аннотациям транзакции ) за вас, и вам не разрешается вмешиваться. Это означает, что в этом случае вы не должны обращаться к UserTransaction . Однако с BMT вы делаете это вручную и сами управляете транзакцией с помощью UserTransaction .

Теперь перейдем к EntityManager . Реализация JPA может использоваться как на сервере приложений, так и автономно. При автономном использовании необходимо использовать EntityManage.getTransaction , чтобы самостоятельно разграничить транзакцию JDBC. При использовании на сервере приложений EntityManager прозрачно для вас взаимодействует с диспетчером распределенных транзакций JTA.

В большинстве случаев вы используете CMT с аннотацией @Required в EJB.Это означает, что вам не нужен доступ ни к UserTransaction , ни к EntityManager.getTransaction . Приложение. сервер запускает и фиксирует транзакцию, но также заботится об откате, если возникает исключение. Это то, что я бы порекомендовал для вашего фасада.

(Есть и другие тонкости, такие как PersistenceContextType или ручное включение диспетчера сущностей в распределенную транзакцию с помощью EntityManager.joinTransaction , но это только если вы используете технологии в другие способы по умолчанию).

27
ответ дан 28 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: