У меня есть веб-приложение, которое извлекает данные из базы данных, а затем отображает их. Теперь у меня проблема в том, что каждый час я хочу обновлять данные в базе данных; это делается отдельным приложением, все отлично работает. Однако, как только это произошло, и пользователь обновил свою веб-страницу, новые данные не отображаются.
Надеюсь, это имеет смысл.
Я предоставлю код из приложения, чтобы вы лучше его видели.
Мое веб-приложение написано на NetBeans с использованием Java, и у меня есть модуль персистентности, который отображает классы в таблицы в базе данных. Я использую калитку, чтобы добавить свои компоненты в мой HTML.
// Код Java Wicket
ApplicationSettings apset = new ApplicationSettingsDAO().getApplicationSettings();
this.add(new Label("lblGameTime", "" + apset.getGameTimeDays()));
// HTML-код калитки
Date : day <span wicket:id="lblGameTime">generated date</span>
// Настройки приложения DAO, которые получают объект настроек из БД и возвращают его в код Java Wicket выше
public ApplicationSettings getApplicationSettings() {
ApplicationSettings settings;
try {
Query q = manager.createQuery("select s from ApplicationSettings s where s.setting = :setting");
q.setParameter("setting", "setting");
settings = (ApplicationSettings) q.getSingleResult();
} catch (NoResultException e) {
ApplicationSettings newSetting = new ApplicationSettings();
return newSetting;
}
return settings;
}
// ApplicationSettings - это просто класс.
// Часовой код запускается в другом приложении, которое работает и обновляет db
Query query6 = manager.createQuery("select s from ApplicationSettings s where s.setting = :setting");
query6.setParameter("setting", "setting");
ApplicationSettings apset = (ApplicationSettings) query6.getSingleResult();
apset.setGameTimeDays(apset.getGameTimeDays() + 1);
save(apset);
Теперь, когда пользователь снова загружает страницу, я ожидаю, что gameTimeDays будет правильным, поскольку страница снова получит данные из базы данных, потому что она вызовет код калитки Java выше. НО значение не меняется. Значение, отображаемое на странице, является старым устаревшим значением перед обновлением. Независимо от того, сколько обновлений происходит, это значение остается старым. ОДНАКО, если я сделаю повторное развертывание или перезапущу модуль на сервере Tomcat, тогда значение будет правильным для этого момента времени.
Чего мне не хватает, это крошечная проблема, на которую, похоже, намекает ответ.
Значение сохраняется в памяти до повторного развертывания сервера или чего-то еще. Я не знаю много о внутренней работе Java, чтобы знать об этом.
Хорошо, я надеюсь, что предоставил достаточно информации, чтобы кто-нибудь помог мне с моей дилеммой.
Спасибо за любую помощь.
РЕДАКТИРОВАТЬ: постоянная библиотека TopLink Essentials