|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
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. |
|
|
00
|
|
|
#2 | |
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
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: Citation:
|
|
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
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: Citation:
Merci pour votre aide. |
|
|
|
00
|
|
|
#4 | ||
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
Désolé, j'ai fait une petite erreur. Voici le bon code (noter le '_' devant repository_id):
Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
J'ai encore la même erreur!!!
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
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. |
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
J'utilise le omniORB-4.1.4.
Code :
Comment Vérifiez quel est le type de l'objet stocké dans le NameService? Merci beaucoup pour votre aide. |
||
|
|
00
|
|
|
#8 | ||||
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
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 :
Il faut d'abord afficher l'IOR de l'objet: Code :
|
||||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
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 ??!! |
|
|
00
|
|
|
#10 | ||
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
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. Citation:
Citation:
|
||
|
|
10
|
|
|
#11 | ||
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
J'ai eu ce résultat avec catior:
Code :
Il est bien de type SOT_Server_Command ... C'est ou le problème dans mon code alors ?!! |
||
|
|
00
|
|
|
#12 | |
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
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 ? Citation:
Quelle est-elle ? |
|
|
|
10
|
|
|
#13 | ||
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
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 :
" 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 ... |
||
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Amine ABM Inscription : novembre 2010 Messages : 17 ![]() |
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 ? |
|
|
00
|
|
|
#15 | |
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
Bonjour,
Citation:
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 !! |
|
|
|
10
|
|
|
#16 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 117 ![]() |
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! |
|
|
00
|
|
|
#17 | ||
|
Membre éclairé
![]() Julien EnochArchitecte technique Inscription : septembre 2006 Messages : 219 ![]() |
Bonjour,
Citation:
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 ...) Citation:
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... |
||
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2006 Messages : 117 ![]() |
Merci infiniment,
Une réponse de ce genre donne envie de rester sur ce forum qui, à mon propre avis est le meilleur. Merci. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com