Principi, Modelli e Applicazioni per Sistemi Distribuiti M Prova

Nome........................................... Cognome........................................... Matricola.............................................
Principi, Modelli e Applicazioni per Sistemi Distribuiti M
Prova pratica di laboratorio del 29/4/2014
Durata massima: 2h
E’ obbligatorio mettere Cognome Nome Matricola all’inizio di ogni file sorgente, pena la non
valutazione del compito.
Si devono consegnare tutti i file sorgente e tutti gli eseguibili prodotti singolarmente (per favore, solo quelli
relativi ai file sorgente consegnati!!!).
Si effettuino gli opportuni controlli sui parametri della richiesta e si gestiscano le eccezioni, tenendo
presente i criteri secondo cui si possa ripristinare il funzionamento del programma oppure si debba forzarne
la terminazione.
Leggete con attenzione le specifiche del problema prima di impegnarvi “a testa bassa” nello sviluppo
delle singole parti.
Naturalmente, i componenti da consegnare devono essere stati provati.
********************************************************************************
********************************************************************************
Si richiede il progetto della gestione dei servizi Games4All, per la gestione del magazzino di una grossa
catena di negozi di videogiochi. I servizi di Games4All mantengono, per ogni prodotto (videogioco), le
seguenti informazioni: il titolo del videogioco, la piattaforma del videogioco (X360, PS3, o PC); la
disponibilità a magazzino, un intero inteso come numero di videogiochi a disposizione; il prezzo, inteso
come prezzo intero in euro, superiore a 0, del videogioco; e la percentuale di sconto, cioè un intero fra “0” e
“99” che rappresenta la percentuale di sconto applicato al videogioco durante il saldo (ad esempio “25” per
indicare che verrà applicato uno sconto del 25%). Il titolo del videogioco deve essere univoco per ciascuna
piattaforma, ovvero, ci possono essere contemporaneamente due videogiochi con lo stesso titolo, ma
devono appartenere a due piattaforme differenti (es. FIFA14 PC e FIFA14 X360).
Si vogliono realizzare le funzionalità di gestione del sistema:
1. inserimento di un nuovo videogioco: questa operazione richiede il titolo del videogioco, la
piattaforma di gioco, la sua disponibilità, il prezzo e la percentuale di sconto, quindi procede
all'inserimento del videogioco nel sistema;
2. visualizzazione di tutti i videogiochi di una particolare piattaforma il cui sconto sia superiore o
uguale ad una certa soglia: questa operazione richiede il nome della piattaforma ed il valore della
soglia, e restituisce l'elenco di tutti i videogiochi per quella piattaforma con sconto superiore o
uguale alla soglia.
Si progetti con particolare attenzione la struttura dati che mantiene lo stato, fino ad un massimo di N
videogiochi (L, per libero a default, e -1 nel caso di valori numerici), da implementare opportunamente in
Java.
Titolo
L
Piattaforma
L
Disponibilità
-1
Prezzo
-1
Sconto
-1
FIFA14
X360
3000
45
10
FIFA14
...
World of Warcraft
L
PS3
...
PC
L
1500
...
500
-1
40
...
20
-1
5
...
50
-1
Utilizzando java RMI sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote per:
•
•
inserire un nuovo videogioco;
visualizzare tutti i videogiochi di una particolare piattaforma con sconto superiore o uguale ad una
soglia.
Il progetto RMI si basa su:
•
un’interfaccia (RemOp, contenuta nel file RemOp.java) in cui vengono definiti i metodi invocabili in
remoto dal client:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RemOp extends Remote {
boolean inserisci_videogioco(String titolo, String piattaforma, int disponibilita,
int prezzo, int sconto)
throws RemoteException;
Videogioco [] visualizza_videogiochi_scontati(String piattaforma, int soglia)
throws RemoteException;
}
Il metodo inserisci_videogioco accetta come parametro d’ingresso il titolo del videogioco, la piattaforma, la
sua disponibilità, il suo prezzo, il suo sconto e aggiunge il videogioco alla struttura dati; quindi restituisce
valore logico vero in caso di successo, falso in caso d’errore, ad esempio, se la struttura dati è già piena o è
già presente un videogioco con lo stesso titolo e piattaforma nella struttura.
Il metodo visualizza_videogiochi_scontati accetta come parametro d’ingresso la piattaforma di riferimento
e un intero corrispondente a una soglia minima di sconto; quindi restituisce la lista dei videogiochi per
quella piattaforma il cui sconto sia superiore o uguale alla soglia, null in caso d'errore, ad esempio, se la
soglia è un valore negativo o se non esiste nessuna videogioco con sconto superiore o uguale alla soglia.
Si modifichino opportunamente, implementando i metodi mancanti, i template delle classi:
•
•
•
Server (contenuta nel file Server.java), che implementa i metodi del server invocabili in remoto;
Client (contenuta nel file Client.java), che realizza l’interazione con l’utente proponendo
ciclicamente i servizi che utilizzano i due metodi remoti, e stampa a video i risultati, fino alla fine
del file di input da tastiera;
Videogioco (contenuta nel file Videogioco.java), che realizza la struttura dati che mantiene lo stato
di un videogioco.
Se si ritiene necessario, si apportino delle modifiche al/ai metodo/i inserisci_videogioco e
visualizza_videogiochi_scontati, implementati dal Server, per garantire la mutua esclusione attraverso la
keyword synchronized.
Apportare, inoltre, opportune modifiche alla classe Videogioco per rendere possibile il trasferimento di
oggetti di tipo Videogioco.