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 :
  1. propre et plein
  2. pris par un client
  3. rendu par un client1 , sale et (plus ou moins) vide
Deux catégories d'individus manipulent 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 :)