我使用Eclipse sdk创建了一个简单的aws web项目。 我使用dynamo db检查了会话管理,以便我的会话不会粘滞,如果负载均衡器添加或删除实例,它们可以保持不变。
这个项目有一个简单的对象
package com.ns.ts.dto;
import java.io.Serializable;
public class User实现Serializable {
/**
*
*/
private static final long serialVersionUID = -7038692393544658830L;
private String user;
private String name;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
还有两个servlet,setUser(它接受一些参数并在会话中设置用户的某些值) 和getUser(显示会话中的用户值)
我部署项目,一切似乎都很好。在DynamoDB中创建一个表。
现在我调用setUser。这会在会话中为对象设置一些值。
接下来,我调用getUser,这会显示会话中User对象的值。 (似乎会话仍在EC2实例中)
我等了一段时间再次使用一组不同的参数调用setUser。 我在DynamoDB中查看表以确保会话对象在表中(我在行的最后更新时间确认了这一点)
我等了一段时间再打电话给getUser。
这会引发错误:
抛出java.lang.ClassNotFoundException:com.ns.ts.dto.User
错误在
生成com.amazonaws.tomcatsessionmanager.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionStore.load
我认为当jar尝试从dynampDB中对会话对象进行deserilize并且它无法在Tomcat的共享库中找到自定义对象的类路径时会生成此错误。
有没有人以前遇到过这种情况? 是否有解决方案在会话中使用自定义对象并将它们存储在dynamoDB中?
答案 0 :(得分:1)
如果包含您的User类的jar位于您的webapp的WEB-INF/lib
目录下,请尝试将其移动到Tomcat的lib
目录下。它可能需要与Amazon jar一起使用才能使类加载正常工作。
答案 1 :(得分:0)
有一个更新,这个问题似乎已经解决了。