Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat 7持久会话管理器过早地从存储加载_Java_Amazon Web Services_Tomcat7_Amazon Dynamodb_Amazon Elastic Beanstalk - Fatal编程技术网

Java Tomcat 7持久会话管理器过早地从存储加载

Java Tomcat 7持久会话管理器过早地从存储加载,java,amazon-web-services,tomcat7,amazon-dynamodb,amazon-elastic-beanstalk,Java,Amazon Web Services,Tomcat7,Amazon Dynamodb,Amazon Elastic Beanstalk,我们正在尝试在运行单个服务器的elasticbeanstalk环境中为tomcat 7配置 我们可以看到会话数据定期备份到dynamodb,但偶尔也会从dynamodb加载旧的会话数据(用于同一会话)。在我们的应用程序中,这通过加载您正在查看的前一项(该项存储在会话中)来体现。JSESSIONID cookie保持不变,客户端保持相同的会话。如果我们关闭会话管理器,问题就解决了 下面是context.xml的内容 <?xml version="1.0" encoding="UTF-8"?&

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

我们可以看到会话数据定期备份到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>

WEB-INF/WEB.xml
我们尝试将maxIdleBackup和maxIdleSwap设置为中定义的高数值,但没有效果

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


是什么导致tomcat从存储加载回会话数据?我的理解是,只有当它根本不可用时(即客户端点击另一个tomcat),才应该从存储中加载它。

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


如果您不使用粘性会话,我建议您使用同步会话。最后,我们使用了没有此问题的会话。我希望以后有更多的时间再讨论这个问题。

谢谢你的回答。我们正在使用粘性会话,但在使用单个服务器时仍然会看到问题。我试过调试代码,但无法确定问题所在。由于某些原因,会话是在备份当前版本之前从数据库加载的。正如您所说,这可能是备份的异步性质,但我们的应用程序大多基于表单。最后,我们求助于使用内置的JDBCStore,它没有这个问题。