Уничтожение bean-компонентов с областью видимости при завершении сеанса

Мой вопрос связан с этим (и, возможно, с другими):

@PreDestroy никогда не вызывал @ViewScoped

Как указано там, не существует тривиального решения для уничтожения bean-компонентов с областью просмотра при навигации, и то же самое, похоже, верно и для истечения срока действия сеанса.

Как будет выглядеть нетривиальный подход к выпуску (вызов метода @PreDestroy) компонентов JSF с областью видимости, или, точнее, сразу после истечения срока действия сеанса?

Я использую Java EE 6 и Mojarra 2.1.x на GlassFish 3.1.2.


person Kawu    schedule 26.10.2012    source источник
comment
Какова конкретная причина уничтожения бобов?   -  person perissf    schedule 26.10.2012
comment
Очистки, такие как удаление временных файлов, которые были загружены (вложения) до того, как пользователь пошел на обед (истечение срока действия сеанса).   -  person Kawu    schedule 26.10.2012


Ответы (1)


Создайте bean-компонент @SessionScoped для хранения ресурсов (в какой-то коллекции/массиве?) и внедрите его в bean-компонент @ViewScoped, а затем полагайтесь на @PreDestroy bean-компонента с областью действия сеанса.

Правда, таким образом ресурсы живут немного дольше, чем вы хотите, но это самое простое и надежное решение, которое вы можете получить. Если вы хотите сохранить @PreDestroy в bean-компоненте с областью видимости, вам нужно каким-то образом убедиться, что конечный пользователь всегда выполняет навигацию с помощью HTTP-запроса POST именно по этому bean-компоненту с областью видимости. Вы не можете надежно гарантировать это (компьютер конечного пользователя может выйти из строя и т. д.).

person BalusC    schedule 26.10.2012