Java Avance

Transcription

Java Avance
Java Avance
R.M.I.
Emmanuel ADAM
LAMIH UMR CNRS 8530
Université de Valenciennes et du Hainaut-Cambrésis
FRANCE
22 janvier 2008
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
1 / 14
Plan
1
Présentation
2
Présentation
3
Architecture RMI
4
Architecture RMI
5
Création d’un application distribuée
6
Recherche de classes accessoires
7
Sécurité
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
2 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
3 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
R.M.I. = Remote Method Invocation : invoquer à distance des
méthodes ⇒ applications Java distribuées.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
3 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
R.M.I. = Remote Method Invocation : invoquer à distance des
méthodes ⇒ applications Java distribuées.
applications distribuées ⇒ classes distribuées sur un réseau
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
3 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
R.M.I. = Remote Method Invocation : invoquer à distance des
méthodes ⇒ applications Java distribuées.
applications distribuées ⇒ classes distribuées sur un réseau
R.M.I. R.P.C. (uniquement transfert de données)
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
3 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
R.M.I. = Remote Method Invocation : invoquer à distance des
méthodes ⇒ applications Java distribuées.
applications distribuées ⇒ classes distribuées sur un réseau
R.M.I. R.P.C. (uniquement transfert de données)
R.M.I. ≺ CORBA (Common Object Request Broker Architecture) :
standard par l’OMG (Object Management Group), fonctionne sous
plusieurs langages ;
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
3 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
R.M.I. = Remote Method Invocation : invoquer à distance des
méthodes ⇒ applications Java distribuées.
applications distribuées ⇒ classes distribuées sur un réseau
R.M.I. R.P.C. (uniquement transfert de données)
R.M.I. ≺ CORBA (Common Object Request Broker Architecture) :
standard par l’OMG (Object Management Group), fonctionne sous
plusieurs langages ;
I.I.O.P. (Internet InterObject Protocol) permet l’interopérabilité entre
RMI et CORBA.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
3 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
4 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
Les méthodes des objets distants peuvent être invoquées depuis des
JVM différentes / distantes via le réseau.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
4 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
Les méthodes des objets distants peuvent être invoquées depuis des
JVM différentes / distantes via le réseau.
RMI assure la communication entre le serveur et le client via TCP/IP,
transparent pour le développeur.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
4 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
Les méthodes des objets distants peuvent être invoquées depuis des
JVM différentes / distantes via le réseau.
RMI assure la communication entre le serveur et le client via TCP/IP,
transparent pour le développeur.
RMI utilise des sockets et RMP (Remote Method Protocol).
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
4 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
Les méthodes des objets distants peuvent être invoquées depuis des
JVM différentes / distantes via le réseau.
RMI assure la communication entre le serveur et le client via TCP/IP,
transparent pour le développeur.
RMI utilise des sockets et RMP (Remote Method Protocol).
Gestion de la sécurité par la classe RMISecurityManager
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
4 / 14
Présentation
R.M.I
package java.rmi.*
Présentation
Les méthodes des objets distants peuvent être invoquées depuis des
JVM différentes / distantes via le réseau.
RMI assure la communication entre le serveur et le client via TCP/IP,
transparent pour le développeur.
RMI utilise des sockets et RMP (Remote Method Protocol).
Gestion de la sécurité par la classe RMISecurityManager
Gestion de la mémoire distribuée par le DGC (Distibuted Gabage
Collector).
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
4 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfaçage : Le code appelant doit savoir ce qu’il appelle et en
posséder une interface
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfaçage : Le code appelant doit savoir ce qu’il appelle et en
posséder une interface
Le code appelant doit savoir ce qu’il appelle et en posséder une
interface et une implémentation de type proxy
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfaçage : Le code appelant doit savoir ce qu’il appelle et en
posséder une interface
Le code appelant doit savoir ce qu’il appelle et en posséder une
interface et une implémentation de type proxy
Le code appelé doit respecter l’interface et en posséder une
implémentation fonctionnelle.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfaçage : Le code appelant doit savoir ce qu’il appelle et en
posséder une interface
Le code appelant doit savoir ce qu’il appelle et en posséder une
interface et une implémentation de type proxy
Le code appelé doit respecter l’interface et en posséder une
implémentation fonctionnelle.
Le client appelle une méthode de son ”proxy”
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfaçage : Le code appelant doit savoir ce qu’il appelle et en
posséder une interface
Le code appelant doit savoir ce qu’il appelle et en posséder une
interface et une implémentation de type proxy
Le code appelé doit respecter l’interface et en posséder une
implémentation fonctionnelle.
Le client appelle une méthode de son ”proxy”
RMI envoit la requête à l’implémentation côté serveur
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfaçage : Le code appelant doit savoir ce qu’il appelle et en
posséder une interface
Le code appelant doit savoir ce qu’il appelle et en posséder une
interface et une implémentation de type proxy
Le code appelé doit respecter l’interface et en posséder une
implémentation fonctionnelle.
Le client appelle une méthode de son ”proxy”
RMI envoit la requête à l’implémentation côté serveur
Les valeurs de retour sont transmise au proxy client puis au client
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
5 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
Nécessité de lancer le programme rmiregistery.
(ou la commande
java.rmi.registry.LocateRegistry.createRegistry(1099) ; )
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
Nécessité de lancer le programme rmiregistery.
(ou la commande
java.rmi.registry.LocateRegistry.createRegistry(1099) ; )
La couche Transport
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
Nécessité de lancer le programme rmiregistery.
(ou la commande
java.rmi.registry.LocateRegistry.createRegistry(1099) ; )
La couche Transport
assure la connection par TCP/IP entre les JVM
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
Nécessité de lancer le programme rmiregistery.
(ou la commande
java.rmi.registry.LocateRegistry.createRegistry(1099) ; )
La couche Transport
assure la connection par TCP/IP entre les JVM
construit une table des objets distants disponibles.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
Nécessité de lancer le programme rmiregistery.
(ou la commande
java.rmi.registry.LocateRegistry.createRegistry(1099) ; )
La couche Transport
assure la connection par TCP/IP entre les JVM
construit une table des objets distants disponibles.
utilise les classes Socket et SocketServer.
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du côté client) et Skeletons (relais du côté
serveur) : interface entre l’application et le service RMI
couche de référence distante (Remote Reference Layer) :
permet l’obtention d’une référence à l’objet distant à partir de la
référence locale (le stub).
assure une référence persistante vers des objets distants (reconnexion
éventuelle).
Nécessité de lancer le programme rmiregistery.
(ou la commande
java.rmi.registry.LocateRegistry.createRegistry(1099) ; )
La couche Transport
assure la connection par TCP/IP entre les JVM
construit une table des objets distants disponibles.
utilise les classes Socket et SocketServer.
utilise un protocole propriétaire R.M.P. (Remote Method Protocol).
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
6 / 14
Création d’un application distribuée
Principes de mise en oeuvre
package java.rmi.*
Interface
Il est nécessaire de définir l’interface de l’objet distant et décrire les
méthodes appelables
L’interface doit étendre l’interface Remote
Les méthodes appelables doivent pouvoir propager l’exception
RemoteException
Les objets retournés doivent être Serializable
i m p o r t j a v a . r m i . Remote ;
import j a v a . rmi . RemoteException ;
p u b l i c i n t e r f a c e T r u c D i s t a n t e x t e n d s Remote
{
S t r i n g donneChaine ( )
throws RemoteException ;
}
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
7 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Objet Distant
Objet Distant
Le nom de l’objet implémenant a pour suffixe Impl (convention)
La classe étendre la classe RemoteObject, ou une sous classe
(UnicastRemoteObject)
Le constructeur doit propager une exception RemoteException
p u b l i c c l a s s T r u c D i s t a n t I m p l extends UnicastRemoteObject implements
TrucDistant {
String chaine ;
protected TrucDistantImpl ( ) throws RemoteException {
c h a i n e = ” c o u c o u du s e r v e u r ! ” ; }
p u b l i c S t r i n g donneChaine ( )
{ return chaine ; }
E. ADAM (University of Valenciennes)
throws RemoteException
Java Avance
22 janvier 2008
8 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
il déballe les données reçues et les transmet à l’objet local
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
il déballe les données reçues et les transmet à l’objet local
Il emballe les données de retour
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
il déballe les données reçues et les transmet à l’objet local
Il emballe les données de retour
Le skeleton n’existe plus depuis java 1.4
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
il déballe les données reçues et les transmet à l’objet local
Il emballe les données de retour
Le skeleton n’existe plus depuis java 1.4
Génération automatique des stubs et skeleton par l’utilitaire rmic sur
l’implémentation compilée
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une méthode par le relais placé chez le client
Représentant local de l’objet appelé
Il emballe les données à emettre et déballe les données reçues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
il déballe les données reçues et les transmet à l’objet local
Il emballe les données de retour
Le skeleton n’existe plus depuis java 1.4
Génération automatique des stubs et skeleton par l’utilitaire rmic sur
l’implémentation compilée
rmic TrucDistantImpl
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
9 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
avec adresse = ”rmi ://host :port/nom” ou ”//host/nom” ou . . . et
nom = nom de l’objet dans l’annuaire
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
avec adresse = ”rmi ://host :port/nom” ou ”//host/nom” ou . . . et
nom = nom de l’objet dans l’annuaire
bind(adresse, objet) : enregistre objet dans l’annuaire sous le nom de
l’adresse
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
avec adresse = ”rmi ://host :port/nom” ou ”//host/nom” ou . . . et
nom = nom de l’objet dans l’annuaire
bind(adresse, objet) : enregistre objet dans l’annuaire sous le nom de
l’adresse
rebind(adresse, objet) : enregistre un nouvel objet dans l’annuaire sous
nom déjà donné
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
avec adresse = ”rmi ://host :port/nom” ou ”//host/nom” ou . . . et
nom = nom de l’objet dans l’annuaire
bind(adresse, objet) : enregistre objet dans l’annuaire sous le nom de
l’adresse
rebind(adresse, objet) : enregistre un nouvel objet dans l’annuaire sous
nom déjà donné
unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse
donnée
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
avec adresse = ”rmi ://host :port/nom” ou ”//host/nom” ou . . . et
nom = nom de l’objet dans l’annuaire
bind(adresse, objet) : enregistre objet dans l’annuaire sous le nom de
l’adresse
rebind(adresse, objet) : enregistre un nouvel objet dans l’annuaire sous
nom déjà donné
unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse
donnée
list() : retourne tous les enregistrements d’objets
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des références à des objets d’un registre distant (comme
rmiregistry, JNDI, ...).
avec adresse = ”rmi ://host :port/nom” ou ”//host/nom” ou . . . et
nom = nom de l’objet dans l’annuaire
bind(adresse, objet) : enregistre objet dans l’annuaire sous le nom de
l’adresse
rebind(adresse, objet) : enregistre un nouvel objet dans l’annuaire sous
nom déjà donné
unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse
donnée
list() : retourne tous les enregistrements d’objets
lookup(adresse) : retourne une référence à l’objet distant spécifié dans
adresse
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
10 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Exemple d’Enregistrement
Démarrer l’annuaire : lancer rmiregistry
// Le s e r v e u r :
public cla ss LeServeur {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
{
try {
// C r é a t i o n d ’ un o b j e t a r e n d r e a c c e s s i b l e :
T r u c D i s t a n t I m p l t r u c = new T r u c D i s t a n t I m p l ( ) ;
// p u b l i c a t i o n de l ’ o b j e t d a n s l ’ a n n u a i r e
j a v a . r m i . Naming . b i n d ( ” r m i : / / l o c a l h o s t / UnTruc ” , t r u c ) ;
System . o u t . p r i n t l n ( ” S e r v e u r l a n c é . ” ) ;
}
catch ( Exception e ) {
System . o u t . p r i n t l n ( ” E x c e p t i o n l e v é e : ” + e . g e t M e s s a g e ( ) ) ;
} } }
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
11 / 14
Création d’un application distribuée
Principes de mise en oeuvre
Exemple de Recherche : Naming
// Le c l i e n t :
public class LeClient {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
try {
// r é c u p é r e r un o b j e t de t y p e T r u c D i s t a n t ( i n t e r f a c e )
T r u c D i s t a n t t r u c = ( T r u c D i s t a n t ) j a v a . r m i . Naming . l o o k u p ( ” r m i : / /
l o c a l h o s t / UnTruc ” ) ;
System . o u t . p r i n t l n ( ” c h a i n e r e c u p e r e e : ” + t r u c . d o n n e C h a i n e ( ) ) ;
}
c a t c h ( E x c e p t i o n e ) { System . o u t . p r i n t l n ( e ) ; }
} }
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
12 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
La classe RMIClassLoader est appelée automatiquement pour
télécharger les classes manquantes
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
La classe RMIClassLoader est appelée automatiquement pour
télécharger les classes manquantes
Ces classes doivent être Serializable
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
La classe RMIClassLoader est appelée automatiquement pour
télécharger les classes manquantes
Ces classes doivent être Serializable
Il faut indiquer à Java où télécharger les classes manquantes dans le
lancement du Serveur
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
La classe RMIClassLoader est appelée automatiquement pour
télécharger les classes manquantes
Ces classes doivent être Serializable
Il faut indiquer à Java où télécharger les classes manquantes dans le
lancement du Serveur
Utilisation du paramètre java.rmi.server.codebase :
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
La classe RMIClassLoader est appelée automatiquement pour
télécharger les classes manquantes
Ces classes doivent être Serializable
Il faut indiquer à Java où télécharger les classes manquantes dans le
lancement du Serveur
Utilisation du paramètre java.rmi.server.codebase :
java -Djava.rmi.server.codebase=http: //172.16.12.23/lesClasses/
LeServeur
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel à une méthode d’un objet distant peut nécessiter des classes
non présentes chez le client
il faut les téléchager !
La classe RMIClassLoader est appelée automatiquement pour
télécharger les classes manquantes
Ces classes doivent être Serializable
Il faut indiquer à Java où télécharger les classes manquantes dans le
lancement du Serveur
Utilisation du paramètre java.rmi.server.codebase :
java -Djava.rmi.server.codebase=http: //172.16.12.23/lesClasses/
LeServeur
L’adresse peut être de type ftp ; possibilité d’indiquer un no de port
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
13 / 14
Sécurité
Stratégie de sécurité
Sécurité
Le chargement dynamique de classe peut être refusé pour des raisons
de sécurité.
Naming retourne une erreur de type AccessControlException
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
14 / 14
Sécurité
Stratégie de sécurité
Sécurité
Le chargement dynamique de classe peut être refusé pour des raisons
de sécurité.
Naming retourne une erreur de type AccessControlException
Utilisation d’un gestionnaire de sécurité : RMISecurityManager.
System.setSecurityManager(new RMISecurityManager()) ;
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
14 / 14
Sécurité
Stratégie de sécurité
Sécurité
Le chargement dynamique de classe peut être refusé pour des raisons
de sécurité.
Naming retourne une erreur de type AccessControlException
Utilisation d’un gestionnaire de sécurité : RMISecurityManager.
System.setSecurityManager(new RMISecurityManager()) ;
Définition des permissions dans un fichier .policy lu
automatiquement
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
14 / 14
Sécurité
Stratégie de sécurité
Sécurité
Le chargement dynamique de classe peut être refusé pour des raisons
de sécurité.
Naming retourne une erreur de type AccessControlException
Utilisation d’un gestionnaire de sécurité : RMISecurityManager.
System.setSecurityManager(new RMISecurityManager()) ;
Définition des permissions dans un fichier .policy lu
automatiquement
exemple de contenu :
grant {
permission java.security.Allpermission;
}
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
14 / 14
Sécurité
Stratégie de sécurité
Sécurité
Le chargement dynamique de classe peut être refusé pour des raisons
de sécurité.
Naming retourne une erreur de type AccessControlException
Utilisation d’un gestionnaire de sécurité : RMISecurityManager.
System.setSecurityManager(new RMISecurityManager()) ;
Définition des permissions dans un fichier .policy lu
automatiquement
exemple de contenu :
grant {
permission java.security.Allpermission;
}
Signaler à java d’utiliser le fichier :
java -Djava.security.policy=chemin / monFichier.policy LeServeur
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
14 / 14
Remarques
Remarques
Création d’objets distant
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14
Remarques
Remarques
Création d’objets distant
Le client ne peut créer un nouvel objet distant
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14
Remarques
Remarques
Création d’objets distant
Le client ne peut créer un nouvel objet distant
Le serveur peut créer un nouvel objet distant et retourner un objet de
ce type
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14
Remarques
Remarques
Création d’objets distant
Le client ne peut créer un nouvel objet distant
Le serveur peut créer un nouvel objet distant et retourner un objet de
ce type
Il suffit de créer une méthode retournant une nouvelle instance du type
distant dans le type distant
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14
Remarques
Remarques
Création d’objets distant
Le client ne peut créer un nouvel objet distant
Le serveur peut créer un nouvel objet distant et retourner un objet de
ce type
Il suffit de créer une méthode retournant une nouvelle instance du type
distant dans le type distant
Ramasse miette distribué
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14
Remarques
Remarques
Création d’objets distant
Le client ne peut créer un nouvel objet distant
Le serveur peut créer un nouvel objet distant et retourner un objet de
ce type
Il suffit de créer une méthode retournant une nouvelle instance du type
distant dans le type distant
Ramasse miette distribué
Les objets distants non référencés sont supprimés du serveur
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14
Remarques
Remarques
Création d’objets distant
Le client ne peut créer un nouvel objet distant
Le serveur peut créer un nouvel objet distant et retourner un objet de
ce type
Il suffit de créer une méthode retournant une nouvelle instance du type
distant dans le type distant
Ramasse miette distribué
Les objets distants non référencés sont supprimés du serveur
Pour suivre un nettoyage d’un objet,il doit implémenter l’interface
java.rmi.server.Unreferenced
et coder la méthode public void unreferenced() ;
E. ADAM (University of Valenciennes)
Java Avance
22 janvier 2008
15 / 14