Tomcat: сохранить сеанс в базе данных
Я ищу способ избежать репликации / кластеризации сеансов в памяти и сохранить сеанс в базе данных. Использование Tomcat JDBCStore на данный момент бесполезно, поскольку он сохраняет только неактивные сеансы в базе данных для сохранения памяти серверов. Какие-либо предложения?
Спасибо заранее Фабиан
3 ответа
Если вы не хотите использовать сессию так, как она должна использоваться, то не используйте ее вообще - разработайте свой собственный объект сеанса. Это все еще может реализовать HttpSession
и даже расширить от реализации HttpSession
,
Вы можете использовать Filter
обернуть ваш запрос так, чтобы он возвращал ваш объект сеанса, а не стандартный. В своей сессии вы можете хранить вещи в БД, а не в памяти.
Вместо записи в БД вы можете использовать Hazelcast - он предоставляет распределенные коллекции. Но я думаю, что потребуется столько же усилий, сколько и для настройки репликации сеанса. И репликация сессий не является чем-то таким сложным - она поддерживается всеми контейнерами.
Это грубые ориентиры, задача не будет тривиальной. И я бы рекомендовал придерживаться стандартных шаблонов использования сеансов и хранить вещи в БД, только если это действительно необходимо.
Чтобы избежать необходимости репликации, вы можете попробовать использовать липкие сеансы - то есть, когда балансировщик нагрузки направляет пользователя на сервер, каждый последующий запрос этого пользователя отправляется на тот же сервер.
Возможно, вы захотите взглянуть на этот проект, я бы предпочел хранить сессии в memcached, а не в БД.
Мне кажется, что нет способа реализовать JDBC Session Manager самостоятельно, но спасибо за ваши ответы и время - Hazelcast нуждается в более внимательном рассмотрении, мне это кажется очень мощным. Я сделаю что-то подобное, как Дж. Брисбин: http://jbrisbin.com/web2/articles/tomcat-session-manager-backed-by-riak/