L'ORB que nous allons utiliser, omniORB2, est
celui distribué gratuitement par le laboratoire
commun d'Oracle et d'Olivetti. Cet ORB
est conforme au standard CORBA 2.0.
Toutefois, certaines fonctionnalités ne sont pas
implantées, et en particulier, la DSI, la DII
et le type IDL any. L'ORB
est fourni avec
un compilateur IDL qui
produit un mapping C++.
Il offre aussi
un service de nom
conforme à celui standardisé par
l'OMG.
La configuration de l'environnement consiste, entre autre,
à positionner les variables nécessaires à ce dernier.
Nous avons vu dans le cours, que tout service
CORBA est défini par un ensemble d'interfaces IDL.
Le service de nom
n'échappe pas à cette règle. Toutefois, il
est soumis à la contrainte supplémentaire
que tous les clients et serveurs CORBA doivent aisément obtenir
une référence sur ses interfaces.
CORBA spécifie que
l'obtention de cette référence
est réalisée par
la méthode
resolve_
initial_
reference de l'ORB.
Dans omniORB2, la référence du service de nom
est stockée dans un fichier. Ce fichier
est lu par tous les processus lors de l'initialisation
de leur ORB. La configuration de l'environnement consiste alors
à donner
à l'ORB les informations afin qu'il puisse trouver ce fichier.
Nous
faisons maintenant l'hypothèse que vous utilisez zsh et que
vous avez
rapatrié les
sources
des
exercices, puis, utilisé la commande tar pour les extraire
de l'archive dans votre répertoire principal.
Votre répertoire principal doit alors contenir le répertoire TP-CORBA.
Dans ce dernier, se trouve le fichier corba.zsh. Celui-ci comprend
la définition des variables nécessaires au bon fonctionnement du
serveur de nom. Pour positionner les variables en question, il suffit alors
d'utiliser la commande :
source corba.zsh
dans toutes les fenêtres ou vous exécuterez des processus CORBA.
Créez ensuite le fichier
ns.ior sous votre répertoire principal (la variable zsh OMNIORB_
CONFIG
du script corba.zsh doit pointer sur le fichier ns.ior). Celui-ci contiendra
la référence d'objet du service de nom.
Pour obtenir cette référence,
démarrez le service de nom par la commande :
omniNames -start XXX
où XXX est un numéro de port TCP/IP (vous utiliserez comme numéro de port, le port 50000 augmenté de votre numéro de casier). Avec le paramètre -start, omniNames affiche alors l'IOR qui permettra de l'atteindre (un IOR est la représentation d'une référence d'objet). Concrètemment, un IOR est une chaîne de caractères de la forme :
IOR:01ed0c082000000049444c3a436f734e616d696e672f4e616d696 e67436f6e746578743a312e3000010000000000000024000000010100 000a0000003132372e302e302e310050c30c00000034999ca4edbcb19e00000001
Stockez alors dans le fichier ns.ior les informations suivantes :
NAMESERVICE IOR:01ed0c082000000049444c3a436f734e616d696e672f4e616d696 e67436f6e746578743a312e3000010000000000000024000000010100 000a0000003132372e302e302e310050c30c00000034999ca4edbcb19e00000001
En fait, on préfixe la référence du service de nom par la chaîne NAMESERVICE. On peut alors relancer omniNames sans le paramètre -start afin de vérifier que celui-ci lit convenablement le fichier ns.ior. On teste que la configuration fonctionne avec la commande suivante :
nameclt list
Celle-ci ne doit pas provoquer d'erreur. Il est normal de n'avoir pas affichage suite à cette commande, en effet, celle-ci affiche la liste des objets et contextes enregistrés auprès du service de nom, or, aucun service n'a encore était enregistré.