Данные сеанса не сохраняются в GAE (Java) - PullRequest
0 голосов
/ 01 октября 2011

Я борюсь во время обработки сессий в GAE.Я пытаюсь сохранить два класса и строку в сессии.Хотя в среде DEV он работает нормально, на производстве класс и строка не сохраняются в сеансе.Класс, который не сохраняется в качестве атрибута сеанса, выглядит следующим образом:

@PersistenceCapable(detachable="true")
public class Agent implements Serializable{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Long id;

  @Persistent private String name;  //Name of the Agency
  @Element(dependent = "true") 
  private List<Contact> contacts = new ArrayList<Contact>();

  @Element(dependent = "true") 
  private List<Agency> agencies = new ArrayList<Agency>();

  @Persistent private List<Long> subAgents = new ArrayList<Long>();

  @Persistent private Date createdOn = new Date();  
}

Я хотел бы еще раз упомянуть, что он прекрасно работает в среде DEV, но при работе я получаю значения как нулевые.Как видите, я сделал класс реализующим Serializable.Но я думаю, что это не проблема, потому что я задаю еще один атрибут как простую строку, и это также не работает (я получаю значение атрибута как ноль).Сессия, однако, создается так, как я ее вижу на бэкэнде, а также есть еще один класс, который сохраняется в сессии.

У кого-нибудь есть предложения?Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 28 марта 2013

Ваша проблема, вероятно, связана с:

  1. GAE часто сериализует сессии почти сразу, а среда разработки - нет.Таким образом, все объекты в вашем графике должны реализовывать Serializable.

  2. НО ДАЖЕ БОЛЬШЕ ПОДОБНОГО в том, что после изменения переменной сеанса вы должны сделать что-то вроде req.getSession (). SetAttribute (myKey,myObj) - он НЕ будет видеть изменения в вашем объекте и автоматически записывать их обратно в сеанс ... поэтому атрибуты сеанса будут иметь значение того, что они имели, когда они были установлены в последний раз.

Проблема № 2, описанная выше, стоила мне бесчисленного количества времени и боли, пока я не споткнулся (через длительный процесс устранения).

0 голосов
/ 14 февраля 2012

Создание классов Agency и Contact Serializable решает проблему.Это означает, что каждый объект (будь то вложенный или другой), который присутствует в атрибуте сеанса, должен быть сериализуемым.

0 голосов
/ 02 октября 2011

Включили ли вы сеансы в файле конфигурации?http://code.google.com/intl/en/appengine/docs/java/config/appconfig.html#Enabling_Sessions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...