Esercizi su Java RMI. Progetto di Cliente / Servitore e supporto. Possibile tabella mantenuta dal server

Documenti analoghi
Corso di Reti di Calcolatori L-A

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

Corso di Reti di Calcolatori T

Corso di Reti di Calcolatori LA

Corso di Reti di Calcolatori T

Organizzazione della lezione. Lezione 16 Remote Method Invocation - 4. Modello Client Server. Le classi di Archivio Client-Server

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

PROVA FINALE Ingegneria del software

Architetture distribuite Alcuni esempi: Alcuni commenti sul ruolo del registry. Import Interfaccia remota Due metodi remoti

Corso di Reti di Calcolatori L-A

Lezione n.10 LPR. RMI CallBacks

Organizzazione della lezione. 18. Applicazioni ed Esempi (2) II prova intercorso. Prove scritte degli esami successivi

Esercizi su Callback RMI

18. Applicazioni ed Esempi (2)

Compute engine generici in RMI

Esercizi RMI. Laboratorio di Programmazione di Rete A 5/12/2007. Esercitazione di Laboratorio

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

LPR 2005/2006 Lezione 7. paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio

Lezione n.10 LPR Informatica Applicata RMI Approfondimenti Callback. 15/05/2012 Laura Ricci

Organizzazione della lezione. Lezione 14 Remote Method Invocation - 2. Remote. Il diagramma di RemoteHello

Eccezioni. Corso di Programmazione CdS: Informatica e Tecnologie per la Produzione di Software Nicola Fanizzi.

Prova d Esame Compito A

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

Organizzazione della lezione. Invocazione remota di metodi fai-da-te. Lezione 12 Introduzione a Remote Method Invocation

16. Java Remote Method Invocation (4)

Compute engine generici in RMI

Organizzazione della II prova intercorso ed esami. L accesso al registry per il rebind() Una soluzione con registry multipli Alcuni commenti finali

Organizzazione della lezione. 16. Java Remote Method Invocation (4) Le classi ed interfacce di RMI. Persistenza. Oggetti attivabili

Organizzazione della lezione. Lezione 17 Remote Method Invocation - 5. Remote. Le classi ed interfacce di RMI. Persistenza. Oggetti attivabili

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

LE ECCEZIONI. Dott. Riccardo Zese.

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

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

ASD: Sistemi Distribuiti (Prof. Scarano) 20/05/2002

15. Java Remote Method Invocation (3)

Programmazione II: Esami Svolti

12. Java: Remote Method Invocation (3)

Remote Method Invocation

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Prova d Esame Compito A

Programmazione a oggetti

PROVA FINALE Ingegneria del software

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Corso di Reti di Calcolatori L-A

Esercitazione n 4. Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java:

10. Invocazione di Metodi Remoti

System.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

Java RMI (Remote Method Invocation)

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}

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

Organizzazione della lezione. Modelli di programmazione: RPC e RMI Trasparenza: un dibattito Un esempio di implementazione di invocazione remota

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

Laurea in Informatica. "Programmazione Distribuita" - Prof. Scarano. A.A Università di Salerno 1. Organizzazione della lezione

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

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

14. Java Remote Method Invocation (2)

LETTURA DI DATI DA INPUT. Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream

Esercitazione di Sistemi Distribuiti

Eccezioni Precisazioni e approfondimenti

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

Le eccezioni. Eccezioni

Il problema nasce dalla caratteristica di Java di essere distribuito

Esercitazione: Socket Java senza connessione

MinMax a Java Distributed Application SISTEMI DISTRIBUITI Fabrizio G. Ventola

Organizzazione della lezione. Organizzazione della lezione. 14. Java Remote Method Invocation (2) La sicurezza in Java

La gestione delle eccezioni

RMI. Java RMI RMI. G. Prencipe

Capitolo 13: Gestione delle eccezioni. Capitolo 13. Gestione delle eccezioni Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

Oggetti Distribuiti e Java RMI

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

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

Pag. 1 di 7. import java.io.*;

import java.io.*; Pag. 1 di 9

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

Le basi del linguaggio Java

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

Prova d Esame Compito A

Uguaglianza e copia di oggetti

Vittorio Scarano. Università degli Studi di Salerno. Lezione 23 Enterprise JavaBeans (8)

Realizzare un applicazione console che stampi la somma dei primi n numeri dispari oppure pari (a scelta dell operatore). import java.io.

Obiettivo della lezione. Presentare Java 2 Enterprise Edition (J2EE) Presentare due tecnologie Java connesse ad Enterprise Java Beans

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

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

Esercitazione 4. Corso di Tecniche di programmazione

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

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

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

Prova d Esame Compito A

public double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

Transcript:

Esercizi su Java RMI Progetto di Cliente / Servitore e supporto Un progetto RMI si deve basare sempre sulla interfaccia remota e sulle classi del cliente e del servitore più su alcune classi di supporto 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 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). Possibile tabella mantenuta dal server Sessione Intervento 1 Intervento 2 Intervento 5 S1 S2 S3 S12 Nome Speaker1 Nome Speaker2 Il Client può richiedere operazioni per: - registrare uno speaker ad una sessione; - ottenere il programma del congresso; 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 e/o sessione inesistente oppure per la quale sono già stati coperti tutti gli spazi d intervento). Si effettuino i controlli dove è più opportuno farli. 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. Esercizi su RMI - 1 Esercizi su RMI - 2

Interazione Utente 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 Giornata? 2 Sessione? S1 Nome speaker? Pluto Registrazione non effettuata: sessione completa 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 quinto intervento: NomeSpeaker5 Sessione S2: Sessione S12: ecc. Esercizi su RMI - 3 Esercizi su RMI - 4

Un progetto RMI si deve basare sempre sulla interfaccia remota e sulle classi del cliente e del servitore più su alcune classi di supporto Il progetto si compone di: un interfaccia ServerCongresso (contenuta nel file ServerCongresso.java) in cui vengono definiti i metodi invocabili in remoto dal client (registrazione, programma): una classe ServerCongressoImpl (contenuta nel file ServerCongressoImpl.java), che implementa i metodi del server invocabili in remoto; una classe ClientCongresso (contenuta nel file ClientCongresso.java), che realizza l interazione con l utente mettendo a disposizione le funzionalità descritte, fornite effettuando le opportune chiamate remote. una classe 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; Interfaccia Remota del Servizio 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; Il Server presenta l interfaccia di invocazione: ServerCongressoImpl mentre 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, ServerCongresso, di cui deve invocare i metodi. Esercizi su RMI - 5 Esercizi su RMI - 6

Classe Programma public class Programma implements Serializable public String speaker[][] = new String[12][5]; public Programma() 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]=="") speaker[sessione][k] = nome; return 0; return 1; public void stampa() System.out.println("Sessione\tIntervento1\t Intervento2\tIntervento3\tIntervento4\t Intervento5\n"); 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); Client 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]; // Impostazione del SecurityManager if (System.getSecurityManager() == null) System.setSecurityManager (new RMISecurityManager()); // Connessione al servizio RMI remoto String completename = "//" + registryhost + ":" + REGISTRYPORT + "/" + servicename; Esercizi su RMI - 7 ServerCongresso serverrmi = (ServerCongresso)Naming.lookup(completeName); Esercizi su RMI - 8

// Ciclo di interazione con l utente System.out.println("\nRichieste di servizio fino a fine file"); System.out.print("Servizio (R=Registrazione, P=Programma del congresso): "); String service; boolean ok; while((service=stdin.readline())!=null) if(service.equals("r")) // giornata ok=false; int g; System.out.print("Giornata (1-3)? "); while (ok!=true) g = Integer.parseInt(stdIn.readLine()); if (g < 1 g > 3) System.out.println("Non valida"); System.out.print("Giornata (1-3)? "); continue; else ok=true; // sessione ok=false; String sess; System.out.print("Sessione (S1 - S12)? "); while (ok!=true) sess = stdin.readline(); if (!sess.equals("s1") &&!sess.equals("s12")) System.out.println("Non valida"); System.out.print("Sessione(S1-S12)?"); continue; Esercizi su RMI - 9 else ok=true; // speaker System.out.print("Speaker? "); String speak = stdin.readline(); // nessun controllo, qualsiasi stringa potrebbe essere un nome accettabile // Tutto input corretto if (serverrmi.registrazione(gg, sess, speak)==0) System.out.println("Registrazione di " + speak + " effettuata per giornata " + gg + " sessione " + sess); else System.out.println("Registrazione non effettuata, sessione completa ); // R // stampa programma 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("Giorn. non valida"); System.out.print("Giornata (1-3)? "); continue; else ok=true; Programma prog = serverrmi.programma(g); System.out.println("Programma giornata " + g + "\n"); prog.stampa(); // P Esercizi su RMI - 10

else System.out.println("Servizio non dispon."); System.out.print("Servizio (R=Registrazione, P=Programma del congresso): "); //!EOF catch (Exception e) System.err.println("ClRMI:"+e.getMessage()); e.printstacktrace(); System.exit(1); Server public class ServerCongressoImpl extends UnicastRemoteObject implements ServerCongresso static Programma prog[]; // Costruttore public ServerCongressoImpl() throws RemoteException super(); // Richiesta di prenotazione public int registrazione(int giorno, String sessione, String speaker) throws RemoteException int numsess = -1; System.out.println("Server RMI: richiesta registrazione con parametri"); System.out.println("giorno = "+giorno); System.out.println("sessione = "+sessione); System.out.println("speaker = "+speaker); if (sessione.equals("s1")) numsess = 0; else if (sessione.equals("s2")) numsess = 1; else if (sessione.equals("s12"))numsess = 11; Esercizi su RMI - 11 Esercizi su RMI - 12

/* Se i dati sono sbagliati significa che sono stati trasmessi male e quindi solleva una eccezione */ if (numsess == -1) throw new RemoteException(); if (giorno < 1 giorno > 3) throw new RemoteException(); return prog[giorno-1].registra(numsess,speaker); // Richiesta di programma public Programma programma(int giorno) throws RemoteException System.out.println("Server RMI: richiesto programma del giorno " + giorno); if (giorno < 1 giorno > 3) throw new RemoteException(); return prog[giorno-1]; // Avvio del Server RMI public static void main(string[] args) try // Impostazione del SecurityManager if (System.getSecurityManager() == null) System.setSecurityManager (new RMISecurityManager()); // Registrazione del servizio RMI String completename = "//" + registryhost + ":" + REGISTRYPORT + "/" + servicename; ServerCongressoImpl serverrmi = new ServerCongressoImpl(); Naming.rebind(completeName, serverrmi); catch (Exception e) System.err.println("Server RMI \"" + servicename + "\": " + e.getmessage()); e.printstacktrace(); System.exit(1); //creazione programma prog=new Programma[3]; for (int i=0; i<3; i++) prog[i]=new Programma(); final int REGISTRYPORT = 1099; String registryhost = "localhost"; String servicename = "ServerCongresso"; Esercizi su RMI - 13 Esercizi su RMI - 14

Esercizi su Java RMI Progetto di Cliente / Servitore e supporto Si vuole realizzare un sistema che implementa un servizio di bacheca elettronica. Dal lato server si devono gestire le strutture dati che implementano le bacheche, una per argomento. Dal lato client si devono fornire una serie di funzionalità per operare sulle bacheche, in particolare si richiede l implementazione di due funzionalità: creare una nuova bacheca; inviare un messaggio da inserire nella bacheca relativa all argomento selezionato; Un progetto RMI si deve basare sempre sulla interfaccia remota e sulle classi del cliente e del servitore più su alcune classi di supporto Bacheche Questo progetto RMI si basa su: un interfaccia (ServerInterface, contenuta nel file ServerInterface.java) in cui vengono definiti i metodi invocabili in remoto dal client: una classe di supporto (Messaggio contenuta nel file Messaggio.java), che implementa la struttura dati contenente l argomento (stringa) e il corpo (vettore di 30 stringhe) del messaggio da inviare; una classe (Bacheca contenuta nel file Bacheca.java), che implementa la struttura dati che raccoglie tutti i messaggi (al massimo 100) relativi ad un certo argomento; una classe Server (contenuta nel file Server.java), che gestisce le bacheche (al massimo 10) e implementa i metodi del server invocabili in remoto; una classe Client (contenuta nel file Client.java), che realizza l interazione con l utente proponendo ciclicamente i servizi che utilizzano i due metodi remoti, fino alla fine del file di input da tastiera e che fa le richieste al servitore FARE il progetto seguendo lo schema Esercizi su RMI - 15 Esercizi su RMI - 16