| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > выполнение действий перед разрушением сесии |
| Автор: integral 29.4.2009, 11:43 |
| Добрый день, необходимо получить из сесии атрибут (строка) и выполнить с его помощью некоторые действия. В HttpSessionListener метод sessionDestroyed вызывается после разрушения сесии и атрибут не молучается извлечь. Придумалось решение, ложить в сесию не строку, а объект класса реализовывающего HttpSessionBindingListener - но такой способ не очень нравится, т.к. требует рефакторинга все кода, где упоминается данный атрибут. Может есть более простые решения? спасибо) |
| Автор: AntonSaburov 29.4.2009, 12:27 |
| наверно надо выделить все обращения к данному аттрибуту в отдельный метод и соответственно сохранение этого аттрибута тоже в отдельный метод. Ну а дальше дело техники - хоть в базу данных сохраняй, хоть в файл. И вытаскивай тоже. |
| Автор: integral 29.4.2009, 12:46 | ||
| логично Добавлено @ 12:50
точно? вобще как-бы Note that HttpSessionListener.sessionDestroyed is invoked _after_ a session is invalidated. у меня томкет 6 и падает IllegalAccessError ошибся IllegalStateException, а вот на томкете 5 работает - там баг такой был, что сесия не разрушалась (№3735) |
| Автор: ivg 29.4.2009, 13:00 | ||
И пример кода, я у себя проверю. Вообще странно, надо бы разобраться... |
| Автор: integral 29.4.2009, 13:14 | ||
http://www.velocityreviews.com/forums/t125437-logout-methods-suggestions-please.html http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSessionListener.html#sessionDestroyed(javax.servlet.http.HttpSessionEvent) http://www.xyzws.com/Servletfaq/when-do-i-use-httpsessionlistener/7 Да пример кода любой сойдет, вот кусочек:
|
| Автор: integral 29.4.2009, 14:27 |
| проблема усугудилась тем, что как показал тест sessionDestroyed вызывается перед valueUnbound поэтому, как все таки выполнить действия перед тем, как сесия станет инвалидной?? |
| Автор: ivg 29.4.2009, 14:27 |
Там пост 2003 года Стэк-трэйс этого исключения покажите. Должно всё работать вроде. invalidate() ни в каких листенерах не вызывается случайно? |
| Автор: integral 29.4.2009, 14:56 | ||
| ну 2003 но с того времени, я полагаю, принцып работы не должен был изменится): стек-трейс:
|
| Автор: ivg 29.4.2009, 15:04 | ||
Эти строки то как раз не интересны; что ниже?
Не факт, тем более это не официальная информация. Судя по исходнику org.apache.catalina.session.StandardSession в момент вызова sessionDestroyed() сессия должна быть валидной. Добавлено через 2 минуты и 19 секунд Какая версия томката кстати? |
| Автор: integral 29.4.2009, 15:18 | ||
| на этом воспроизводится: Server Information Tomcat Version JVM Version JVM Vendor OS Name OS Version OS Architecture Apache Tomcat/5.0.9 1.6.0_11-b03 Sun Microsystems Inc. Windows XP 5.1 x86 а дальше идет вот такое:
|
| Автор: ivg 29.4.2009, 15:42 |
Ы? Короче надо обновлять версию томката. |
| Автор: integral 29.4.2009, 15:56 |
на 5,0,9 проявляется, на 6,0,18 - нету = в том предложении ошибка была |