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