2014-06-30 3 views
1

Я запускаю новый проект с JavaEE 7 и объявлял Sessioncoped bean для поддержки информации пользователя, зарегистрированного в сети, в сеансе.CDI Сохраняет все ссылки на вложенные деревья в SessionScoped beans?

UserSessionBean, как я его назвал, предназначен для облегчения работы - попытки избежать большого количества данных, которые должны храниться в сеансе Weld. Но в некоторых случаях мне нужно получить всю информацию о пользователе, поэтому добавлен метод getUser(), который должен запросить и получить UserEntity из JPA. Для того, чтобы этот метод выполнял свою работу, мне нужно @Inject других ресурсов на UserSessionBean.

Мой вопрос: Эти зависимые ресурсы будут храниться и сериализоваться в пределах UserSessionBean Weld до тех пор, пока контекст не будет уничтожен?

Документация сварного шва говорит, что это:

Экземпляр зависимой фасоли никогда не разделяется между различными клиентами или различными точками впрыска. Это строго зависимый объект другого объекта. Он создается, когда объект, которому принадлежит , создается и уничтожается, когда объект, которому он принадлежит, является уничтожен.

Это заставляет меня думать все SessionBean дерева хранятся швом во время жизни сессии, но как я могу держать легкий SessionBean и использование впрыскиваются CDI ресурсов на это?

+0

Если зависимые ресурсы не хранятся там, что произойдет с ними, когда UserSessionBean будет десериализован? –

+0

Он может быть повторно загружен контейнером при десериализации. –

+0

Где контейнер должен хранить ваш зависимый объект, пока ваш UserSessionBean не будет десериализован? –

ответ

1

Поскольку то, что вы вводите, также являются CDI-бобами, это не те бобы, которые сериализуются, но их облегчают прокси. При десериализации прокси-серверы динамически разрешают правильные бобы для того, что бы они ни были. См. Раздел 5.4 Прокси-серверыCDI1.0 spec. Следовательно, ваш боб максимально легкий.

+0

Я прочитаю спецификацию, чтобы лучше понять эти прокси. Спасибо! –