Sockets/rmi - Y. Bekkers1 Applications réparties en Java Paquetage java.net – Sockets Objets distants transparents – RMI Yves Bekkers.

Slides:



Advertisements
Présentations similaires
Le mécanisme des exceptions
Advertisements

Plan de l’enseignement
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Harmonisation AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Retour sur RMI.
1 Plan de lenseignement Cours Introduction au réseau via les objets distants (Application à RMI) Ce que cache RMI : programmation socket – mode connecté
1 I. Bus logiciel ? Mireille Blay-Fornarino Daprès et Sacha Et (cf. références en bas.
Des sockets à RMI Programmation réseau versus programmation objet
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Des sockets à RMI. Pourquoi ? Maturation de la technologie orientée objet –ADA, Modula –Smalltalk, C++, Java Maturation des communications Client- Serveur.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Introduction aux applications réparties
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Programmer en JAVA par Tama
Programmation Objet en JAVA Cours 9 : Réseau R. M

Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Java Remote Method Invocation (RMI)
Labview Programmation réseau Communication par sockets
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Cours 12 Contenu du cours : RMI : a quoi ca sert Comment ca marche
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Java et les appels de méthodes distantes
Procédures et fonctions
Présentation de CORBA et de IIOP
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Systèmes distribués Plusieurs technologies existent : Les sockets
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 10 Accès distant aux bases de données.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Les sockets.
Cours du 5 novembre.
Les RPC remote procedure call
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Java RMI: Remote Method Invocation
Les Servlets Présentation Cycle de vie Principe de fonctionnement
Service de vidéo à la demande Projet Tutoré : Groupe C3 Université Paris 5.
1 Complément JAVA les assertions. 2 lan Tests et erreurs Assertions en Java Utilisation Bonne pratique des assertions.
Architecture Client/Serveur
Fabrice Huet Systèmes Distribués Fabrice Huet
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Java Remote Method Invocation
JAVA Jean-Jacques LE COZ. Présentation Langage de l'éditeur Sun Microsystems Divisé en trois parties Java standard SDK Java Entreprise J2EE Java Micro.
Création d’un site WEB 1 – Un site WEB c’est quoi ? 2 – Questions à se poser avant la construction d’un site WEB 3 – Principes de fonctionnement d’un site.
Chapitre10 Prise en charge des utilisateurs distants Module S41.
Design Patterns.  SIDAOUI Abdelfahem  
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
Les outils de tests 1 1 CHAKI Abderrazak - ETIENNE Jonathan - TOUMI Nacereddine - VACHER Nicolas.
V- Identification des ordinateurs sur le réseau??? ? ? ? ?
Applications distribuées Introduction Jean-Jacques LE COZ.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 6 Support de cours rédigé par Bernard COFFIN Université.
Initiation aux bases de données et à la programmation événementielle Outil de création des tables Support de TD rédigé par Bernard COFFIN Université Paris.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
Développement d’application avec base de données Semaine 9 : Code First avec Entité Framework Automne 2015 Tous le matériel provient de :
Introduction à la Programmation Orientée Objet H.GATI.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
INSCRIPTIONS SPORTIVES
Mise en correspondance des logins entre PRONOTE et ATRIUM Démarche pas à pas V5 –
Transcription de la présentation:

sockets/rmi - Y. Bekkers1 Applications réparties en Java Paquetage java.net – Sockets Objets distants transparents – RMI Yves Bekkers

sockets/rmi - Y. Bekkers2 Application répartie sur un réseau Deux applications communiquent via un réseau –L'application serveur Créé un port de communication Créé des services Attend les demandes de service effectuées par les clients Réponds aux demandes en envoyant des valeurs –L'application client Se connecte au port de communication Effectue des demandes de service par l’envoie de valeurs sur le port de communication Attend les réponses sur le même port client serveurréseau Message de demande de service Retourner le résultat

sockets/rmi - Y. Bekkers3 Communication par message Soit un service correspondant à une procédure de la forme TypeResultat NomDuService(Type1,... Typek) le client –envoit un message de la forme : CodeService, p1,... pk –se met en attente du résultat, –après réception du résultat, décodage du résultat le serveur –reçoit le code du service demandé, le décode (au moyen d’un switch par exemple), –reçoit les k paramètres en les décodant et en restituant leur types respectifs, –appelle la procédure de ce service –code le résultat et le retourne au client par message.

sockets/rmi - Y. Bekkers4 Paquetage java.net Classes pour l’implémentation d’applications réseau –Identification des machines java.net.InetAddress Classes pour représenter une adresse IP (protocole Internet) java.net.URL Classes pour représenter une URL sur Internet –Ports de communication java.net.Socket Extrémité d’une communication entre deux machines Port coté client Supporte des flux de données bidirectionels java.net.ServerSocket Extrémité d’une communication entre deux machines Port coté serveur Attend les demandes de services arrivant sur le port

sockets/rmi - Y. Bekkers5 Sockets TCP Connection point à point Classe Socket –Connexion à une machine distante –Envoi/Réception de données –Fermeture d’une connexion Classe SocketServer –Attachement à un port –Acceptation d’une demande de connexion à un port local –Attente de demandes de connexion

sockets/rmi - Y. Bekkers6 Classe Socket Constructeurs public Socket(String hote, int port) throws UnknownHostException, IOException public Socket(InetAddress hote, int port) throws IOException Envoi/Réception de données public InputStream getInputStream() throws IOException public OutputStream getOutputStream() throws IOException Fermeture public synchronized void close() throws IOException

sockets/rmi - Y. Bekkers7 Appels de méthodes à distance Une interface commune entre les clients et le serveur public interface Personne { public int getAge() throws Throwable; public String getName() throws Throwable; } Deux implémentations de l’interface –Coté client Personne_stub Connection au port de communcation Sérialisation (codage) des demandes Attente et décodage du résultat –Coté serveur Personne_skel Mise en place d’un port de communcation Attente et décodage des demandes de service Codage et renvoie du résultat

sockets/rmi - Y. Bekkers8 Schéma de l’application Serveur Client

sockets/rmi - Y. Bekkers9 Simuler des appels de méthodes à distance client serveurréseau Invoquer une méthode Retourner le résultat Personne_Stubclient getAge() PersonneObject Personne_skeleton getAge() Sérialisation

sockets/rmi - Y. Bekkers10 Classe Personne_Stub Constructeur public Personne_Stub() throws Throwable { pSocket = new Socket("localhost",9000); } Méthode getAge() ObjectOutputStream outStream = new ObjectOutputStream(pSocket.getOutputStream()); outStream.writeObject("age"); outStream.flush(); ObjectInputStream inStream = new ObjectInputStream(pSocket.getInputStream()); return inStream.readInt(); Méthode close() public void close() throws Throwable { pSocket.close(); }

sockets/rmi - Y. Bekkers11 Classe Personne_Client Méthode main() Personne_Stub p = new Personne_Stub(); int age = p.getAge(); String nom = p.getName(); p.close(); System.out.println(nom+" est agé de "+age+" ans");

sockets/rmi - Y. Bekkers12 Serveur

sockets/rmi - Y. Bekkers13 Classe Personne_Skeleton Constructeur public Personne_Skeleton(PersonneObject p) { this.myPersonne = p; } Méthode main() public static void main(String[] args) { Personne_Skeleton skel = new Personne_Skeleton( new PersonneObject("paul", 25)); skel.start(); }

sockets/rmi - Y. Bekkers14 Classe Personne_Skeleton (1) Méthode run() // Création d’un nouvel objet ServerSocket ServerSocket serverSocket = new ServerSocket(9000); while (true) { Socket socket = serverSocket.accept(); // attente while (socket != null) { ObjectInputStream inStream = null; try { inStream = new ObjectInputStream(socket.getInputStream()); } catch (EOFException e) {// connection fermée socket.close(); break; // fin de service pour cette connection }... }

sockets/rmi - Y. Bekkers15 Traiter une demande de service (2) Méthode run() suite String service = (String) inStream.readObject(); if (service.equals("age")) { int age = myPersonne.getAge(); ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); outStream.writeInt(age); outStream.flush(); } else if (service.equals("name")) { String name = myPersonne.getName(); ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); outStream.writeObject(name); outStream.flush(); }

sockets/rmi - Y. Bekkers16 RMI Remote Method Invocation

sockets/rmi - Y. Bekkers17 RMI rendre transparents les échanges Sans RMI : Le concepteur de l’application fait tout le travail de transmission –Tâche de programmation lourde, dangereuse (nombreuses sources d’erreur) Avec RMI : mise en œuvre automatique du protocole de communication

sockets/rmi - Y. Bekkers18 Mise en place de services distants Définition d’objets distants : –Objets résidents sur un site et utilisés sur un autre Deux technologies concurrentes –CORBA : applications réparties faisant intervenir divers langages (C++, Smalltalk, Eiffel, Java,...) –RMI : une norme purement Java (Remote Method Invocation).

sockets/rmi - Y. Bekkers19 RMI – programmation distribuée Protocole client/serveur propre à java. –Package pour faire dialoguer des objets java par Internet. Repose sur l’utilisation de la librairie java.net Un concurrent de Corba, avec quelques différences : Simplicité de mise en oeuvre : –Pas de serveur spécial, le serveur est une classe java –transparence totale (intégration dans l'API Java) RMI : échange d’instances d'objets facilité grâce à : –L’utilisation du Classloader de Java –La réflexivité native de Java Inconvénients : Java uniquement

sockets/rmi - Y. Bekkers20 Structure d’une application RMI Le serveur lie son nom à un objet Registry The client recherche le nom du serveur et établie une connection. Le talon (Stub) sérialise les paramètres au squelette, Le squelette invoque la méthode distante et sérialise le résultat en retour vers le talon.

sockets/rmi - Y. Bekkers21 RMI – programmation distribuée Le code n'est pas localisé sur une unique machine, Il est déployé sur plusieurs machines en réseau. Site client... calc.somme(12,34);... Site serveur Serveur : localhost Port : 8090 Service : calc calc.somme(12,34); Résultat : 46 réseau

sockets/rmi - Y. Bekkers22 Un exemple en 5 étapes

sockets/rmi - Y. Bekkers23 Un exemple – calculateur distant Un site serveur définit un objet Convertisseur doté d’une méthode toEuro() qui reçoit en paramètre une valeur (un float) et rend un résultat sous forme d’un float. Sur un site client on peut accéder à cet objet par un nom externe qui est une chaîne de caractères formée du nom du serveur, d’un numéro de port, et d’un identificateur d’objet, de la forme : //localhost:8090/convertisseur Le client obtient la référence de l’objet distant puis l’utilise directement en appelant la méthode toEuro().

sockets/rmi - Y. Bekkers24 (1) Interface d'objet distant Un convertisseur import java.rmi.Remote; import java.rmi.RemoteException; public interface Conversion extends Remote { public float toEuro(float x) throws RemoteException; } A noter –Extension de l'interface Remote (objet distant) –Prévoir que les méthodes sont susceptibles de lancer des exceptions RemoteException

sockets/rmi - Y. Bekkers25 (2) Implémentation coté serveur public class ConvertisseurImpl extends UnicastRemoteObject implements Conversion { protected ConvertisseurImpl() throws RemoteException { super(); } public float toEuro(float x) throws RemoteException { return x/ f; } Implémentation de l'interface Extension de UnicastRemoteObject Définir un constructeur

sockets/rmi - Y. Bekkers26 (3) Compilation des objets distants Java 1.4 Deux compilations sont nécessaires –Compilation des interfaces et des implémentations d'objets distants javac –classpath. *.java –Compilation des souches et des squelettes d'objets distants rmic –classpath. MyClassDistant Java 1.5 une seule compilation –les objets distants sont découverts à l’exécution par des « proxies »

sockets/rmi - Y. Bekkers27 Les souches et les squelettes Deux classes supplémentaires pour chaque objet distants –La souche (stub) coté client émet les paramètres et récupère les résultats –Le squelette (skeleton) coté serveur reçoit les paramètres retourne le résultat WEB stubskeleton clientserveur

sockets/rmi - Y. Bekkers28 (4) Initialisation du site serveur et enregistrement d’un objet distant public class ServeurConvertisseur { public static void main(String[] args) { try { LocateRegistry.createRegistry(8090); ConvertisseurImpl euroConv = new ConvertisseurImpl(); Naming.bind( "//e103c04.ifsic.univ-rennes1.fr::8090/testConv", euroConv); } catch (Exception e) { System.out.println("erreur rmi"); }

sockets/rmi - Y. Bekkers29 Étapes de mise en place du serveur lancement d’un processus d’enregistrement de service sur le port 8090 du « localhost » LocateRegistry.createRegistry(8090); Création de l'objet distant ServeurConvertisseur euroConv = new ServeurConvertisseur(); Identification de l'objet Naming.bind( "//localhost:8090/testConv", euroConv);

sockets/rmi - Y. Bekkers30 Arrêt du service Détruire le lien Naming.unbind( "//localhost.irisa.fr:8090/testConv");

sockets/rmi - Y. Bekkers31 (5) Connexion d’un client à un objet distant connu par son nom externe public class ClientEuroConv { public static void main(String[] args) { try { Conversion euroConv = (Conversion) Naming.lookup( "//localhost:8090/testConversion"); float x = Float.parseFloat(args[0]); System.out.println("en entrée = " + x); System.out.println("En sortie = " + euroConv.toEuro(x)); } catch (Exception e) { System.out.println("Erreur rmi"); }

sockets/rmi - Y. Bekkers32 Utilisation d'un objet distant Mise en correspondance avec l'objet distant Conversion euroConv = (Conversion) Naming.lookup( "//localhost:8090/testConversion"); Utilisation de l'objet distant float x = Float.parseFloat(args[0]); System.out.println("en entrée = " + x); System.out.println("En sortie = " + euroConv.toEuro(x));

sockets/rmi - Y. Bekkers33 Type des arguments et des résultats Pratiquement tous les types d'arguments et de résultats sont acceptés –Types primitifs –Objets distants ceux qui implémentent java.rmi.Remote –Types non-primitifs sérialisables ceux qui implémentent java.io.Serializable

sockets/rmi - Y. Bekkers34 Mode de passage de paramètre et de résultat Objets Distants (Remote) –Passage par référence (stub) Seules les méthodes de l'interface Remote sont disponibles Les modifications sont faites sur l'objet original Objets locaux –Passage par copy (à l'aide de la sérialisation) Les modifications sont faites sur la copie

sockets/rmi - Y. Bekkers35 Mise en place sur un serveur http classique Côté serveur : –MyClassDistant_Skel.class –mettre les.class des interfaces locales et distantes Côté client : –MyClassDistant_Stub.class –(si le serveur transmet des objets locaux particuliers, il doit les fournir, comme ferait un client)

sockets/rmi - Y. Bekkers36 Dissémination des références En règle générale, dans une application répartie, seul un objet (ou quelques objets) est (sont) connu(s) par un nom externe, un objet “serveur central” de l’application répartie. Cet objet préexistant est le germe d’activités qui ensuite créent d’autres objets distants et se les communiquent par paramètres ou résultats de procédures, de façon tout à fait conventionnelle, comme si ces objets étaient situés sur le même site.

sockets/rmi - Y. Bekkers37 Références Tutorial Sun /rmi/index.html

sockets/rmi - Y. Bekkers38 Le tp

sockets/rmi - Y. Bekkers39 Deux interfaces ServeurSession public interface ServeurSession extends Remote { public Repondeur ouvreSession() throws RemoteException; } Repondeur public interface Repondeur extends Remote { public void poseQuestion(String q) throws RemoteException; public String obtientReponse() throws RemoteException; public void fin() throws RemoteException; }

sockets/rmi - Y. Bekkers40 Interfaces de saisie