Имеет смысл говорить об Открытом заседании В поле зрения Шаблон в рамках приложений JSF2? Мое приложение имеет Управляемые компоненты JSF2, называя Бизнес-услугу EJBs, которые делают весь связанный с дб материал (существует уровень DAO, но это не имеет значения прямо сейчас).
Наличие шаблон OSIV означал бы, что Управляемый компонент должен будет так или иначе удостовериться базовая сессия, было открыто.
Я также использую JPA.
Теоретически проблема в точности такая же: объекты будут отсоединяться, когда они покидают EJB, если что-то не удерживает область EntityManager открытой. (Вот отличный пост по теме в целом: Шаблоны реализации JPA: Ленивая загрузка ).
Из сообщения в блоге я прочитал:
8) Нет поддержки Open Entity Manager In View. [...] В EJB3, когда ваша сущность оставляет bean с транзакцией EntityManager, он отделен от настойчивости контекст, и вы больше не можете полагаться на ленивая загрузка (собственно, JPA спецификация не указывает поведение в такой ситуации, наверное какое-то исключение, зависящее от поставщика, будет быть брошенным ...) Конечно, вы можете использовать EntityManager с расширенным контекст персистентности , удерживая контекст транзакции и персистентности как сколько хочешь. Но эта особенность доступно только для SFSB, а DAO классы являются типичными примерами услуги без гражданства, поскольку они только отправлять звонки на постоянство слой. Кроме того, посвятив Экземпляр компонента DAO для каждого клиента кажется большим перебором.
Однако я не уверен, что это правда.Насколько я понимаю, вы должны уметь написать фильтр сервлета, который использует UserTransaction
для запуска и фиксации транзакции (как обычный фильтр в OSIV). Затем EJB будет участвовать в транзакции, запущенной в фильтре, и EntityManager
останется открытым. Я не тестировал его, но предлагаю попробовать.