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

Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentationYassine Badri
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Heithem Abbes
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
Présentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemePrésentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemeStéphane Traumat
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 

Tendances (20)

spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Rmi presentation
Rmi presentationRmi presentation
Rmi presentation
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentation
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Cours php
Cours php Cours php
Cours php
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Présentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemePrésentation de JEE et de son écosysteme
Présentation de JEE et de son écosysteme
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 

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
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMIKorteby Farouk
 
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
 
Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
 
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
 

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 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jmsMariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures repartiesMariem 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 (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
 

Dernier

Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptCHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptbentaha1011
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...maach1
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfActions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfalainfahed961
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).FatimaEzzahra753100
 

Dernier (8)

Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 
Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024
 
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptCHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfActions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).
 

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.