2013-11-08 2 views
1

Я создал простой веб-проект aws с помощью eclipse sdk. Я проверил управление сеансом с помощью dynamo db, чтобы мои сеансы не были липкими, и они могут сохраняться, если балансировщик нагрузки добавляет или удаляет экземпляры.aws AmazonDynamoDBSessionManagerForTomcat ClassNotFound issue

Этот проект имеет простой объект

package com.ns.ts.dto; 

импорта java.io.Serializable;

класс пользователя общественного реализует 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; 
    } 

}

И есть два сервлеты, SETUSER (который принимает некоторые параметры и устанавливает пользователь в сессии с некоторыми значениями) и GetUser (который отображает значения пользователя из сеанса)

Я развертываю проект, и все кажется прекрасным. В DynamoDB создается таблица.

Теперь я вызываю setUser. Это устанавливает объект User в сеансе с некоторыми значениями.

Далее я вызываю 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, и он не может найти путь к классу для моего пользовательского объекта в общей библиотеке Tomcat.

Есть ли кто-нибудь, кто сталкивался с этим раньше? Есть ли работа вокруг/решение для использования пользовательских объектов в сеансе и хранения их dynamoDB?

ответ

1

Если фляга, содержащая ваш класс пользователя, находится под каталогом WEB-INF/lib вашего webapp, попробуйте переместить его в директорию lib от Tomcat. Вероятно, он должен быть рядом с банкой Amazon для правильной работы класса.

+0

Класс пользователя скомпилирован как файл класса под WEB-INF/классов. Я также попытался поместить это в файл jar как библиотеку.Поместил библиотеку в WEB-INF/lib, а также переместил ее в библиотеку Tomcat. В этом случае это дало мне ClassCastException: не может наложить com.com.ns.ts.dto.User на com.com.ns.ts.dto.User !!! – sanket

+0

Я предполагаю, что его довольно простой способ хранения пользовательских объектов в сеансе? Как это управляется иначе, в кластерной среде, где tomcat десериализует сеанс, у которого есть пользовательские объекты. – sanket

+0

Я думаю, что вы на правильном пути, поставив эту банку под Linux-дистрибутив Tomcat. Теперь убедитесь, что класс User больше не присутствует в 'webapp/WEB-INF', иначе он может быть загружен двумя разными загрузчиками классов и может быть причиной исключения ClassCastException. –