2 votes

Comment arrêter Objectify de renvoyer des valeurs mises en cache?

Je sauvegarde un objet avec Objectify comme ceci:

Thing th = new Thing();
th.identifier = thingId;
th.name = thingName;
th.json = thingData;
ofy().save().entity(thing);
pResponse.setStatus(200);
pResponse.getWriter().println("OK");

Je vérifie en utilisant le navigateur de données GAE que la valeur a été mise à jour dans la base de données. Je suis en train de l'exécuter en local. Ensuite, je charge tous les objets de cette manière:

Map> responseJsonMap = new HashMap>();
List things = ofy().load().type(Thing.class).list();         
responseJsonMap.put("things", things);
pResponse.setContentType("application/json");
try {
    GSON.toJson(responseJsonMap, pResponse.getWriter());
} ...

Ce que je reçois en retour est la donnée qui existait avant la sauvegarde. J'ai essayé de désactiver le cache sur l'entité et d'appeler ofy().clear() mais rien ne fonctionne. Si je redémarre mon serveur ou attends assez longtemps, les données enregistrées apparaissent. J'ai également essayé d'ajouter .now() après la sauvegarde, mais ce n'est pas nécessaire car je peux vérifier dans le datastore que l'action est terminée. J'aimerais vraiment pouvoir charger les données que je viens de sauvegarder. Qu'est-ce que je fais de travers?

5voto

Ben Flynn Points 5346

Ce que je fais de mal, c'est de ne pas lire le manuel et d'oublier une étape.

Objectify nécessite un filtre pour nettoyer tout contexte de transaction spécifique au thread et les opérations asynchrones en attente qui restent à la fin d'une requête. Ajoutez ceci à votre WEB-INF/web.xml :

     ObjectifyFilter
     com.googlecode.objectify.ObjectifyFilter

     ObjectifyFilter
     /* 

Eh bien, c'est une bonne chose de vérifier si vous obtenez des valeurs mises en cache que vous n'attendez vraiment pas.

0voto

stickfigure Points 4049

Outre le problème ObjectifyFilter, ce que vous voyez le plus probablement est la nature éventuellement cohérente des requêtes dans le datastore.

Voir ceci: https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X