Tomcat:在数据库中存储会话

时间:2011-01-31 21:27:46

标签: java tomcat servlets jdbc replication

我正在寻找一种避免内存会话复制/群集的方法,并将会话存储在数据库中。此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以保存服务器内存。 有什么建议吗?

先谢谢 费边

3 个答案:

答案 0 :(得分:7)

如果您不想按照应该使用的方式使用会话,那么根本不要使用它 - 开发自己的会话对象。它仍然可以实现HttpSession,甚至可以从HttpSession的实现扩展。

您可以使用Filter来包装您的请求,以便它返回您的会话对象而不是标准对象。在您的会话中,您可以将内容存储在DB中而不是内存中。

您可以使用Hazelcast - 而不是写入数据库 - 它提供分布式集合。但我想这将花费与配置会话复制相同的工作量。并且会话复制并不困难 - 所有容器都支持它。

这些是粗略的指导方针,任务不会是微不足道的。我建议坚持使用标准会话使用模式,并且只在真正需要时才将内容存储在数据库中。

为了避免复制的需要,您可以尝试使用粘性会话 - 即当负载均衡器将用户定向到服务器时,该用户的每个后续请求都会发送到同一服务器。

答案 1 :(得分:3)

您可能希望查看this project,我更愿意在memcached中而不是在DB中存储会话。

答案 2 :(得分:0)

在我看来,我自己无法实现JDBC会话管理器,但感谢您的答案和时间 - Hazelcast需要仔细观察,对我来说似乎非常强大。我会做类似J. Brisbin的事情:http://jbrisbin.com/web2/articles/tomcat-session-manager-backed-by-riak/