SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
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

Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures repartiesMariem ZAOUALI
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMIKorteby Farouk
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOALilia Sfaxi
 
Introduction aux web services
Introduction aux web servicesIntroduction aux web services
Introduction aux web servicesmohammed addoumi
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVABachir Benyammi
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services WebLilia Sfaxi
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jmsMariem ZAOUALI
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EEInes Ouaz
 
Socket tcp ip client server on langace c
Socket tcp ip client server on langace c Socket tcp ip client server on langace c
Socket tcp ip client server on langace c mouad Lousimi
 
Installer et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxInstaller et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxZakariyaa AIT ELMOUDEN
 
Administration réseaux sous linux cours 1
Administration réseaux sous linux   cours 1Administration réseaux sous linux   cours 1
Administration réseaux sous linux cours 1Stephen Salama
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartisHeithem Abbes
 
Rapport nagios miniprojet
Rapport nagios miniprojetRapport nagios miniprojet
Rapport nagios miniprojetAyoub Rouzi
 
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012Sylvain Maret
 

Tendances (20)

Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOA
 
Introduction aux web services
Introduction aux web servicesIntroduction aux web services
Introduction aux web services
 
Remote method invocation
Remote method invocationRemote method invocation
Remote method invocation
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVA
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
Socket tcp ip client server on langace c
Socket tcp ip client server on langace c Socket tcp ip client server on langace c
Socket tcp ip client server on langace c
 
Installer et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxInstaller et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linux
 
Administration réseaux sous linux cours 1
Administration réseaux sous linux   cours 1Administration réseaux sous linux   cours 1
Administration réseaux sous linux cours 1
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Rapport nagios miniprojet
Rapport nagios miniprojetRapport nagios miniprojet
Rapport nagios miniprojet
 
Sockets
SocketsSockets
Sockets
 
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
 

Similaire à TP2 RMI

programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java Ezéquiel Tsagué
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
6- Javacousesforenginerss_reseaux_v2.pdf
6- Javacousesforenginerss_reseaux_v2.pdf6- Javacousesforenginerss_reseaux_v2.pdf
6- Javacousesforenginerss_reseaux_v2.pdfAliouDiallo24
 
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.pdfSouf212
 
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
 
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 20Jean-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 encapsulationECAM Brussels Engineering School
 
#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGiGuillaume Sauthier
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web servicesLilia Sfaxi
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 

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
 
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
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
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
 

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 pythonMariem 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ériqueMariem ZAOUALI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en pythonMariem ZAOUALI
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à pythonMariem ZAOUALI
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliquesMariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de baseMariem 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 MatlabMariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursiveMariem 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 / TunisieMariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieMariem 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 (17)

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 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.