Как сохранить счетчик hashmap в gwt application
Я работаю над хранением различных пользовательских счетчиков в памяти на уровне приложения (не базы данных) и чтобы счетчики не превышали 3.
Я разработал этот код, используя одноэлементный класс с хэш-картой для хранения пары ключ-значение с идентификатором пользователя и его счетчиком и временем.
После первоначального использования этого одноэлементного класса на стороне клиента он работал нормально для счетчиков, но когда обновился браузер, был создан новый одноэлементный объект.
Я искал и узнал, что по соображениям безопасности javascript не использует общие объекты, поэтому я переместил его в вызов rpc и сделал его объектом на стороне сервера, чтобы преодолеть его, но когда я протестировал его снова, при обновлении создается новый объект и данные потеряны.
Я также проверил статическую хэш-карту для хранения данных для области приложения, но она работает почти так же, после обновления браузера, его сброса и потери в нем старых данных. Это немного отличается от обычного Java-приложения, где мы следуем этому подходу.
эта техника работала для меня в случае нормальных веб-приложений, но не в gwt
3 ответа
Вы правы, вам нужно сохранить это значение на стороне сервера и получить к нему доступ через асинхронный вызов. Так как в прошлом вы имели успех с Spring, вы можете рассмотреть возможность его повторного использования со стороной реализации ваших асинхронных сервисов GWT. Вы можете легко внедрить bean-компонент Spring Singleton в класс реализации GWT Async и использовать его, как вы использовали в прошлом.
Вы можете использовать GWT HTML5 LocalStorage для хранения постоянных данных на стороне клиента или, конечно, на стороне сервера. Это действительно зависит от того, чего вы пытаетесь достичь.
Какова ожидаемая жизнь счетчиков? Разделяют ли они других пользователей? Вы можете сохранить их в базе данных или в сеансе и получить к ним доступ через асинхронный вызов GWT.