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 724 vues

Publié le

  • Soyez le premier à commenter

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.

×