Nome........................................... Cognome........................................... Matricola............................................. Principi, Modelli e Applicazioni per Sistemi Distribuiti M Prova pratica di laboratorio del 17/12/2013 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 CineManager, per proprietari che vogliono gestire le proprie sale di proiezione. Obiettivo è l’insieme delle funzionalità di supporto per la programmazione di film e la gestione delle varie sale di un cinema. Ciascuna sala è rappresentata da un nome e, per ciascuna stanza, si prevedono al massimo un certo numero di fasce orarie di programmazione. Ogni stanza prevede due tipologie di proiezione: normale (N) o 3D (3D). Un film può essere inserito in diverse fasce orarie di varie sale. Si vogliono realizzare le funzionalità di gestione del sistema: 1. modifica della tipologia di proiezione: questa operazione richiede il nome della sala e il tipo di proiezione, quindi procede alla modifica della tipologia di proiezione della sala; 2. eliminazione di un film dalla programmazione: questa operazione richiede il nome del film, scorre le sale togliendo il film dalla programmazione e restituisce la lista di tutte le sale dalle quali è stato eliminato il film. Si progetti con particolare attenzione la struttura dati che mantiene lo stato delle N sale (L, per libero a default) per al massimo K fasce orarie di programmazione, da implementare opportunamente in Java. Nome Tipo Fascia 1 Fascia 2 Fascia 3 ... Sala 1 N L 3D Il ritorno del Re L Kill Bill Sala 2 Matrix L Kill Bill L Sala 3 3D Il ritorno del Re Il ritorno del Re Matrix Fascia k1 L Matrix L L Matrix L Sala N L 3D L L L L L L L L L Kill Bill Il ritorno del Re L Matrix Fascia k L Utilizzando java RMI sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote per: • • modificare la tipologia di proiezione; eliminare un film dalla programmazione. 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 modifica_tipo_proiezione(String nomeSala, String tipoProiezione) throws RemoteException; Sala[] elimina_film(String nomeFilm) throws RemoteException; } Il metodo modifica_tipo_proiezione restituisce valore logico vero in caso di successo, falso in caso d’errore, ad esempio, se la sala non esiste o se la tipologia di proiezione è errata. Il metodo elimina_film restituisce la lista delle sale dalle quali è stato eliminato il film in programmazione, null in caso d’errore, ad esempio, se il film non è in programmazione in nessuna sala. 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; Sala (contenuta nel file Sala.java), che realizza la struttura dati che mantiene lo stato di una sala. Se si ritiene necessario, si apportino delle modifiche al/ai metodo/i modifica_tipo_proiezione e elimina_film, implementati dal Server, per garantire la mutua esclusione. Apportare, inoltre, opportune modifiche alla classe Sala per rendere possibile il trasferimento di oggetti di tipo Sala. N.B.: poiché non viene richiesta nessuna funzionalità per la creazione di nuove sale e per l'inserimento di film in programmazione, nel template del Server viene già fornita una struttura dati inizializzata nel seguente modo: Nome Sala 1 Tipo N Sala 2 3D Sala 3 3D Fascia 1 Il ritorno del Re Il ritorno del Re L Sala 4 N L Fascia 2 Il ritorno del Re L Fascia 3 Kill Bill Fascia 4 L Fascia 5 Inception Fascia 6 L Matrix L Kill Bill L Il ritorno del Re Kill Bill Matrix L L Matrix L Thor L L