Безопасно ли хранить список ожидающих выполнения в контексте действий пользователя в веб-приложении в bean-компоненте с областью действия сеанса, а затем надежно выполнять эти действия в конце сеанса с помощью @Predestroy
аннотированного метода (я имею в виду безопасность в контексте @predestroy
метод не вызывается и, следовательно, действие не выполняется при некоторых обстоятельствах или около того !? ).
Использовать метод @predestroy для выполнения ожидающих инструкций в конце сеанса?
Ответы (2)
вы можете захотеть перенести свою логику в реализацию HttpSessionListener (это интерфейс). вы бы запускали события sessionDestroyed (через реализацию этого метода в вашей конкретной реализации).
это довольно простое в использовании и отличное место для обработки такого рода вещей (я реализовал один в текущем продукте как JMX-бин для обработки управляющих сеансов во время выполнения).
ТИА
@Predestroy
управляемого компонента @SessionScoped
находится за кулисами JSF, уже вызванными HttpSessionListener#sessionDestroyed()
. Поэтому я совершенно не понимаю, насколько полезно и безопасно заменить это собственной реализацией.
- person BalusC; 16.08.2012
Совершенно безопасно хранить ожидающие выполнения или фиксации БД в методе @preDestroy. В этом состоянии управляемый компонент не будет уничтожен. Таким образом, состояние управляемого компонента будет таким же, как и при обычном вызове метода внутри компонента. Пожалуйста, обратитесь к приведенной ниже документации.
http://docs.oracle.com/javaee/6/tutorial/doc/gmgkd.html#gmghg
«Подготовка к уничтожению управляемого компонента с помощью аннотации @PreDestroy Подготовка к уничтожению управляемого компонента указывает метод обратного вызова жизненного цикла, который сигнализирует о том, что компонент приложения будет уничтожен контейнером.
В классе управляемого компонента или любого из его суперклассов подготовьтесь к уничтожению управляемого компонента. В этом методе выполните любую очистку, которая требуется перед уничтожением компонента, например, высвобождение ресурса, удерживаемого компонентом.
Аннотируйте объявление метода аннотацией javax.annotation.PreDestroy. CDI вызывает этот метод перед тем, как начать уничтожать компонент».