JSF2: открытое заседание в поле зрения с EJBs?

Имеет смысл говорить об Открытом заседании В поле зрения Шаблон в рамках приложений JSF2? Мое приложение имеет Управляемые компоненты JSF2, называя Бизнес-услугу EJBs, которые делают весь связанный с дб материал (существует уровень DAO, но это не имеет значения прямо сейчас).

Наличие шаблон OSIV означал бы, что Управляемый компонент должен будет так или иначе удостовериться базовая сессия, было открыто.

Я также использую JPA.

6
задан Miguel Ping 30 June 2010 в 17:21
поделиться

1 ответ

Теоретически проблема в точности такая же: объекты будут отсоединяться, когда они покидают EJB, если что-то не удерживает область EntityManager открытой. (Вот отличный пост по теме в целом: Шаблоны реализации JPA: Ленивая загрузка ).

Из сообщения в блоге я прочитал:

8) Нет поддержки Open Entity Manager In View. [...] В EJB3, когда ваша сущность оставляет bean с транзакцией EntityManager, он отделен от настойчивости контекст, и вы больше не можете полагаться на ленивая загрузка (собственно, JPA спецификация не указывает поведение в такой ситуации, наверное какое-то исключение, зависящее от поставщика, будет быть брошенным ...) Конечно, вы можете использовать EntityManager с расширенным контекст персистентности , удерживая контекст транзакции и персистентности как сколько хочешь. Но эта особенность доступно только для SFSB, а DAO классы являются типичными примерами услуги без гражданства, поскольку они только отправлять звонки на постоянство слой. Кроме того, посвятив Экземпляр компонента DAO для каждого клиента кажется большим перебором.

Однако я не уверен, что это правда.Насколько я понимаю, вы должны уметь написать фильтр сервлета, который использует UserTransaction для запуска и фиксации транзакции (как обычный фильтр в OSIV). Затем EJB будет участвовать в транзакции, запущенной в фильтре, и EntityManager останется открытым. Я не тестировал его, но предлагаю попробовать.

2
ответ дан 17 December 2019 в 20:28
поделиться
Другие вопросы по тегам:

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