Tomcat 7持久会话管理器过早地从Store加载

时间:2015-01-09 14:50:57

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

我们正在尝试在运行单个服务器的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)。

2 个答案:

答案 0 :(得分:0)

我相信你会遇到issue #6

中提到的实现的异步性质(以及粘性会话的隐含需求)

如果您没有使用粘性会话,我建议您选择同步的Redis approach

答案 1 :(得分:0)

最后我们使用了没有此问题的JDBCStore。我希望在未来有更多时间回到这个问题。