RMI                  REMOTE                      METHOD                           INVOCATIONpreemptif@gmail.com           ...
Plan• Introduction à RMI• Mise en œuvre de RMI      - Partie Commune (Remote Interface).      - Partie Serveur (Remote Obj...
RMI? C’est Quoi?• RMI : Remote Method Invocation                    Depuis Java 1.1• Cet API propose :  – GC distribué.  –...
Schéma illustratif
Rôle des talons
Mise en OeuvrePartie Commune  ___________________________________               (le REMOTE INTERFACE)                     ...
Remote Interface• Structure de cette interface:      * Hériter de java.rmi.Remote et      * Les méthodes lèvent une       ...
Remote Interface• Exemple :Import java.rmi.RemoteImport java.rmi.RemoteExceptionpublic interface Hello implements Remote{ ...
Mise en OeuvrePartieServeur
Partie ServeurLa Classe distante (Remote Object) :• Implémenter l’interface distante(Hello).• Etendre la classe  java.rmi....
Remote Object Exemple: Public class HelloImplPublic class HelloImpl          extends UnicastRemoteObject implements Hello ...
Partie ServeurUne classe pour lançer le serveur:• Créer et installer le gestionnaire de  sécurité [Optionnel]• Créer au mo...
RmiRegistry                              Objectif:                                  Lier le stub d’un objet distant à des ...
Lancer le Serveur• Instancier l’objet (HelloImpl)• L’enregistrer dans le RmiRegistryHelloImpl obj=new HelloImpl();Naming.r...
Lancer le Serveurtry {HelloImpl obj = new HelloImpl(); La classe qui lance le serveur :Naming.rebind("rmi://localhost/he",...
Client
Client  • Obtenir la référence vers l’objet désiré       Avec     Naming.lookup("rmi://localhost/he");           Retourne ...
Sécurité?• Pourquoi en parler?System.setSecurityManager(new RMISecurityManager());Un policy file:grant{            grant  ...
Faisons le point.Compatibilité? Java uniquement. Contrairement à CORBA.Charger des classes? Oui, en spécifiant le codebase...
Prochain SlideShare
Chargement dans…5
×

Présentation de RMI Java

2 588 vues

Publié le

0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 588
Sur SlideShare
0
Issues des intégrations
0
Intégrations
461
Actions
Partages
0
Téléchargements
137
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • RMI est une Api, un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine locale (objet locaux). Ces machines doivent possèder une machine virtuelle( Compatible Java), et là déjà on parle de compatibilité (les applications distantes doivent tourner sous java), Travaillant toujours dans un environnement C/S. C'est un peu du "RPC orienté objet“, Un objet local demande une fonctionnalité à un objet distant. Il est disponible depuis la version 1.1, donc un peu ancien.
  • Architecture principale des composants de RMI , consiste : ______________________________________________________________________________________ Serveur: qui instancie notre objet L'objet est accesible par ce qu'on désigne le RMIREgsitry qu'on va détailler par la suite, qui retourne un talon. L ’objet skeleton est créé, celui-ci crée le port de communication et maintient une référence vers l'objet serveur __________________ il localise l'objet distant grâce à un service de désignation : le registre RMI 2. il obtient dynamiquement une image virtuelle de l'objet distant (appelée stub ou souche en français). Le stub possède exactement la même interface que l'objet distant.Celui ci transforme l'appel de la méthode distante en une suite d'octets, c'est ce que l'on appelle la sérialisation, puis les transmet au serveur instanciant l'objet sous forme de flot de données. On dit que le stub "marshalise" les arguments de la méthode distante. Le squelette instancié sur le serveur "désérialise" les données envoyées par le stub (on dit qu'il les "démarshalise"), puis appelle la méthode en local 5. Le squelette récupère les données renvoyées par la méthode (type de base, objet ou exception) puis les marshalise 6. le stub démarshalise les données provenant du squelette et les transmet à l'objet faisant l'appel de méthode à distance
  • TCP/IP Java Remote Method Protocol  (JRMP)  is the  Java  technology-specific protocol for looking up and referencing remote objects. 
  • Interessons nous à la manière de mettre en œuvre concrètement une application RMI
  • On instancie l'objet et on l'enregistre dans le RMIRegistry (son stub) avec la classe Naming et la méthode rebind Naming fournit des méthodes pour enregistrer et obtenir des references à des objets distants. rebind permet d'écraser, alors que bind peut générer un RemoteException
  • Le client obtient un objet de type Remote et le caster au type de l'interface commune , à travers la méthode lookup en spécifiant l'url. he est le nom qu'on lui a attribué côté serveur.
  • C'est du CORBA allégé avec ses avantages (c'est plus simple) et ses inconvénients (tout doit être Java coté client comme coté serveur). Par contre RMI peut charger des classes à l'exécution, du serveur vers le client ou dans l'autre sens contrairement à CORBA.
  • Présentation de RMI Java

    1. 1. RMI REMOTE METHOD INVOCATIONpreemptif@gmail.com BOUAZZA Zakaria BENZERHOUN Soufiane 2012-2013
    2. 2. Plan• Introduction à RMI• Mise en œuvre de RMI - Partie Commune (Remote Interface). - Partie Serveur (Remote Object). - Partie Cliente.• Sécurité?• Exemple d’application
    3. 3. RMI? C’est Quoi?• RMI : Remote Method Invocation Depuis Java 1.1• Cet API propose : – GC distribué. – Même syntaxe d’utilisation pour un objet distant qu’un objet local. – Gestion de l’objet à travers une interface. interface – Liaison avec les couches transport et louverture de sockets appropriés.
    4. 4. Schéma illustratif
    5. 5. Rôle des talons
    6. 6. Mise en OeuvrePartie Commune ___________________________________ (le REMOTE INTERFACE) INTERFACE
    7. 7. Remote Interface• Structure de cette interface: * Hériter de java.rmi.Remote et * Les méthodes lèvent une java.rmi.RemoteException exception. ____________Passage d’objets en paramètre?• Les objets locaux sont passés par valeur (Shallow Copy) – Etre sérialisables (étendent l’interface java.io.Serializable)• Les objets distants sont passés par référence et sont désignés par leur interface (Deep Copy)
    8. 8. Remote Interface• Exemple :Import java.rmi.RemoteImport java.rmi.RemoteExceptionpublic interface Hello implements Remote{ void sayHello() throws RemoteException; }
    9. 9. Mise en OeuvrePartieServeur
    10. 10. Partie ServeurLa Classe distante (Remote Object) :• Implémenter l’interface distante(Hello).• Etendre la classe java.rmi.server.UnicastRemoteObject• Appel Local Possible de méthodes.
    11. 11. Remote Object Exemple: Public class HelloImplPublic class HelloImpl extends UnicastRemoteObject implements Hello extends UnicastRemoteObject{ implements Hello public void HelloImpl throws RemoteException{ { super(); } Public void sayHello() { Public void sayHello() throws RemoteException { System.out.println(« Hello World World »); System.out.println(« Hello »); } } //Autres méthodes locales possibles}}
    12. 12. Partie ServeurUne classe pour lançer le serveur:• Créer et installer le gestionnaire de sécurité [Optionnel]• Créer au moins une instance de la classe serveur ( HelloImpl )• Enregistrer au moins une instance dans le serveur de noms (RmiRegistry)
    13. 13. RmiRegistry Objectif: Lier le stub d’un objet distant à des noms Start rmiRegistry HelloImplRmic pour générer le stub. peut être omis depuis la version 5
    14. 14. Lancer le Serveur• Instancier l’objet (HelloImpl)• L’enregistrer dans le RmiRegistryHelloImpl obj=new HelloImpl();Naming.rebind(« rmi://host:port/name »,obj);
    15. 15. Lancer le Serveurtry {HelloImpl obj = new HelloImpl(); La classe qui lance le serveur :Naming.rebind("rmi://localhost/he", obj); try { HelloImpl obj = new HelloImpl();System.out.println("Serveur lancé"); Naming.rebind("rmi://localhost/he", obj); System.out.println("Serveur lancé");}} catch (RemoteException e) ….. catch (RemoteException e) …..
    16. 16. Client
    17. 17. Client • Obtenir la référence vers l’objet désiré Avec Naming.lookup("rmi://localhost/he"); Retourne un Remote => Hello • Appeler méthodes Hello p=(Hello)Hello p=(Hello) Naming.lookup("rmi://localhost/he");p.sayHello(); Naming.lookup("rmi://localhost/he"); p.sayHello();
    18. 18. Sécurité?• Pourquoi en parler?System.setSecurityManager(new RMISecurityManager());Un policy file:grant{ grant permission java.net.SocketPermission { "*:80", "connect"; permission java.net.SocketPermission}; "*:80", "connect"; }; java -Djava.security.policy=policyfilename
    19. 19. Faisons le point.Compatibilité? Java uniquement. Contrairement à CORBA.Charger des classes? Oui, en spécifiant le codebase.Lenteur? Coûts de la sérialisation des paramètres…Charger des classes distantes? Oui.

    ×