lettera applicazione server Esempio

Transcript

lettera applicazione server Esempio
Cognome:
Nome:
Matricola:
Reti di Calcolatori L-A
Appello del 15/01/2007
………………………………
………………………………
………………………………
Compito 3
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 MagazzinoOrdinato, per la gestione di magazzino
di una grossa catena di distribuzione di DVD.
In particolare, i servizi di MagazzinoOrdinato mantengono, per ogni prodotto (DVD), le seguenti
informazioni: il titolo del DVD, unico all’interno del sistema; la disponibilità a magazzino, un
intero inteso come numero di pezzi presenti; e la collocazione, cioè un identificatore formato da
un carattere seguito da una cifra (ad esempio “A2”, “C4”, oppure “Z0”).
Si vogliono realizzare le funzionalità di gestione:
1. inserimento di un nuovo prodotto: questa operazione richiede il titolo del DVD, la sua
disponibilità e la collocazione, ed inserisce il prodotto nella struttura dati;
2. visualizzazione della disponibilità di un prodotto: questa operazione richiede il titolo del
DVD e restituisce la disponibilità del prodotto a magazzino;
3. visualizzazione dei prodotti la cui collocazione comincia con una certa lettera: questa
operazione richiede una lettera e visualizza l’elenco di tutti i prodotti la cui collocazione
comincia con la lettera indicata;
4. diminuzione della disponibilità: questa operazione richiede il titolo e la quantità di DVD da
diminuire, decrementa la disponibilità del prodotto e visualizza la disponibilità aggiornata.
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
Matrix
Via col vento
…
L
Altrimenti ci arrabbiamo
Disponibilità
L
100
40
…
L
15
Collocazione
L
Z2
S1
…
L
A3
Si considerino e si segnalino le possibilità di interferenze fra le operazioni, evitandole dove
necessario.
1
Parte C
Progettare un servitore multiservizio (uso di select) che consenta di effettuare le operazioni
remote per:
• visualizzare la lista dei prodotti la cui collocazione comincia con una certa lettera;
• inserire un nuovo prodotto.
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 dei prodotti la cui collocazione comincia con una
certa lettera, utilizzando socket stream e un’unica socket.
Per ogni richiesta, il client richiede all’utente e invia al server la lettera da ricercare; quindi
riceve l’elenco dei prodotti 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 inserimento di un nuovo prodotto utilizzando socket datagram.
Per ogni richiesta, il client richiede all’utente e invia al server il titolo del DVD, la sua
disponibilità e la collocazione, quindi riceve l’esito della richiesta, e lo stampa a video.
•
Il server discrimina le richieste utilizzando la primitiva select. Il server gestisce in modo
parallelo la funzionalità di visualizzazione della lista dei prodotti la cui collocazione comincia
con una certa lettera, mentre la funzionalità di inserimento di un nuovo prodotto deve essere
realizzata in modo seriale.
Per ogni richiesta di visualizzazione della lista dei prodotti la cui collocazione comincia
con una certa lettera, il figlio riceve la lettera di ricerca, scorre la struttura cercando tutti i
prodotti la cui collocazione inizia con la lettera ricercata e restituisce l’elenco dei prodotti trovati
al client.
Per ogni richiesta di inserimento di un nuovo prodotto, il server riceve il titolo del DVD, la
sua disponibilità e la collocazione; quindi restituisce l’esito dell’operazione, 0 se la registrazione
è andata a buon fine, -1 altrimenti, ad esempio, se la struttura dati è piena.
Parte Java
Utilizzando java RMI sviluppare un’applicazione C/S che consenta di effettuare le operazioni
remote per:
• visualizzare la disponibilità di un prodotto;
• diminuire la disponibilità di un prodotto.
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:
• Il metodo visualizza_disponibilita accetta come parametri d’ingresso il titolo del DVD
richiesto; quindi, restituisce la disponibilità del prodotto, oppure un esito negativo se il prodotto
non è presente nella struttura dati.
• Il metodo diminuzione_disponibilita accetta come parametri d’ingresso il titolo e la
quantità di DVD da diminuire; quindi, il server modifica la disponibilità del prodotto nella
struttura dati e restituisce la disponibilità aggiornata oppure un esito negativo, ad esempio, se il
prodotto non è presente nella struttura dati.
Si progettino inoltre le 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.
2