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

CORBA Discussion :

[Débutant] Retourné un objet non primitif?


Sujet :

CORBA

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 51
    Points : 40
    Points
    40
    Par défaut [Débutant] Retourné un objet non primitif?
    Bonjour
    Donc voila je vient de débuter en Corba et j'essaye de créer un client server où le server renvoit un objet (dans notre cas ce sera un tableau d'objet) décrit dans l'idl
    Je développe en java

    Exemple de l'idl un truc tous bête
    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
    module users{
    struct User{
    		string nom;
    		string prenom;
    };
    interface UserManager {
    		
    		typedef sequence<User> listeUserImpl;
    		
    		User getUser(in string email);
    		listeUserImpl listUsers();
    		
    	};
    };
    En gros le serveur va renvoyé un objet user au client
    C'est en gros lors de l'appel de getUser qu'il va me retourné une exception (BAD_INV je crois avec des unmarshalled tous ça) alors que pour un type primitif (string ou int) ca marche très bien

    Donc j'ai chercher un peux et je suis tombé sur le valuetype et la factory
    J'ai essayé avec cet idl
    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
    module users
    {
    	valuetype User
    	{
    		attribute string firstName;
    		attribute string lastName;
               	 string toString();
                
                // public Factory interface:
                factory create(in string firstName, in string lastName, in string email); 
    	};
    	interface UserManager {
    		
    		typedef sequence<User> listeUserImpl;
    		
    		User getUser(in string email);
    		listeUserImpl listUsers();
    		
    	};
    };
    Ca marche!! J'ai plus d'exception !! MAIS l'objet renvoyé est null!!

    J'aimerais savoir si quelqu'un connait la solution à mon problème qui est sans doute trivial pour ceux qui connaissent bien corba non? (ca fait depuis une semaine que je cherche )

    Si quelqu'un avait un lien ou tuto avec les sources qui renvoient des objet autre que ce foutu string hello world , en gros des exemple plus complexe ce srai cool merci

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 219
    Points : 302
    Points
    302
    Par défaut
    Bonjour,

    C'est en gros lors de l'appel de getUser qu'il va me retourné une exception (BAD_INV je crois avec des unmarshalled tous ça)
    Il faudrait donner l'erreur exact, ainsi que le code implémentant getUser()

    Donc j'ai chercher un peux et je suis tombé sur le valuetype et la factory
    L'utilisation des valuetypes est plus compliquée que celle des struct... mais pourquoi ne pas essayer

    MAIS l'objet renvoyé est null
    Je suppose que tu veux dire l'objet reçu par le client appelant getUser. Car j'espère bien que tu ne renvoies pas null dans l'implémentation de getUser...
    Il est probable que tu n'aies pas enregistré ta valuetype factory dans l'ORB. En effet, pour que ton client puisse recevoir le valuetype en retour de getUser, il faut que l'ORB puisse demarshaller et construire le valuetype que tu implémentes. Pour cela, il faut lui indiquer quelle factory utiliser.
    Ca se fait (côté client) juste après l'ORB.init(), avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ((org.omg.CORBA_2_3.ORB)orb).register_value_factory(
    users.UserHelper.id(), new UserFactoryImpl());

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse!
    en effet j'avais juste enregistrer la factory sur le serveur (les meme lignes de code mais sur le serveur)

    Malgrés tous ca ne change pas le problème que ca retourne null
    Toi par exemple ca t'arrive de renvoyé un objet distant pour pouvoir effectuer des opération dessus (par exemple parcours du tableaux d'objet etc..)?

    J'avais lu quelque par sur ce forum que le valuetype était l'équivalent de Sérializable en java c'est pour ca que je l'ai utiliser mais si j'ai bien compris que j'utilise une valuetype ou un struct, tant qu'il y a une factory enregistré à l'orb, on peux renvoyé un objet distant c'est bien ca?
    Je suis sous orbacus 4.3.3 et pour l'érreur que j'avais c'était


    c'est vraiment bizarre qu'il me renvoi null pourtant quand je fait le usermanager um = usermanagerHelper.narrow(objref); ca me renvoi bien un objet et lors de l'appel de getuser() , il lance bien la méthode (console du serveur)
    Petite précision, je n'utilise pas le nameservice de l'orb
    Pour l'érreur, je crois c'est parsque j'avais pas créer de factory car je ne l'ai plus la

  4. #4
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 219
    Points : 302
    Points
    302
    Par défaut
    Malgrés tous ca ne change pas le problème que ca retourne null
    Alors il faut nous montrer le code d'implémentation de la méthode appelée. Parce que là, je ne vois pas...

    Toi par exemple ca t'arrive de renvoyé un objet distant pour pouvoir effectuer des opération dessus (par exemple parcours du tableaux d'objet etc..)?
    Par "objet distant", je comprends "objet qui reste dans le serveur et qui est appelé à distance par le client". Cela, oui je le fait, mais avec des interfaces IDL, pas des valuetypes.

    J'avais lu quelque par sur ce forum que le valuetype était l'équivalent de Sérializable en java c'est pour ca que je l'ai utiliser mais si j'ai bien compris que j'utilise une valuetype ou un struct, tant qu'il y a une factory enregistré à l'orb, on peux renvoyé un objet distant c'est bien ca?
    Ne confond pas tout:
    • struct: juste une structure de données sans opérations et sans héritage entre struct. Les struct sont transmises par CORBA par copie.
    • interface: type d'un objet CORBA implémenté dans un serveur et qui y reste. CORBA ne transmet que des références vers ces objets. Le client y accède à distance.
    • valuetype: structure de donnée ayant des opération et un héritage possible. CORBA transmet les valuetypes par copie.

    Les factories ne sont nécessaires que pour recevoir des valuetypes.

    Petite précision, je n'utilise pas le nameservice de l'orb
    Le namingservice ne sert que pour un client à retrouver la référence de l'objet CORBA du serveur. Dans ton cas, le client l'a déjà. Donc rien à voir.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    C'est bon j'ai réussi!!!
    Franchement je ne sais pas comment j'ai fait (je crois effectivement que c'était la faute du factory qui n'était pas à sa bonne place dans le client)
    Donc merci beaucoup CorbAddict

    Par "objet distant", je comprends "objet qui reste dans le serveur et qui est appelé à distance par le client". Cela, oui je le fait, mais avec des interfaces IDL, pas des valuetypes.
    J'ai essayé avec des interface mais j'avais une érreure de unmarshalling donc pour c'est pour ca que je me suis tourné vers les valuetype qui apparament "sérialize" l'objet
    Pour ce qui est des "objets distant" pour toi ca représente l'objet que l'on créer avec la méthode narrow c'est ca?
    Donc si c'est bien ca, il faut instancié user sur le serveur (moi je n'instanciait uniquement que usermanager me disant que user est créer dans usermanager donc peut être accesible à distance...)

    Merci encore pour ces superbes explications!

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

Discussions similaires

  1. Retourner un objet non-copiable
    Par Florian Goo dans le forum Langage
    Réponses: 12
    Dernier message: 06/03/2009, 10h46
  2. Réponses: 1
    Dernier message: 12/12/2007, 10h02
  3. [Débutant] Fonction qui retourne un objet (classe)
    Par in dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/08/2007, 09h32
  4. [débutant]probleme avec makefile-module objet non créé
    Par Invité dans le forum Systèmes de compilation
    Réponses: 5
    Dernier message: 13/06/2007, 18h22
  5. [Débutant] Objets non affichés dans ma fenêtre
    Par G_angel dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 30/01/2007, 13h03

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