SlideShare una empresa de Scribd logo
1 de 19
RMI
                  REMOTE
                      METHOD
                           INVOCATION




preemptif@gmail.com             BOUAZZA Zakaria
                                BENZERHOUN Soufiane




                                           2012-2013
Plan

• Introduction à RMI
• Mise en œuvre de RMI
      - Partie Commune (Remote Interface).
      - Partie Serveur (Remote Object).
      - Partie Cliente.
• Sécurité?
• Exemple d’application
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 l'ouverture de
     sockets appropriés.
Schéma illustratif
Rôle des talons
Mise en Oeuvre




Partie Commune
  ___________________________________
               (le REMOTE INTERFACE)
                          INTERFACE
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)
Remote Interface

• Exemple :
Import java.rmi.Remote
Import java.rmi.RemoteException

public interface Hello implements Remote{
  void sayHello() throws RemoteException;
  }
Mise en Oeuvre



Partie
Serveur
Partie Serveur

La Classe distante (Remote Object) :
• Implémenter l’interface distante(Hello).

• Etendre la classe
  java.rmi.server.UnicastRemoteObject

• Appel Local Possible de méthodes.
Remote Object

 Exemple:
 Public class HelloImpl
Public 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
}
}
Partie Serveur

Une 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)
RmiRegistry

                              Objectif:


                                  Lier le stub d’un objet distant à des noms




   Start rmiRegistry
                                            HelloImpl


Rmic pour générer le stub.
      peut être omis depuis
               la version 5
Lancer le Serveur

• Instancier l’objet (HelloImpl)

• L’enregistrer dans le RmiRegistry

HelloImpl obj=new HelloImpl();
Naming.rebind(« rmi://host:port/name »,obj);
Lancer le Serveur
try {
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) …..
Client
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();
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
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.

Más contenido relacionado

La actualidad más candente

Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8Antoine Rey
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaMariem ZAOUALI
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Heithem Abbes
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiersHeithem Abbes
 

La actualidad más candente (20)

Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Soap
SoapSoap
Soap
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiers
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 

Destacado

Destacado (10)

Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
 
Java RMI
Java RMIJava RMI
Java RMI
 
Rmi remote method invocation
Rmi  remote method invocationRmi  remote method invocation
Rmi remote method invocation
 
Chap3 clientsrvr
Chap3 clientsrvrChap3 clientsrvr
Chap3 clientsrvr
 
Nominalisation
NominalisationNominalisation
Nominalisation
 
La nominalisation
La nominalisationLa nominalisation
La nominalisation
 
La cause et la conséquence
La cause et la conséquenceLa cause et la conséquence
La cause et la conséquence
 
La nominalisation verbale
La nominalisation verbaleLa nominalisation verbale
La nominalisation verbale
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlin
 
Chap4 cliserrmi
Chap4 cliserrmiChap4 cliserrmi
Chap4 cliserrmi
 

Similar a Présentation de RMI Java

2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
applications-reparties
applications-repartiesapplications-reparties
applications-repartiesmourad50
 
Un serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutesUn serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutesOlivier ETIENNE
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Amélie DUVERNET
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de baseMariem ZAOUALI
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 

Similar a Présentation de RMI Java (20)

cours6.pdf
cours6.pdfcours6.pdf
cours6.pdf
 
IF-RMI.pdf
IF-RMI.pdfIF-RMI.pdf
IF-RMI.pdf
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Présentation symfony drupal
Présentation symfony drupalPrésentation symfony drupal
Présentation symfony drupal
 
Un serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutesUn serveur rest en moins de 5 minutes
Un serveur rest en moins de 5 minutes
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 

Más de Zakaria Bouazza

Más de Zakaria Bouazza (7)

Glassfish 4 quick guide
Glassfish 4 quick guideGlassfish 4 quick guide
Glassfish 4 quick guide
 
Page viewer sous android
Page viewer sous androidPage viewer sous android
Page viewer sous android
 
Action bar sous Android
Action bar sous AndroidAction bar sous Android
Action bar sous Android
 
Git Memento of basic commands
Git Memento of basic commandsGit Memento of basic commands
Git Memento of basic commands
 
Success insights
Success insightsSuccess insights
Success insights
 
Méthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessMéthodologie 2 Track Unified Process
Méthodologie 2 Track Unified Process
 
Brevets
BrevetsBrevets
Brevets
 

Présentation de RMI Java

  • 1. RMI REMOTE METHOD INVOCATION preemptif@gmail.com BOUAZZA Zakaria BENZERHOUN Soufiane 2012-2013
  • 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. 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 l'ouverture de sockets appropriés.
  • 6. Mise en Oeuvre Partie Commune ___________________________________ (le REMOTE INTERFACE) INTERFACE
  • 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. Remote Interface • Exemple : Import java.rmi.Remote Import java.rmi.RemoteException public interface Hello implements Remote{ void sayHello() throws RemoteException; }
  • 10. Partie Serveur La Classe distante (Remote Object) : • Implémenter l’interface distante(Hello). • Etendre la classe java.rmi.server.UnicastRemoteObject • Appel Local Possible de méthodes.
  • 11. Remote Object Exemple: Public class HelloImpl Public 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. Partie Serveur Une 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. RmiRegistry Objectif: Lier le stub d’un objet distant à des noms Start rmiRegistry HelloImpl Rmic pour générer le stub. peut être omis depuis la version 5
  • 14. Lancer le Serveur • Instancier l’objet (HelloImpl) • L’enregistrer dans le RmiRegistry HelloImpl obj=new HelloImpl(); Naming.rebind(« rmi://host:port/name »,obj);
  • 15. Lancer le Serveur try { 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) …..
  • 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. 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. 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.

Notas del editor

  1. 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.
  2. 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
  3. TCP/IP Java Remote Method Protocol  (JRMP)  is the  Java  technology-specific protocol for looking up and referencing remote objects. 
  4. Interessons nous à la manière de mettre en œuvre concrètement une application RMI
  5. 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
  6. 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.
  7. 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.