Когда статические переменные сервлета отображаются в gae? - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь использовать приложение GAE, которое только регистрирует пользователей, связывает с ними контакты и возвращает их онлайн-статус.Если онлайн, верните их IP.Итак, у меня есть сущность JPA со списком идентификаторов пользователей и контактов и временным полем ip.Каждый раз, когда пользователь входит в систему, я сохраняю его на карте.

private static final Map<String, SSUser> connectedRegisteredUsers = new HashMap<String, SSUser>();

Теперь сюрприз состоит в том, что, по-видимому, через некоторое время карта опустошается и забывает пользователей.Я понятия не имею, почему это может происходить, как это проверить (помимо наблюдения за поведением) и существует ли альтернатива, кроме хранения IP в хранилище данных.

1 Ответ

2 голосов
/ 30 ноября 2010

App Engine может запускать и закрывать экземпляры вашего приложения в любое время в ответ на изменение структуры трафика. Здесь есть две проблемы: во-первых, ваше приложение будет запускать несколько разных экземпляров на нескольких компьютерах, каждый из которых имеет отдельное состояние (включая статические переменные). Во-вторых, экземпляры могут быть закрыты и запущены в любое время, очищая статическую переменную.

Если вам нужны глобально согласованные данные, вам нужно использовать memcache и / или хранилище данных.

...