Java Avance
Transcription
Java Avance
Java Avance R.M.I. Emmanuel ADAM LAMIH UMR CNRS 8530 Université de Valenciennes et du Hainaut-Cambrésis FRANCE 22 janvier 2008 E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 1 / 14 Plan 1 Présentation 2 Présentation 3 Architecture RMI 4 Architecture RMI 5 Création d’un application distribuée 6 Recherche de classes accessoires 7 Sécurité E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 2 / 14 Présentation R.M.I package java.rmi.* Présentation E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 3 / 14 Présentation R.M.I package java.rmi.* Présentation R.M.I. = Remote Method Invocation : invoquer à distance des méthodes ⇒ applications Java distribuées. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 3 / 14 Présentation R.M.I package java.rmi.* Présentation R.M.I. = Remote Method Invocation : invoquer à distance des méthodes ⇒ applications Java distribuées. applications distribuées ⇒ classes distribuées sur un réseau E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 3 / 14 Présentation R.M.I package java.rmi.* Présentation R.M.I. = Remote Method Invocation : invoquer à distance des méthodes ⇒ applications Java distribuées. applications distribuées ⇒ classes distribuées sur un réseau R.M.I. R.P.C. (uniquement transfert de données) E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 3 / 14 Présentation R.M.I package java.rmi.* Présentation R.M.I. = Remote Method Invocation : invoquer à distance des méthodes ⇒ applications Java distribuées. applications distribuées ⇒ classes distribuées sur un réseau R.M.I. R.P.C. (uniquement transfert de données) R.M.I. ≺ CORBA (Common Object Request Broker Architecture) : standard par l’OMG (Object Management Group), fonctionne sous plusieurs langages ; E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 3 / 14 Présentation R.M.I package java.rmi.* Présentation R.M.I. = Remote Method Invocation : invoquer à distance des méthodes ⇒ applications Java distribuées. applications distribuées ⇒ classes distribuées sur un réseau R.M.I. R.P.C. (uniquement transfert de données) 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érabilité entre RMI et CORBA. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 3 / 14 Présentation R.M.I package java.rmi.* Présentation E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 4 / 14 Présentation R.M.I package java.rmi.* Présentation Les méthodes des objets distants peuvent être invoquées depuis des JVM différentes / distantes via le réseau. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 4 / 14 Présentation R.M.I package java.rmi.* Présentation Les méthodes des objets distants peuvent être invoquées depuis des JVM différentes / distantes via le réseau. RMI assure la communication entre le serveur et le client via TCP/IP, transparent pour le développeur. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 4 / 14 Présentation R.M.I package java.rmi.* Présentation Les méthodes des objets distants peuvent être invoquées depuis des JVM différentes / distantes via le réseau. RMI assure la communication entre le serveur et le client via TCP/IP, transparent pour le développeur. RMI utilise des sockets et RMP (Remote Method Protocol). E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 4 / 14 Présentation R.M.I package java.rmi.* Présentation Les méthodes des objets distants peuvent être invoquées depuis des JVM différentes / distantes via le réseau. RMI assure la communication entre le serveur et le client via TCP/IP, transparent pour le développeur. RMI utilise des sockets et RMP (Remote Method Protocol). Gestion de la sécurité par la classe RMISecurityManager E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 4 / 14 Présentation R.M.I package java.rmi.* Présentation Les méthodes des objets distants peuvent être invoquées depuis des JVM différentes / distantes via le réseau. RMI assure la communication entre le serveur et le client via TCP/IP, transparent pour le développeur. RMI utilise des sockets et RMP (Remote Method Protocol). Gestion de la sécurité par la classe RMISecurityManager Gestion de la mémoire distribuée par le DGC (Distibuted Gabage Collector). E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 4 / 14 Architecture RMI Architecture package java.rmi.* Principe E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Principe Interfaçage : Le code appelant doit savoir ce qu’il appelle et en posséder une interface E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Principe Interfaçage : Le code appelant doit savoir ce qu’il appelle et en posséder une interface Le code appelant doit savoir ce qu’il appelle et en posséder une interface et une implémentation de type proxy E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Principe Interfaçage : Le code appelant doit savoir ce qu’il appelle et en posséder une interface Le code appelant doit savoir ce qu’il appelle et en posséder une interface et une implémentation de type proxy Le code appelé doit respecter l’interface et en posséder une implémentation fonctionnelle. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Principe Interfaçage : Le code appelant doit savoir ce qu’il appelle et en posséder une interface Le code appelant doit savoir ce qu’il appelle et en posséder une interface et une implémentation de type proxy Le code appelé doit respecter l’interface et en posséder une implémentation fonctionnelle. Le client appelle une méthode de son ”proxy” E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Principe Interfaçage : Le code appelant doit savoir ce qu’il appelle et en posséder une interface Le code appelant doit savoir ce qu’il appelle et en posséder une interface et une implémentation de type proxy Le code appelé doit respecter l’interface et en posséder une implémentation fonctionnelle. Le client appelle une méthode de son ”proxy” RMI envoit la requête à l’implémentation côté serveur E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Principe Interfaçage : Le code appelant doit savoir ce qu’il appelle et en posséder une interface Le code appelant doit savoir ce qu’il appelle et en posséder une interface et une implémentation de type proxy Le code appelé doit respecter l’interface et en posséder une implémentation fonctionnelle. Le client appelle une méthode de son ”proxy” RMI envoit la requête à l’implémentation côté serveur Les valeurs de retour sont transmise au proxy client puis au client E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 5 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). Nécessité de lancer le programme rmiregistery. (ou la commande java.rmi.registry.LocateRegistry.createRegistry(1099) ; ) E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). Nécessité de lancer le programme rmiregistery. (ou la commande java.rmi.registry.LocateRegistry.createRegistry(1099) ; ) La couche Transport E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). Nécessité 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 E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). Nécessité 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. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). Nécessité 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. E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Architecture RMI Architecture package java.rmi.* Les 3 couches Couche des Stubs (relais du côté client) et Skeletons (relais du côté serveur) : interface entre l’application et le service RMI couche de référence distante (Remote Reference Layer) : permet l’obtention d’une référence à l’objet distant à partir de la référence locale (le stub). assure une référence persistante vers des objets distants (reconnexion éventuelle). Nécessité 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étaire R.M.P. (Remote Method Protocol). E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 6 / 14 Création d’un application distribuée Principes de mise en oeuvre package java.rmi.* Interface Il est nécessaire de définir l’interface de l’objet distant et décrire les méthodes appelables L’interface doit étendre l’interface Remote Les méthodes appelables doivent pouvoir propager l’exception RemoteException Les objets retournés doivent être Serializable i m p o r t j a v a . r m i . Remote ; import j a v a . rmi . RemoteException ; p u b l i c i n t e r f a c e T r u c D i s t a n t e x t e n d s Remote { S t r i n g donneChaine ( ) throws RemoteException ; } E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 7 / 14 Création d’un application distribuée Principes de mise en oeuvre Objet Distant Objet Distant Le nom de l’objet implémenant a pour suffixe Impl (convention) La classe étendre 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 extends UnicastRemoteObject implements TrucDistant { String chaine ; protected TrucDistantImpl ( ) throws RemoteException { c h a i n e = ” c o u c o u du s e r v e u r ! ” ; } p u b l i c S t r i n g donneChaine ( ) { return chaine ; } E. ADAM (University of Valenciennes) throws RemoteException Java Avance 22 janvier 2008 8 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 Le serveur (skeleton) (avant java 1.4) E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 Le serveur (skeleton) (avant java 1.4) il déballe les données reçues et les transmet à l’objet local E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 Le serveur (skeleton) (avant java 1.4) il déballe les données reçues et les transmet à l’objet local Il emballe les données de retour E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 Le serveur (skeleton) (avant java 1.4) il déballe les données reçues et les transmet à l’objet local Il emballe les données de retour Le skeleton n’existe plus depuis java 1.4 E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 Le serveur (skeleton) (avant java 1.4) il déballe les données reçues et les transmet à l’objet local Il emballe les données de retour Le skeleton n’existe plus depuis java 1.4 Génération automatique des stubs et skeleton par l’utilitaire rmic sur l’implémentation compilée E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Relais Relais Le client (stub) (avant java 1.5) Le client appelle une méthode par le relais placé chez le client Représentant local de l’objet appelé Il emballe les données à emettre et déballe les données reçues communique par le skeleton Le stub n’existe plus depuis java 1.5 Le serveur (skeleton) (avant java 1.4) il déballe les données reçues et les transmet à l’objet local Il emballe les données de retour Le skeleton n’existe plus depuis java 1.4 Génération automatique des stubs et skeleton par l’utilitaire rmic sur l’implémentation compilée rmic TrucDistantImpl E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 9 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à des objets d’un registre distant (comme rmiregistry, JNDI, ...). E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à 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 E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à 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 E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à 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éjà donné E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à 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éjà donné unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse donnée E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à 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éjà donné unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse donnée list() : retourne tous les enregistrements d’objets E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Enregistrement / Recherche : Naming Enregistrement / Recherche : Naming La classe Naming : enregistrer un objet serveur diffuser des références à 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éjà donné unbind(adresse, objet) : desinscrit l’objet de l’annuaire sous l’adresse donnée list() : retourne tous les enregistrements d’objets lookup(adresse) : retourne une référence à l’objet distant spécifié dans adresse E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 10 / 14 Création d’un application distribuée Principes de mise en oeuvre Exemple d’Enregistrement Démarrer l’annuaire : lancer rmiregistry // Le s e r v e u r : public cla ss LeServeur { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { try { // C r é 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 a n s l ’ a n n u a i r e j a v a . r m i . Naming . b i n d ( ” r m i : / / 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 é . ” ) ; } catch ( Exception 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 . g e t M e s s a g e ( ) ) ; } } } E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 11 / 14 Création d’un application distribuée Principes de mise en oeuvre Exemple de Recherche : Naming // Le c l i e n t : public class LeClient { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { try { // r é c u p é r e r un o b j e t de t y p e T r u c D i s t a n 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 m i . Naming . l o o k u p ( ” r m i : / / l o c a l h o s t / UnTruc ” ) ; System . o u t . p r i n t l n ( ” c h a i n e r e c u p e r e e : ” + t r u c . d o n n e C h a i n 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 ) ; } } } E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 12 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! La classe RMIClassLoader est appelée automatiquement pour télécharger les classes manquantes E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! La classe RMIClassLoader est appelée automatiquement pour télécharger les classes manquantes Ces classes doivent être Serializable E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! La classe RMIClassLoader est appelée automatiquement pour télécharger les classes manquantes Ces classes doivent être Serializable Il faut indiquer à Java où télécharger les classes manquantes dans le lancement du Serveur E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! La classe RMIClassLoader est appelée automatiquement pour télécharger les classes manquantes Ces classes doivent être Serializable Il faut indiquer à Java où télécharger les classes manquantes dans le lancement du Serveur Utilisation du paramètre java.rmi.server.codebase : E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! La classe RMIClassLoader est appelée automatiquement pour télécharger les classes manquantes Ces classes doivent être Serializable Il faut indiquer à Java où télécharger les classes manquantes dans le lancement du Serveur Utilisation du paramètre java.rmi.server.codebase : java -Djava.rmi.server.codebase=http: //172.16.12.23/lesClasses/ LeServeur E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Recherche de classes accessoires Recherche de classes Classes ’accessoires’ Recherche de classes Un appel à une méthode d’un objet distant peut nécessiter des classes non présentes chez le client il faut les téléchager ! La classe RMIClassLoader est appelée automatiquement pour télécharger les classes manquantes Ces classes doivent être Serializable Il faut indiquer à Java où télécharger les classes manquantes dans le lancement du Serveur Utilisation du paramètre java.rmi.server.codebase : java -Djava.rmi.server.codebase=http: //172.16.12.23/lesClasses/ LeServeur L’adresse peut être de type ftp ; possibilité d’indiquer un no de port E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 13 / 14 Sécurité Stratégie de sécurité Sécurité Le chargement dynamique de classe peut être refusé pour des raisons de sécurité. Naming retourne une erreur de type AccessControlException E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 14 / 14 Sécurité Stratégie de sécurité Sécurité Le chargement dynamique de classe peut être refusé pour des raisons de sécurité. Naming retourne une erreur de type AccessControlException Utilisation d’un gestionnaire de sécurité : RMISecurityManager. System.setSecurityManager(new RMISecurityManager()) ; E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 14 / 14 Sécurité Stratégie de sécurité Sécurité Le chargement dynamique de classe peut être refusé pour des raisons de sécurité. Naming retourne une erreur de type AccessControlException Utilisation d’un gestionnaire de sécurité : RMISecurityManager. System.setSecurityManager(new RMISecurityManager()) ; Définition des permissions dans un fichier .policy lu automatiquement E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 14 / 14 Sécurité Stratégie de sécurité Sécurité Le chargement dynamique de classe peut être refusé pour des raisons de sécurité. Naming retourne une erreur de type AccessControlException Utilisation d’un gestionnaire de sécurité : RMISecurityManager. System.setSecurityManager(new RMISecurityManager()) ; Définition des permissions dans un fichier .policy lu automatiquement exemple de contenu : grant { permission java.security.Allpermission; } E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 14 / 14 Sécurité Stratégie de sécurité Sécurité Le chargement dynamique de classe peut être refusé pour des raisons de sécurité. Naming retourne une erreur de type AccessControlException Utilisation d’un gestionnaire de sécurité : RMISecurityManager. System.setSecurityManager(new RMISecurityManager()) ; Définition des permissions dans un fichier .policy lu automatiquement exemple de contenu : grant { permission java.security.Allpermission; } Signaler à java d’utiliser le fichier : java -Djava.security.policy=chemin / monFichier.policy LeServeur E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 14 / 14 Remarques Remarques Création d’objets distant E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14 Remarques Remarques Création d’objets distant Le client ne peut créer un nouvel objet distant E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14 Remarques Remarques Création d’objets distant Le client ne peut créer un nouvel objet distant Le serveur peut créer un nouvel objet distant et retourner un objet de ce type E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14 Remarques Remarques Création d’objets distant Le client ne peut créer un nouvel objet distant Le serveur peut créer un nouvel objet distant et retourner un objet de ce type Il suffit de créer une méthode retournant une nouvelle instance du type distant dans le type distant E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14 Remarques Remarques Création d’objets distant Le client ne peut créer un nouvel objet distant Le serveur peut créer un nouvel objet distant et retourner un objet de ce type Il suffit de créer une méthode retournant une nouvelle instance du type distant dans le type distant Ramasse miette distribué E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14 Remarques Remarques Création d’objets distant Le client ne peut créer un nouvel objet distant Le serveur peut créer un nouvel objet distant et retourner un objet de ce type Il suffit de créer une méthode retournant une nouvelle instance du type distant dans le type distant Ramasse miette distribué Les objets distants non référencés sont supprimés du serveur E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14 Remarques Remarques Création d’objets distant Le client ne peut créer un nouvel objet distant Le serveur peut créer un nouvel objet distant et retourner un objet de ce type Il suffit de créer une méthode retournant une nouvelle instance du type distant dans le type distant Ramasse miette distribué Les objets distants non référencés sont supprimés du serveur Pour suivre un nettoyage d’un objet,il doit implémenter l’interface java.rmi.server.Unreferenced et coder la méthode public void unreferenced() ; E. ADAM (University of Valenciennes) Java Avance 22 janvier 2008 15 / 14