Я создал простой веб-проект 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?
Класс пользователя скомпилирован как файл класса под WEB-INF/классов. Я также попытался поместить это в файл jar как библиотеку.Поместил библиотеку в WEB-INF/lib, а также переместил ее в библиотеку Tomcat. В этом случае это дало мне ClassCastException: не может наложить com.com.ns.ts.dto.User на com.com.ns.ts.dto.User !!! – sanket
Я предполагаю, что его довольно простой способ хранения пользовательских объектов в сеансе? Как это управляется иначе, в кластерной среде, где tomcat десериализует сеанс, у которого есть пользовательские объекты. – sanket
Я думаю, что вы на правильном пути, поставив эту банку под Linux-дистрибутив Tomcat. Теперь убедитесь, что класс User больше не присутствует в 'webapp/WEB-INF', иначе он может быть загружен двумя разными загрузчиками классов и может быть причиной исключения ClassCastException. –