Retourner structure en corba

asari29 Messages postés 21 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 18 décembre 2009 - 2 avril 2009 à 17:35
asari29 Messages postés 21 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 18 décembre 2009 - 3 avril 2009 à 16:10
Bonjour à tous, je m'initie actuellement à corba non sans quelque difficultés.

Je dispose d'un client JAVA et d'un serveur C++.

Voilà à quoi ressemble mon idl:

struct NodeORB

{

    string name;

    sequence listAttribORB;

};


interface Arbre

{

    long addNode(in string path, in NodeORB iNodeORB);

    long removeNode(in string path);

    NodeORB getNode(in string path);

    void setNode(in string path, in NodeORB iNodeORB);

};


comme vous l'aurez deviné, il s'agit de gestion d'un arbre qui contient des noeuds.


Mon problème est le suivant:

L'implémentation de l'interface arbre coté serveur me génère une méthode dont la signature est la suivante:

NodeORB* getNode(const char* path);

 

Or visiblement, le fait que la méthode retourne un pointeur pose problème au client qui lui est en JAVA.

Quelqu'un pourrait-il me donner la bonne marche à
suivre pour retourner une structure décrite dans l'idl -> donc connu
coté client comme coté serveur?

3 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 avril 2009 à 20:29
Salut,

Houla bon courage. Il y a des pas mal de tuto cela dit. Là dedans, comment faire une structure dans un idl.

getNode renvoyant un pointeur sur le noeud en C++. Ok. Mais le pointeur n'est valide que dans le processus, sur le PC courant... Bon courage.
0
asari29 Messages postés 21 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 18 décembre 2009
3 avril 2009 à 10:09
Merci pour ta réponse!
Je suppose effectivement que c'est le problème des pointeurs qui n'ont de sens qu'en local...
Le problème est que c'est mon compilateur IDL (omniORB4) qui produit les sources et interprète
     NodeORB getNode(in string path); (src idl)
en
    NodeORB* getNode(const char* path); (src cpp)
donc je n'ai pas vraiment la main sur ce code 

Cela dit, c'est son boulot de produire ce code et je suppose qu'il le fait bien sinon je suis mal barré.

une remarque: NodeORB est interprété en NodeORB* dans la signature de la méthode lorsque sa taille est indéfinie.
Dans mon cas, string et sequence sont deux type de taille variable.
Or si je les remplace par des double et long (taille fixe)
alors NodeORB et interprété en NodeORB et non pas en NodeORB* 

Ma question est la suivante:
Est-il possible de retourner une structure de taille variable en CORBA et si oui comment?
0
asari29 Messages postés 21 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 18 décembre 2009
3 avril 2009 à 16:10
J'ai trouvé ma réponse... le compilateur fait bien les choses comme il faut CORBA gère heureusement les pointeurs correctement.

Il se trouve par contre que CORBA ne supporte pas les pointeurs null...
Or lorsque l'IDL comporte un string, celui se traduit en char* du coté C++.
Si bien que lorsque je déclare un NodeORB du coté serveur comme client, je doit impérativement renseigné mon champ name.
Si cela n'est pas fait, name sera représenté par un pointeur de caractère null et donc pas compatible avec corba!

Maintenant, peut-être que les _var et _ptr propose une abstraction pour ce genre de problème, si quelqu'un pouvait m'éclairer sur le sujet...
0
Rejoignez-nous