2011-09-03 5 views
0

Je suis en train de créer une application simple GWT, GAE, JDO. Pour commencer, je tente de stocker une table de Cat Records. J'ai réussi à faire fonctionner le mécanisme RPC dans mon appel pour enregistrer les données (voir setCOTDCats() ci-dessous). L'appel RPC est réussi autant que je peux dire. Cependant, lorsque j'essaie de lire les valeurs en arrière (voir getCOTDCats() ci-dessous), cela semble aussi fonctionner, sauf qu'il renvoie un résultat vide.GAE JDO Vide Résultat de la requête

Clairement soit la sauvegarde n'a pas fonctionné, ou la lecture n'a pas fonctionné, mais je ne sais pas comment dire qui ne fonctionne pas.

Je suis un débutant GAE et JDO. Veuillez en tenir compte dans les réponses.

Merci

Non Snark S'il vous plaît

@Override 
public Cat[] getCOTDCats() 
{ 
    final List<Cat> catList = new ArrayList<Cat>(); 
    final PersistenceManager pm = getPersistenceManager(); 
    try 
    { 
     final Query q = pm.newQuery(CatRecord.class); 
     q.setOrdering("COTDDate"); 
     final List<CatRecord> catRecords = (List<CatRecord>) q.execute(); 
     for (CatRecord catRecord: catRecords) 
     { 
      final Cat cat = catRecord.getCat(); 
      catList.add(cat); 
     } 
    } 
    finally 
    { 
     pm.close(); 
    } 
    final Cat[] result = catList.toArray(new Cat[0]); 
    return result; 
} 

/* (non-Javadoc) 
* @see org.catadoptionteam.catserve.client.AnimalDataService#setCOTDCats(org.catadoptionteam.catserve.shared.Cat[]) 
*/ 
@Override 
public void setCOTDCats(Cat[] cat) 
{ 
    final List<CatRecord> catList = new ArrayList<CatRecord>(); 
    for (Cat c: cat) 
    { 
     final CatRecord catRecord = new CatRecord(c); 
     catList.add(catRecord); 
    } 
    final PersistenceManager pm = getPersistenceManager(); 
    try 
    { 
     pm.makePersistentAll(catList); 
    } 
    finally 
    { 
     pm.close(); 
    } 
} 

private static PersistenceManager getPersistenceManager() 
{ 
    final PersistenceManager result = Persister.getPersistenceManager(); 
    return result; 
} 

public enum Persister 
{ 
    INSTANCE; 

    private static final PersistenceManagerFactory pmfInstance = 
     JDOHelper.getPersistenceManagerFactory("transactions-optional"); 

    public static PersistenceManager getPersistenceManager() 
    { 
     final PersistenceManager result = pmfInstance.getPersistenceManager(); 
     return result; 
    } 
} 
+0

J'ai passé aujourd'hui à essayer différentes choses. Il semble que je récupère des données maintenant, mais c'est incorrect. J'ai supprimé certains de mes champs dans mon CatRecord PersistenceCapable. Je me demandais si un (ou plusieurs) de mes types de données ne sont pas valides à utiliser? J'utilise Key, String, Date, boolean, Text et une énumération que j'ai définie. – Mitch

+1

La visionneuse local_db vous indique si la sauvegarde a fonctionné. Le journal vous dit aussi beaucoup de choses – DataNucleus

+0

Cela semble fonctionner mieux maintenant. Je ne suis pas sûr de ce qui s'est mal passé. J'ai trouvé que la suppression des fichiers war/WEB-INF/appengine-generated/* semblait aider. Je ne sais pas si c'est une bonne idée. Je n'ai découvert cela que par essais et erreurs. – Mitch

Répondre

0

Probablement le problème réside dans la façon dont vous gérez la PersistenceManager. Définir une PMF.java de classe comme suit:

import javax.jdo.JDOHelper; 
import javax.jdo.PersistenceManagerFactory; 

public final class PMF { 
    private static final PersistenceManagerFactory pmfInstance = JDOHelper 
      .getPersistenceManagerFactory("transactions-optional"); 

    private PMF() { 
    } 

    public static PersistenceManagerFactory get() { 
     return pmfInstance; 
    } 
} 

Ensuite, lorsque vous voulez avoir accès au PersistenceManager, vous devez appeler:

PersistenceManager pm = PMF.get().getPersistenceManager(); 

En outre, tous vos modèles (Cat dans votre exemple) devrait être défini avec JDO. Pour des informations détaillées, consultez: http://code.google.com/appengine/docs/java/datastore/jdo/

Espérons que cela aide!

+0

Merci, j'ai ajouté plus de détails ci-dessus concernant ce que j'ai fait avec PersistenceManager. Semble la même chose pour moi. – Mitch

+0

Je pense que je l'ai défini CatRecord et Cat comme @PersistenceCapable (IdentityType = IdentityType.APPLICATION, détachable = "true") public final class CatRecord { @PrimaryKey @Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY) privé id clé; ... – Mitch

+0

Je peux poster plus de code si cela aide. Y at-il un outil de navigation de base de données qui me permettrait de voir si l'écriture fonctionne? – Mitch

Questions connexes