Université Louis Pasteur
LICENCE 3ème année


 

Travaux Pratiques
de

Programmation Distribuée

(sujet n°4)

Initiation à CORBA



Télécharger ces exemples.


Exercice 1

           idlj -fall -oldImplBase Icarre.idl

      Noter tous les fichiers *.java qui sont générés automatiquement.
      Puis lancez la compilation complète par ./compile.

      IMPORTANT : ouvrir les fichiers Icarre.java et IcarreOperations.java.

      C'EST CE DERNIER FICHIER *Operations.java QUI VOUS DONNE L'INTERFACE JAVA
      QUE VOUS DEVREZ UTILISEZ POUR VOTRE IMPLEMENTATION.

A chaque fois que vous écrirez ou utiliserez une interface IDL,
il faudra regarder le fichier *Operations.java.

java Serveur

qui normalement affiche son IOR (Interoperable Object Reference).

(ATTENTION : la chaine "IOR:" fait partie de l'IOR du serveur)


Puis lancer le client :

         java Client <IOR_du_serveur> <nombre>
Exécuter le Client sur une autre machine (turing), exemple :

java Client <IOR:...> 4


Question : Comment le client arrive-t-il a savoir sur quelle machine se trouve le Serveur ?
(voir le cours)



Exercice 2

Pour cela vous interviendrez sur les codes de : Icarre.idl, puis IcarreImpl.java, puis Client.java


Exercice 3

Vous modifierez le fichier compile en enlevant l'option -oldImplbase lorsque vous appelez idlj.

Vous ferez ATTENTION que la projection IDL vers java change alors (le squelette généré n'est plus_IcarreImplBase mais IcarrePOA).


Exercice 4

Le fichier OpMatrice.idl definit l'interface IDL d'un service proposant la multiplication de 2 matrices. En projetant l'interface idl grâce à l'outil idlj. Regarder en quel type Java est projeté le type IDL long.

Proposer une implémentation CORBA de ce service équivalente à ce que l'on a fait précédemment avec RMI dans le TP3. Cette fois-ci on pourra multiplier des matrices rectangulaires quelconques : a de dimension n*k et b de dimension k*m. Vous utiliserez obligatoirement le POA.

Votre Client demandera au service distant de multiplier les deux matrices a et b telles que
 
int[][] a = { {1, 0, 0}, {0, 2, 0}, {0, 0, 3}, {0, 0, 4} };
int[][] b = { {1, 2, 3}, {1, 2, 3}, {1, 2, 3} };
 
Vous devez bien sûr trouver :

res = a*b = { {1, 2, 3}, {2, 4, 6}, {3, 6, 9}, {4, 8, 12} };

Remarque : Pour éviter de faire un copier/coller de l'IOR à partir du shell, on peut écrire l'IOR dans un fichier avec le Serveur puis le lire depuis le Client. Dans le fichier IDL est défini une constante iorfile contenant le nom du fichier ou l'on va stocker l'IOR.

Dans le serveur pour écrire l'IOR dans un fichier utiliser le code :

            import java.io.*;
           ...
        FileOutputStream file = new FileOutputStream(iorfile.value);
        PrintWriter out = new PrintWriter(file);
        out.println(ior);out.flush();
        file.close();


Dans le client pour lire l'IOR dans un fichier utiliser le code :

          import java.io.*;
           ...
        FileReader file = new FileReader(iorfile.value);
        BufferedReader in = new BufferedReader(file);
        ior = in.readLine();
        file.close();




Exercice 5

Le fichier Annuaire.idl définit l'interface IDL d'un service d'annuaire.
Proposer une implémentation CORBA de ce service équivalente à celle vue avec RMI.
Pour cela, vous utiliserez le POA. (Pour démarrer, vous pouvez utiliser la correction de l'exercice RMI dans le répertoire TelephoneExerciceRMI)
  




[Page réalisée à partir d'un document de Guillaume Latu]