2013-02-14 2 views
0

У меня есть SessionManager который реализует HttpSessionListener. В SessionManager у меня есть статическая хэш-таблица всех активных сеансов. Я пытаюсь создать функцию для принудительной отмены сеансов. Это выглядит примерно так:разговор уничтожается при аннулировании сеанса


HttpSession session = sessionRegistry.get(key); 
session.invalidate(); 


Это абсолютно делает то, что я хочу, чтобы это сделать, что уничтожить целевой сеанс. Однако, похоже, это оказывает побочное воздействие на управляемый компонент @ConversationScoped.

В моем ConversationBean, у меня есть свойство, которое имеет некоторое значение. Я просто заметил, что после аннулирования сеанса из сеанса Registry значение, сохраненное на ConversationBean, будет уничтожено.

  • Я недействительности другую сессию (один из sessionRegistry, а не текущий сеанс)
  • я напечатал значение от ConversationBean до и после недействительности сессии и он все еще там. Он только уничтожается, как только я покидаю страницу @ViewScoped, отображающую список активных сеансов. (Caught его с помощью @PreDestroy)
  • Кроме того, на @PreDestroy аннотированного способе @ViewScoped фасоли, я попробовал напечатать разговор Id и уже аннулирован. И да, хеш-код для ConversationBean также различен, что означает, что он отличается от экземпляра, который у меня был до вызова session.invalidate.


---- EDIT ------

Этот пример демонстрирует, что я пытаюсь достичь:

Скажем, у меня есть приложение, область действия Hashtable, sessionRegistry, с этими значениями:

Key | Value 
--------------------- 
1 | HttpSession1 
2 | HttpSession2 
3 | HttpSession3 


Я регистрируюсь как администратор. Теперь я считаю, что у меня другая сессия, скажем HttpSession4. Я хочу, чтобы попытаться надрать сессию приложения и область действия Hashtable Я делаю это так:

HttpSession session = sessionRegistry.get(1); 
session.invalidate(); 


Я уничтожил HttpSession1 в то время как я был зарегистрирован в на HttpSession4.По моему мнению, разговор HttpSession1 должен быть уничтожен, а не текущий разговор, который должен быть связан с HttpSession4.


Мой вопрос, действительно ли это нормальное поведение @ConversationScoped управляемых бобов? Казалось, что я связываюсь с сессией, которую я признал недействительной.

ответ

3

Цитата из official documentation:

Когда HTTP сервлет сессии аннулирована, все давно работает разговор контексты, созданные в ходе текущей сессии будут уничтожены, после службы сервлета() метод завершается.

+0

Разговоры хранятся в сеансе, поэтому, когда сеанс недействителен, так и разговор – LightGuard

+0

Привет! Спасибо за ответ. Я отредактировал свой вопрос и представил пример того, чего я хочу достичь. Если у вас есть время, чтобы сэкономить, взгляните на него. Опять же, спасибо. Мне также очень хотелось бы знать, что скажет @BalusC. – inxis

+0

Почему бы не создать другой вопрос? –

Смежные вопросы