データベースからデータを取得して表示する Web アプリケーションがあります。今私が抱えている問題は、データベース内のデータを毎時間更新したいということです。これは別のアプリによって行われ、これはすべて正常に機能します。ただし、これが発生し、ユーザーが Web ページを更新すると、新しいデータは表示されません。
これが理にかなっていることを願っています。
見やすいように、アプリからいくつかのコードを提供します。
私の Web アプリケーションは Java を使用して NetBeans で作成されており、データベース内のテーブルにクラスをマッピングする永続ユニットがあります。コンポーネントをHTMLに追加するためにウィケットを使用しています。
// Java ウィケット コード
ApplicationSettings apset = new ApplicationSettingsDAO().getApplicationSettings();
this.add(new Label("lblGameTime", "" + apset.getGameTimeDays()));
// 改札の HTML コード
Date : day <span wicket:id="lblGameTime">generated date</span>
// データベースから設定オブジェクトを取得し、それを上記の Java Wicket コードに返す DAO アプリケーション設定
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 は単なるクラスです。
//毎時コードは、動作してデータベースを更新する別のアプリで実行されました
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);
ユーザーがページを再度ロードすると、上記のJava ウィケット コードを呼び出すため、ページがデータベースからデータを再度取得するため、 gameTimeDaysが正しいと期待できます。しかし、値は変わりません。ページに表示される値は、更新前の古い古い値です。何度更新しても、この値は古い値のままです。ただし、Tomcat サーバーでモジュールを再デプロイまたは再起動すると、その時点で値が正しくなります。
私が見逃しているのは何ですか、これは答えが私をほのめかしているように見える小さな問題です。
サーバーが再デプロイされるまで、値はメモリに保存されているようです。これについて知るために、Javaの内部の仕組みについてあまり知りません。
わかりました、誰かが私のジレンマを手伝ってくれるのに十分な情報を提供したことを願っています.
助けてくれてありがとう。
編集:永続化ライブラリはTopLink Essentialsです