#java #google-app-engine
#java #google-app-engine
Вопрос:
Я планирую реализовать приложение GAE только для собственного использования.
Приложение будет получать свои данные с помощью службы выборки URL, обновляя их каждые x минут (используя запланированные задачи). Затем он предоставит мне эту информацию, когда я ее запрошу.
Я едва начал изучать GAE, но у меня есть главный вопрос, который я не могу прояснить. Можно ли поддерживать состояние в GAE между различными запросами без использования jdo / jpa и хранилища данных?
Поскольку я единственный пользователь, я думаю, я мог бы сохранить информацию в подклассе servlet и таким образом я могу избежать необходимости иметь дело с хранилищем данных … но меня беспокоит то, что, поскольку у этого приложения будет очень мало запросов, если оно будет перемещено на диск или что-то еще (пока не знаю, имеет ли оно какое-то конкретное имя), оно потеряет свой статус?
Меня не беспокоит необходимость перезапускать все приложение и время от времени начинать собирать данные с нуля, это нормально.
Ответ №1:
Если это приложение для вашего собственного использования, и вы вдвойне уверены, что не будете делать его многопользовательским, и вас не беспокоит возможность того, что вы можете использовать его из двух браузеров одновременно, вы можете пропустить сеансы использования и использовать известный ключ для хранения информации в memcache.
Если ваша причина избегать хранилища данных связана с производительностью, то я настоятельно рекомендую проверить это предположение. Вы можете быть приятно удивлены.
Ответ №2:
Вы могли бы использовать http-сеанс для поддержания состояния между запросами, но для этого будет использоваться само хранилище данных (хотя вам не придется писать какой-либо код, чтобы добиться такого поведения).
Вы также могли бы рассмотреть возможность использования Cache API (например, memcache). Я думаю, это JSR 107, реализацию которого Google предоставляет. Кэш является общим для экземпляров, но он может опустеть в любое время. Но если вы довольны таким поведением, это может быть вариантом. Учитывая ваши требования, это может быть наиболее приемлемым вариантом, если вы не хотите писать свой собственный код сохранения.
Вы могли бы хранить данные как статические для вашего класса или в объекте, ограниченном областью приложения, но это означает, что когда ваш экземпляр завершает работу или ваш экземпляр переключается на другой экземпляр, данные будут потеряны, поскольку ваши классы необходимо будет загрузить в новый экземпляр.
Или вы могли бы сериализовать состояние клиенту и отправлять его обратно с каждым запросом.
Наиболее надежным вариантом является сохранение в хранилище данных — код JPA тривиален. Возможно, вам следует пересмотреть?
Комментарии:
1. как бы вы использовали сеанс без клиента с поддержкой файлов cookie?
2. @systempuntoout ну, я думаю, URL переписывается, так что идентификатор сеанса будет в URL, а не в cookie. Я думаю, что соответствующие части JEE должны позаботиться об этом, т. Е. Реализация Jetty, которую использует GAE, должна это сделать.