IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

GAE Java Objectify difficultés d'accès à une Key


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 22
    Points
    22
    Par défaut GAE Java Objectify difficultés d'accès à une Key
    Bonjour,

    Je suis débutante sur ce type de langages (Java/Objectify) et je rencontre un problème.

    Je vous explique tout, je dispose de trois classes qui fonctionnent de la manière suivante:
    Un Server a comme parent un Site qui a comme parent un Country.
    J'ai travaillé sur mes classes Site et Country sans problème, j'arrive à récupérer facilement les informations de mon Country en passant par un Site, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Site site = ofy().load().type(Site.class).filter("name", "Angers").first().now();
    System.out.println(ofy().load().key(site.getCountry()).now().getName());
    Qui me retourne bien: "France"

    Cependant, lorsque j'essaie de récupérer mon Site sur un Server de la même manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("- Server->Site - "+ofy().load().key(a.getSite()).now().getName());
    Qui me renvoie une java.lang.NullPointerException

    D'ailleurs lorsque j'effectue simplement un getSite, celui-ci est effectivement null:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Site x=ofy().load().key(a.getSite()).now();
    if(x==null)
        System.out.println("null");
    else
        System.out.println("NOT null");
    Qui m'affiche bien "null".

    Pourtant j'effectue un test directement dans mon constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(serverSite.toString()+"="+this.site.toString());
    Qui m'affiche bien: Key<?>(Site(4754288278503424))=Key<?>(Site(4754288278503424))

    Pour en finir à propos des tests, un petit dernier que j'effectue après création de la Key dans le programme (et je pense que mon problème vient d'ici):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<Site> yy=ofy().load().type(Site.class).filter("name","Dijon").list();
    cleSitekey = Key.create(Site.class, yy.get(0).getId());
    System.out.println("CLE SITE: "+cleSiteid.toString());
    List<Site> l=ofy().load().type(Site.class).filter("name",yy.get(0).getName()).list();       
    for(int i = 0; i < l.size(); i++){
    	Key<Site> keysiteserv= Key.create(Site.class, l.get(i).getId());
    	System.out.println("index " + i + " = " + l.get(i).getName()+" - "+ l.get(i).getId());
    	System.out.println(cleSitekey.toString());
    	System.out.println(cleSitekey.compareTo(keysiteserv));
    }
    Qui m'affiche 0 pour la correspondance:

    Élément à l'index 0 = Dijon - 4754288278503424
    Key<?>(Site(4754288278503424))
    0


    N'ayant que des connaissances en BDD relationnelles, je me demande si je n'ai pas un peu de mal à comprendre le fonctionnement du DataStore, des Keys et si c'est une erreur de compréhension de ma part ou si c'est dans mon code que je me suis trompée.

    Je vous fais un abrégé rapide de mes classes Site et Serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    @Entity
    @Index 
    public class Site {
    	@Id Long idSite; 
    	private String name;
    	@Parent Key<Country> country; 
     
    	@SuppressWarnings("unused")
    	private Site(){}
     
    	public Site(String siteName, Key<Country> siteCountry){
    		if(siteCountry!=null){
    			List<Site> l=ofy().load().type(Site.class).filter("name",siteName).ancestor(siteCountry).list();
     
    	    if(l.size()==0){
    	        System.out.println("Object created.");
            	this.name=siteName;
        		this.country=siteCountry;
    			ofy().save().entity(this).now();
            }
            else
            {
            	System.out.println("Object creation stopped, it already exists.");
            }
    		}
    	}
    //getters+setters etc
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    @Entity
    @Index 
    public class Server {
     
    	@Id Long idServer;
    	private String hostname;
    	private String ip;
    	private int status;
    	private String statusDate; 
    	private String lastTimeUp; 
    	@Parent Key<Site> site;
     
    	@SuppressWarnings("unused")
    	private Server(){}
     
    	public Server(String serverHostName,  String serverIp, int serverStatus, String serverStatusDate, String serverLastTimeUp, Key<Site> serverSite){
    		System.out.println("enter constructeur.");
    		if(serverSite!=null){
     
    			List<Server> l=ofy().load().type(Server.class).filter("hostname",serverHostName).filter("ip",serverIp).ancestor(serverSite).list();     
    			System.out.println("list constructeur ok.");
    			if(l.size()==0){
    	        	this.hostname = serverHostName;
    	    		this.ip = serverIp;
    	    		this.status = serverStatus;
    	    		this.statusDate = serverStatusDate;
    	    		this.lastTimeUp = serverLastTimeUp;
    	    		this.site = serverSite;
    				System.out.println("Test des valeurs enregistrées");
    				System.out.println(serverHostName+"="+this.hostname);
    				System.out.println(serverIp+"="+this.ip);
    				System.out.println(serverStatus+"="+this.status);
    				System.out.println(serverLastTimeUp+"="+this.lastTimeUp);
    				System.out.println(serverSite.toString()+"="+this.site.toString());
    				System.out.println("Test des valeurs enregistrées fin");
    	    		try{
    				ofy().save().entity(this).now();
    	        	System.out.println("Object created.");
    	    		}
    	    		catch(Exception ex){
    	    			System.out.println("Enregistrement interrompu.");
    	    			System.out.println(ex.getMessage());	
    	    			System.out.println(ex.getLocalizedMessage());			
    	    		}	
    	        }
    	        else
    	        {
    	        	System.out.println("Object creation stopped, it already exists.");
    	        }
    		}
    	}
    //getters/setters/etc
    }
    En vous remerciant de votre attention.

  2. #2
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Problème résolu, je créais mes clés de cette manière:

    Clé Site (pour le Server)=Cle Site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Key<Site> cleSitekey = Key.create(Site.class, site.getId());

    Cependant, il fallait en réalité créer la clé de la manière suivante:

    Clé Country+Clé Server:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Key<Site> cleSitekey = Key.create(site.getCountry(),Site.class, site.getId());
    J'imagine que la question était trop simple pour mériter une réponse, je poste néanmoins la réponse pour permettre aux débutants comme moi de ne pas rencontrer ce genre de problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Difficulté d'accès à une base de données
    Par jackvpt dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/12/2010, 12h02
  2. Réponses: 9
    Dernier message: 04/11/2009, 11h03
  3. [Sécurité] sécurité d'accès à une application multi-tiers Java EE
    Par zerzy1982 dans le forum Java EE
    Réponses: 43
    Dernier message: 12/10/2007, 21h20
  4. Réponses: 4
    Dernier message: 19/09/2007, 10h05
  5. Réponses: 3
    Dernier message: 25/08/2006, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo