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