2011-01-23 7 views
1

データベースからデータを取得して表示するWebアプリケーションがあります。今私が抱えている問題は、毎時データベースのデータを更新したいということです。これは別のアプリで行われますが、これはすべて正常に動作します。ただし、これが発生してユーザーがWebページを更新すると、新しいデータは表示されません。データベースから新しいデータでアプリケーションを更新する際の問題

これは意味があると思います。

私はアプリからいくつかのコードを提供して、より良く見えるようにします。

私のウェブアプリケーションはjavaを使用してnetbeansで書かれており、データベースのテーブルにクラスをマッピングするパーシスタンスユニットがあります。私は自分のコンポーネントを自分のhtmlに追加するためにwicketを使用しています。

// Javaの自動改札コード設定がDBからオブジェクトを取得し、Javaの自動改札コードに返す

ApplicationSettings apset = new ApplicationSettingsDAO().getApplicationSettings();  
this.add(new Label("lblGameTime", "" + apset.getGameTimeDays())); 

//自動改札HTMLコード

Date : day <span wicket:id="lblGameTime">generated date</span> 

// 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は単なるクラスです。

//毎時コードが動作し、ユーザーが再びページをロードするとき今、私はページが得られるようなgameTimeDaysが正しいだろうと

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); 

デシベルの更新を期待するん別のアプリで走りました上記のウィークネットコードを呼び出していたため、再度dbからのデータしかし値は変わらない。ページに表示される値は、更新前の古い失効値です。何回更新が行われても、この値は古い値です。ただし、Tomcatサーバーで再デプロイまたはモジュールを再起動すると、その時点の値が正しいことになります。

私は何が不足していますか、これは答えが私を暗示していると思われる小さな問題です。

値は、サーバーが再デプロイされるまで、または何かがメモリに格納されているように見えます。私はこれについて知っているJavaの内部の動作についてたくさん知っていません。

[OK]私は私のジレンマで私を助けるために十分な情報を誰かに提供したいと思います。

ありがとうございました。

EDIT:永続性ライブラリはTopLinkのEssentialsは

+0

「は、ユーザが再びページをロードする」そのページのリロードまたは新規ユーザー(新しいセッション)ということでしょうか?ブラウザを閉じてそのページを再度開いてみてください。新しい値が表示されます。 – bert

+0

@bertこれはリロードです。リンクをクリックすると別のページが開き、このコンポーネントもまた古い値を保持します。何かが私が推測しているどこかにキャッシュされています。ちょうどブラウザを閉じてみました。変化なし。 – David

答えて

1

であるあなたのデータは(あなたが詳細を開示しない程度)使用永続化メカニズムによってキャッシュされているような音。これはJavaの特徴ではなく、例えば、次のような特定の持続性フレームワークのものです。休止状態。

あなたのパーシスタンスプロバイダについてもっと知りたい場合は、より具体的なアドバイスをすることができます。

+0

あなたはあなたがすべての細部を理解したと思うが、あなたはハハには見えない。私はトップリンクを使用する。 – David

+0

@David、残念ながら私はToplinkを知らないので、より具体的な助言を与えることはできない。それをJPA経由で直接使用していますか?うまくいけば、いくつかのトップリンクのエキスパートがさらにあなたを助けるために来るでしょう... –

+0

via JPA。私は決してそれに触れませんae – David

1

永続性を使用してTopLinkで共有キャッシュを無効にできます。XMLプロパティ、

またはエンティティごとに、それを無効にしたり、さわやかまたはキャッシュ無効化を使用します。

より多くのキャッシュオプションを提供し、JPA 2.0キャッシングAPIを実装しています。

http://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F

関連する問題