Examen de Juin 2005 page 5 Applications distribuées avec Java
page 5
On a deux machines "ondine" et "telline". On crée sur "ondine" un adaptateur sur le port 9200. Sur la
machine "telline", on crée un programme Java qui réalise l'instruction suivante :
Naming.bind("rmi://ondine:9200/MON_OD", new MonOD()). où MonOD hérite de
UnicastRemoteObject et implémente l'interface MonODInt.
Cette instruction est-elle valide?
On a deux machines "ondine" et "telline".
Sur "ondine" on crée un objet distribué (de classe ServOD) qui est enregistré dans un adaptateur de
"ondine", sur le port 9200, sous le nom "SERVEUR_OD". Cet objet distribué a la méthode distante
void creerOD(String ident) qui crée un objet distribué de classe MonODet l'enregistre dans
l'adaptateur de "ondine".
Depuis un programme Java de "telline" on veut créer un objet distribué sur "ondine" et utiliser une
méthode distante (do) de cet objet distribué, le(s) code(s) juste(s) peut être:
LocateRegistry.createRegistry(9200);
MonOD monod = new MonOD();ok=true;
while(ok){
try{Naming.rebind("rmi://ondine:9200/OBJET_1",monod);}
catch(Exception e){ok=false;} }
monod.do();
MonOD monod=null; ok=true;
while(ok){
try{ServODInt servod = (ServODInt)Naming.lookup("rmi://ondine:9200/SERVEUR_OD");}
catch(Exception e){ok=false;} }
monod = servod.creerOD("OBJET_1");
monod.do();
ServODInt servod = (ServODInt)Naming.lookup("rmi://ondine:9200/SERVEUR_OD");
servod.creerOD("OBJET_1"); ok=true;
while(ok){
try{ monod = (MonODInt)Naming.lookup("rmi://ondine:9200/OBJET_1");}
catch(Exception e){ok=false;} }
monod.do();
Un objet distribué est utilisé par plusieurs clients en même temps. Pour que cette utilisation partagée
soit possible il faut :
nécessairement préfixer toutes les méthodes distantes par le mot réservé "synchronized"
nécessairement préfixer la classe de l'objet distribué par le mot réservé "synchronized"
préfixer par le mot réservé "synchronized"que les méthodes distantes qui le nécessitent
Deux clients qui font appel en même temps à une méthode distante synchronisée :
déclenchent l'exception "RemoteMethodSynchronizedException"
un des appels est réalisé, le deuxième est en attente de la fin d'appel du premier
La classe d'un objet distribué peut :
hériter de la classe Thread
implémenter l'interface Runnable et implémenter l'interface de ses méthodes distantes
Dans une architecture d'objets distribués avec RMI en Java, il est possible de :
créer un objet distribué sur la machine A et utilser ses méthodes distantes depuis un
programme qui s'exécute sur la machine A
créer un objet distribué sur la machine A, un autre sur la machine B et utiliser mutuellement
leurs méthodes distantes
créer un objet distribué sur la machine A, créer son adaptateur sur la machine A, et créer un
autre objet distribué sur la machine B et l'enregistrer dans l'adaptateur de la machine A