2011-01-23 5 views
1

J'ai une application Web qui extrait les données de la base de données et les affiche. Maintenant le problème que j'ai est que chaque heure je veux faire des mises à jour sur les données dans la base de données; Ceci est fait par une application distincte, tout cela fonctionne bien. Cependant, une fois que cela s'est produit et que l'utilisateur actualise sa page Web, les nouvelles données ne sont pas affichées.problème avec la mise à jour de l'application avec de nouvelles données de la base de données

J'espère que cela a du sens.

Je vais fournir du code à partir de l'application afin que vous le voyiez mieux.

Mon application Web est écrite dans netbeans à l'aide de Java et j'ai une unité de persistance qui mappe les classes aux tables de la base de données. J'utilise le portillon pour ajouter mes composants à mon code HTML.

// code Java Wicket

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

// Wicket code html

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

// paramètres d'application DAO qui obtient les paramètres objet de la db et il revient au code Java Wicket ci-dessus

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 est juste la classe.

// Code horaire couru dans une autre application qui fonctionne et fait la mise à jour 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); 

Maintenant, lorsque l'utilisateur charge la page à nouveau je pense que les gameTimeDays seraient correctes, la page obtiendrait les données de la DB à nouveau, car il appellerait le java code guichet ci-dessus. MAIS la valeur ne change pas. La valeur qui apparaît sur la page est l'ancienne valeur périmée avant la mise à jour. Peu importe combien de mises à jour ont lieu, cette valeur est toujours l'ancienne valeur. Cependant, si je redéploie ou redémarre le module sur le serveur Tomcat, la valeur est alors correcte pour ce moment.

Qu'est-ce qui me manque, c'est un petit problème que la réponse semble me faire allusion.

La valeur semble être stockée dans la mémoire jusqu'à ce que le serveur soit redéployé ou quelque chose. Je ne sais pas beaucoup de choses sur les rouages ​​de java à savoir à ce sujet.

Ok J'espère avoir fourni suffisamment d'informations pour que quelqu'un puisse m'aider dans mon dilemme.

Merci pour toute aide.

EDIT: bibliothèque de persistance est TopLink Essentials

+0

'utilisateur charge à nouveau la page' est qu'une reload de cette page ou un nouvel utilisateur (nouvelle session)? essayez de fermer le navigateur et ouvrez à nouveau cette page. Vous devriez voir la nouvelle valeur. – bert

+0

@bert C'est un rechargement, ou un lien cliqué qui ouvre une page différente qui a aussi ce composant sur lui conserve également l'ancienne valeur; donc quelque chose est caché quelque part je devine. Juste essayé la fermeture du navigateur; pas de changement ae. – David

Répondre

1

Ressemble vos données sont mises en cache par le mécanisme de persistance que vous utilisez (dont vous ne divulguez pas de détails). Ce n'est pas une caractéristique de Java, mais celle de cadres de persistance spécifiques comme par ex. Hiberner. Si vous nous en dites plus sur votre fournisseur de persistance, nous pourrons peut-être vous donner des conseils plus concrets.

+0

vous pensez que vous obtenez tous les détails vers le bas pourtant vous ne semblez jamais haha ​​.... j'utilise toplink – David

+0

@David, malheureusement, je ne sais pas Toplink donc je ne peux pas vous donner plus de conseils concrets. L'utilisez-vous directement ou via JPA? Espérons que certains experts Toplink viendront pour vous aider davantage ... –

+0

via JPA. Je ne le touche jamais – David

Questions connexes