LICENCE 3ème année
Travaux
Pratiques
de
Programmation Distribuée
(sujet
n°4)
Initiation
à CORBA
Télécharger ces
exemples.
Exercice 1
- Etape 1 : Rendez-vous dans le répertoire
Carre/
- Etape 2 : Réaliser la projection de l'interface IDL :
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
.
- Etape 3 : Lancez l'application en commencant par le serveur
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>
- Etape 4 : Lancez le Serveur sur une machine (codd) :
java
Serveur
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)
- Etape 5 : Ne pas oublier de tuer le serveur en vous
déconnectant !
Exercice 2
- Etape 1 : Recopier
Carre/
dans un
nouveau répertoire que vous
appelerez Carre_HOLDER
(utiliser la commande cp -r
).
- Etape 2 : Modifier la fonction
long carre(in long
source)
afin de faire
passer le résultat de la fonction en second paramètre. La nouvelle
signature de la fonction
devient donc void carre(in long source, out long resultat)
.
Pour
cela vous interviendrez sur les codes de : Icarre.idl
, puis
IcarreImpl.java
, puis Client.java
Exercice 3
- Etape 1 : Recopier
Carre/
dans un
nouveau répertoire que vous
appelerez Carre_POA
(utiliser la commande cp -r
).
- Etape 2 : Utiliser le Portable Object Adaptor (POA) dans cette
nouvelle version. Par rapport à l'exercice 1, un
intermediaire appelé
POA se place entre le squelette de l'objet distant et l'ORB au niveau du serveur. Ce POA
normalisé permet de faire interopérer le serveur avec
differents ORBs (pas uniquement celui de java SUN).
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
)