Каково различие между Ограниченным по объему транзакцией контекстом Персистентности и Расширенным контекстом Персистентности??
Разница четко объяснена в спецификации 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-компонента в противном случае уничтожается).(...)