Reti di Calcolatori L-A Appello del 14/01/2008

Cognome:
Nome:
Matricola:
Reti di Calcolatori L-A
Appello del 14/01/2008
………………………………
………………………………
………………………………
Compito 1
Parte Java
Utilizzando java RMI sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote
per:
• inserire un nuovo abito;
• valutare il prezzo scontato.
Tempo a disposizione: 2h
E’ obbligatorio mettere Cognome Nome Matricola e Numero Compito all’inizio di ogni file
sorgente, pena la non valutazione del compito, che viene stampato in modo automatico,
solo in caso siano presenti gli elementi detti sopra.
Si devono consegnare tutti i file sorgente e tutti gli eseguibili prodotti singolarmente (per
favore, solo quelli relativi ai file sorgente consegnati!!!).
La prova intende valutare le capacità progettuali e di programmazione sia in ambiente Java che in
ambiente C, pertanto è consigliabile sviluppare, almeno in parte, entrambe le soluzioni richieste.
In entrambi gli esercizi, sia in Java che in C, 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 MagazzinoConSaldi, per la gestione di magazzino
di una grossa catena di distribuzione di abiti.
I servizi di MagazzinoConSaldi mantengono, per ogni prodotto (abito), le seguenti informazioni: il
nome dell’abito, unico all’interno del sistema; la disponibilità a magazzino, un intero inteso come
numero di capi; il prezzo, inteso come prezzo intero in euro dell’abito; e la percentuale di sconto,
cioè un intero fra “0” e “99” che rappresenta la percentuale di sconto applicato al capo durante il
saldo (ad esempio “20” per indicare che verrà applicato uno sconto del 20%).
Si vogliono realizzare le funzionalità di gestione:
1. inserimento di un nuovo abito: questa operazione richiede il nome dell’abito, la sua
disponibilità, il prezzo e la percentuale di sconto, ed inserisce il prodotto nella struttura dati;
2. visualizzazione degli abiti la cui percentuale di sconto è maggiore di una certa soglia:
questa operazione richiede il valore della soglia e restituisce l’elenco di tutti i prodotti la cui
percentuale di sconto è maggiore della soglia indicata;
3. valutazione del prezzo scontato: questa operazione richiede il nome del prodotto, valuta il
prezzo scontato e lo restituisce all’utente;
4. aggiornamento della percentuale di sconto: questa operazione richiede il nome dell’abito e
la nuova percentuale, quindi aggiorna la struttura dati.
Si progetti con particolare attenzione la struttura dati che mantiene lo stato, fino ad un massimo di
N prodotti (L, per libero a default), da implementare opportunamente nei diversi ambienti richiesti,
Java e C.
Titolo
L
CamiciaArmadi
JeansSgucci
…
GonnaValentina
L
Disponibilità
L
50
20
…
60
L
Prezzo
L
200
350
…
400
L
Percentuale
L
30
50
…
60
L
Il progetto RMI si basa su un’interfaccia (contenuta nel file RMI_interfaceFile.java) in cui vengono
definiti i metodi invocabili in remoto dal client:
• Il metodo inserimento_abito accetta come parametri d’ingresso il nome dell’abito, la sua
disponibilità, il suo prezzo e la percentuale di sconto, e aggiunge il prodotto alla struttura dati; quindi
restituisce l’esito dell’operazione, 0 se la registrazione è andata a buon fine, -1 altrimenti, ad
esempio, se la struttura dati è piena.
• Il metodo valutazione_prezzo accetta come parametri d’ingresso il nome dell’abito; quindi il
server valuta il prezzo scontato e restituisce l’esito dell’operazione, un intero positivo pari al prezzo
valutato se la valutazione è andata a buon fine, -1 altrimenti, ad esempio, se l’abito cercato non è
presente nella struttura dati.
Si progettino le classi:
• RMI_Server (contenuta nel file RMI_Server.java), che implementa i metodi del server invocabili in
remoto;
• RMI_Client (contenuta nel file RMI_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.
Parte C
Progettare un servitore multiservizio (uso di select) che consenta di effettuare le operazioni remote
per:
• visualizzare la lista degli abiti la cui percentuale di sconto è maggiore di una certa soglia;
• cambiare la percentuale di sconto.
Più in dettaglio:
• Il client_stream è organizzato come un processo ciclico fino alla fine del file di input e realizza la
funzionalità di visualizzazione della lista degli abiti la cui percentuale di sconto è maggiore di una
certa soglia utilizzando socket stream e un’unica socket.
Per ogni richiesta, il client richiede all’utente e invia al server la percentuale di sconto, quindi riceve
l’elenco degli abiti e lo stampa a video.
• Il client_datagram è organizzato come un processo ciclico fino alla fine del file di input e realizza la
funzionalità di cambio della percentuale di sconto utilizzando socket datagram.
Per ogni richiesta, il client richiede all’utente e invia al server il nome dell’abito e il nuovo valore da
aggiornare; quindi riceve l’esito dell’operazione e lo stampa a video.
• Il server principale unico discrimina le richieste utilizzando la primitiva select. Il server gestisce in
modo parallelo la funzionalità di visualizzazione della lista degli abiti, mentre la funzionalità di
cambio della percentuale di sconto può essere realizzata in modo seriale o parallelo.
Per ogni richiesta di visualizzazione della lista degli abiti la cui percentuale di sconto è
maggiore di una certa soglia, il figlio riceve la percentuale di sconto, scorre la struttura cercando
tutti gli abiti la percentuale di sconto è maggiore di quella cercata e restituisce l’elenco degli abiti
trovati al client.
Per ogni richiesta di cambio della percentuale di sconto, il server riceve il nome dell’abito e il
nuovo valore da aggiornare, aggiorna opportunamente la struttura dati e restituisce l’esito
dell’operazione, un esito positivo se tutto è andato a buon fine, un esito negativo altrimenti, ad
esempio se il prodotto non è presente nella struttura dati.
Si considerino e si segnalino le possibilità di interferenze fra le operazioni, evitandole dove
necessario.
1
2