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