Java RMI et Applications Distribues - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

Java RMI et Applications Distribues

Description:

Pascal Molli, Ma tre de Conf rence, Universit Henri Poincar , Nancy 1 ... renouveller sa p riode de pr t en appelant la m thode dirty() sur le serveur. ... – PowerPoint PPT presentation

Number of Views:282
Avg rating:3.0/5.0
Slides: 50
Provided by: pascal54
Category:

less

Transcript and Presenter's Notes

Title: Java RMI et Applications Distribues


1
Java RMI et Applications Distribuées
  • Remote Method Invocation
  • Pascal Molli, Maître de Conférence, Université
    Henri Poincaré, Nancy 1

2
Applications Distribuées
  • Distribution des données
  • Données distribuées traitement centralisé
  • Distribution du contrôle
  • Données centralisées, contrôle distribué
  • Distribution des utilisateurs
  • Données et contrôle centralisé, utilisateurs
    distribués
  • Un combinaison de tout ça...

3
Problèmes généraux
  • Tolérance aux pannes (reliability,
    fault-tolerance)
  • Un serveur participant à l application crash..
  • Un serveur raconte n importe quoi
  • Un serveur n est plus atteignable (mais n est
    pas crashé) et le redevient
  • Atomicité dans les application réparties...

4
Problèmes généraux
  • Passage à léchelle (scalability)
  • ça marche pour 1 utilisateur et pour 10000 ?
  • ça marche pour un objet et pour 1000000 ?
  • Ça marche pour 1 site et pour 1000 ??
  • Ex Construire un serveur E-Commerce résistant à
    10 000 utilisateurs simultanés ?
  • Application serveur pooling, cache, réplication,
    duplication, monitoring

5
Problèmes généraux
  • Nommage (naming)
  • Un objet Un Id Un état Un comportement
  • Appli non répartie Nommage géré par le langage
    (référence) ou l OS (addressage)
  • Appli répartie nommage explicite ? Dynamique ?
  • Ex Url, DNS, JNDI, X500, LDAP ...

6
Problèmes généraux
  • Intégration de l existant (legacy)
  • Connexion sur toutes les ressources de
    l entreprise
  • Facturation, Gestion de Stock, Workflow
  • Intéropérabilité
  • Transactions réparties

7
Problèmes généraux
  • Déploiement
  • Tout est prêt Comment j installe tous mes
    composant logiciels sur mes différents serveurs
    et clients ?
  • Je change un nom de serveur, ou j en ajoute un
    je recompile tout ? Je redéploie tout ? Ou je
    peux configurer le déploiement ?

8
Problèmes généraux
  • Sécurité
  • Confidentialité
  • Intégrité
  • Droits d accès, Pare-feux
  • Authentification
  • Identification partenaire
  • Non-répudiation
  • Messages authentifiés

9
Problème généraux
Source Withney
  • Security/Logging
  • How many people use your server?
  • How will you know if someone is trying to hack
    into your server?
  • How will you know what they did?
  • If something goes wrong in the server how will
    you know? How will you determine what went wrong?
  • How will you know if a particular client program
    has trouble connecting to your server?
  • Servers need to log client access

10
Problèmes généraux
  • Disponibilité (availability)
  • Un système occupé à faire autre chose (par
    exemple gérer la tolérance aux fautes) n est pas
    disponible !
  • Ex serveur mono-thread
  • 2 appels simultanés sur un même objet distants ?
  • Sérialisé ?
  • Parallèle ?
  • Différentes politiques ?

11
Problèmes Généraux
Source Krakoviac CAR99
  • Coordination Communication Synchronisation
    données partagées
  • Synchronisation
  • Mécanisme élémentaires Messages, événements...
  • Transaction réparties
  • Workflow
  • Communication
  • Synchrone, asynchrone, flots discrets ou continus
  • Information partagées
  • Données centralisées, réparties, dupliquées
    (cohérence des données)

12
Problèmes généraux
  • Développement, génie logiciel
  • Outils pour gérer
  • Conception
  • Déploiement
  • Débogage !!!!

13
Modèle d exécution...
  • Modèle Client-Serveur
  • (RPC, RMI, Corba, Servlet)
  • Modèle de communication par messages
  • MOM, Message oriented middleware,
  • Queue de messages
  • Modèle de communication par événements
  • publish/subscribe, push/pull, JMS
  • Modèle à Composant
  • Bean, EJB
  • Modèle à agents mobiles
  • Agglet, Voyager
  • Modèle à mémoire  virtuelles  partagées.
  • Modèle à espace de tuples(JavaSpaces)
  • Modèle à objets dupliqués

14
Java RMI Généralités
  • Objectifs écrire des applications distribuées.
  • D autres systèmes Corba, Dcom, Entreprise Java
    Beans (EJB).
  • RMI Conçue comme une extension du langage Un
    objet sur une JVM peut avoir une référence sur un
    autre dans une autre JVM.

15
Java RMI généralités.
Celui là !
MyRemoteObject o o.myMethod
16
Premiers Problèmes
  • Tous les objets sont ils accessibles par les
    autres machines ?
  • Toutes les méthodes peuvent elles être appelées ?
  • Comment récupérer un référence sur un objet
    distant ?
  • Et les erreurs liées au réseau ...

17
Premiers Pas ...
  • Déclarer les objets pouvant être appelés de
    manière distante
  • Sous-classe de java.rmi.RemoteObject
  • Déclarer les méthodes pouvant être appelées de
    manière distante
  • déclaration d une interface pour les appels
    distant.
  • Toutes les méthodes distantes peuvent générer des
    exceptions
  • java.rmi.RemoteException

18
Notre exemple Copier un fichier
  • Copier un fichier d une machine à une autre
  • Je lis un fichier sur ma machine je le met dans
    un tampon en mémoire
  • J appelle un méthode d un objet receveur
    distant en passant mon tampon en paramètre,
  • l objet receveur écrit ce paramètre dans un
    fichier sur son système de gestion de fichier...

19
Diagramme de classe...
  • FilePacket La variable intermédiaire.
  • FileSender l émetteur
  • RemoteReceiver le receveur...

20
Diagramme de séquence
Sur le Client
Sur le Serveur...
21
(No Transcript)
22
Problèmes...
23
Accéder à un objet distant ...
  • Le créateur de l objet doit d abord
    externaliser (au moins) 1 objet en lui donnant un
    nom
  • static void Naming.rebind(String,Remote)
  • L utilisateur doit récupérer un référence en
    utilisant ce nom
  • static Object Naming.lookup(String)

24
Nommage...
  • Quest quun nom ? Une URL
  • rmi//java.sun.com2001/root/toto
  • rmi le protocole (propriétaire JRMP Java
    Remote Method Protocol)
  • Java.sun.com2001 le nom ou le remoteReceiver
    tourne
  • root/toto une chaîne de caractères pour
    déterminer l objet...

25
RMI Registry
1 autre JVM
1 JVM
26
1 autre JVM
1 JVM
ATTENTION ! Passage par copie !
27
Objet Remote et non Remote...
  • Paramètre et valeur de retour des méthodes
  • Sous-classe de RemoteObject -gt passage par
    référence
  • Autrement -gt passage par copie !

28
(No Transcript)
29
Nommage RmiRegistry
  • Attention ! Un processus à part est chargé de
    maintenir la table associative ltnom, Remote Refgt
    !
  • C est le rmiregistry !
  • 1- on lance le rmiregistry
  • 2- on lance le RemoteReceiver
  • 3- on lance le FileSender

30
Rmiregistry program
Rebind !
(a,o1) (a/b,o2) (a/c,o3)
o1
o2
Toto o(Toto)Lookup(a/b)
o3
31
Problème de typage !
  • Attention ici 1FP est d une certaine manière
    présent sur deux JVM ! Il faut être sur que les
    deux JVM ont bien le même FilePacket.class !
  • Vérifié par Java à l exécution avec des VID
    (version ID)
  • Problème de déploiement (source d erreur
    classique)

32
Class loader ...
  • Les .Class utilisés par le client peuvent être
    téléchargés sur le serveur si elles n existent
    pas localement par le RMIClassLoader
  • Utilisé pour les paramètres et les valeurs de
    retour de méthodes distantes.
  • Facilite le déploiement, mais PB de sécurité !

33
RMI et Security Manager !
  • Si des classes doivent être téléchargées par le
    réseau, elles doivent obéir aux politiques de
    sécurité
  • Par ex Pas d actions sensibles (accès systèmes)
    et téléchargement à partir de sources de
    confiance (applet host par exemple).
  • Une politique pré-définie le RMISecurityManager..
    .

34
(No Transcript)
35
Security Manager
  • Si aucun Security Manager n est installé
  • Tous les chargement de .class doivent se faire à
    partir du CLASSPATH local.
  • Mauvais pour le déploiement d application
    distribuées (problème fondamental)

36
Policies
  • Un fichier de policies doit être fourni

grant signedBy "signer_names", codeBase "URL"
permission permission_class_name "target_name",
"action", signedBy "signer_names" ....
permission permission_class_name "target_name",
"action", signedBy "signer_names"
java -Djava.security.policypolicy
37
Policies
grant signedBy "Duke" permission
java.io.FilePermission "/tmp/", "read,write"
grant permission java.security.AllPermiss
ion grant signedBy "sysadmin", codeBase
"file/home/sysadmin/" permission
java.security.SecurityPermission
"Security.insertProvider." permission
java.security.SecurityPermission
"Security.removeProvider." permission
java.security.SecurityPermission
"Security.setProperty."
38
Class Loader et Déploiement
  • java -Djava.rmi.server.codebasehttp//host/rmicla
    sses/ LoadClient

import java.rmi.RMISecurityManager import
java.rmi.server.RMIClassLoader public class
LoadClient public static void main()
System.setSecurityManager(new
RMISecurityManager()) try
Class cl RMIClassLoader.loadC
lass("myclient")
Runnable client (Runnable)cl.newInstance()
client.run()
catch (Exception e)
System.out.println("Exception "
e.getMessage())
e.printStackTrace()
39
Stub et Skeleton
  • Comment ça marche en fait ?
  • Pour chaque objet remote, il est nécessaire de
    disposer de deux objets l objet stub et
    l objet skeleton.
  • Le stub représente l objet remote sur le client,
    une sorte de fantome de l objet remote.
  • Le skeleton est là pour réceptionner les appels
    de méthodes distants du client et les propager à
    l implémentation de l objet remote sur le
    serveur.

40
Stub et Skeleton
Client
Serveur
Stub
Skeleton
Remote Reference Layer
Transport Layer
41
Stub et skeleton
  • Bonne nouvelle ils sont générés
  • Mauvaise nouvelle il faut les générer
  • Appel de rmic sur une classe sous-classes de
    remoteObject (RemoteReceiver pour nous).
  • Génère RemoteReceiver_Skel.class
    RemoteReceiver_Stub.class

42
Un peu de code le serveur
public class RemoteReceiver extends
UnicastRemoteObject implements FileReceiver
private String directory public
RemoteReceiver() throws RemoteException
super() public void receiveFile( FilePacket
packet ) throws RemoteException try
packet.writeTo( new FileOutputStream(
packet.getName() ".snt" ) ) catch(
IOException e ) e.printStackTrace()
public static void main( String args )
String usage "Usage java rmi.RemoteReceiver
ltdirectorygt lthostnamegt" try
System.setSecurityManager( new RMISecurityManager(
) ) RemoteReceiver remote new
RemoteReceiver() Naming.rebind( "//" args1
"/receiver", remote ) System.out.println(
"Object is bound" ) catch( Exception e )
e.printStackTrace() System.out.println(
usage )
43
L interface ...
public interface FileReceiver extends Remote
public void receiveFile( FilePacket packet )
throws RemoteException
44
Le client
public class FileSender implements ActionListener
private Frame frame FileReceiver receiver
public FileSender( String hostname ) throws
Exception receiver (FileReceiver)Naming.look
up( "//" hostname "/receiver" ) frame
new Frame( "File Sender" ) frame.setBounds(
100, 100, 80, 80 ) Button b new Button(
"Send File" ) b.addActionListener( this )
frame.add( "Center", b ) frame.setVisible(
true ) public void actionPerformed(
ActionEvent event ) try FileDialog dialog
new FileDialog( frame, "Upload a file",
FileDialog.LOAD ) dialog.setVisible( true
) String filename dialog.getDirectory()
dialog.getFile() FilePacket packet new
FilePacket( filename ) packet.readIn()
receiver.receiveFile( packet ) catch(
Exception e )e.printStackTrace() public
static void main( String args ) throws
Exception String usage "Usage java
rmi.FileSender ltremotehostgt" try
System.setSecurityManager( new RMISecurityManager(
) ) FileSender sender new FileSender(
args0 ) catch( Exception e )
e.printStackTrace() System.out.println(
usage )
45
Déploiement de FileSender ...
  • javac .Java
  • rmic rmi.RemoteReceiver
  • copier les fichiers .class vers le client (à
    moins de bootstrapper ou de faire une applet)
  • démarrer rmiregistry sur le serveur
  • démarrer le serveur java rmi.RemoteReceiver
  • démarrer le client (sur une autre machine) java
    rmi.FileSender

46
Distributed Garbage Collector.
  • Comment libérer les objets référencés dans le
    serveur par des remote-références ?
  • PB
  • Le client n utilise plus
  • Le client se crash (pour une longue période
  • Le client se crashe et réapparait (gloups !)

47
Distributed Garbage Collector
  • Le serveur maintient une liste de références
    remote.
  • Cette référence remote est prêtée par le serveur
    au client pour un temps pré-défini (10 minutes
    par défaut).
  • Le client peut renouveller sa période de prêt en
    appelant la méthode dirty() sur le serveur.

48
RMI and concurrent calls...
  • Attention ! A priori un objet remote peut-être
    accédé par plusieurs client !
  • Auquel cas la JVM du serveur démarre un thread
    par client (distant)
  • Attention à vos  synchronized .

49
Conclusion
  • RMI est une extension distribué du langage Java.
    Ça a l avantage d être simple et préserve les
    qualités du langage (type safety, GC, threads)
  • PBs
  • Ça marche de Java à Java (pas d interopérabilité
    avec d autres applications)
  • C est peu performant et ne supporte pas le
    passage à l échelle
Write a Comment
User Comments (0)
About PowerShow.com