2011-01-31 2 views
7

Je cherche un moyen d'éviter la réplication de session en mémoire/clustering et stocker la session dans une base de données. Utiliser JDBCStore de Tomcat est inutile à ce stade, car il stocke uniquement les sessions inactives dans la base de données pour enregistrer la mémoire des serveurs. Des suggestions?Tomcat: Stocke la session dans la base de données

Merci dès le départ Fabian

+1

Par curiosité, avez-vous regardé Elastic Beanstalk d'Amazon? Ils fournissent des sessions collantes. – stepanian

Répondre

5

Si vous ne souhaitez pas utiliser la session de la façon dont il est censé être utilisé, alors ne l'utilisez pas du tout - développer votre propre objet de session. Il peut encore implémenter HttpSession, et même s'étendre d'une implémentation de HttpSession.

Vous pouvez utiliser un Filter pour envelopper votre demande afin qu'elle retourne votre objet de session plutôt que le standard. Dans votre session, vous pouvez stocker des éléments dans la base de données plutôt que dans la mémoire.

Au lieu d'écrire à la DB, vous pouvez utiliser Hazelcast - il fournit des collections distribuées. Mais je suppose que cela prendra le même effort que pour configurer la réplication de session. Et la réplication de session n'est pas quelque chose d'aussi difficile - elle est supportée par tous les conteneurs.

Ce sont des lignes directrices approximatives, la tâche ne sera pas trivial. Et je vous recommande de rester fidèle aux modèles d'utilisation de session standard et de stocker des éléments dans la base de données uniquement si cela est réellement nécessaire. Afin d'éviter le besoin de réplication, vous pouvez essayer d'utiliser des sessions persistantes, c'est-à-dire lorsqu'un utilisateur est dirigé vers un serveur par l'équilibreur de charge, chaque requête ultérieure de cet utilisateur est envoyée au même serveur.

+0

Merci pour la réponse rapide. Mon intention est d'exécuter plusieurs Tomcat dans Microsoft Azure. Le problème avec sticky-sessions est qu'il n'est pas supporté par l'équilibreur de charge d'Azure. Le moyen le plus simple d'obtenir une réplication de session dans cet environnement de cloud consiste à stocker la session dans la base de données. Avez-vous des exemples de code pour l'extension HttpSession et le filtre? Merci pour votre réponse – Fabe

+0

@Fabe - Je n'ai pas d'exemples, désolé. Je – Bozho

3

Vous pourriez vouloir regarder this project, je préférerais des séances de stockage dans memcached plutôt que dans le DB.

+0

checket dehors - très intéressant, mais la session non-collante Version prêt pour la production, ( – Fabe

+0

projet intéressant en effet, +1 – Bozho

+1

BTW, session-manager memcached 1.4 est maintenant disponible - avec le soutien pour les sessions non collant – MartinGrotzke

Questions connexes