Java Remote Method Invocation (RMI) Par Achraf Gazdar
Plan Introduction Exemple d’un client-serveur d’Echo Étapes de création de l’application : Serveur Client Compilation Exécution sur une même machine Exécution sur des machines différentes
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
Exemple : Application « Echo » msg1 Client Serveur [msg1]
É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
É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
É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
Étape 2 : Application serveur (Écriture de l’objet serveur) III
É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
É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 »
Étape 4 : écriture du client II Localisation du service par serveur=(interEcho) Naming.lookup(urlService); urlService : rmi://machine:port/nom_service
É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
É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
Étape 6 : exécution de l’application sur une même machine Préparatif : lancement du service d’annuaire start c:\borland\jbuilder\jdk15\bin\rmiregistry Lancement du serveur (à partir du répertoire du serveur) start c:\borland\jbuilder\jdk15\bin\java srvEcho Lancement du client : c:\borland\jbuilder\jdk15\bin\java cltEcho rmi://localhost/srvEcho
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