Tomcat: Store session in database

17,537

Solution 1

If you don't want to use the session in the way it is supposed to be used, then don't use it at all - develop your own session object. It can still implement HttpSession, and even extend from an implementation of HttpSession.

You can use a Filter to wrap your request so that it returns your session object rather than the standard one. In your session you can store things in DB instead of in-memory.

Instead of writing to the DB, you can use Hazelcast - it provides distributed collections. But I guess it will take the same amount of effort as to configure session replication. And session replication is not something that hard - it is supported by all containers.

These are rough guidelines, the task will not be trivial. And I'd recommend sticking to the standard session usage patterns, and storing things in DB only if really needed.

In order to avoid the need of replication you might try using sticky sessions - i.e. when a user is directed to a server by the load balancer, each subsequent request by that user is sent to the same server.

Solution 2

You might want to look at this project, I would rather prefer storing sessions in memcached rather than in the DB.

Share:
17,537
Fabe
Author by

Fabe

Working in software development since 2006 and specialised in solution architecture based on the Microsoft .NET platform. I aim to design better, faster and cheaper solutions based on platforms and to lead development teams to strive for customer satisfaction.

Updated on June 25, 2022

Comments

  • Fabe
    Fabe over 1 year

    I am searching for a way to avoid in-memory session replication/clustering and store the session in a database. Using Tomcat's JDBCStore is useless at this point, because it only stores inactive sessions in the database to save the servers memory. Any suggestions?

    Thanks upfront Fabian

  • Fabe
    Fabe almost 13 years
    Thanks for the quick response. My intention is to run several Tomcat's in Microsoft Azure. The problem with sticky-sessions is, that it is not supported by Azure's load balancer. The easiest way to achieve session replication in this cloud environment is to store the session in the db. Do you have any code samples for the HttpSession extension and the Filter? Thanks for your answer
  • Bozho
    Bozho almost 13 years
    @Fabe - I don't have examples, sorry.
  • Fabe
    Fabe almost 13 years
    I checket it out - very interesting, but the non-sticky Session Version is Not Ready for production ;(
  • Bozho
    Bozho almost 13 years
    interesting project indeed, +1
  • MartinGrotzke
    MartinGrotzke almost 13 years
    btw, memcached-session-manager 1.4 is now released - with support for non-sticky sessions