【问题标题】:Tomcat 7 Persistent Session Manager prematurely loads from StoreTomcat 7 Persistent Session Manager 过早地从 Store 加载
【发布时间】:2015-01-20 00:25:20
【问题描述】:

我们正在尝试在运行单个服务器的 elasticbeanstalk 环境中为 tomcat 7 配置 dynamodb session manager

我们可以看到会话数据定期备份到 dynamodb,但有时旧会话数据(对于同一会话)会从 dynamodb 加载回。在我们的应用程序中,这通过加载您正在查看的上一个项目来表现出来(该项目存储在会话中)。 JSESSIONID cookie 保持不变,客户端保持相同的会话。如果我们关闭会话管理器,问题就解决了。

这是我们的 context.xml 的内容

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Manager
    className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
    Table="SessionTable"
    RegionId="eu-west-1"/>
</Context>

我们尝试将 maxIdleBackup 和 maxIdleSwap 设置为 tomcat 7 docs 中定义的高数值,但无济于事。

如果我们将 maxIdleBackup 和 maxIdleSwap 设置为零,则错误会减少,因为会话数据会更频繁地备份到 dynamodb,但这并不能解决问题。

是什么导致 tomcat 从 Store 加载回会话数据?我的理解是,只有当它根本不可用时才应该从商店加载它(即客户点击不同的 tomcat)。

【问题讨论】:

    标签: java amazon-web-services tomcat7 amazon-dynamodb amazon-elastic-beanstalk


    【解决方案1】:

    我相信您会受到 issue #6 中所述的实现的异步性质(以及对粘性会话的隐含需求)的影响

    如果您不使用粘性会话,我建议您使用同步的Redis approach

    【讨论】:

    • 感谢您的回答。我们正在使用粘性会话,但在使用单个服务器时仍然会出现问题。我已尝试调试代码,但无法查明问题所在。出于某种原因,会话是在备份当前版本之前从数据库中加载的。就像你说的,这可能是备份的异步特性,但我们的应用程序主要是基于表单的。
    • 最后我们使用了内置的JDBCStore,没有这个问题。
    【解决方案2】:

    最后我们使用了没有这个问题的JDBCStore。我希望以后有更多的时间来解决这个问题。

    【讨论】:

      猜你喜欢
      • 2014-10-16
      • 2013-09-15
      • 2015-03-16
      • 2015-02-23
      • 2011-10-26
      • 2013-03-22
      • 2013-05-06
      • 2015-07-14
      • 2011-07-07
      相关资源
      最近更新 更多