Различие между UserTransaction и EntityTransaction

В заголовке говорится все это: Каково различие между a UserTransaction и EntityTransaction?

Мое элементарное понимание - это UserTransaction используется, когда JTA требуется (например, сделать запросы на mulitple вещах), и это EntityTransaction используется, когда JPA только требуется (например, когда запрос является атомарным).

Это - единственная разница между двумя или там больше к ней, чем это?

18
задан dplante 7 March 2013 в 03:44
поделиться

1 ответ

Насколько я понимаю, UserTransaction используется, когда JTA требуется (например, чтобы делать запросы на несколько вещей), и что EntityTransaction используется, когда JPA требуется только (например, когда запрос атомарно).

Это в основном верно, но ваше описание «множественных вещей» и «атомарности» немного странно. JTA позволяет разработчику использовать распределенную транзакцию для внесения изменений в несколько ресурсов (база данных, брокер JMS и т. Д.) Атомарно (все или ничего). Если осуществляется доступ только к одному ресурсу (например, к одной базе данных), вам не нужен JTA, но транзакция по-прежнему является атомарной (все или ничего). Это, например, случай, когда вы используете обычную транзакцию JDBC в одной базе данных.

Учитывая UserTransaction по сравнению с EntityTransaction :

  • Если JPA используется автономно, вы используете EntityTransaction , чтобы самостоятельно разграничить транзакцию.
  • Если JPA используется в управляемой среде, где он интегрируется с JTA, вы используете UserTransaction . EntityManager подключается к диспетчеру распределенных транзакций JTA. Единственная тонкость, о которой я знаю, касается слива изменений. Когда используется EntityTransaction , JPA знает, что ему необходимо очистить изменения. Если транзакция управляется с помощью UserTransaction , ей необходимо зарегистрировать обратный вызов с помощью JTA registerSynchronization , чтобы изменения были сброшены в базу данных до завершения транзакции.Если вы используете EJB с CMT (транзакция, управляемая контейнером), вам даже не нужно использовать UserTransaction : сервер приложений запускает и останавливает транзакции за вас.

Связанные вопросы:

24
ответ дан 30 November 2019 в 08:37
поделиться
Другие вопросы по тегам:

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