Я также опубликовал это на форумах Spring, но подумал, что я бы хотел дать людям здесь шанс повысить свою репутацию:
Для простых старых приложений сервлетов, работающих вВ кластерной среде (репликация / переключение сеанса) рекомендуется переустанавливать атрибуты сеанса, если они были изменены:
UserPreferences prefs = (UserPreferences)session.getAttribute("userPreferences");
prefs.setInstantEmail(true);
session.setAttribute("userPreferences", prefs);
Это действует как флаг для контейнера, в котором состояние сеанса изменилось иРепликация не требуется. Вот ссылка на некоторую документацию WLS по этому вопросу.
Приложение, которое я сейчас изменяю, использует Spring для поддержки стиля разработки POJO + Injection, и мне не ясно, каквышеуказанная практика переводит.Согласно документам Spring, Скопированные компоненты в качестве зависимостей , приложение использует <aop:scoped-proxy/>
для внедрения зависимости на уровне сеанса.Тем не менее, без прямого доступа к сеансу, как изменения этой зависимости помечаются для контейнера, чтобы могла происходить репликация?Есть ли что-то встроенное в прокси-сервер или веб-контекст для его поддержки?Если нет, у кого-нибудь есть примеры того, как они справляются с этим?
Спасибо за понимание.
Разъяснение, основанное на ответе axtavt :
Одной из целей проекта в следовании подходу POJO + Injection является недопущение прямой зависимости от классов Java EE или Spring.Я могу себе представить, что Spring может предоставить некоторые хуки для извлечения bean-компонентов из контекста, который может обеспечить место, по крайней мере, для отслеживания того, какие bean-объекты сессионной области были использованы.Другой возможностью может быть объявление набора методов в сессионном компоненте, который при вызове может вызвать изменение состояния.Не будучи глубоко знакомым с Spring, я могу только догадываться о том, что кажется возможным, не зная технических подробностей.
Дополнительный вопрос после просмотра некоторого кода Spring:
Может ли кто-нибудь пролить свет на роль, которую может сыграть ServletRequestAttributes
?Похоже, его метод getAttribute
отслеживает, какие атрибуты были получены, а затем его метод updateAccessedSessionAttributes
пытается "переустановить" атрибуты, которые, по его мнению, изменились.