Université Pierre & Marie Curie
U.F.R d'infomatique
Maîtrise -- 2000-01 --
Programmation Objet et Distribution
Tavaux pratiques n° 2
Au R(e)MI's bar
Ce second TP manipule RMI, graphisme et interaction.
Introduction
Au R(e)MI's bar on trouve plusieurs boissons. Pour chacune d'elle un
stock de verres est défini. Chaque verre possède trois états :
- propre et plein
- pris par un client
- rendu par un client1
, sale et (plus
ou moins) vide
Deux catégories d'individus manipulent les verres
- un barman qui récupère, lave et remplit les verres rendus
- des clients qui prennent, boivent et rendent les verres
Les différents stocks de verres seront des objets distants (RMI)
partagés par le barman et les clients.
1 Le stock
Le stock de verres des différentes boissons est accessible via un
serveur RMI. Pour chaque catégorie de boisson, nous proposons
l'interface suivante (fichier :
GlassRMI.java
) :
import java.rmi.*;
public interface GlassRMI extends Remote
{
boolean isAvailable() throws RemoteException;
void order() throws RemoteException;
void back() throws RemoteException;
void refill() throws RemoteException;
}
La sémantique attendue des méthodes est la suivante :
- isAvailable
- retourne true s'il existe un verre propre
et plein
- order
- diminue de 1 le nombre de verres propres et pleins ;
- back
- augmente de 1 le nombre de verres sales et vides ;
- refill
- diminue de 1 le nombre de verres sales et vides et
augmente de 1 le nombre de verres propres et pleins.
1.1 Question
Donnez l'implantation de la classe
public class Glasses
extends UnicastRemoteObject // Objets distants
implements GlassRMI // implantant des methodes specifiques
A chaque opération sur les verres, un état du stock devra être donné.
2 Le barman
Le barman est en charge de constituer un stock initial puis de passer
son temps à récupérer, laver et remplir les verres rendus.
Le processus du barman sera lancé par la commande
java Barman nom-machine:numero-de-port
où l'argument correspond au nom de la machine et au
numéro de port du serveur rmiregistry.
2.1 Question
Donnez l'implantation de la classe
Barman. Les opérations du barman prennent un certain temps :
prévoir des temporisations.
3 Un client simple
Nous vous proposons de réaliser un client graphique et
interactif se présentant sous la forme suivante :
La zone horizontale supérieure est réservée à l'affichage de
messages.
La zone centrale est destinée à l'affichage d'une image
reflétant l'état du client : attente d'un verre, obtention d'un
verre, consommation d'un verre. Nous vous fournissons cinq fichiers au
format GIF :
client0.gif,
client1.gif,
client11.gif,
client2.gif et
client21.gif.
Nous vous fournissons également le fichier
ClientImage.java
qui contient la définition d'une classe permettant de constituer et
afficher une table d'images.
La zone horizontale inférieure contient trois boutons permettant de
réaliser les actions correspondantes du client : commander, boire,
rendre un verre. La sélection du bouton Order doit
provoquer l'affichage d'un menu proposant les difféntes
boissons disponibles.
3.1 Question
Donnez l'implantation de la classe
Client. Le constructeur de cette classe prendra en argument
une chaîne de caractès de la forme
"nom-machine:numero-de-port".
3.2 Question
L'application du client sera lancé par la commande
java RunClient nom-machine:numero-de-port
Implantez RunClient
- 1
- plus ou moins plein :)