Vous êtes sur la page 1sur 18

Partie1: Technologies de distribution

Atelier 1: Remote Method Invocation

Dr. Hassen Lazrag


Démarche RMI

Cours JEE 2023 Hassen Lazrag


Démarche RMI

1. Créer les interfaces des objets distants


2. Créer les implémentation des objets distants
3. Générer les stubs et skeletons
4. Créer le serveur RMI
5. Créer le client RMI
6. Déploiement Lancement
 Lancer l’annuaire RMIREGISTRY
 Lancer le serveur
 Lancer le client

Cours WS 2023 Hassen Lazrag


Démarche RMI

Serveur
1. Créer l’objet distant

od: BanqueImpl
Client
4. Créer le stub Conversion(double mt):double
6.conversion(5) 11.res=50 8.conversion(5) 9.res=50
: STUB 5. Connexion : SKELETON
7. conversion(5) Port=x

10.res=50
2. Publier
3. Récupérer
la référence de la référence de
l’objet distant Naming Service : IP et Port connus l’objet distant

Nom de l’objet distant Référence de l’objet distant


Banque Réf1 : IP /Port/ Ad mém
OD2 Réf2

Cours WS 2023 Hassen Lazrag


TP: Bank Project

Cours JEE 2023 Hassen Lazrag


Bank Project

 Supposant qu’on veut créer un serveur RMI qui crée un


objet qui offre les services distants suivant à un client
RMI:
 Convertir un montant de l’euro en DT
 Consulter un compte par son code
 Consulter la liste des comptes

Cours WS 2023 Hassen Lazrag


RMI Server Project

Cours MS 2023 Hassen Lazrag


Interface IBanqueRemote

 Créer est une interface : IBanqueRemote dans le package rmi


 L’interface RMI doit respecter deux exigences techniques :
o 1: cette interface doit hériter d’une interface qui s’appelle Remote formée par RMI
o 2: toutes les méthodes doivent lever l’exception « RemoteExeption ».

package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;
import metier.Compte;
public interface IBanqueRemote extends Remote {
public double conversion(double mt) throws RemoteException;
public Compte consulterCompter(int code) throws RemoteException;
public List<Compte> listComptes() throws RemoteException;
}

Cours WS 2023 Hassen Lazrag


Classe Compte

 Créer les entités de métiers :


o Créer la classe métier Compte:

package metier;
import java.io.Serializable;
import java.util.Date;
public class Compte implements Serializable{
private int code;
private double solde;
private Date dateCreation;
public Compte() {
super();
}
public Compte(int code, double solde, Date dateCreation) {
super();
this.code = code;
this.solde = solde;
this.dateCreation = dateCreation;
}
// Getters et Setters

Cours WS 2023 Hassen Lazrag


Service : BanqueRemoteService

 Créer une classe qui s’appelle BanqueRmiService dans rmi.


 L’implémentation de la classe doit respecter un certain nombre de
règles :
 1ère règle : Cette classe doit hériter d’une classe Skeleton ,« un petit service
d’écoute », qui permet d’accéder à l’objet à distance : UnicastRemoteObject.

 2ème règle : Cette classe doit implémenter l’interface IBanqueRemote


 Implémenter toutes les méthodes

 Créer un constructeur sans paramètres : le numéro de port est choisi arbitrairement


(on peut choisir un constructeur avec paramètres, mais c’est déconseiller car il faut
à chaque fois fixer le port)

Cours WS 2023 Hassen Lazrag


Couche rmi : classe BanqueRmiService

package rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.jws.soap.SOAPBinding;
import metier.Compte;
public class BanqueRmiService extends UnicastRemoteObject implements IBanqueRemote {
public BanqueRmiService() throws RemoteException {
super();
}
@Override
public double conversion(double mt) throws RemoteException {
System.out.println("Conversion du montant "+mt);
return mt*3.32;
}

Cours WS 2023 Hassen Lazrag


Couche rmi : classe IBanqueRemote

@Override
public List<Compte> listComptes() throws RemoteException {

System.out.println("Consultation des comptes");

List<Compte> cptes = new ArrayList<Compte>();


cptes.add(new Compte(1, Math.random()*9000, new Date()));
cptes.add(new Compte(2, Math.random()*9000, new Date()));
cptes.add(new Compte(3, Math.random()*9000, new Date()));
return cptes;
}}

Cours WS 2023 Hassen Lazrag


Serveur: ServeurRMI

 Créer une classe ServeurRMI


avec une méthode main.

 Ce serveur exécute les taches


suivantes:
1. démarrer le serveur annuaire

2. Instancier l’objet distante od


(créer l’objet)

3. Publier la référence de cette


objet dans un annuaire

Cours WS 2023 Hassen Lazrag


Classe ServeurRMI

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import rmi.BanqueRmiService;
public class ServeurRMI {
public static void main(String[] args) {

try {
//1. Demarrage par programmation de l'annuaire
LocateRegistry.createRegistry(1099);
//2. Creation de l'objet
BanqueRmiService od = new BanqueRmiService();
//4. Affichage de l'objet distant
System.out.println(od.toString());
//2. Publication la Ref de l'objet dans l'annuaire
Naming.rebind("rmi://localhost:1099/BK", od);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Cours WS 2023 Hassen Lazrag


RMI Client Project

Cours MS 2023 Hassen Lazrag


Projet RMIClient

 Le client a besoin seulement de l’interface IBanqueRemote :


 Copier le package rmi du serveur vers le client, sauf qu’on a pas besoin de la
classe d’implémentation.
 l’interface a besoin aussi de la classe Compte, on doit copier le package
metier aussi : généralement les entités manipuler doit se trouver dans les deux
côtés
 Créer le client : La classe ClientRMI avec main

Cours WS 2023 Hassen Lazrag


Client: classe ClientRMI
public class ClientRMI {
public static void main(String[] args) {
try {
IBanqueRemote stub = (IBanqueRemote)
Naming.lookup("rmi://localhost:1099/BK");
System.out.println(stub.conversion(1500));
System.out.println("-------Consultation d'un compte à distance------");
Compte cp= stub.consulterCompter(2);
System.out.println("Code= "+cp.getCode());
System.out.println("Solde= "+cp.getSolde());
System.out.println("Date= "+cp.getDateCreation());
System.out.println("-------Consultation de la liste des comptes------");
List<Compte> cptes = stub.listComptes();
for(Compte c:cptes) {
System.out.println("----------------------------");
System.out.println("Code= "+c.getCode());
System.out.println("Solde= "+c.getSolde());
System.out.println("Date= "+c.getDateCreation());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Cours WS 2023 Hassen Lazrag


Exécution:

 Dans l’IDE
Exécuter le serveur
Exécuter le client

Cours WS 2023 Hassen Lazrag

Vous aimerez peut-être aussi