next up previous
Next: Exercice 3 Up: Enoncés des travaux pratiques Previous: Exercice 1

Exercice 2

Les sources de cet exercice se trouvent dans le répertoire "./TP-CORBA/EXO2".




Nous regardons maintenant comment on définit en IDL des types construits puis, comment ceux-ci sont utilisés en C++. Les types construits que nous allons manipuler dans cet exercice sont des structures et des séquences. Une structure en IDL est déclarée et utilisée comme une structure C ou C++. Bien entendu, une structure peut être utilisée comme paramètre en in, out ou inout d'une méthode. La séquence est un tableau d'éléments quelconques. Une séquence peut être de taille bornée ou non. Nous nous intéresserons ici aux séquences non bornées. Celles-ci utilisent une taille courante, qu'il est important de positionner avant de manipuler la séquence.




Dans le mapping C++, CORBA spécifie pour chaque type de donnée, et en fonction de son utilisation (in, out ou inout), si c'est au client ou au serveur d'allouer (statiquement ou dynamiquement) la mémoire pour les paramètres. De même, le mapping définit aussi la signature des méthodes constituant l'implantation des interfaces IDL (en C++, un objet est implanté par une classe). Nous donnons ici les informations nécessaires dans le cadre de cet exercice :

1.
Concernant la gestion mémoire :

2.
Concernant les signatures des méthodes, une astuce consiste a regarder les signatures générées par le compilateur IDL dans le fichier polonaise.hh. On regarde alors la classe C++ _proxy_conversion qui est la souche pour l'interface conversion.

Si vous souhaitez regarder la gestion de la mémoire pour tous les types IDL, ou si vous souhaitez obtenir les règles qui définissent les signatures de la classe d'implémentation, vous pouvez consulter les cinq tableaux de ce fichier qui sont extraits du mapping C++ défini dans CORBA 2.0.




Le mapping des structures IDL en structures C++ ne pose pas de problème particulier. Les séquences sont implantées sous forme d'une classe C++. Une taille maximale de la séquence doit être précisée lors de l'instanciation de cette classe. Enfin, la méthode length() permet de positionner la taille courante de la séquence. Attention de ne pas manipuler une séquence dont la taille courante ne serait pas initialisée. Un exemple d'utilisation de séquence est donné dans le fichier client.cc.




L'objectif de cet exercice est le suivant :

1.
On vous demande de compléter la description IDL polonaise.idl, en ajoutant les méthodes suivantes à l'interface conversion :

Des exemples d'utilisation de ces méthodes sont données dans client.cc. On n'oubliera pas de spécifier quelles sont les exceptions que les méthodes peuvent être amenées à lever.

2.
On vous demande de compléter la définition de la classe d'implémentation dans le fichier conversion_impl.hh
3.
On vous demande de compléter le fichier conversion_impl.cc. On ne vous demande pas de rédiger le code de ces méthodes sauf pour la méthode convertir. Pour cette dernière, on pourra s'aider de strtol et de ltostr pour convertir la donnée dans un format intermédiaire (long). La fonction ltostr utilise les mêmes paramètres que strtol (voir ltostr.hh).

4.
Enfin, vous testerez l'interface conversion avec client.cc.

next up previous
Next: Exercice 3 Up: Enoncés des travaux pratiques Previous: Exercice 1
Frank Singhoff
3/24/1998