Каково различие между Ограниченным по объему транзакцией контекстом Персистентности и Расширенным контекстом Персистентности?

Каково различие между Ограниченным по объему транзакцией контекстом Персистентности и Расширенным контекстом Персистентности??

41
задан Manuel Drieschmanns 7 November 2017 в 13:51
поделиться

1 ответ

Разница четко объяснена в спецификации JSR-220 Enterprise JavaBeans 3.0:

5.6 Контексты сохраняемости, управляемые контейнером

(...)

Контекст сохраняемости , управляемый контейнером, может быть определен как имеющий либо время жизни, ограниченное единственной транзакцией, либо расширенное время жизни { {1}}, который охватывает несколько транзакций, в зависимости от PersistenceContextType , который указан, когда его EntityManager равен {{1 }} созданный. Эта спецификация относится к таким контекстам сохраняемости, как контексты сохраняемости в области транзакции и расширенные контексты сохраняемости соответственно.

(...)

5.6.1 Контекст сохранения в области транзакции, управляемый контейнером

Приложение может получить диспетчер объектов, управляемый контейнером, с сохранением в области транзакции контекст привязан к транзакции JTA посредством внедрения или прямого поиска в пространстве имен JNDI .Тип контекста постоянства для диспетчера сущностей установлен по умолчанию или определен как PersistenceContextType.TRANSACTION .

Новый контекст постоянства начинается, когда диспетчер объектов, управляемых контейнером вызывается [36] в области активной транзакции JTA, и нет текущего контекста постоянства , уже связанного с транзакцией JTA . Создается контекст сохранения , который затем связывается с транзакцией JTA.

Контекст сохранения заканчивается, когда связанная транзакция JTA фиксируется или откатывается, и все объекты, которые управлялись EntityManager, становятся отсоединенными.

Если менеджер объектов вызывается вне области транзакции, любые объекты, загруженные из базы данных , будут немедленно отсоединены в конце вызов метода.

5.6.2 Расширенный контекст сохраняемости, управляемый контейнером

Расширенный контекст сохраняемости , управляемый контейнером, может быть инициирован только в пределах области действия сеансового компонента с отслеживанием состояния. Он существует с точки, в которой сохраняющий состояние сессионный компонент, который объявляет зависимость от диспетчера сущностей типа PersistenceContextType.EXTENDED создается и считается связанным с сессионным компонентом с отслеживанием состояния. Зависимость от контекста расширенного сохранения объявляется с помощью аннотации PersistenceContext или развертывания persistence-context-ref {{ 1}} элемент дескриптора.

Контекст сохранения закрывается контейнером, когда метод @Remove сеансового компонента с отслеживанием состояния завершается (или сеанс с сохранением состояния {{ 1}} экземпляр bean-компонента в противном случае уничтожается).

(...)

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

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