У меня есть 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 управляемых бобов? Казалось, что я связываюсь с сессией, которую я признал недействительной.
Разговоры хранятся в сеансе, поэтому, когда сеанс недействителен, так и разговор – LightGuard
Привет! Спасибо за ответ. Я отредактировал свой вопрос и представил пример того, чего я хочу достичь. Если у вас есть время, чтобы сэкономить, взгляните на него. Опять же, спасибо. Мне также очень хотелось бы знать, что скажет @BalusC. – inxis
Почему бы не создать другой вопрос? –