Cours Java Rmi
Cours Java Rmi
Cours Java Rmi
Java RMI
CNAM Aquitaine
Eric Cariou
Universit de Pau et des Pays de l'Adour
UFR Sciences Pau Dpartement Informatique
[email protected]
1
Java RMI
Java RMI
Java RMI
Java RMI
Interface
Contraintes sur interface d'oprations
Exemple d'interface
Exemple d'interface
La classe Rectangle permet de dcrire les coordonnes
d'un rectangle
public class Rectangle implements Serializable {
public int x1, x2, y1, y2;
public Rectangle(int x1, int y1, int x2, int y2){
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public String toString() {
return "("+x1+","+y1+")("+x2+","+y2+")"; }
}
Servant : exportation
UnicastRemoteObject.exportObject(this);
Servant
Registry
Registry
Lancement du registry
Registry
Classe java.rmi.Naming
Retourne une rfrence sur l'objet dont le nom est pass en paramtre
Exception NotBoundException leve si objet pas trouv par le registry
11
Gnration stub/squelette
Utilitaire : rmic
{
// instantiation standard de l'objet
RectangleImpl rect = new RectangleImpl();
// enregistrement de l'objet sous le nom opRect sur le registry local
Naming.rebind("opRect",rect);
}
catch (Exception e)
{ ... }
14
Rsultat du lookup
Le talon local cot client qui sert de proxy pour l'accs l'instance de
RectangleImpl cot serveur
Objets distribus
On peut alors appeler des mthodes sur un objet distant ou passer des
rfrences d'objets distants lors d'appels de mthodes
A condition que l'on puisse appeler des mthodes sur ces objets
distance donc que cet objet implmente une interface remote et se
soit export
Contraintes / limites
Car pour un passage par valeur, les objets sont forcment srialiss pour
tre transmis via le rseau (via des sockets)
Note
17
Appels en retour
18
Appels en retour
19
Appels en retour
Appels en retour
Implmentation de l'observateur
21
Appels en retour
Implmentation de l'observ
Appels en retour
23
Appels en retour
Lancement de l'observ
Observee obs = new Observee();
Naming.rebind("observee", obs);
for (int i=1; i<=5; i++) {
obs.changeValue(i*10);
Thread.sleep(1000);
}
Note 1
Appels en retour
Note 2
Cot servant
26
Mobilit de code
27
Mobilit de code
Exemples
$ java -Djava.rmi.server.codebase=file:///home/
ecariou/test-rmi/ Serveur
$ java -Djava.rmi.server.codebase=http://www.univpau.fr/~ecariou/test-rmi/ Serveur
Mobilit de code
Gestion de la scurit
Classe java.lang.SecurityManager
Mobilit de code
grant {
permission java.security.AllPermission;
};
Spcialisation de SecurityManager
30
Mobilit de code
Mobilit de code
Si le client trouve cette classe via son CLASSPATH, c'est celle l qui est
choisie en priorit
Sinon, il la rcupre via le codebase envoy par le registry
Si on lui avait pass en paramtre un codebase son lancement, il la
cherche galement cet endroit
32
Mobilit de code
Mobilit de code
Mobilit de code
34
Mobilit de code
Exemple (suite)
35
Exemple (suite)
Mobilit de code
System.setSecurityManager(new SecurityManagerOuvert());
Rectangle r1, r2;
r1 = new Rectangle(10, 10, 20, 30);
IRectangle opRectangle = (IRectangle)
Naming.lookup("rmi://scinfe222/opRect");
r2 = opRectangle.decalerRectangle(r1, 15, 10);
System.out.println("classe de IRectangle = "
+opRectangle.getClass());
System.out.println("classe de r2 = "+r2.getClass());
36
Mobilit de code
Exemple (suite)
$ java Client
Mobilit de code
Exemple (fin)
Note
Mobilit de code
Note
40
Garbage collector
43
Garbage collector
Proprit java.rmi.dgc.leaseValue
Note
Exportation de l'objet
Tunneling HTTP
46
Cot servant
Appel dynamique
47
Introspection
Classe java.lang.Class
Introspection
Classe java.lang.reflect.Method
Classe java.lang.reflect.Field
Classe java.lang.reflect.Constructor
...
49
50