aws AmazonDynamoDBSessionManagerForTomcat ClassNotFound问题

时间:2013-11-08 15:33:41

标签: amazon-web-services

我使用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中?

2 个答案:

答案 0 :(得分:1)

如果包含您的User类的jar位于您的webapp的WEB-INF/lib目录下,请尝试将其移动到Tomcat的lib目录下。它可能需要与Amazon jar一起使用才能使类加载正常工作。

答案 1 :(得分:0)

有一个更新,这个问题似乎已经解决了。

https://github.com/aws/aws-dynamodb-session-tomcat/issues/3