2010-11-12 58 views
1

Dans l'implémentation JDO d'App Engine, les types d'objet sont enregistrés en tant que 'Kind' avec l'entité qui est conservée dans le magasin de données. Lorsque ces entités sont récupérées hors du magasin de données, elles sont automatiquement renvoyées (dans une couche de JDO) en tant que type d'objet d'origine. Ce qui me trouble, c'est que seul le nom simple de la classe est sauvé; pas le chemin complet. Alors, comment la JVM charge-t-elle la bonne classe? Par exemple, si com.project.domain.User et moi-même sauvegardons une instance de cette classe dans le magasin de données, seul 'User' est défini pour le type d'entité. Par exemple,Comment GAE/JDO convertit-il les entités en objets de domaine?

Lorsque j'utilise JDO pour sélectionner ces données, je récupère un fichier com.project.domain.User. Comment GAE/JDO a-t-il pu charger com.project.domain.User et non com.project.other.domain.User?

Répondre

2

Votre fournisseur JDO (GAE n'est pas réellement impliqué dans cette équation) conserve un mappage interne des entités vers les tables. Parfois, il se forme à partir de différents fichiers XML, parfois il forme cela à travers des annotations (dépend de votre style de codage). Dans cette table, les noms de tables sont en fait mappés à des classes entièrement qualifiées.

Si vous stockiez les deux types d'objets Utilisateur, JDO vous donnerait une exception car ils utiliseraient la même table. Vous pouvez résoudre ce problème en spécifiant une table différente (via une annotation ou une configuration xml). Cette spécification irait dans la cartographie interne de JDO. Alors JDO saurait comment résoudre l'entité correctement.

+0

Alors, comment ce mappage interne est-il conservé entre le démarrage et l'arrêt de la machine virtuelle Java? Je n'ai rien défini en XML ou en annotation. – Brad

+1

En fait GAE est impliqué dans cela puisque le "fournisseur JDO" est GAE (ou plutôt leur plugin pour DataNucleus). Si vous voulez vous en sortir, il faut passer par cette classe http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/DatastorePersistenceHandler.java – DataNucleus