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 :

comment récupérer les naming context et aussi les objets ?


Sujet :

CORBA

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut comment récupérer les naming context et aussi les objets ?
    Bonjour,

    Je suis en C++ et utilise TAO. Pour récupérer les naming context et les objets,
    je m'inspire de l'xemple p806 du bouquin "Advanced Corba programming with C++"
    de Henning et Vinoski. J'arrive à récupérer les namings context mais pas les objets ....

    Quelqu'un a une idée ?




    le code du bouquin est le suivant:
    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
    void show_chunk(CosNaming::BindingList & bl)
    {
    for &#40;CORBA&#58;&#58;ULong i=0; i <bl.length&#40;&#41;; i++&#41;&#123;
    if &#40;bl&#91;i&#93;.binding_name&#91;0&#93;.kind&#91;0&#93; != '\0'&#41;
    cout << "&#40;" << bl&#91;i&#93;.binding_name&#91;0&#93;.kind << "&#41;";
    if &#40;bl&#91;i&#93;.binding_type == CosNaming&#58;&#58;ncontext&#41;
    cout << "&#58; context" << endl;
    else
    cout << "&#58; reference" << endl;
    &#125;
    &#125;
    
    void list_context&#40;CosNaming&#58;&#58;NamingContext_ptr nc&#41;
    &#123;
    CosNaming&#58;&#58;BindingIterator_var it;
    CosNaming&#58;&#58;BindingList_var bl;
    const CORBA&#58;&#58;ULong CHUNK = 100;
    
    nc->list&#40;CHUNK, bl, it&#41;;
    show_chunk&#40;bl&#41;;
    
    if &#40;!CORBA&#58;&#58;is_nil&#40;it&#41;&#41; &#123;
    while &#40;it->next_n&#40;CHUNK,bl&#41;&#41;
    show_chunk&#40;bl&#41;;
    it->destroy&#40;&#41;;
    &#125;

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 125
    Par défaut
    Bonjour,

    Tu peux faire un resolve à partir du contexte racine sur le "binding_name" tu obtiens ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut
    Euh oui, je peux faire un resolve à partir du contexte racine sur le binding_name,
    j'obtiens des valeurs en hexa....
    Mais c'est pas ca que je cherche à faire. Si on considère un graphe représentant
    les naming context, je voudrais récupérer les feuilles (ds le bouquin ils appellent ca object
    application). En utilisant leur code, je ne comprends pas pourquoi je ne passe jamais ds la partie else de la fonction show_chunk.....

    Tu as une idée ?


  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 125
    Par défaut
    En utilisant leur code, je ne comprends pas pourquoi je ne passe jamais ds la partie else de la fonction show_chunk.....
    Simplement parce que tu n'as que des naming context dans le contexte racine. Il faut faire un appel récursif dans ta fonction show_chunk quand tu obtiens un contexte. Un naming context est comme un chemin et un objet un fichier dans ce chemin.

    Je n'ai pas pris le temps de vérifier mon code, mais ca devrait marcher en faisant quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch &#40; bl&#91;i&#93;.binding_type &#41; &#123;
     case CosNaming&#58;&#58;nobject&#58;
       cout << "&#58; reference" << endl;
       break;
       
     case CosNaming&#58;&#58;ncontext&#58;
       CORBA&#58;&#58;Object_obj obj = rootContext->resolve&#40; bl&#91;i&#93;.binding_name &#41;;
       CosNaming&#58;&#58;NamingContext_var nc2 = CosNaming&#58;&#58;NamingContext&#58;&#58;_narrow &#40;obj&#41;;
       list_context&#40;nc2&#41;;
       break;
    &#125;
    En prenant garde, de bien initialiser la variable rootContext avec ton contexte racine (NameService), juste avant ton premier appel à list_context dans ton programme.

    Reviens nous dire si ca fonctionne.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut
    C'est exactement ça qu'il faut faire. Ca marche. Youpiiii !!!

    Mercii


  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 125
    Par défaut
    De rien.
    A bientôt.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/09/2012, 08h52
  2. Réponses: 1
    Dernier message: 11/05/2012, 12h45
  3. Réponses: 7
    Dernier message: 23/09/2009, 10h02
  4. Réponses: 0
    Dernier message: 21/09/2009, 23h41
  5. Comment récupérer les adresses WWW dans Internet Explorer ?
    Par chaours dans le forum Web & réseau
    Réponses: 7
    Dernier message: 03/09/2003, 14h27

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