Java Avance
R.M.I.
Emmanuel ADAM
LAMIH UMR CNRS 8530
Universit´e de Valenciennes et du Hainaut-Cambr´esis
FRANCE
25 mars 2008
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 1 / 15
Plan
1Pr´esentation
2Pr´esentation
3Architecture RMI
4Architecture RMI
5Cr´eation d’un application distribu´ee
6Recherche de classes accessoires
7S´ecurit´e
8Remarques
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 2 / 15
Pr´esentation
R.M.I
package java.rmi.*
Pr´esentation
R.M.I. = Remote Method Invocation : invoquer `a distance des
m´ethodes applications Java distribu´ees.
applications distribu´ees classes distribu´ees sur un r´eseau
R.M.I. R.P.C. (uniquement transfert de donn´ees)
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´erabilit´e entre
RMI et CORBA.
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 3 / 15
Pr´esentation
R.M.I
package java.rmi.*
Pr´esentation
Les m´ethodes des objets distants peuvent ˆetre invoqu´ees depuis des
JVM diff´erentes / distantes via le r´eseau.
RMI assure la communication entre le serveur et le client via TCP/IP,
transparent pour le d´eveloppeur.
RMI utilise des sockets et RMP (Remote Method Protocol).
Gestion de la s´ecurit´e par la classe RMISecurityManager
Gestion de la m´emoire distribu´ee par le DGC (Distibuted Gabage
Collector).
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 4 / 15
Architecture RMI
Architecture
package java.rmi.*
Principe
Interfa¸cage : Le code appelant doit savoir ce qu’il appelle et en
poss´eder une interface
Le code appelant doit savoir ce qu’il appelle et en poss´eder une
interface et une impl´ementation de type proxy
Le code appel´e doit respecter l’interface et en poss´eder une
impl´ementation fonctionnelle.
Le client appelle une m´ethode de son ”proxy”
RMI envoit la requˆete `a l’impl´ementation cˆot´e serveur
Les valeurs de retour sont transmise au proxy client puis au client
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 5 / 15
Architecture RMI
Architecture
package java.rmi.*
Les 3 couches
Couche des Stubs (relais du cˆot´e client) et Skeletons (relais du cˆot´e
serveur) : interface entre l’application et le service RMI
couche de r´ef´erence distante (Remote Reference Layer) :
permet l’obtention d’une r´ef´erence `a l’objet distant `a partir de la
r´ef´erence locale (le stub).
assure une r´ef´erence persistante vers des objets distants (reconnexion
´eventuelle).
N´ecessit´e 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´etaire R.M.P. (Remote Method Protocol).
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 6 / 15
Cr´eation d’un application distribu´ee
Principes de mise en oeuvre
package java.rmi.*
Interface
Il est n´ecessaire de d´efinir l’interface de l’objet distant et d´ecrire les
m´ethodes appelables
L’interface doit ´etendre l’interface Remote
Les m´ethodes appelables doivent pouvoir propager l’exception
RemoteException
Les objets retourn´es doivent ˆetre Serializable
i m p o r t j a v a . rmi . Remote ;
i m p o r t j a v a . rmi . Remo t e E x c e ption ;
p u b l i c i n t e r f a c e T ru c D i s t a n t e x t e n d s Remote
{
S t r i n g donneChaine ( ) throws RemoteExc e p t i o n ;
}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 7 / 15
Cr´eation d’un application distribu´ee
Principes de mise en oeuvre
Objet Distant
Objet Distant
Le nom de l’objet impl´emenant a pour suffixe Impl (convention)
La classe ´etendre 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 e x t e n d s Un i ca s t R e m o t e O b j e ct i mple m e nts
T r u c D i s t a n t {
S t r i n g c h a in e ;
p r o t e c t e d T r u c D i s t a n t I m p l ( ) t hrows RemoteEx c e p t i o n {
c h a i n e = ” cou cou du s e r v e u r ! ;}
p u b l i c S t r i n g donneChaine ( ) throws RemoteExc e p t i o n
{r e t u r n c h a i n e ; }
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 8 / 15
Cr´eation d’un application distribu´ee
Principes de mise en oeuvre
Relais
Relais
Le client (stub) (avant java 1.5)
Le client appelle une m´ethode par le relais plac´e chez le client
Repr´esentant local de l’objet appel´e
Il emballe les donn´ees `a emettre et eballe les donn´ees re¸cues
communique par le skeleton
Le stub n’existe plus depuis java 1.5
Le serveur (skeleton) (avant java 1.4)
il d´eballe les donn´ees re¸cues et les transmet `a l’objet local
Il emballe les donn´ees de retour
Le skeleton n’existe plus depuis java 1.4
G´en´eration automatique des stubs et skeleton par l’utilitaire rmic sur
l’impl´ementation compil´ee
rmic TrucDistantImpl
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 9 / 15
Cr´eation d’un application distribu´ee
Principes de mise en oeuvre
Enregistrement / Recherche : Naming
Enregistrement / Recherche : Naming
La classe Naming :
enregistrer un objet serveur
diffuser des r´ef´erences `a 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´ej`a donn´e
unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse
donn´ee
list() : retourne tous les enregistrements d’objets
lookup(adresse) : retourne une ef´erence `a l’objet distant sp´ecifi´e dans
adresse
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 10 / 15
Cr´eation d’un application distribu´ee
Principes de mise en oeuvre
Exemple d’Enregistrement
D´emarrer l’annuaire : lancer rmiregistry
// Le s e r v e u r :
p u b l i c c l a s s L e S e r v e u r {
p u b l i c s t a t i c v o id main ( S t r i n g [ ] a r g s )
{
t r y {
// C r ´e 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 an s l a n n u a i r e
j a v a . rmi . Naming .b i n d (” rmi : / / 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 ´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 x c e p t i o n l e v ´e e : + e . g etMessage ( ) ) ;
}}}
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 11 / 15
Cr´eation d’un application distribu´ee
Principes de mise en oeuvre
Exemple de Recherche : Naming
// Le c l i e n t :
p u b l i c c l a s s L e C l i e n t {
p u b l i c s t a t i c v o id main ( S t r i n g [ ] a r g s ) {
t r y {
// r ´e c u p ´e r e r un o b j e t de ty pe T r u c Di st an 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 mi . Naming .l o o k u p ( rmi : / /
l o c a l h o s t /UnTruc ) ;
System . o ut . p r i n t l n ( c h ai n e r e c u p e r e e : + t r u c . donneChaine ( ) ) ;
}
c a t c h ( E x c e p t i o n e ) {System . out . p r i n t l n ( e ) ; }
} }
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 12 / 15
Recherche de classes accessoires
Recherche de classes
Classes ’accessoires’
Recherche de classes
Un appel `a une m´ethode d’un objet distant peut n´ecessiter des classes
non pr´esentes chez le client
il faut les t´el´echager !
La classe RMIClassLoader est appel´ee automatiquement pour
t´el´echarger les classes manquantes
Ces classes doivent ˆetre Serializable
Il faut indiquer `a Java o`u t´el´echarger les classes manquantes dans le
lancement du Serveur
Utilisation du param`etre java.rmi.server.codebase :
java -Djava.rmi.server.codebase=http: //172.16.12.23/lesClasses/
LeServeur
L’adresse peut ˆetre de type ftp ; possibilit´e d’indiquer un no de port
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 13 / 15
ecurit´e
Strat´egie de s´ecurit´e
S´ecurit´e
Le chargement dynamique de classe peut ˆetre refus´e pour des raisons
de s´ecurit´e.
Naming retourne une erreur de type AccessControlException
Utilisation d’un gestionnaire de s´ecurit´e : RMISecurityManager.
System.setSecurityManager(new RMISecurityManager()) ;
D´efinition des permissions dans un fichier .policy lu
automatiquement
exemple de contenu :
grant {
permission java.security.Allpermission;
}
Signaler `a java d’utiliser le fichier :
java -Djava.security.policy=chemin /monFichier.policy LeServeur
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 14 / 15
Remarques
Remarques
Cr´eation d’objets distant
Le client ne peut cr´eer un nouvel objet distant
Le serveur peut cr´eer un nouvel objet distant et retourner un objet de
ce type
Il suffit de cr´eer une m´ethode retournant une nouvelle instance du type
distant dans le type distant
Ramasse miette distribu´e
Les objets distants non r´ef´erenc´es sont supprim´es du serveur
Pour suivre un nettoyage d’un objet,il doit impl´ementer l’interface
java.rmi.server.Unreferenced
et coder la m´ethode public void unreferenced() ;
E. ADAM (University of Valenciennes) Java Avance 25 mars 2008 15 / 15
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !