Corso di Reti di Calcolatori L-A

Documenti analoghi
Java RMI. Alcune premesse Interfaccia e Implementazione RMI. Architettura. Esempi interfaccia e implementazione

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Compute engine generici in RMI

Compute engine generici in RMI

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione

RMI. Java RMI RMI. G. Prencipe

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

Programmazione distribuita

GESTIONE DEGLI ERRORI

Oggetti Distribuiti e Java RMI

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Corso di Reti di Calcolatori L-A

Java RMI (Remote Method Invocation)

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Reti di Calcolatori L-A

Java Remote Method Invocation

Esempio: Interfacce. Gioco Interfacce

Corso di Reti di Calcolatori L-A

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Le basi del linguaggio Java

Esempio: Interfacce. Gioco Interfacce

Programmazione a oggetti

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Il problema nasce dalla caratteristica di Java di essere distribuito

Eccezioni Precisazioni e approfondimenti

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Lezione n.10. RMI CallBacks 9/12/2009 Andrea Corradini

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Programmazione di rete in Java

Esercitazione di Sistemi Distribuiti: Java RMI

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Introduzione a Java Remote Method Invocation (RMI)

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria. Corso di INGEGNERIA DEL SOFTWARE (Ing. Informatica, Nuovo Ordinamento)

RMI e Firewall. Una soluzione è offerta dal transport layer di RMI stesso

Gestione delle Eccezioni

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Esercitazione: Socket Java senza connessione

Corso di Telematica II

Uguaglianza e copia di oggetti

Agenti Mobili in Java RMI

OOP: L13: Eccezioni e loro trattamento in Java

Remote Method Invocation (RMI)

Prova d Esame Compito A

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

MinMax a Java Distributed Application SISTEMI DISTRIBUITI Fabrizio G. Ventola

Remote Method Invocation

RMI: metodi equals e hashcode

Corso di Reti di Calcolatori L-A

Multithreading. Multithreading/2

Lezione n.9. RMI: Remote Method Invocation 1/12/2009 Andrea Corradini

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:

Contesto e motivazioni Architettura e concetti di base Componenti di RMI RMIRegistry Interfacce, eccezioni e classi Lo sviluppo di una applicazione L

Iterazioni. L istruzione while. while (condition) istruzione

Le basi del linguaggio Java

Java RMI: Esempio Completo di un Applicazione Distribuita

StringTokenizer: esempio. Lettura di matrici da file. Come procedere? Lettura matrice: esempio - I. La classe StringTokenizer

MagiCum S.r.l. Progetto Inno-School

Sincronizzazione con Java

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

LA PROGRAMMAZIONE RMI

Esercizi della lezione 5 di Java

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

Programmazione distribuita in Java. Socket & Client-Server

Architettura Client-Server

Applicazioni web. Parte 10 Socket. Alberto Ferrari

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Studente (Cognome Nome):

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Programmazione di sistemi distribuiti

Parte II: Reti di calcolatori Lezione 12

Programmazione Orientata agli Oggetti in Linguaggio Java

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

In un file di testo galera.txt sono memorizzati i dati relativi ad alcune condanne penali, ognuna con i dati:

I Thread. un thread è uno stream di esecuzione del programma

Architettura. Java RMI (Remote Method Invocation) Definizioni e generalità

Il problema è trovare un modo nel quale gli eventi dell oggetto di riferimento, siano comunicati a tutti gli altri interessati.

Concorrenza e sincronizzazione

Politecnico di Milano

56789:;<( !"#$%&'%()$(*+$,-../(0!+!( %( %11%2$/&$( .()"+)&%/&+%0,%/+"1+,22,3("'&%

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Parte II: Reti di calcolatori Lezione 10

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Programmazione di reti Corso B. 22 Novembre 2016 Lezione 9

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

CloneNotSupportedException clone() Object clone() protected native Object clone() throws CloneNotSupportedException this

Main System Monitor Keyboard

Cifratura simmetrica

Prima lezione di laboratorio. I mattoni di base di un programma Java. Riassunto. Comandi Unix. Oggi. Blog & Group.

Esercitazione 15. Il problema dello Sleeping Barber

Transcript:

Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 6 (svolta) Java RMI Luca Foschini Anno accademico 2010/2011 Esercitazione 6 1 Specifica: il Client Si progetti un applicazione Client/Server per la gestione delle registrazioni ad un congresso. L organizzazione del congresso fornisce agli speaker delle varie sessioni un interfaccia tramite la quale iscriversi ad una sessione, e la possibilità di visionare i programmi delle varie giornate del congresso, con gli interventi delle varie sessioni. Il Client può richiedere operazioni per: registrare uno speaker ad una sessione; ottenere il programma del congresso. Il Client è implementato come un processo ciclico che continua a fare richieste sincrone fino ad esaurire tutte le esigenze utente, cioè fino alla fine del file di input dell'utente. Esercitazione 6 2

Specifica: il Server Il Server mantiene sul suo nodo di residenza i programmi delle 3 giornate del congresso, ciascuno dei quali è memorizzato in una struttura dati in cui ad ogni riga corrisponde una sessione (in tutto 12 per ogni giornata). Per ciascuna sessione vengono memorizzati i nomi degli speaker che si sono registrati (al massimo 5). Sessione Intervento 1 Intervento 2 Intervento 5 S1 S2 Nome Speaker1 Nome Speaker2 S12 Esercitazione 6 3 Specifica: dettagli ulteriori Il Client inoltra le richieste al Server in modo appropriato, e per ogni possibile operazione prevedono anche una gestione di eventuali condizioni anomale (come per esempio la richiesta di registrazione ad una giornata/sessione inesistente oppure per la quale sono già stati coperti tutti gli spazi d intervento). Si effettuino i controlli dove è più opportuno farli. Alcuni esempi di interazione per la richiesta di registrazione: Giornata? 25 Giornata non valida Giornata? 2 Sessione? S46 Sessione non valida Giornata? 2 Sessione? S1 Nome speaker? Pippo Registrazione effettuata correttamente ecc. Alcuni esempi di interazione per la visione del programma: Giornata? 1 Programma della prima giornata del congresso Sessione S1: primo intervento: NomeSpeaker1 secondo intervento: non registrato... Esercitazione 6 4

Progetto e sue parti Il progetto RMI si compone di: Un interfaccia remota (ServerCongresso, contenuta nel file ServerCongresso.java) in cui vengono definiti i metodi invocabili in remoto dal client (registrazione, programma); Una classe di appoggio (Programma contenuta nel file Programma.java), che implementa la struttura dati contenente gli interventi delle varie sessioni; si noti che i programmi delle varie giornate andranno poi gestiti con una opportuna struttura dati che li raccolga tutti; Una classe per la parte server (ServerCongressoImpl contenuta nel file ServerCongressoImpl.java), che implementa i metodi del server invocabili in remoto; Una classe per la parte client (ClientCongresso contenuta nel file ClientCongresso.java), che realizza l interazione con l utente e effettua le opportune chiamate remote. Esercitazione 6 5 Deployment Il progetto RMI si compone delle due parti Cliente e Servitore, che sono sotto il controllo utente e da attivare, e anche della parte di supporto resa necessaria ad RMI per il sistema di nomi, il registry da attivare sul nodo del servitore. Il Server presenta l interfaccia di invocazione: ServerCongressoImpl Il Client viene attivato con: ClientCongresso NomeHost Il Client (istanza della classe relativa) deve recuperare dal registry, in esecuzione sull host specificato, il riferimento all oggetto remoto, con interfaccia ServerCongresso, di cui deve invocare i metodi. L ordine di attivazione è prima il registry, poi il server, infine la parte cliente. Esercitazione 6 6

Interfaccia ServerCongresso import java.rmi.remote; import java.rmi.remoteexception; public interface ServerCongresso extends Remote { int registrazione (int giorno, String sessione, String speaker) throws RemoteException; Programma programma (int giorno) throws RemoteException; Esercitazione 6 7 Classe Programma di appoggio public class Programma implements Serializable { // classe per modellare ogni giornata del convegno public String speaker[][] = new String[12][5]; public Programma(){ // init con stringa nulla for(int i=0; i<5; i++) for(int e=0; e<12; e++) speaker[e][i]=""; public synchronized int registra (int sessione, String nome){ for (int k=0;k<5; k++) { if ( speaker[sessione][k].equals("") ) { speaker[sessione][k] = nome; return 0; return 1; public void stampa (){ System.out.println("Sessione\tIntervento1\tIntervento2 "); for (int k=0; k<12; k++) { String line = new String("S"+(k+1)); for (int j=0;j<5;j++) { line = line + "\t\t"+speaker[k][j]; System.out.println(line); // Programma Esercitazione 6 8

Client 1/3 class ClientCongresso { public static void main(string[] args) { final int REGISTRYPORT = 1099; String registryhost = null; String servicename = "ServerCongresso"; BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); // Controllo dei parametri della riga di comando try {if (args.length!= 1) { System.out.println("Sintassi: "); System.exit(1); registryhost = args[0]; // Connessione al servizio RMI remoto String completename = "//" + registryhost + ":" + REGISTRYPORT + "/" + servicename; ServerCongresso serverrmi = (ServerCongresso) Naming.lookup (completename); System.out.println("\nRichieste a EOF"); System.out.print("Servizio (R=Registrazione, P=Programma): "); String service; boolean ok; Esercitazione 6 9 Client 2/3 // Ciclo di interazione con l utente while((service=stdin.readline())!=null) {if (service.equals("r")) { ok=false; int g; // lettura giornata System.out.print("Giornata (1-3)? "); while (ok!=true){ g = Integer.parseInt(stdIn.readLine()); if (g < 1 g > 3) { System.out.println("Giornata non valida"); System.out.print("Giornata (1-3)? "); continue; else ok=true; // while interno ok=false; String sess; // lettura sessione System.out.print("Sessione (S1 - S12)? "); while (ok!=true){ sess = stdin.readline(); if (!sess.equals("s1") &&!sess.equals("s12")) {... continue; else ok=true; System.out.print("Speaker? "); // lettura speaker String speak = stdin.readline(); // Parametri corretti, invoco il servizio remoto if (serverrmi. Registrazione (gg, sess, speak)==0) System.out.println("Registrazione di "); else System.out.println("Registrazione non effettuata"); Esercitazione 6 10

Client 3/3 else if (service.equals("p")) { int g; boolean ok=false; System.out.print("Giornata (1-3)? "); while (ok!=true){ g = Integer.parseInt(stdIn.readLine()); if (g < 1 g > 3){ System.out.println("Giornata non valida"); System.out.print("Giornata (1-3)? "); continue; else ok=true; // while Programma prog = serverrmi.programma(g); System.out.println("Programma giornata "+g+"\n"); prog.stampa(); // Operazione P else System.out.println("Servizio non disponibile"); System.out.print("Servizio (R=Registrazione, "); // while //try catch (Exception e){... // main // ClientCongresso Esercitazione 6 11 Server 1/2 public class ServerCongressoImpl extends UnicastRemoteObject implements ServerCongresso { static Programma prog[]; // si istanzia un programma per giornata // Costruttore public ServerCongressoImpl()throws RemoteException {super(); // METODO REMOTO: Richiesta di prenotazione public int registrazione (int giorno, String sessione, String speaker) throws RemoteException { int numsess = -1; System.out.println("Server RMI: richiesta registrazione:"); if (sessione.equals("s1")) numsess = 0; else if (sessione.equals("s2")) numsess = 1; else if (sessione.equals("s12")) numsess = 11; /* Se i dati sono sbagliati significa che sono stati trasmessi male e quindi si solleva una eccezione */ if (numsess == -1) throw new RemoteException(); if (giorno < 1 giorno > 3) throw new RemoteException(); return prog[giorno-1].registra(numsess,speaker); Esercitazione 6 12

Server 2/2 // METODO REMOTO: Richiesta di programma public Programma programma (int giorno)throws RemoteException { System.out.println("Server RMI: programma giorno "+giorno); if (giorno < 1 giorno > 3) throw new RemoteException(); return prog[giorno-1]; public static void main (String[] args) // Codice di avvio del Server RMI { prog = new Programma[3]; //creazione dei programmi for (int i=0; i<3; i++) prog[i]= new Programma(); final int REGISTRYPORT = 1099; String registryhost = "localhost"; String servicename = "ServerCongresso"; try { // Registrazione del servizio RMI String completename = "//" + registryhost + ":" + REGISTRYPORT + "/" + servicename; ServerCongressoImpl serverrmi = new ServerCongressoImpl(); Naming.rebind (completename, serverrmi); // try catch (Exception e){... /* main */ // ServerCongressoImpl Esercitazione 6 13