Tomcat6 基于 MongoDB 的会话存储

发布于 2024-12-03 05:39:58 字数 120 浏览 1 评论 0 原文

有没有办法使用 MongoDB 作为 Tomcat6 的中央会话存储?如果是这样,我们是否可以拥有一个 Tomcat 服务器集群,从 MongoDB 读取会话数据,以便可以动态调整集群大小(动态添加更多框),而不需要粘性会话?

Is there anyway to user MongoDB as a central session storage for Tomcat6? If so, could we have a cluster of tomcat servers reading session data from MongoDB so that the cluster could be dinamically resized (adding more boxes on the fly) without the need of sticky sessions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦在深巷 2024-12-10 05:39:58

我想我找到了我正在寻找的东西。

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

如果有人使用过它正在制作中,我很想听听您的经验。

I think I found what I was looking for.

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

If anyone has used it in production, I would love to hear your experiences.

前事休说 2024-12-10 05:39:58

Tomcat/J2EE 会话有一个 getId() 方法,该方法返回当前用户的会话 ID。您当然可以使用它作为 MongoDB 中 sessions 集合的键,并存储您想要的任何数据。

我不知道有任何专门与 Tomcat 6 集成的预构建工具,但这并不意味着它们不存在。但这是一项相当简单的任务,最简单的方法可能是编写自己的 DAO 来访问给定 HttpSession 或 HttpServletRequest 的会话数据。

如果您的会话数据是您维护的唯一共享状态,那么将其移动到 MongoDB(或任何应用程序服务器外的数据库或工具)将使您能够按照您的建议进行扩展。如果您在应用程序服务器上维护了其他状态,那么您将需要确定如何将其从应用程序服务器移至共享资源上。

Tomcat/J2EE sessions have a getId() method which returns the session ID for the current user. You can certainly use this as a key into a sessions collection in MongoDB, and store any data you'd like.

I'm not aware of any pre-built tools to integrate specifically with Tomcat 6, but that doesn't mean they don't exist. But this is a fairly straightforward task, it might be simplest just to write your own DAO to access session data given an HttpSession or HttpServletRequest.

If your session data is the only shared state you maintain, then moving it to MongoDB (or to any off-appserver database or tool) will enable you to scale like you propose. If you have other state maintained on the application servers, then you will need to determine how to move that off of the app servers and onto a shared resource.

香橙ぽ 2024-12-10 05:39:58

我认为有一种更好的方法使用 MongoDD 来存储会话,只需使用 Servlet-Api 功能,而不需要专有的 Appserver 功能。

  1. 首先,您需要创建自己的实现
    基于用于存储属性的 Map 的 HttpSession
  2. 您需要创建 HttpServletRequest 的实现(使用 HttpServletRequest Wrapper)来覆盖 getSession-method 和
    返回您的实现
  3. 您需要创建一个过滤器,根据您创建的内容替换给定的 HttpRequest,并执行 MongoDB 处理来加载和存储属性映射

您在这里找到一些代码示例(遗憾的是德语): http://mibutec.wordpress.com/2013/09/23/eigenes-session-handling-in-webapplikationen/

I think there is a better way using MongoDD to store sessions, just using Servlet-Api functions and no proprietary Appserver-features.

  1. First of all you need to create your own implementation of an
    HttpSession based on a Map for storeing attributes
  2. You need to create an implementation of HttpServletRequest (using HttpServletRequest Wrapper) that overwrites getSession-method and
    returns your implementation
  3. You need to create a filter which replaces the given HttpRequest against your created and do the MongoDB-Handling to load and store the attribute-map

You find some code-samples (sadly in german language) here: http://mibutec.wordpress.com/2013/09/23/eigenes-session-handling-in-webapplikationen/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文