Java Remote Method Invocation Mehrez Boulares, Nour Ben Yahia ISI Kef 2015-2016
Introduction JAVA et les objets distribués. Mise en place d’outils facilitant la distribution d’objets et leur utilisation dans le cadre d’architecture Client/Serveur : RMI. Extension de la notion de programmation réseau avec les sockets UDP et TCP. RMI est un système d’objets distribués constitué uniquement d’objets JAVA. RMI est une API (Application Programming Interface) intégrée à JAVA depuis la version 1.1. PUT THE NAME OF YOUR COMPANY HERE
Introduction Java RMI permet de créer des applications réseau où : Le client et le serveur sont en Java Le client peut utiliser des objets situés sur le serveur comme s’ils étaient locaux La couche réseau devient transparente aux applications client/serveurs Application RMI : développement coté serveur + développement coté client PUT THE NAME OF YOUR COMPANY HERE
Étapes d’un appel de méthode distante PUT THE NAME OF YOUR COMPANY HERE
Développer une application avec RMI : Mise en œuvre Définir une interface distante (Xyy.java). Créer une classe implémentant cette interface (XyyImpl.java). Compiler cette classe (javac XyyImpl.java). Créer une application serveur (XyyServer.java). Compiler l’application serveur. Créer les classes stub et skeleton à l’aide de rmic XyyImpl_Stub.java et XyyImpl_Skel.java (Skel n’existe pas pour les versions >1.2). Démarrage du registre avec rmiregistry. Lancer le serveur pour la création d’objets et leur enregistrement dans rmiregistry. Créer une classe cliente qui appelle des méthodes distantes de l’objet distribué (XyyClient.java). Compiler cette classe et la lancer. PUT THE NAME OF YOUR COMPANY HERE
Exemple : Application « Echo » msg1 Client Serveur [msg1] PUT THE NAME OF YOUR COMPANY HERE
Étape 1 : Application serveur (l’interface de l’objet serveur) Un objet distant doit implémenter l’interface Remote de java.rmi Les méthodes distantes sont celles qui appartiennent à une interface dérivée de la classe Remote PUT THE NAME OF YOUR COMPANY HERE
Étape 2 : Application serveur (Écriture de l’objet serveur) I Implémentation de l’interface distante précédente par une classe Cette classe doit dériver de UnicastRemoteObject qui permet l’invocation de méthodes distantes PUT THE NAME OF YOUR COMPANY HERE
Étape 2 : Application serveur (Écriture de l’objet serveur) II Publication du service offert par le serveur dans le service annuaire Cet annuaire sera utiliser par les clients pour chercher les services du serveurs Publication à travers la méthode rebind de la classe Naming : Naming.rebind(String nom, Remote obj) nom : nom du service obj : objet serveur PUT THE NAME OF YOUR COMPANY HERE
Étape 2 : Application serveur (Écriture de l’objet serveur) III PUT THE NAME OF YOUR COMPANY HERE
Étape 3 : Application serveur (Compilation de la partie serveur) Compilation du fichier interEcho.java de l’interface interEcho Compilation du fichier srvEcho.java de la classe srvEcho Obtention des .class : interEcho.class et srvEcho.class PUT THE NAME OF YOUR COMPANY HERE
Étape 4 : écriture du client I On écrit un client à qui on passe en paramètre l’URL du serveur d’écho et qui : lit une ligne tapée au clavier l’envoie au serveur d’écho affiche la réponse que celui-ci envoie reboucle en 1 et s’arrête lorsque la ligne tapée est « fin » PUT THE NAME OF YOUR COMPANY HERE
Étape 4 : écriture du client II Localisation du service par serveur=(interEcho) Naming.lookup(urlService); urlService : rmi://machine:port/nom_service PUT THE NAME OF YOUR COMPANY HERE
Étape 5 : Génération des .class nécessaires Compilation du client et obtention du cltEcho.class Pour dialoguer avec le serveur le client a besoin d’une image du service serveur localement c’est le fichier de Stub Obtenu par : Exécution de la commande rmic srvEcho sur le serveur Obtention de deux fichiers : srvEcho_stub.class et srvEcho_Skel.class Copie de srvEcho_stub.class et de interEcho.class avec le client PUT THE NAME OF YOUR COMPANY HERE
Étape 5 : Génération des .class nécessaires (Résumé) Côté serveur : interEcho.class srvEcho.class srvEcho_stub.class Côté client : cltEcho.class PUT THE NAME OF YOUR COMPANY HERE
Étape 6 : exécution de l’application sur une même machine Préparatif : lancement du service d’annuaire start rmiregistry Lancement du serveur (à partir du répertoire du serveur) start java srvEcho Lancement du client : java cltEcho rmi://localhost/srvEcho PUT THE NAME OF YOUR COMPANY HERE
Exécution sur deux machines différentes Client Linux : copier dans le même répertoire les .class suivants : cltEcho.class interEcho.class srvEcho_stub.class Serveur : dans le même répertoire il faut prévoir les .class suivants : srvEcho.class srvEcho_Skel.class PUT THE NAME OF YOUR COMPANY HERE