JPA нельзя использовать с областями CDI, которые управляются в HttpSession? - PullRequest
3 голосов
/ 31 октября 2011

Все управляемые CDI bean-компоненты, принадлежащие к области, которая в конечном итоге связана с HttpSession, должны быть сериализуемыми. Это означает, что все атрибуты должны быть сериализуемыми. EntityManager нет, хотя это, похоже, считается ошибкой ( здесь и здесь (я не знаю, почему он закрыт.)).

Это означает, что если вы хотите придерживаться спецификации, вы не можете использовать JPA из областей CDI, таких как Session или Conversation.

Кажется, Java EE близка к непригодному для использования или как?

1 Ответ

1 голос
/ 01 ноября 2011

вы правы: EntityManager не сериализуемо, но вы думаете, что CDI EG не заметил этого :-)?

Так, когда компонент CDI сериализуется (т.е. пассивируется SFSB)EntityManager считается временным и не является.Когда бин не сериализуется, EntityManager автоматически повторно вводится в Бин, и он работает так, как раньше.

Проблема в том, что вы используете расширенный контекст постоянства в своем Бине.Спецификация Java EE не поддерживает сериализацию такого компонента.Но фреймворк, такой как Seam 2 для Java EE 5 или расширение CDI, такое как Seam3 Persistence в Java EE 6, дает вам возможность управлять этими особыми случаями использования.

...