Organizzazione della lezione. Lezione 16 Remote Method Invocation - 4. Modello Client Server. Le classi di Archivio Client-Server
|
|
- Clemente Casali
- 5 anni fa
- Visualizzazioni
Transcript
1 Organizzazione della lezione Lezione 16 Remote Method Invocation - 4 Vittorio Scarano Corso di Programmazione Distribuita ( ) Laurea di I livello in Informatica Università degli Studi di Salerno Alcuni esempi di applicazioni distribuite: una agenda telefonica distribuita (client-server) una chat (client-server) Alcuni commenti sul ruolo del registry una chat (peer-to-peer) 2 Modello Client Server Le classi di Archivio Client-Server Modello più comune Il Client effettua una richiesta Es.: invocazione remota Il server invia la risposta Es.: risultato della invocazione Un esempio di applicazione una agenda telefonica ogni client può: registrare un numero telefonico richiedere la lista di tutti i numeri inseriti client client request response server 3 4
2 Server.java Le classi di Archivio Client-Server import java.util.*; public interface Server extends java.rmi.remote { public void registra (RecordAgenda r) public ArrayList dammiagenda () Import Interfaccia remota Due metodi remoti inserisce il record passato nella lista lettura completa della Agenda 5 6 RecordAgenda.java Le classi di Archivio Client-Server public class RecordAgenda implements java.io.serializable { public RecordAgenda(String n, String t, String i){ nome = n; telefono = t; inseritoda = i; public String getnome() {return nome; public String gettelefono() {return telefono; public String getinseritoda() {return inseritoda; private String nome; private String telefono; private String inseritoda; Serializzabile deve essere trasmessa come parametro Costruttore Metodi di accesso Variabili istanza 7 8
3 ServerImpl.java (1) ServerImpl.java (2) import java.rmi.server.*; import java.util.*; import java.io.*; public class ServerImpl extends UnicastRemoteObject implements Server { public ServerImpl() throws java.rmi.remoteexception { public static void main(string args[]) { System.setSecurityManager( new RMISecurityManager()); ServerImpl obj = new ServerImpl(); Naming.rebind("AgendaServer", obj); System.out.println("Pronto.."); catch (Exception e) { // end main Continua Import di vario uso Oggetto remoto che implementa la interface Server Security Manager registrazione sul registry 9 public void registra (RecordAgenda r) throws RemoteException{ agenda.add(r); System.out.println ("Inserito record:"+ r.getnome()+ " Num.: "+ r.gettelefono()+ " Inserito da: "+ r.getinseritoda()); public ArrayList dammiagenda () throws RemoteException{ return agenda; private ArrayList agenda = new ArrayList(); Metodi remoti aggiunge ad agenda stampa a video restituisce l ArrayList Variabile istanza con inizializzazione 10 Le classi di Archivio Client-Server ClientAgenda.java (1) 11 import java.rmi.server.*; import java.util.*; import java.io.*; public class ClientAgenda { public static void main(string args[]) { Server serverref = null; if (args.length > 0 ) nickname = args[0]; else {System.out.println ( Dare il nickname"); System.exit(1); System.setSecurityManager( new RMISecurityManager()); serverref = (Server) Naming.lookup ( "rmi://"+host+"/agendaserver"); catch (Exception e) { // continua Import di vario uso lettura del nickname con errore se non c è Security Manager ricerca del server su registry 12
4 ClientAgenda.java (2) ClientAgenda.java (3) // sempre nel main.. la shell BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String cmd; System.out.println ("Benvenuto "+nickname); for (;;) { System.out.print(PROMPT); cmd = in.readline(); if (cmd.equals ("close")) { break; else if (cmd.equals("inserisci")) { System.out.print ("Nome: "); String nome = in.readline(); System.out.print ("Telefono: "); String telefono = in.readline(); RecordAgenda r = new RecordAgenda( nome, telefono, nickname); serverref.registra(r); else if (cmd.equals("lista")) { La shell di comandi del client Comandi: close/inserisci/lista apertura stream Uscita Inserimento lettura parametri invocazione metodo remoto sul server 13 // sempre nel main.. e nel for else if (cmd.equals("lista")) { ArrayList a = serverref.dammiagenda(); for (int i = 0; i < a.size(); i++) { RecordAgenda rec=(recordagenda)a.get(i); System.out.println (rec.getnome()+ " "+ r.gettelefono()+" (inserito da "+ rec.getinseritoda()+")"); else System.out.println ("UH?"); // fine for catch (Exception e) { System.exit(0); // fine main static String nickname; public static final String HOST= localhost"; public static final String PROMPT="Comandi >"; Lista dei record inseriti invocazione remota stampa di tutti i record Comando non compreso Variabile di istanza Costante di uso 14 Alcuni commenti Il call-back In questa applicazione, il ruolo del client e del server sono rigidamente fissati il client chiede (invoca) ed il server dà (restituisce) Non sempre questo è possibile in applicazioni più evolute (anche di poco), il client deve essere contattato dal server se non altro, per favorire la consapevolezza (awareness) dell utente sul comportamento degli altri ad esempio, vorremmo informare un utente su chi è connesso in questo momento Necessario il call-back 15 Meccanismo mediante il quale il client chiede al server di essere richiamato (call-back) Una altra motivazione (oltre alla consapevolezza) chiamate asincrone per la la richiesta di un servizio pesante computazionalmente il client richiede un servizio e chiede di essere richiamato quando i risultati sono disponibili Implementazione con Invocazioni Remote il client (dotato di interface remota) passa il proprio riferimento remoto al server che lo usa per contattarlo I ruoli di client e server non vengono scambiati non è un peer-to-peer 16
5 Organizzazione della lezione Una applicazione client-server evoluta Alcuni esempi di applicazioni distribuite: Una chat classica ma semplice (IRC dei poveri) una agenda telefonica distribuita (client-server) una chat (client-server) Alcuni commenti sul ruolo del registry una chat (peer-to-peer) Il server riceve da ogni client la iscrizione/abbandono della chat manda a tutti i client quello che ognuno dice (broadcast) La necessità del call-back implicita nella applicazione: il server deve poter informare ogni client di quanto digitato da un client ma anche necessaria per permettere ad ogni utente di avere la informazione su chi è iscritto alla chat Le classi di Chat Client-Server Server.java Import 19 public interface Server extends java.rmi.remote { public void dico (Messaggio m) public void iscrivi (Remote idref) public void abbandona (Remote idref) Interfaccia remota Tre metodi remoti chiamato da un client se deve scrivere a tutti iscrizione alla chat per abbandonare Notare il passaggio del riferimento remoto necessario per il callback 20
6 Le classi di Chat Client-Server Chat.java public interface Chat extends java.rmi.remote { public void dico (Messaggio m) public void iscrivi (String nickiscritto) public void abbandona (String nickabbandona) public String getnickname () Interfaccia remota Quattro metodi remoti chiamato dal server per il broadcast di messaggi consapevolezza della iscrizione/abbondono alla chat di un utente utilità per uso da parte del server (non fondamentale) Metodi chiamati solo dal server Le classi di Chat Client-Server Messaggio.java public class Messaggio implements java.io.serializable{ private String mittente; private String testo; public Messaggio(String mit, String tes) { mittente = mit; testo = tes; public String getmittente() { return mittente; public String gettesto() { return testo; I dati spediti come parametri ai metodi necessario serializzarli Variabili istanza Costruttore Metodi di accesso 23 24
7 Le classi di Chat Client-Server ServerImpl.java (1) 25 import java.rmi.server.*; import java.util.*; import java.io.*; public class ServerImpl extends UnicastRemoteObject implements Server { public ServerImpl() throws java.rmi.remoteexception { public static void main(string args[]) { System.setSecurityManager( new RMISecurityManager()); ServerImpl obj = new ServerImpl(); Naming.rebind("ChatServer", obj); System.out.println("Pronto "); catch (Exception e) { // end main Continua Import di vario uso Oggetto remoto che implementa la interface Server Security Manager registrazione sul registry 26 ServerImpl.java (2) ServerImpl.java (3) public void iscrivi (Remote idref) String nomeclientiscritto = ((Chat) idref).getnickname(); System.out.println ("\nentra "+ nomeclientiscritto+"."); // Notifica a tutti i client presenti for (int i = 0; i < clientrefs.size(); i++) { Chat unclient = ((Chat) clientrefs.get(i)); unclient.iscrivi(nomeclientiscritto) ; clientrefs.add(idref); // continua Metodo si preleva il nickname si notifica a tutti i client in lista notare che il client appena iscritto non è ancora nella lista aggiunta alla lista di client connessi si usa il riferimento remoto public void abbandona (Remote idref) int indice = clientrefs.indexof(idref); Object app = clientrefs.remove(indice); String nomeclientabbandona = ((Chat) idref).getnickname(); System.out.println ("\n"+ nomeclientabbandona + " ha abbandonato la chat."); // Invio la notifica a tutti i client for (int i = 0; i < clientrefs.size(); i++) { Chat unclient = ((Chat) clientrefs.get(i)); unclient.abbandona(nomeclientabbandona); Metodo speculare a iscrivi cancellazione preleva l indice nell ArrayList a cui è memorizzato il client lo cancella notifica come per 27 28
8 ServerImpl.java (4) Le classi di Chat Client-Server public void dico (Messaggio m) for (int i = 0; i < clientrefs.size(); i++) { Chat unclient = ((Chat) clientrefs.get(i)); // invio a tutti tranne che al mittente if (! (m.getmittente().equals( unclient.getnickname()))) unclient.dico(m) ; static ArrayList clientrefs = new ArrayList(); Metodo per ogni client se non è il mittente del messaggio invia il messaggio al client Variabile istanza per i client contiene i riferimenti remoti dei client inizializzazione ChatImpl.java (1) ChatImpl.java (2) import java.rmi.server.*; import java.util.*; import java.io.*; public class ChatImpl extends UnicastRemoteObject implements Chat { public ChatImpl() throws java.rmi.remoteexception { public static void main(string args[]) { ChatImpl myself = null; Server serverref = null; if (args.length > 0 ) nickname = args[0]; else{ System.out.println ( Serve nickname"); System.exit(1); System.setSecurityManager( new RMISecurityManager()); Import di vario uso lettura del nickname con errore se non c è Security Manager serverref = (Server) Naming.lookup ( "rmi://"+host+"/chatserver"); myself = new ChatImpl(); serverref.iscrivi (myself); catch (Exception e) { // Shell BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String cmd; System.out.println ("Benvenuto "+nickname); // continua Ricerca del server Registrazione sul server della chat Preparazione per la shell stream di input string adi benvenuto // continua 31 32
9 ChatImpl.java (3) ChatImpl.java (4) for (;;) { System.out.print(PROMPT); cmd = in.readline(); if (cmd.equals ("close")) { serverref.abbandona (myself); break; else { // messaggio per tutti if (cmd.length()!=0) {// stringa non vuota Messaggio m = new Messaggio (nickname, cmd); serverref.dico(m); // fine for catch (Exception e) { System.exit(0); // fine main // continua Loop della shell se si abbandona informa il server altrimenti si tratta di un messaggio per il server (per tutti) costruzione messaggio invio al server che si occuperà di farne il broadcast 33 public void dico (Messaggio m) System.out.print ("\n"+m.getmittente()+": "+ m.gettesto()+"\n"+prompt); public void iscrivi (String nickiscritto) throws RemoteException{ System.out.print ("\nentra "+nickiscritto+"."+ "\n"+prompt); // continua Metodi remoti di uso principalmente per la consapevolezza degli altri utenti e per l output stampa a video (mittente e testi) e poi ristampa il prompt stampa a video e ristampa il prompt 34 ChatImpl.java (5) Organizzazione della lezione public void abbandona (String nickabbandona) System.out.print ("\n"+nickabbandona+ " ha abbandonato la chat"+"\n"+prompt); public String getnickname () return nickname; static String nickname; public static final String HOST= localhost"; public static final String PROMPT = "Comandi >"; Altri metodi remoti stampa a video e ristampa il prompt metodo di accesso Variabile di istanza Costanti di uso Alcuni esempi di applicazioni distribuite: una agenda telefonica distribuita (client-server) una chat (client-server) Alcuni commenti sul ruolo del registry una chat (peer-to-peer) 35 36
10 Commenti sulla architettura della Chat La architettura della Chat P2P La architettura Client-Server della Chat offre un singolo punto di debolezza (il server) non risponde alla struttura del problema in effetti, ogni client deve poter inviare a ciascun altro client serve solamente poter sapere chi sono i client registrati Possibile passare ad una architettura Peer-to-peer dove l unica componente centralizzata è il registry che deve necessariamente essere presente (comunque) anche sulla architettura client-server Ogni peer trasmette i messaggi a tutti gli altri peer Si usa il registry per avere informazioni su chi è registrato alla chat application coordination code application coordination code application coordination code Il ruolo del registry nelle applicazioni P2P Le classi di Chat P2P Per ogni applicazioni peer-to-peer è comunque sempre necessario una componente che permetta il bootstrap: locazione fissata per poter contattare gli altri peer Nel caso di RMI si può usare il registry tramite il metodo list() è possibile sapere tutti gli id (stringhe) degli oggetti remoti registrati a partire da cui si può ottenere il riferimento remoto che può essere usato per contattare gli oggetti (discriminando, se è il caso, rispetto alle interface implementate) se sul registry stanno in esecuzione diverse applicazioni distribuite 39 40
11 Chat.java Le classi di Chat P2P public interface Chat extends java.rmi.remote { public void dico (Messaggio m) public void iscrivi (String id) public void abbandona (Remote idref) public String getnickname () Interfaccia remota Quattro metodi remoti chiamato da un altro peer per scrivere un messaggio inserimento o cancellazione nella lista dei peers che ognuno ha utilità per uso da parte degli altri peers (non fondamentale) Messaggio.java Le classi di Chat P2P public class Messaggio implements java.io.serializable{ private String mittente; private String testo; public Messaggio(String mit, String tes) { mittente = mit; testo = tes; public String getmittente() { return mittente; public String gettesto() { return testo; Identica al programma precedente I dati spediti come parametri ai metodi necessario serializzarli Variabili istanza Costruttore Metodi di accesso 43 44
12 ChatImpl.java (1) ChatImpl.java (2) import java.rmi.server.*; import java.util.*; import java.io.*; public class ChatImpl extends UnicastRemoteObject implements Chat { public ChatImpl() throws java.rmi.remoteexception { public static void main(string args[]) { Chat myself = null; if (args.length > 0 ) nickname = args[0]; else { System.out.println ( Serve il nickname"); System.exit(1); System.setSecurityManager( new RMISecurityManager()); // continua. Import di vario uso lettura del nickname con errore se non c è Security Manager 45 // Fase di Registrazione nel main String nomi[] = Naming.list("rmi://"+HOST); System.out.println ( Sono connessi "+nomi.length+" utenti:"); for (int i=0 ; i < nomi.length; i++) System.out.println ("\t"+nomi[i]); for (int i=0 ; i < nomi.length; i++) peers.add(naming.lookup (nomi[i])); myself = new ChatImpl(); Naming.rebind(nickname, myself); System.out.println ( Informo tutti :"); for (int i=0 ; i < nomi.length; i++) { System.out.print ("\tiscrizione a "+ (Chat) peers.get (i)).getnickname()+"..") ; ((Chat) peers.get (i)).iscrivi (nickname) ; System.out.println ("effettuata!"); catch (Exception e) { // continua Ottiene l elenco del nome dei peer connessi dal registry li stampa Costruisce l arraylist dei riferimenti remoti connessi Si registra sul registry Si iscrive presso ogni peer invocazione remota di iscrivi() 46 ChatImpl.java (3) ChatImpl.java (4) // Shell nel main BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String cmd; System.out.println ("Benvenuto "+nickname+ ". Con te sono presenti "+ peers.size()+" utenti:"); for (int i = 0; i < peers.size(); i++) System.out.println ("\t"+ ((Chat) peers.get(i)).getnickname() ); for (;;) {System.out.print(PROMPT); cmd = in.readline(); if (cmd.equals ("close")) { for (int i = 0; i < peers.size(); i++) ((Chat) peers.get(i)).abbandona(myself); break; else { // continua Apertura stream input Stampa degli utenti connessi Loop della shell se si esce, comunico a tutti i peers il mio Riferimento remoto uso la variabile myself 47 else { // si tratta di un messaggio da inviare a tutti if (cmd.length()!=0) { // stringa non vuota for (int i = 0; i < peers.size(); i++) { Messaggio m = new Messaggio ( nickname, cmd); ((Chat) peers.get(i)).dico(m) ; // fine for catch (Exception e) { Naming.unbind(nickname); catch (Exception e) { System.exit(0); // fine main Invio la stringa a tutti i peers di cui sono a conoscenza In uscita dal main, rimuovo il mio riferimento dal registry e mi suicido! 48
13 ChatImpl.java (5) ChatImpl.java (6) public void dico (Messaggio m) System.out.print ("\n"+m.getmittente()+": +m.gettesto()+"\n"+prompt); public void iscrivi (String id) peers.add(naming.lookup ( "rmi://"+host+"/"+id)); catch (Exception e) { System.out.print ("\nentra "+id+". +"\n"+prompt); // continua Metodi remoti: in generale stampano informazioni su video e poi ristampano il prompt stampa il messaggio stampa e aggiunge il riferimento remoto alla lista dei peers usando il nickname passato come parametro 49 public void abbandona (Remote idref) int indice = peers.indexof(idref); Object app = peers.remove(indice); System.out.print ("\n"+ ((Chat) idref).getnickname() +" ha abbandonato la chat"+"\n +PROMPT); public String getnickname () throws RemoteException{ return nickname; static ArrayList peers = new ArrayList(); static String nickname; public static final String HOST= localhost"; public static final String PROMPT="Comandi >"; cerca il riferimento da cancellare e lo elimina Si può usare idref.getnickname() perché il peer che esce effettua prima le chiamate a abbandona e poi esce Variabili di istanza Costanti utili 50 Alcuni commenti sulla Chat Applicazione peer-to-peer peer di dimensione maggiore rispetto al client della soluzione client-server non soggetta a fault-locali in caso il registry cada, chi è connesso continua a chattare fino alla chiusura (esempio classi di partial faults tolerance) Un problema: su un registry che si trova su un host diverso dalla JVM si può fare lookup() e list() ma non si può fare la bind(), rebind()! con questa implementazione si può fare una chat solo se ci si 51 trova sullo stesso host (stesso registry!)
Architetture distribuite Alcuni esempi: Alcuni commenti sul ruolo del registry. Import Interfaccia remota Due metodi remoti
Organizzazione della lezione 17. Applicazioni ed Esempi Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Architetture distribuite
DettagliOrganizzazione della lezione. 18. Applicazioni ed Esempi (2) II prova intercorso. Prove scritte degli esami successivi
Organizzazione della lezione 18. Applicazioni ed Esempi (2) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della
Dettagli18. Applicazioni ed Esempi (2)
18. Applicazioni ed Esempi (2) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Organizzazione della
DettagliOrganizzazione della II prova intercorso ed esami. L accesso al registry per il rebind() Una soluzione con registry multipli Alcuni commenti finali
Organizzazione della lezione 18. Applicazioni ed Esempi (2) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della
DettagliOrganizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()
Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno
DettagliCorso di Reti di Calcolatori T
Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 7 (svolta) Java RMI e Riferimenti Remoti Un RMI Registry Remoto Luca Foschini Anno accademico 2018/2019
DettagliOrganizzazione della lezione. Invocazione remota di metodi fai-da-te. Lezione 12 Introduzione a Remote Method Invocation
Organizzazione della lezione Lezione 12 Introduzione a Remote Method Invocation Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi
Dettagli7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:
7 Esercitazione (svolta): due possibilità: Java RMI: callback Molte applicazioni richiedono un meccanismo publish/subscribe I partecipanti (client) necessitano di notifiche da parte del coordinatore (server)
DettagliCorso di Reti di Calcolatori LA
Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori LA RMI: callback Silvia Vecchi Anno accademico 2003/2004 RMI: Callback 1 Callback (1) Molte applicazioni richiedono
DettagliEsercizi su Java RMI. Progetto di Cliente / Servitore e supporto. Possibile tabella mantenuta dal server
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
DettagliOrganizzazione della lezione. Lezione 14 Remote Method Invocation - 2. Remote. Il diagramma di RemoteHello
Organizzazione della lezione Lezione 14 Remote Method Invocation - 2 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno
DettagliCorso di Reti di Calcolatori L-A
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
DettagliLPR 2005/2006 Lezione 7. paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio
LPR 2005/2006 Lezione 7 paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio PARADIGMA DI INTERAZIONE A DOMANDA/RISPOSTA Paradigma di interazione
Dettagli16. Java Remote Method Invocation (4)
16. Java Remote Method Invocation (4) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Oggetti attivabili
DettagliOrganizzazione della lezione. Lezione 15 Remote Method Invocation - 3. Lo schema del Factory Design Pattern - 1. Factory design pattern
Organizzazione della lezione Lezione 15 Remote Method Invocation - 3 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno
DettagliLaurea in Informatica. "Programmazione Distribuita" - Prof. Scarano. A.A Università di Salerno 1. Organizzazione della lezione
12. Invocazione di Metodi Remoti Vittorio Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Modelli di programmazione:
DettagliOrganizzazione della lezione. 16. Java Remote Method Invocation (4) Le classi ed interfacce di RMI. Persistenza. Oggetti attivabili
Organizzazione della lezione 16. Java Remote Method Invocation (4) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Oggetti attivabili
Dettagli12. Java: Remote Method Invocation (3)
12. Java: Remote Method Invocation (3) Vittorio Scarano Algoritmi e Strutture Dati: Sistemi Distribuiti Corso di Laurea in Informatica Università degli Studi di Salerno Organizzazione della lezione Il
Dettagli15. Java Remote Method Invocation (3)
15. Java Remote Method Invocation (3) Vittorio Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Programmazione Distribuita.
DettagliOrganizzazione della lezione. Lezione 17 Remote Method Invocation - 5. Remote. Le classi ed interfacce di RMI. Persistenza. Oggetti attivabili
Organizzazione della lezione Lezione 17 Remote Method Invocation - 5 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno
DettagliEsercizi RMI. Laboratorio di Programmazione di Rete A 5/12/2007. Esercitazione di Laboratorio
Esercitazione di Laboratorio 5/12/2007 Sviluppare un applicazione RMI per la gestione di un elezione. Il server esporta un insieme di metodi: public void vota(string nome): accetta come parametro il nome
DettagliOrganizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern
Organizzazione della lezione 15. Java Remote Method Invocation (3) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Il design pattern
DettagliLezione n.10 LPR. RMI CallBacks
Lezione n.10 LPR 12/05/2008 RMI CALLBACKS Un client può richiedere servizi ad un servente mediante RMI. Talvolta è utile poter consentire al servente di contattare il client il servente notifica degli
DettagliEsercizi su Callback RMI
Esercizi su Callback RMI Esercitazione di Laboratorio di Programmazione di Rete A Daniele Sgandurra Università di Pisa 03/12/2008 Esercizio Settimana Scorsa Sviluppare un applicazione RMI per la gestione
DettagliLezione n.10 LPR Informatica Applicata RMI Approfondimenti Callback. 15/05/2012 Laura Ricci
Lezione n.10 LPR Informatica Applicata RMI Approfondimenti Callback 15/05/2012 Laura Ricci Laura Ricci 1 RMI: IL MECCANISMO DELLE CALLBACK RMI utilizza una comunicazione sincrona a rendez vouz esteso:
DettagliPROVA FINALE Ingegneria del software
PROVA FINALE Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Laboratorio N 6 Cosa faremo oggi 2 Comunicazione RMI Comunicazione RMI Multi-Thread Remote Method Invocation 3 L obiettivo è di
Dettagli14. Java Remote Method Invocation (2)
14. Java Remote Method Invocation (2) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Il modello della
DettagliRemote Method Invocation
JAVA RMI LSO 2008 Remote Method Invocation Perché RMI? L obiettivo è di permettere ad una applicazione in esecuzione su una macchina locale di invocare i metodi di un oggetto in esecuzione su un altro
DettagliIl problema nasce dalla caratteristica di Java di essere distribuito
Organizzazione della lezione 14. Java Remote Method Invocation (2) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Istanziazione
DettagliLaboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
DettagliOrganizzazione della lezione. Organizzazione della lezione. 14. Java Remote Method Invocation (2) La sicurezza in Java
Organizzazione della lezione 14. Java Remote Method Invocation (2) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Il modello della
DettagliOggetti Distribuiti e Java RMI
Oggetti Distribuiti e Java RMI Oggetti Locali - Oggetti Distribuiti Oggetti Locali: sono oggetti i cui metodi possono essere invocati solo da un processo locale, cioè da un processo in esecuzione sulla
DettagliCompute engine generici in RMI
Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del
DettagliCompute engine generici in RMI
Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione e rimane immutato.
DettagliRMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it
Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti
DettagliActivation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati
Activation In generale i Sistemi ad oggetti distribuiti sono progettati per lavorare con oggetti persistenti. Dato che questi sistemi saranno composti da migliaia (forse milioni) di tali oggetti, sarebbe
DettagliChat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.
Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto
DettagliProgrammazione distribuita
Programmazione distribuita 1 Architettura client-server È il modo classico di progettare applicazioni distribuite su rete Server offre un servizio "centralizzato" attende che altri (client) lo contattino
DettagliJAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita:
JAVA - I/O System Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita: 1. InputStream: Flusso di byte in ingresso. Con questa classe
DettagliLezione n.10. RMI CallBacks 9/12/2009 Andrea Corradini
Università degli Studi di Pisa Dipartimento di Informatica Lezione n.10 LPR-B-09 RMI CallBacks 9/12/2009 Andrea Corradini Lezione 10: RMI CallBacks - Miscellanea Andrea Corradini 1 RMI: PASSAGGIO DI PARAMETRI
DettagliJava Remote Method Invocation
Java Remote Method Invocation Programmazione in Rete e Laboratorio Comunicazione distribuita Port1 Java VM1 Java VM2 Port 2 Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino
DettagliEsercitazione di Sistemi Distribuiti
Scenario generale Esercitazione di Sistemi Distribuiti Java RMI Leonardo Mariani client object (2) estrazione dei riferimenti ad oggetti remoti Object Registry (3) invocazione remota (4) eventuale invio
DettagliLaboratorio di Sistemi Distribuiti Leonardo Mariani
Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante
DettagliMinMax a Java Distributed Application SISTEMI DISTRIBUITI Fabrizio G. Ventola
MinMax a Java Distributed Application SISTEMI DISTRIBUITI Fabrizio G. Ventola CdL Magistrale Informatica 2012/2013 Introduzione Uno degli obiettivi dell informatica moderna è quello di offrire servizi
Dettagli/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }
import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO
DettagliPrincipi, Modelli e Applicazioni per Sistemi Distribuiti M
Università degli Studi di Bologna Facoltà di Ingegneria Principi, Modelli e Applicazioni per Sistemi Distribuiti M Esercitazione 1 (Svolta) Socket Java senza connessione Alessandro Pernafini Lab1 - svolta
DettagliPrincipi, Modelli e Applicazioni per Sistemi Distribuiti M
Università degli Studi di Bologna Facoltà di Ingegneria Principi, Modelli e Applicazioni per Sistemi Distribuiti M Esercitazione 2 (svolta) Socket Java con connessione Alessandro Pernafini Architettura
Dettagli18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
Dettagli17 - Classi parzialmente definite: Classi Astratte e Interfacce
17 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliContesto e motivazioni Architettura e concetti di base Componenti di RMI RMIRegistry Interfacce, eccezioni e classi Lo sviluppo di una applicazione L
CEFRIEL Consorzio per la Formazione e la Ricerca in Ingegneria dell Informazione Politecnico di Milano Programmazione Object Oriented in Java Java Remote Method Invocation Docente: Diego Peroni CEFRIEL
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
DettagliOrganizzazione della lezione. Lezione 13. Applicazioni ad oggetti distribuite. Remote Method Invocation (RMI)
Organizzazione della lezione Lezione Remote Method Invocation Vittorio Scarano Corso di Programmazione Distribuita (00-00) Laurea di I livello in Informatica Università degli Studi di Salerno Remote Method
DettagliIntroduzione a Java Remote Method Invocation (RMI)
Introduzione a Java Remote Method Invocation (RMI) SAPIENZA Università di Roma Corso di Architetture Software Orientate ai Servizi E risuona il mio barbarico yawp sopra i tetti del mondo ( I sound my barbaric
DettagliMobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144
Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe
DettagliProgrammazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliJava RMI. Alcune premesse Interfaccia e Implementazione RMI. Architettura. Esempi interfaccia e implementazione
Java RMI Alcune premesse Interfaccia e Implementazione Modello OO Interfaccia esprime una vista astratta di un ente computazionale, nascondendo organizzazione interna dettagli di funzionamento Implementazione
DettagliLezione n.9. RMI: Remote Method Invocation 1/12/2009 Andrea Corradini
Università degli Studi di Pisa Dipartimento di Informatica Lezione n.9 LPR-B-09 RMI: Remote Method Invocation 1/12/2009 Andrea Corradini Lezione 9: RMI - Remote Method Invocation Andrea Corradini 1 Da
DettagliCapitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61
Capitolo 5 Array e collezioni c 2005 Pearson Education Italia Capitolo 5-1 / 61 Sommario: Array e collezioni 1 Array Array di oggetti Lunghezza di un array Accesso agli elementi di un array Array e cicli
DettagliInterfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
DettagliProgrammazione a Oggetti Metodologie di Programmazione 14 Maggio 2012
Programmazione a Oggetti Metodologie di Programmazione 14 Maggio 2012 Nome: Matricola: Metodologia di Programmazione [ ] Programmazione a Oggetti [ ] Istruzioni Scrivete il vostro nome sul primo foglio.
Dettagli{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}
16181 Nome Cognome A domande a risposta multipla con n scelte, la risposta corretta vale (n-1)/n*difficoltàdomanda, la risposta errata -1/n*difficoltà domanda, la risposta non data. Eseguendo il frammento
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
DettagliProgrammazione distribuita in Java. Socket & Client-Server
Programmazione distribuita in Java Socket & Client-Server 1 Strumenti per networking Libreria java.net Socket (Astrazione per una presa di comunicazione) Serializzazione Socket Per comunicare si apre una
Dettagli(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP
(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la
DettagliGerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1 Gerarchia delle classi Una sottoclasse eredita metodi, variabili, etc. dalla superclasse... Per
DettagliRMI: metodi equals e hashcode
RMI: metodi equals e hashcode Per verificare se due oggetti remoti contengono gli stessi dati, la chiamata indirizzata al metodo equals() avrebbe bisogno di contattare i server dove si trovano gli oggetti
DettagliRMI. Remote Method Invocation. Enrico Tassi, 3/4/2009. Slides originali di Nicola Gessa
RMI Remote Method Invocation Enrico Tassi, 3/4/2009 Slides originali di Nicola Gessa Remote Method Invocation Si colloca del mondo della programmazione distribuita. L obiettivo è di fornire al programmatore
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario API di Java Istruzione di scrittura Istruzione di lettura 21/03/2011 2 API di Java Java è un linguaggio orientato agli oggetti basato
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA7 A1 Vector, Arrays e StringBuffer 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Algoritmi notevoli sul vettore 2 1 Introduzione In questa
DettagliMultithreading. Multithreading/2
Multithreading Osservazioni su EchoServer Programmazione TCP in Java EchoServer ed EchoClient Uso del multithreading nella programmazione di rete ChatClient e ChatServer Esempio di Web server(?) Multithreading/2
DettagliSocket & RMI Ingegneria del Software - San Pietro
Socket & RMI Ingegneria del Software - San Pietro Socket È possibile trattare la comunicazione di rete allo stesso modo con cui è possibile trattare la lettura da file. La classe Socket rappresenta la
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA A - Array // Prerequisiti Variabili semplici Operazioni su variabili Strutture di controllo // Introduzione In molte situazioni reali può capitare di elaborare elenchi
DettagliSimple Social: implementazione di una
Laboratorio di Reti, Corsi A e B Simple Social: implementazione di una Online Social Network Progetto di Fine Corso A.A. 2015/16 1.Descrizione del problema Il progetto consiste nello sviluppo di una rete
DettagliProva d Esame Compito A
DOMANDA1 Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { protected int value; public static boolean flag = false; public General() { value = 1; public
DettagliServer Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione
Esercitazione: Socket Java con connessione Sviluppare un applicazione C/S che effettui il trasferimento di un file dal client al server (put) usando una connessione. In particolare nel servizio: il client
DettagliMultithreading/2. Più richieste servite simultaneamente > 1 thread per ogni connessione client (+ 1 thread per accettare nuove richieste).
Multithreading Osservazioni su EchoServer Programmazione TCP in Java EchoServer ed EchoClient Uso del multithreading nella programmazione di rete ChatClient e ChatServer Multithreading/2 Più richieste
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
Dettagli9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA7 B3 Gestione di una coda 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Concetto di coda e operazioni relative
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliProgrammazione. preparazione allo scritto. Informatica / Comunicazione Digitale 19 gennaio 2016
Programmazione preparazione allo scritto Informatica / Comunicazione Digitale 19 gennaio 2016 1. (1) Scrivete il metodo statico public static boolean compare( ArrayList X, String s ) il quale restituisce
DettagliPolimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
DettagliUnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124
UnicastRemoteObject Java RMI fornisce diverse classi base per definire server remoti: UnicastRemoteObject < RemoteServer < RemoteObject dove A < B significa che A è una sottoclasse di B. UnicastRemotObject
DettagliSistemi Distribuiti Multiagente A.A.2010-11 Informatica Magistrale Università di Bari
Java RMI I lucidi che seguono sono stati prodotti sulla base dei seguenti riferimenti: - Sistemi Distribuiti Dip. Informatica (S.Pizzutilo) - Seminario Java RMI di G.Cozzolongo Java RMI: Remote Method
DettagliComunicazione fra oggetti distribuiti
Comunicazione fra oggetti distribuiti Livelli Middleware Trasparenza e implementazione La trasparenza - come per le chiamate di locali RMI RPC Eventi di metodo remoto - gli oggetti remoti ricevono le RMI
DettagliAgenti Mobili in Java RMI
Agenti Mobili in Java RMI Un agente è una computazione che agisce per conto di un host presso un altro host. Gli agenti in Java RMI sfruttano due peculiarità di Java: Serializzazione, attraverso cui gli
DettagliPreparazione allo Scritto di Programmazione
Preparazione allo Scritto di Programmazione Informatica / Comunicazione Digitale A.A. 2013/2014 1. Una riga di testo è detta numerica se e solo se contiene più cifre che caratteri di altro genere. Ad esempio,
DettagliFondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java
Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e
DettagliIntroduzione Programmazione Java
Introduzione Programmazione Java Paolo Tomeo paolo.tomeo@poliba.it Regole basilari Java è case sensitive quindi prestare attenzione alle maiuscole Il commento si inserisce con // all'inizio della linea
DettagliEsercitazione n 4. Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java:
Esercitazione n 4 Obiettivi: Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java: Gestione di input/output da console e da file (package java.io) Utilizzo di
Dettagli