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 :

Error Resolve (NameService) .


Sujet :

CORBA

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Error Resolve (NameService) .
    Hello

    I am writing a program to communicate with an existing one using CORBA.

    After i Create a name object, containing the name test/context:
    CosNaming::Name name;
    name.length(1);
    name[0].id = m_ServerName.c_str();
    name[0].kind = m_ServerKind.c_str();

    then I try to resolve the name service using:
    return rootContext->resolve(name);

    it doesn't catch errors.

    But when i narrow the object reference:
    serverPtr = SOT_Server_Command::_narrow(corba_obj);

    CORBA::is_nil(serverPtr) error is catched !!!!

    i can't understand why the resolve name didnt give errors but when i narrow the object reference i get nill result.

    Thank you for the help.

    P.S: Source files given in Private message.

  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
    Hi,

    The object reference you get from NameService is certainly not of SOT_Server_Command type. That's why narrow operation returns nil.

    You could check the type of the object you get with following code:
    CORBA::String_var s = corba_obj->repository_id();
    std::cout << "corba_obj type is: " << s.in() << std::end;
    P.S.: This is a French forum. If you have some knowledge of French, please use it.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre réponse et désolé pour l'anglais.

    J'ai ajouté votre code pour voir le type de l'objet, j'ai eu cette erreur:

    ‘class CORBA::Object’ has no member named ‘repository_id’
    Note: j'utilise le C++

    Merci pour votre aide.

  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
    Désolé, j'ai fait une petite erreur. Voici le bon code (noter le '_' devant repository_id):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CORBA::String_var s = corba_obj->_repository_id();
    std::cout << "corba_obj type is: " << s.in() << std::end;

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    J'ai encore la même erreur!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FoxCommander.cpp: In function ‘int main(int, char**)’:
    FoxCommander.cpp:307: error: ‘class CORBA::Object’ has no member named ‘_repository_id’
    FoxCommander.cpp:308: error: ‘end’ is not a member of ‘std’
    make: *** [FoxCommander.o] Erreur 1

  6. #6
    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
    Alors c'est que malheureusement votre ORB n'est pas à jour avec le standard "C++ language mapping"
    Quel ORB utilisez-vous ?

    De toutes façons, si corba_obj n'est pas null, et que SOT_Server_Command::_narrow(corba_obj) retourne null, c'est que corba_obj n'est pas du type SOT_Server_Command.
    Vérifiez quel est le type de l'objet stocké dans le NameService.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    J'utilise le omniORB-4.1.4.

    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
    CORBA::Object_ptr corba_obj = corbaConnectionHandler->getObjectReference();
    
    //in another file the  corbaConnectionHandler is defined to return "CORBA::Object_ptr" such as:
      
    CosNaming::Name name;
      name.length(1);
      name[0].id   = "sot";
      name[0].kind = "context";
    
      return rootContext->resolve(name);
    // ------------------------------------
    
    sot_serverPtr = SOT_Server_Command::_narrow(corba_obj);
    
          if(CORBA::is_nil( sot_serverPtr ) )
    	{
    	  sotERROR <<"Server ptr is null: connection is not obtained. " <<std::endl;
    	  return NULL;
    	}
    C'est cette erreur qui est donnée par le programme .

    Comment Vérifiez quel est le type de l'objet stocké dans le NameService?

    Merci beaucoup pour votre aide.

  8. #8
    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
    Une question d'abord:
    Je ne vois pas de test pour vérifier que corba_obj n'est pas nil !
    Etes-vous sûr qu'il ne l'est pas ?

    Si oui, Vous pouvez essayer 2 choses:

    1: le CORBA::Object d'OmniORB à un attribut non-standard _PD_repoId
    Si OmniORB fonctionne comme je le suppose, cet attribut contient le RepositoryID (i.e. le nom du type) de l'objet.
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::cout << "corba_obj RepositoryID = " << corba_obj->_PD_repoId << std::endl;
    2: OmniORB a un outil nommé catior qui permet de décoder un IOR et donc d'afficher son type.
    Il faut d'abord afficher l'IOR de l'objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Requires ORB variable
    CORBA::String_var s = orb->object_to_string(corba_obj);
    std::cout << "corba_obj IOR:\n" << s.in() << std::endl;
    Puis appeler la commande catior avec l'IOR affiché:

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Oui je fait un test " if(CORBA::is_nil( corba_obj ) ) " mais il n'y a pas de problemes.

    Pour le type de corba_obj:

    j'ai trouvé:
    corba_obj RepositoryID = IDL:omg.org/CORBA/Object:1.0

    Pourquoi il n'est pas de type sot_server_command??!!
    D'habitude le "resolve(name)" retourne un objet de quel type ??!!

  10. #10
    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
    C'est sans doute que OmniORB ne stocke malheureusement pas le type réel de l'objet dans son attribut _PR_repoId.
    Ma première option n'est donc pas la bonne.

    Essayez la 2e avec catior.

    Pourquoi il n'est pas de type sot_server_command??!!
    Il est peut-être aussi de ce type là! CORBA::Object est le type de base dont héritent tout les objets CORBA.

    D'habitude le "resolve(name)" retourne un objet de quel type ??!!
    Ca retourne toujours un CORBA::Object. C'est bien pour ça qu'il faut faire un narrow pour le "caster" dans le type dont on pense qu'il est réellement.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    J'ai eu ce résultat avec catior:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Type ID: "IDL:hppCorbaServer/SOT_Server_Command:1.0"
    Profiles:
    1. IIOP 1.2 172.27.11.79 39153 "...>M..Q......"
                TAG_ORB_TYPE omniORB
                TAG_CODE_SETS char native code set: ISO-8859-1
                              char conversion code set: UTF-8
                              wchar native code set: UTF-16
                              wchar conversion code set: UTF-16
    Désolé , mais je ne comprends pas tous ce qu'elle donne!!!
    Il est bien de type SOT_Server_Command ...

    C'est ou le problème dans mon code alors ?!!

  12. #12
    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
    Cela donne que le RepositoryID de l'objet est IDL:hppCorbaServer/SOT_Server_Command

    Avec "hppCorbaServer" qui est soit un module, soit un pragma prefix.
    Quel est le contenu de l'IDL ?
    l'IDL du client et du serveur sont-ils tout les deux compilés avec OmniORB ?
    Avec quelles options ?

    Que donne le code suivant ?
    if (corba_obj->_is_a("IDL:hppCorbaServer/SOT_Server_Command:1.0"))
    std::cout << "corba_obj is a IDL:hppCorbaServer/SOT_Server_Command:1.0" << std::endl;
    else
    std::cout << "corba_obj is NOT a IDL:hppCorbaServer/SOT_Server_Command:1.0" << std::endl;
    Dans le code généré par OmniORB pour SOT_Server_Command, y a-t-il une chaîne de caractères qui ressemble à un RepositoryID (IDL:...SOT_Server_Command:1.0) ?
    Quelle est-elle ?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    J'ai trouvé et fixé la première erreur . En fait, c'etait pas le bon fichier idl que je compile avec le programme.
    J'utilise : omniidl -bcxx filename.idl

    dans le fichier IDL, il y a:
    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
      interface SOT_Server_Command
      {
        void run( in string cmd );
        void runAndRead( in string cmd, out StringStreamer os );
        void readVector( in string signalName, out DoubleSeq value );
    
        long createOutputVectorSignal( in string signalNameCorba );
        long createInputVectorSignal( in string signalNameCorba );
        void readInputVectorSignal( in long signalRank, out DoubleSeq value );
        void writeOutputVectorSignal( in long signalRank, in DoubleSeq value );
    
        // RegisterCallback
        void registerClient(in NotifyCallback client, in string clientName );
        void unregisterClient(in string clientName);
      };
    Le probleme est que maintenant le programme donne une erreur directement apres le :
    " return resolve (name) " qui est bien de type "Type ID: "IDL:hppCorbaServer/SOT_Server_Command:1.0".

    Il donne une erreur même avant le "_narrow(corba_obj)"

    Note: Le corba_obj n'est pas nill ...

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour

    Merci beaucoup pour votre aide.
    Le problème est résolu .. c'était pas le bon fichier idl que j'utilise.

    J'ai une dernière question SVP:
    Je peux changer dans le fichier idl du client (ajouter une définition de quelque chose sans modifier la hiérarchie)?

    C'est possible que le fichier .idl du serveur soit différent de celui du client ?

  15. #15
    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 possible que le fichier .idl du serveur soit différent de celui du client ?
    C'est possible, mais dangereux !
    Si les définitions des types et interfaces utilisées par le client ET le serveur ne sont pas exactement les mêmes, le comportement est indéterminé et on peut avoir des erreurs vraiment bizarres (selon les ORBs utilisés)...

    Mon conseil est de toujours utiliser le même IDL côté client et serveur.
    Et si on change l'IDL, ne pas oublier de re-générer le code pour les 2 côtés !!

  16. #16
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour à tous,

    Tout d'abord excusez mon ignorance de corba et mon manque de culture dans les environnements/outils de développement.

    Ma question est : y a -t-il un moyen de comprendre corba sans utiliser java ou C++?


    Mes prérequis sont TCP/IP, SGBD, scripting(light), vba etc...

    Merci infiniment de votre compréhension et de vos excuses de cette interférence de l'ignorance dans cet océan de technologies!

  17. #17
    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,

    Ma question est : y a -t-il un moyen de comprendre corba sans utiliser java ou C++?
    Comprendre les principes de base de CORBA: oui
    La spécification CORBA elle même n'est liée à aucun langage (à part l'IDL).

    Après pour utiliser CORBA, il faut forcément un langage de programmation (C ou C++ ou Java ou Ada ...)

    Mes prérequis sont TCP/IP, SGBD, scripting(light), vba etc...
    Aucun besoin de ces connaissances pour CORBA.
    A part peut-être Visual Basic, car il existe un ORB pour ce langage: VBOrb
    Mais il a l'air assez vieux (2003) et je ne sais pas ce qu'il vaut...

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Merci infiniment,

    Une réponse de ce genre donne envie de rester sur ce forum qui, à mon propre avis est le meilleur.


    Merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2011, 22h40
  2. src-resolve.4.2: Error resolving component. schéma XML
    Par ziad.shady dans le forum Valider
    Réponses: 1
    Dernier message: 27/02/2009, 11h41
  3. [cURL] Error "Couldn't resolve host"
    Par lem01 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 21/03/2007, 22h23
  4. Réponses: 3
    Dernier message: 26/10/2006, 18h21

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