Хранение сеансов на основе MongoDB для Tomcat6 - PullRequest
3 голосов
/ 06 сентября 2011

Есть ли в любом случае пользователь MongoDB в качестве центрального хранилища сеансов для Tomcat6? Если да, то можем ли мы иметь кластер серверов Tomcat, считывающий данные сеанса из MongoDB, чтобы можно было динамически изменять размер кластера (добавляя больше блоков на лету) без необходимости в липких сеансах?

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Я думаю, что нашел то, что искал.

https://github.com/dawsonsystems/Mongo-Tomcat-Sessions

Если бы кто-то использовал это в производстве, я бы хотел услышать ваш опыт.

0 голосов
/ 03 октября 2013

Я думаю, что есть лучший способ использовать MongoDD для хранения сессий, просто используя функции Servlet-Api и не используя проприетарные функции Appserver.

  1. Прежде всего вам необходимо создать собственную реализациюHttpSession на основе карты для хранения атрибутов
  2. Вам необходимо создать реализацию HttpServletRequest (используя HttpServletRequest Wrapper), которая перезаписывает getSession-метод и возвращает вашу реализацию
  3. Вам необходимо создать фильтр, который заменяетданный запрос HttpRequest против созданного вами и выполните MongoDB-Handling для загрузки и хранения карты атрибутов

. Вы можете найти несколько примеров кода (к сожалению, на немецком языке) здесь: http://mibutec.wordpress.com/2013/09/23/eigenes-session-handling-in-webapplikationen/

0 голосов
/ 06 сентября 2011

Сеансы Tomcat / J2EE имеют метод getId(), который возвращает идентификатор сеанса для текущего пользователя.Вы, безусловно, можете использовать это в качестве ключа для коллекции sessions в MongoDB и хранить любые данные, которые вам нужны.

Мне неизвестны какие-либо готовые инструменты для интеграции именно с Tomcat 6но это не значит, что они не существуют.Но это довольно простая задача, может быть проще всего написать собственный DAO для доступа к данным сеанса с HttpSession или HttpServletRequest.

Если ваши данные сеанса являются единственным общим состоянием, которое вы поддерживаетезатем перемещение его в MongoDB (или в любую базу данных или инструмент вне приложения) позволит вам масштабироваться так, как вы предлагаете.Если на серверах приложений поддерживается другое состояние, вам необходимо определить, как перенести это состояние с серверов приложений на общий ресурс.

...