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