SlideShare une entreprise Scribd logo
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 1
TP2 : The Remote Method Invocation
Problème
Dans ce TP, on veut simuler une application de consultation et réservation de
places dans un spectacle.
Le client demandera au serveur le nombre de places disponibles pour un
certain spectacle qu’il choisit d’une liste. Le serveur lui répond en lui affichant le
nombre de places restants. Si les places sont encore disponibles, le client peut passer
la commande de réservation, sinon on lui affiche de nouveau, la liste des spectacles.
Pour réaliser cette application, on demande d’implémenter les différents
échanges entre le client et serveur en respectant les étapes d’invocation de méthode
à distance en utilisant le Java RMI, l’implémentation SUN du RPC.
Un exemple d’échauffement 1
Dans cette première partie, on va simuler RMI (à appliquer après dans le contexte
de l’application de consultation et réservation de places pour spectacles).
Vous allez créer deux projets comme indiqué dans la Figure 1 et dont le contenu est
le suivant :
Figure 1 L'arborescence à créer
1. JavaRMI_client : contenant une classe RMIClient.java et une interface
RMIServerIntf.java dont le contenu est le suivant :
package tn.esprims.client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 2
public class RMIClient {
public static void main(String args[]) throws Exception {
Registry registry = LocateRegistry.getRegistry("localhost");
RMIServerIntf obj = (RMIServerIntf) registry.lookup("RMIServer");
System.out.println(obj.getMessage());
}
}
package tn.esprims.client;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIServerIntf extends Remote {
public String getMessage() throws RemoteException;
}
2. JavaRMI_serveur : JavaRMI_serveur : contenant une classe RMIServer.java et
une interface RMIServerIntf.java dont le contenu est le suivant :
package tn.esprims.serveur;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class RMIServer
implements RMIServerIntf {
public static final String MESSAGE = "Hello world";
public RMIServer() throws RemoteException {
}
public String getMessage() throws RemoteException {
return MESSAGE;
}
public static void main(String args[]) throws Exception {
System.out.println("RMI server started");
//Instantiate RmiServer
RMIServer obj = new RMIServer();
try { //special exception handler for registry creation
RMIServerIntf stub = (RMIServerIntf)
UnicastRemoteObject.exportObject(obj,0);
Registry reg;
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 3
try {
reg = LocateRegistry.createRegistry(1099);
System.out.println("java RMI registry created.");
} catch(Exception e) {
System.out.println("Using existing registry");
reg = LocateRegistry.getRegistry();
}
reg.rebind("RMIServer", stub);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
package tn.esprims.serveur;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIServerIntf extends Remote {
public String getMessage() throws RemoteException;
}
Exécution de l’exemple d’échauffement 1
Vous lancez tout d’abord le serveur qui va créer un registry où il enregistre l’objet
RMIServer dans le registry. Vous lancez ensuite le client qui cherchera l’objet.
NB : Auparavant, on génère nous-même le stub et skeleton. Depuis le JDK 1.5, cette
génération se fait automatiquement.
La Figure 2 montre le schéma d’ensemble de cette exécution.
Figure 2 Etape d'exécution d'une application à base de RMI
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 4
Un exemple d’échauffement 2
Maintenant, il est question d’envoyer un objet vers le Serveur comme paramètre à la
méthode distante. Il faut suivre les étapes sinon vous auriez des erreurs :
1. Nommer les packages du côté client et serveur de la même manière
2. Implémenter l’interface Serializable des deux côtés (client et serveur) de
l’objet que vous voulez envoyer
La Figure 3 montre l’arborescence à réaliser :
Figure 3 Arborescence à créer
Dans le projet JavaRMI_client :
package tn.esprims;
import java.io.Serializable;
public class MessageInfo implements Serializable {
public static final long serialVersionUID = 52L;
public int totalMessages;
public int messageNum;
public MessageInfo(int total, int msgNum) {
totalMessages = total;
messageNum = msgNum;
}
}
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 5
package tn.esprims;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RMIClient {
public static void main(String args[]) throws Exception {
Registry registry = LocateRegistry.getRegistry("localhost");
RMIServerIntf obj = (RMIServerIntf) registry.lookup("RMIServer");
MessageInfo v= new MessageInfo(1,10);
System.out.println(obj.getMessage(v));
}
}
package tn.esprims;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIServerIntf extends Remote {
public String getMessage(MessageInfo m) throws RemoteException;
}
Dans le projet JavaRMI_serveur :
package tn.esprims;
import java.io.Serializable;
import java.rmi.RemoteException;
public class MessageInfo implements Serializable {
public static final long serialVersionUID = 52L;
public int totalMessages;
public int messageNum;
public MessageInfo(int total, int msgNum) {
totalMessages = total;
messageNum = msgNum;
}
public String toString(){
return new String("C'est un traitement chez le serveur que vous croyez
qu'il se fait en local chez le client "+totalMessages+";"+messageNum+"n");
}
}
package tn.esprims;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 6
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class RMIServer
implements RMIServerIntf {
public static final String MESSAGE = "Hello world";
public RMIServer() throws RemoteException {
}
public String getMessage(MessageInfo v) throws RemoteException {
return v.toString();
}
public static void main(String args[]) throws Exception {
System.out.println("RMI server started");
//Instantiate RmiServer
RMIServer obj = new RMIServer();
try { //special exception handler for registry creation
RMIServerIntf stub = (RMIServerIntf)
UnicastRemoteObject.exportObject(obj,0);
Registry reg;
try {
reg = LocateRegistry.createRegistry(1099);
System.out.println("java RMI registry created.");
} catch(Exception e) {
System.out.println("Using existing registry");
reg = LocateRegistry.getRegistry();
}
reg.rebind("RMIServer", stub);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
package tn.esprims;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIServerIntf extends Remote {
TP2 : THE REMOTE METHOD INVOCATION PERIODE 4
MARIEM ZAOUALI | ESPRIMS 7
public String getMessage(MessageInfo m) throws RemoteException;
}
Réalisation de la partie serveur du Gestionnaire du Spectacle
1. Ecrire une interface « distante » InterfaceSpectacle qui définit deux
méthodes et qui étend java.rmi.Remote :
a. int consulter (int entier) : Cette méthode permet de passer en
paramètre le ID de spectacle au serveur et de retourner le
nombre de places disponibles.
b. String reserver(int entier) : Cette méthode permet de passer en
paramètre le ID de spectacle et de retourner un message
« succès » si la réservation est réussie, « échec » sinon.
2. Ecrire la classe GestionnaireSpectacle qui réalise les tâches de
l’interface précédente et qui étend la classe
java.rmi.server.UnicastRemoteObject. Dans cette classe, ajoutez un
ArrayList comme variable static et globale contenant tous les
spectacles que le serveur propose.
3. Ecrire une classe Enregistrement qui possède une méthode main qui
enregistre l’objet GestionnaireSpectacle dans le registre.
Réalisation de la partie client du Gestionnaire du Spectacle
Il est à vous maintenant de compléter le TP en créant les classes et les interfaces
nécessaires. Vous devez sérialiser votre objet à envoyer par RMI.

Contenu connexe

Tendances

Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
Heithem Abbes
 
Marzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcMarzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvc
abderrahim marzouk
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
Lilia Sfaxi
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
ENSET, Université Hassan II Casablanca
 
Java RMI
Java RMIJava RMI
Java RMI
Heithem Abbes
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
Amir Souissi
 
Diagramme d'activité en UML
Diagramme d'activité en UMLDiagramme d'activité en UML
Diagramme d'activité en UML
Mireille Blay-Fornarino
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
Eric Bourdet
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
Korteby Farouk
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
Lilia Sfaxi
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
ENSET, Université Hassan II Casablanca
 
Les collections en Java
Les collections en JavaLes collections en Java
Les collections en Java
Papa Cheikh Cisse
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
ENSET, Université Hassan II Casablanca
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
Heithem Abbes
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
Lilia Sfaxi
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
Youness Boukouchi
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
Heithem Abbes
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
Lilia Sfaxi
 

Tendances (20)

Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
Marzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcMarzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvc
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Java RMI
Java RMIJava RMI
Java RMI
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Diagramme d'activité en UML
Diagramme d'activité en UMLDiagramme d'activité en UML
Diagramme d'activité en UML
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
 
Remote method invocation
Remote method invocationRemote method invocation
Remote method invocation
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Les collections en Java
Les collections en JavaLes collections en Java
Les collections en Java
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 

Similaire à TP2 RMI

Reseau
ReseauReseau
Reseau
gijo000
 
programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java
Ezéquiel Tsagué
 
Présentation de RMI Java
Présentation de RMI JavaPrésentation de RMI Java
Présentation de RMI JavaZakaria Bouazza
 
Atelier gwt
Atelier gwtAtelier gwt
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
neuros
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
ngombeemmanuel
 
cours6.pdf
cours6.pdfcours6.pdf
cours6.pdf
Patiento Del Mar
 
6- Javacousesforenginerss_reseaux_v2.pdf
6- Javacousesforenginerss_reseaux_v2.pdf6- Javacousesforenginerss_reseaux_v2.pdf
6- Javacousesforenginerss_reseaux_v2.pdf
AliouDiallo24
 
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfRAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
Souf212
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursHoracio Gonzalez
 
Chap7_JavaNet.pdf
Chap7_JavaNet.pdfChap7_JavaNet.pdf
Chap7_JavaNet.pdf
Patiento Del Mar
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Jean-Michel Doudoux
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
ECAM Brussels Engineering School
 
#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi
Guillaume Sauthier
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
Fou Cha
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
Soukaina Boujadi
 
threads.pdf
threads.pdfthreads.pdf
threads.pdf
Patiento Del Mar
 
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
Bruno Bonnin
 

Similaire à TP2 RMI (20)

IF-RMI.pdf
IF-RMI.pdfIF-RMI.pdf
IF-RMI.pdf
 
Reseau
ReseauReseau
Reseau
 
programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java
 
Présentation de RMI Java
Présentation de RMI JavaPrésentation de RMI Java
Présentation de RMI Java
 
Atelier gwt
Atelier gwtAtelier gwt
Atelier gwt
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
 
cours6.pdf
cours6.pdfcours6.pdf
cours6.pdf
 
6- Javacousesforenginerss_reseaux_v2.pdf
6- Javacousesforenginerss_reseaux_v2.pdf6- Javacousesforenginerss_reseaux_v2.pdf
6- Javacousesforenginerss_reseaux_v2.pdf
 
Chap7 java net
Chap7 java netChap7 java net
Chap7 java net
 
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfRAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Chap7_JavaNet.pdf
Chap7_JavaNet.pdfChap7_JavaNet.pdf
Chap7_JavaNet.pdf
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
threads.pdf
threads.pdfthreads.pdf
threads.pdf
 
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
 

Plus de Mariem ZAOUALI

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
Mariem ZAOUALI
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
Mariem ZAOUALI
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
Mariem ZAOUALI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
Mariem ZAOUALI
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
Mariem ZAOUALI
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
Mariem ZAOUALI
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
Mariem ZAOUALI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
Mariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
Mariem ZAOUALI
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
Mariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
Mariem ZAOUALI
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Mariem ZAOUALI
 

Plus de Mariem ZAOUALI (19)

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
 

TP2 RMI

  • 1. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 1 TP2 : The Remote Method Invocation Problème Dans ce TP, on veut simuler une application de consultation et réservation de places dans un spectacle. Le client demandera au serveur le nombre de places disponibles pour un certain spectacle qu’il choisit d’une liste. Le serveur lui répond en lui affichant le nombre de places restants. Si les places sont encore disponibles, le client peut passer la commande de réservation, sinon on lui affiche de nouveau, la liste des spectacles. Pour réaliser cette application, on demande d’implémenter les différents échanges entre le client et serveur en respectant les étapes d’invocation de méthode à distance en utilisant le Java RMI, l’implémentation SUN du RPC. Un exemple d’échauffement 1 Dans cette première partie, on va simuler RMI (à appliquer après dans le contexte de l’application de consultation et réservation de places pour spectacles). Vous allez créer deux projets comme indiqué dans la Figure 1 et dont le contenu est le suivant : Figure 1 L'arborescence à créer 1. JavaRMI_client : contenant une classe RMIClient.java et une interface RMIServerIntf.java dont le contenu est le suivant : package tn.esprims.client; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry;
  • 2. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 2 public class RMIClient { public static void main(String args[]) throws Exception { Registry registry = LocateRegistry.getRegistry("localhost"); RMIServerIntf obj = (RMIServerIntf) registry.lookup("RMIServer"); System.out.println(obj.getMessage()); } } package tn.esprims.client; import java.rmi.Remote; import java.rmi.RemoteException; public interface RMIServerIntf extends Remote { public String getMessage() throws RemoteException; } 2. JavaRMI_serveur : JavaRMI_serveur : contenant une classe RMIServer.java et une interface RMIServerIntf.java dont le contenu est le suivant : package tn.esprims.serveur; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; public class RMIServer implements RMIServerIntf { public static final String MESSAGE = "Hello world"; public RMIServer() throws RemoteException { } public String getMessage() throws RemoteException { return MESSAGE; } public static void main(String args[]) throws Exception { System.out.println("RMI server started"); //Instantiate RmiServer RMIServer obj = new RMIServer(); try { //special exception handler for registry creation RMIServerIntf stub = (RMIServerIntf) UnicastRemoteObject.exportObject(obj,0); Registry reg;
  • 3. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 3 try { reg = LocateRegistry.createRegistry(1099); System.out.println("java RMI registry created."); } catch(Exception e) { System.out.println("Using existing registry"); reg = LocateRegistry.getRegistry(); } reg.rebind("RMIServer", stub); } catch (RemoteException e) { e.printStackTrace(); } } } package tn.esprims.serveur; import java.rmi.Remote; import java.rmi.RemoteException; public interface RMIServerIntf extends Remote { public String getMessage() throws RemoteException; } Exécution de l’exemple d’échauffement 1 Vous lancez tout d’abord le serveur qui va créer un registry où il enregistre l’objet RMIServer dans le registry. Vous lancez ensuite le client qui cherchera l’objet. NB : Auparavant, on génère nous-même le stub et skeleton. Depuis le JDK 1.5, cette génération se fait automatiquement. La Figure 2 montre le schéma d’ensemble de cette exécution. Figure 2 Etape d'exécution d'une application à base de RMI
  • 4. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 4 Un exemple d’échauffement 2 Maintenant, il est question d’envoyer un objet vers le Serveur comme paramètre à la méthode distante. Il faut suivre les étapes sinon vous auriez des erreurs : 1. Nommer les packages du côté client et serveur de la même manière 2. Implémenter l’interface Serializable des deux côtés (client et serveur) de l’objet que vous voulez envoyer La Figure 3 montre l’arborescence à réaliser : Figure 3 Arborescence à créer Dans le projet JavaRMI_client : package tn.esprims; import java.io.Serializable; public class MessageInfo implements Serializable { public static final long serialVersionUID = 52L; public int totalMessages; public int messageNum; public MessageInfo(int total, int msgNum) { totalMessages = total; messageNum = msgNum; } }
  • 5. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 5 package tn.esprims; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class RMIClient { public static void main(String args[]) throws Exception { Registry registry = LocateRegistry.getRegistry("localhost"); RMIServerIntf obj = (RMIServerIntf) registry.lookup("RMIServer"); MessageInfo v= new MessageInfo(1,10); System.out.println(obj.getMessage(v)); } } package tn.esprims; import java.rmi.Remote; import java.rmi.RemoteException; public interface RMIServerIntf extends Remote { public String getMessage(MessageInfo m) throws RemoteException; } Dans le projet JavaRMI_serveur : package tn.esprims; import java.io.Serializable; import java.rmi.RemoteException; public class MessageInfo implements Serializable { public static final long serialVersionUID = 52L; public int totalMessages; public int messageNum; public MessageInfo(int total, int msgNum) { totalMessages = total; messageNum = msgNum; } public String toString(){ return new String("C'est un traitement chez le serveur que vous croyez qu'il se fait en local chez le client "+totalMessages+";"+messageNum+"n"); } } package tn.esprims; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry;
  • 6. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 6 import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; public class RMIServer implements RMIServerIntf { public static final String MESSAGE = "Hello world"; public RMIServer() throws RemoteException { } public String getMessage(MessageInfo v) throws RemoteException { return v.toString(); } public static void main(String args[]) throws Exception { System.out.println("RMI server started"); //Instantiate RmiServer RMIServer obj = new RMIServer(); try { //special exception handler for registry creation RMIServerIntf stub = (RMIServerIntf) UnicastRemoteObject.exportObject(obj,0); Registry reg; try { reg = LocateRegistry.createRegistry(1099); System.out.println("java RMI registry created."); } catch(Exception e) { System.out.println("Using existing registry"); reg = LocateRegistry.getRegistry(); } reg.rebind("RMIServer", stub); } catch (RemoteException e) { e.printStackTrace(); } } } package tn.esprims; import java.rmi.Remote; import java.rmi.RemoteException; public interface RMIServerIntf extends Remote {
  • 7. TP2 : THE REMOTE METHOD INVOCATION PERIODE 4 MARIEM ZAOUALI | ESPRIMS 7 public String getMessage(MessageInfo m) throws RemoteException; } Réalisation de la partie serveur du Gestionnaire du Spectacle 1. Ecrire une interface « distante » InterfaceSpectacle qui définit deux méthodes et qui étend java.rmi.Remote : a. int consulter (int entier) : Cette méthode permet de passer en paramètre le ID de spectacle au serveur et de retourner le nombre de places disponibles. b. String reserver(int entier) : Cette méthode permet de passer en paramètre le ID de spectacle et de retourner un message « succès » si la réservation est réussie, « échec » sinon. 2. Ecrire la classe GestionnaireSpectacle qui réalise les tâches de l’interface précédente et qui étend la classe java.rmi.server.UnicastRemoteObject. Dans cette classe, ajoutez un ArrayList comme variable static et globale contenant tous les spectacles que le serveur propose. 3. Ecrire une classe Enregistrement qui possède une méthode main qui enregistre l’objet GestionnaireSpectacle dans le registre. Réalisation de la partie client du Gestionnaire du Spectacle Il est à vous maintenant de compléter le TP en créant les classes et les interfaces nécessaires. Vous devez sérialiser votre objet à envoyer par RMI.