Lezione n.9 LPR Informatica Applicata RMI-Remote Method Invocation 09/05/2013 Laura Ricci
|
|
- Ferdinando Casini
- 5 anni fa
- Visualizzazioni
Transcript
1 Lezione n.9 LPR Informatica Applicata RMI-Remote Method Invocation 09/05/2013 Laura Ricci Remote Method Invocation Laura Ricci 1
2 RIASSUNTO DELLA LEZIONE paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA un esempio un servizio di esecuzione distribuita di task Remote Method Invocation Laura Ricci 2
3 PARADIGMA DI INTERAZIONE A DOMANDA/RISPOSTA Paradigma di interazione basato su richiesta/risposta il client invia ad un server un messaggio di richiesta di un servizio il server risponde con un messaggio di risposta il client rimane bloccato (sospende la propria esecuzione) finchè non riceve la risposta dal server paradigma di interazione sincrona Client Server richiesta Bloccato In elaborazione risposta Remote Method Invocation Laura Ricci 3
4 REMOTE PROCEDURE CALL Esempio interazione domanda/risposta: un client richiede ad un server la stampa di un messaggio. Il server restituisce al client un codice che indica l esito della operazione. Il client attende l esito dell operazione richiesta del client al server = invocazione di una procedura definita sul server il client invoca una procedura remota RPC (Remote Procedure Call) i meccanismi utilizzati dal client sono gli stessi utilizzati per una normale invocazione di procedura, ma l invocazione di procedura avviene sull host su cui è in esecuzione il client la procedura viene eseguita sull host su cui è in esecuzione il server i parametri della procedura vengono inviati automaticamente sulla rete dal supporto all RPC Remote Method Invocation Laura Ricci 4
5 REMOTE PROCEDURE CALL PROCESSO CLIENT PROCESSO SERVER print (msg) procedura remota print( ) bloccato codice Esempio: richiesta stampa di messaggio e restituzione esito operazione Remote Method Invocation Laura Ricci 5
6 REMOTE METHOD INVOCATION JAVA RMI: JAVA API per la programmazione distribuita ad oggetti Evoluzione di RPC = paradigma di interazione basato su oggetti distribuiti remote method invocation (RMI): evoluzione del meccanismo di invocazione di procedura remota al caso di oggetti remoti permette di ottenere un riferimento ad un oggetto RO allocato su un host remoto, su cui è in esecuzione un'altra istanza della JVM e di usarlo come se RO fosse allocato sulla JVM locale. È possibile: invocare metodi sulla istanza remota dell'oggetto passare oggetti come argomenti dell'invocazione del metodo restituire oggetti come risultato dell'esecuzione del metodo Remote Method Invocation Laura Ricci 6
7 RMI: CONCETTI GENERALI Remote Method Invocation: l'idea fondamentale è quella di chiedere servizi ad oggetti allocati sulla rete come se fossero oggetti locali Fornire accesso ad oggetti allocati su nodi diversi, rispetto a chi usufruisce del servizio, per richiedere servizi a questi nodi OggettoOvunque cc; cc. metodo ( ) Permette di utilizzare oggetti remoti come se fossero oggetti locali, senza doversi occupare dei protocolli, di stabilire una connessione, degli stream di input/output, etc,etc. Le uniche operazioni da effettuare rispetto ad un oggetto locale sono: il server deve 'esportare' gli oggetti i cui metodi possono essere invocati da remoto il client deve individuare un riferimento all'oggetto remoto. Questa operazione è diversa dall'allocare un oggetto o riceverlo come parametro Remote Method Invocation Laura Ricci 7
8 RMI: I MECCANISMI DI BASE Stub: alla lettera, mozzicone segmento di codice locale al client rappresenta il proxy (rappresentante) dell'oggetto remoto Skeleton (talvolta riferito come stub): segmento di codice allocato sull'host che ospita l'oggetto remoto. riceve le invocazioni remote dallo stub e le passa all'oggetto allocato sull'host remoto Altri meccanismi utilizzati da RMI Serializzazione per trasmettere gli oggetti argomento dei metodi Dynamic Class Loading per inviare codice sulla rete Security Manager per garantire sicurezza nell'esecuzione di metodi caricati da remoto Remote Method Invocation Laura Ricci 8
9 RMI: CONCETTI GENERALI Naming Service: Object Registry Riferimento all oggetto remoto Esportazione (registrazione) Client O1:invocante O2 Stub Invocazione metodi Server O2: oggetto remoto (invocato) O2 Skeleton (o Stub) Network Support Network Support Interazione logica Interazione fisica Remote Method Invocation Laura Ricci 9
10 RMI: CONCETTI GENERALI L'architettura RMI prevede quindi tre entità registry client server Il registry è un servizio di naming che agisce da 'yellow pages' registra i nomi simbolici degli oggetti i cui metodi possono essere invocati da remoto ed i riferimenti ai rispettivi stub(skeleton) gli oggetti remoti devono registrarsi, 'fare un bind' presso il registry gli altri oggetti possono richiedere, 'fare il lookup' degli oggetti registrati chiedendo, a partire dal nome pubblico dell'oggetto, un riferimento all'oggetto stesso Remote Method Invocation Laura Ricci 10
11 OGGETTI DISTRIBUITI: ARCHITETTURA GENERALE Il server che definisce l oggetto remoto: definisce un oggetto distribuito = un oggetto i cui metodi possono essere invocati da parte di processi in esecuzione su hosts remoti esporta (pubblica) l oggetto: crea un mapping nome simbolico oggetto-riferimento all oggetto e lo pubblica mediante un servizio di tipo registry Quando il client vuole accedere all oggetto remoto ricerca un riferimento all oggetto remoto mediante i servizi offerti dal registry invoca i metodi definiti dall oggeto remoto (remore method invocation). invocazione dei metodi di un oggetto remoto a livello logico: identica all invocazione di un metodo locale a livello di supporto: è gestita dallo stub che provvede a trasformare i parametri della chiamata remota in dati da spedire sulla rete. il network support provvede quindi all invio vero e proprio dei dati sulla rete Remote Method Invocation Laura Ricci 11
12 RMI: ARCHITETTURA GENERALE STEP 2 ricerca di un oggetto nel registry download dello stub Client O1:invocante O2 Stub Network Support Naming Service: Object Registry STEP 1 upload dello stub nel registry bind dello stub ad un nome simbolico Server O2: oggetto STEP 3 remoto (invocato) comunicazione con O2 Skeleton o Stub l'oggetto remoto mediante lo stub Network Support Interazione logica Interazione fisica Remote Method Invocation Laura Ricci 12
13 OGGETTI DISTRIBUITI: ARCHITETTURA GENERALE Quando il server che gestisce l oggetto remoto riceve un invocazione per quell oggetto il network support passa i dati ricevuti allo stub dell'oggetto lo stub trasforma i dati ricevuti dal network support in una invocazione ad un metodo locale occorre trasformare i dati ricevuti dal network support nei parametri del metodo invocato Remote Method Invocation Laura Ricci 13
14 RMI: API JAVA I metodi definiti dall oggetto remoto ed i rispettivi parametri (le segnature dei metodi) devono essere noti: al client, che richiede un insieme di servizi mediante l invocazione di tali metodi al server, che deve fornire un'implementazione di tali metodi Il client non è interessato all' implementazione di tali metodi In JAVA: definizione di un' interfaccia che contiene le segnature di un insieme di metodi, ma non il loro codice definizione di una classe che implementi l interfaccia: contiene il codice dei metodi elencati nella interfaccia Remote Method Invocation Laura Ricci 14
15 INTERFACCE JAVA: RIPASSO Una interfaccia JAVA può contenere solamente: metodi astratti e costanti: niente costruttori, niente variabili, solo l'intestazione dei metodi. i metodi sono tutti astratti, anche se manca la parola chiave abstract: infatti al posto del corpo c'è solo un punto e virgola; si può dichiarare che una classe implementa (implements) una data interfaccia: deve allora fornire un'implementazione per tutti i suoi metodi. una classe può implementare più di una interfaccia: la relazione implements non deve rispettare la regola dell'ereditarietà singola Remote Method Invocation Laura Ricci 15
16 INTERFACCE: RIPASSO interface Figure { /* gli oggetti delle classi che realizzano questa interfaccia sono caratterizzati da un tipo e da un'area */ } double area( ); String tipo( ); Remote Method Invocation Laura Ricci 16
17 INTERFACCE: RIASSUNTO class RadiceFigure { protected double dim1; protected double dim2; RadiceFigure(double a, double b) { dim1 = a; dim2 = b; } } class Rectangle extends RadiceFigure implements Figure{ Rectangle(double a, double b) { super(a, b); } // definisce area() di Figure public double area( ) { return dim1 * dim2; } // definisce tipo() di Figure public String tipo( ) { return "Rectangle";} } Remote Method Invocation Laura Ricci 17
18 INTERFACCE: RIASSUNTO class Triangle extends RadiceFigure implements Figure { Triangle(double a, double b) {super(a, b);} // definisce area( ) di Figure public double area( ) { return dim1 * dim2 / 2; } // definisce tipo( ) di Figure public String tipo( ) {return "Triangle "; } } Remote Method Invocation Laura Ricci 18
19 INTERFACCE: RIPASSO class prova { public static void main (String args[ ]) { // Figure f = new Figure(10, 10); // questo è illegale Figure figref; // OK non creo l' oggetto figref = new Rectangle(9, 5); System.out.println(figref.tipo( ) + figref.area( )); figref = new Triangle(10, 8); System.out.println(figref.tipo( ) + figref.area( )); // figref.dim1 = 0 ; //anche questo e` illegale } Remote Method Invocation Laura Ricci 19
20 JAVA: REMOTE INTERFACE Esempio : un Host è connesso ad una stazione metereologica che rileva temperatura, umidità,.mediante diversi strumenti di rilevazione. Sull host è in esecuzione un server che fornisce queste informazioni agli utenti interessati. import java.rmi.*; public interface weather extends Remote; public double gettemperature ( ) throws RemoteException; public double gethumidity public double getwindspeed ( ) throws RemoteException; ( ) throws RemoteException; Remote Method Invocation Laura Ricci 20
21 JAVA RMI L'oggetto remoto deve essere descritto mediante una interfaccia, poichè il client non possiede una copia del codice dell'oggetto, ma deve manipolarlo L'interfaccia che definisce i metodi dell'oggetto remoto deve: estende l interfaccia Remote. Remote è una interfaccia che non definisce alcun metodo. Il solo scopo è quello di identificare gli oggetti che possono essere utilizzati in remoto i metodi definiti devono dichiarare di sollevare eccezioni remote. Una eccezione remota indica un generico fallimento nella comunicazione remota dei parametri e dei risultati al/dal metodo remoto La dichiarazione delle eccezioni viene effettuata mediante la clausola throws: la clausola throws associata ad un metodo indica che il metodo può sollevare una eccezione, ma non la intercetta e non la gestisce Remote Method Invocation Laura Ricci 21
22 STATISTICHE UNIONE EUROPEA Illustreremo un'applicazione RMI mediante il seguente esempio: Definire un oggetto remoto che fornusca le principali informazioni relative ai paesi della Unione Europea (linguaggio ufficiale, popolazione, nome della capitale) e che restituisca queste informazioni ai client che le richiedono Remote Method Invocation Laura Ricci 22
23 PASSO 1: DEFINIZIONE DELL'INTERFACCIA import java.rmi.remote; import java.rmi.remoteexception; public interface EUStats extends Remote { String getmainlanguages(string CountryName) throws RemoteException; int getpopulation(string CountryName) throws RemoteException String getcapitalname(string CountryName) throws RemoteException; } Remote Method Invocation Laura Ricci 23
24 EUDATA: UNA CLASSE D'APPOGGIO class EUData { private String Language; private int population; private String Capital; EUData(String Lang, int pop, String Cap) { Language = Lang; population = pop; Capital = Cap; } String getlangs( ) { return Language; } int getpop( ) { return population; } getcapital( ) { return Capital; } } Remote Method Invocation Laura Ricci 24
25 PASSO 2: IMPLEMENTAZIONE OGGETTO REMOTO Utilizziamo una hash table per memorizzare i dati riguardanti le nazioni europee. In questo modo definiamo un semplice data base contente informazioni sulle nazioni viene utilizzata la classe EUData per definire oggetti (record) che descrivono la singola nazione la classe verrà definita in seguito Definizione di una classe EuStatServer che implementa l'oggetto remoto e ne crea una istanza implementa la interfaccia EUStats il main della classe contiene il launch code dell'oggetto remoto crea una istanza dell'oggetto remoto e ne crea lo skeleton (stub) associa allo stub dell'oggeto remoto un nome simbolico e registra il collegamento nome simbolico stub nel registry Remote Method Invocation Laura Ricci 25
26 PASSO 2: IMPLEMENTAZIONE OGGETTO REMOTO import java.rmi.*; import java.rmi.server.*; // Classes and support for RMI // Classes and support for RMI servers import java.util.hashtable; // Contains Hashtable class public class EUStatsServer implements EUStats { /* Store data in a hashtable */ Hashtable<String, EUData> EUDbase = new Hashtable<String, EUData>(); /* Constructor - set up database */ EUStatsServer() throws RemoteException { EUDbase.put("France", new EUData("French", ,"Paris")); EUDbase.put("United Kingdom", new EUData("English", ,"London")); EUDbase.put("Greece", new EUData("Greek", ,"Athens"));... } Remote Method Invocation Laura Ricci 26
27 PASSO 2: IMPLEMENTAZIONE OGGETTO REMOTO /* implementazione dei metodi dell'interfaccia */ public String getmainlanguages(string CountryName) throws RemoteException { EUData Data = (EUData)EUDbase.get(CountryName); return Data.getLangs();} public int getpopulation(string CountryName) throws RemoteException { EUData Data = (EUData)EUDbase.get(CountryName); return Data.getPop(); } public String getcapitalname(string CountryName) throws RemoteException { EUData Data = (EUData)EUDbase.get(CountryName); return Data.getCapital( ); } Remote Method Invocation Laura Ricci 27
28 PASSO 3: LAUNCH CODE public static void main (String args[]) { try { /* Creazione di un'istanza dell'oggetto EUStatsServer */ EUStatsServer statsserver = new EUStatsServer(); /* Esportazione dell'oggetto */ EuStats stub = (EuStats) UnicastRemoteObject.exportObject(statsServer, 0); /* Creazione di un registry sulla porta args[0] LocateRegistry.createRegistry(args[0]); Registry r=locateregistry.getregistry(args[0]); /* Pubblicazione dello stub nel registry */ r.rebind("eustats-server", stub); System.out.println("Server ready");} /* If any communication failures occur... */ catch (RemoteException e) { System.out.println("Communication error " + e.tostring());}}} Remote Method Invocation Laura Ricci 28
29 PASSO 3: LAUNCH CODE Il launch code del server: crea un'istanza dell'oggetto invoca il metodo statico UnicastRemoteObject.exportObject(obj, 0) che esporta l'oggetto obj creato trasformando la classe associata in una classe accessibile via RMI, cioè in una classe tale che le invocazioni ai suoi metodi possano essere ricevute sulla porta specificata. restituisce lo stub dell'oggetto remoto che contiene uno scheletro per ogni metodo definito nell'interfaccia (con le solite segnature), ma in cui l'invocazione di un metodo viene trasformata in una richiesta ad un host ed ad una porta remota Porta 0 = viene utilizzata la porta standard di RMI dopo aver eseguito il metodo, un server RMI aspetta invocazioni di metodi remoti su un serversocket legato alla porta specificata lo stub generato (da passare al client) contiene indirizzo IP e porta su cui è attivo il server RMI Remote Method Invocation Laura Ricci 29
30 CREAZIONE DELLO STUB Il server deve generare lo stub e renderlo disponibile al client Nelle prime versioni di JAVA Poichè non esiste il metodo exportobject, la classe EUStatsServer deve estendere la classe UnicatRemoteObject e si elimina la istruzione per l'esportazione dell'oggetto Lo stub viene generato mediante rmic (rmi compiler) Nelle ultime versioni di JAVA è invece possibile utilizzare la exportobject per generare lo stub Per invocare i metodi dell'oggetto remoto, il client deve avere a disposizione lo stub dell'oggetto JAVA mette a disposizione del programmatore un semplice name server (registry) che consente Al server di registrare lo stub con un nome simbolico Al client di reperire lo stub tramite il suo nome simbolico Remote Method Invocation Laura Ricci 30
31 JAVA: ESPORTAZIONE DELLO STUB Il Server per rendere disponibile lo stub creato agli eventuali clients, inserisce un riferimento allo stub creato in un registry locale LocateRegistry.createRegistry(args[0]); Registry r=locateregistry.getregistry(args[0]); Registry = simile ad un DNS per oggetti remoti, contiene legami tra il nome simbolico dell oggetto remoto ed il riferimento all oggetto nome servizio EUSTAT- SERVER riferimento riferimento allo stub Remote Method Invocation Laura Ricci 31
32 RMI: IL SERVER Il modo più semplice di utilizzare il registry, è quello di utilizzare la classe LocateRegistry Consente di gestire oggetti di tipo Registry direttamente da JAVA La classe LocateRegistry contiene un insieme di metodi per la gestione del registry startregistry getregistry.. ma...come vedremo in seguito il registry può essere attivato anche su un host diverso sia dal client che dal server. Analizzeremo questo scenario in seguito Dopo che il server ha registrato lo stub relativo all'oggetto remoto esportato, il main termina esiste comunque un thread attivo in attesa di invocazione di metodi remoti sul serversocket associato, per cui il programma non termina Remote Method Invocation Laura Ricci 32
33 IL CLIENT RMI Per accedere all'oggetto remoto, il client deve ricercare lo stub dell'oggetto remoto accede al registry attivato sul server mediante il nome simbolico dell'oggetto remoto..il riferimento restituito è un riferimento allo stub dell'oggetto il riferimento restituito è di tipo generico Object: è necessario effettuarne il casting al tipo definito nell interfaccia remota invoca i metodi dell oggetto remoto come fossero metodi locali (l'unica differenza è che occorre intercettare RemoteException) poichè il client scarica lo stub, che è una segmento di codice (una classe) deve utilizzare un meccanismo per verificarne la affidabilità Remote Method Invocation Laura Ricci 33
34 IL CLIENT RMI import java.rmi.*; public class EUStatsClient { public static void main (String args[]) { EUStats serverobject; Remote RemoteObject; /* Check number of arguments */ /* If not enough, print usage string and exit */ if (args.length < 2) { System.out.println("usage: java EUStatsClient port countryname");return; } /* Set up a security manager as before */ System.setSecurityManager(new RMISecurityManager()); Remote Method Invocation Laura Ricci 34
35 IL CLIENT RMI try {Registry r= LocateRegistry.getRegistry(args[0]); RemoteObject=r.lookup("EUSTATS-SERVER"); serverobject = (EUStats)RemoteObject; System.out.println("Main language(s) of " + args[1] + " is/are " + serverobject.getmainlanguages(args[1])); System.out.println("Population of " + args[1] + " is " + serverobject.getpopulation(args[1])); System.out.println("Capital of " + args[1] + " is " + serverobject.getcapitalname(args[1]));} catch (Exception e) { System.out.println("Error in invoking object method " + e.tostring() + e.getmessage()); e.printstacktrace();}}} Remote Method Invocation Laura Ricci 35
36 IL CLIENT RMI Gli argomenti passati al client da riga di comando sono il nome del paese Europeo di cui si vogliono conoscere alcune informazioni e la porta su cui è in esecuzione il servizio di Registry. Remote indica un oggetto remoto su cui devo fare il casting al tipo definito dalla interfaccia EUStats NOTA BENE: l'invocazione dei metodi remoti avviene mediante lo stesso meccanismo utilizzato per l'invocazione dei metodi locali Compilazione ed invocazione del client Javac EUStats.java Javac EUStatsClient.java Java EUStatsClient ip-host countryname NOTA BENE: quando viene compilato il codice del client, il compilatore JAVA ha bisogno di accedere al file class corrispondente all'interfaccia, EUStats.class Remote Method Invocation Laura Ricci 36
37 JAVA: IL REGISTRY L'RMI Registry è stato pienamente integrato in JAVA nelle ultime versioni proposte La classe java.rmi.registry.locateregistry contiene metodi per controllare il registry direttamente da JAVA import java.rmi.registry.*; java.rmi.registry.locateregistry.createregistry(1099): Naming.rebind( servername, server) Si utilizza la classe LocateRegistry che contiene metodi per creare un registry si può anche specificare il nome di un host e/o una porta per creare il servizio di registry su uno specifico host e/o porta Per reperire un registry eventualmente attivato da shell utilizzare la classe Naming Remote Method Invocation Laura Ricci 37
38 JAVA: ATTIVAZIONE DEL SERVIZIO Per rendere disponibile i metodi dell oggetto remoto, è necessario attivare due tipi di servizi il registry che fornisce il servizio di registrazione di oggetti remoti prima di mandare in esecuzione il server il registry deve essere attivato da linea di comando il server implementato fornisce accesso ai metodi remoti E' anche possibile attivare un servizio di registry da shell: > rmiregistry & (in LINUX) > start rmiregistry (in WINDOWS) viene attivato un registry associato per default alla porta 1099 se la porta è già utilizzata, viene sollevata un eccezione. Si può anche scegliere esplicitamente una porta > rmiregistry 2048 & Remote Method Invocation Laura Ricci 38
39 JAVA: ATTIVAZIONE DEL SERVIZIO Per rendere disponibile i metodi dell oggetto remoto, è necessario attivare due tipi di servizi il registry che fornisce il servizio di registrazione di oggetti remoti prima di mandare in esecuzione il server il registry deve essere attivato da linea di comando il server implementato fornisce accesso ai metodi remoti E' anche possibile attivare un servizio di registry da shell: > rmiregistry & (in LINUX) > start rmiregistry (in WINDOWS) viene attivato un registry associato per default alla porta 1099 se la porta è già utilizzata, viene sollevata un eccezione. Si può anche scegliere esplicitamente una porta > rmiregistry 2048 & Remote Method Invocation Laura Ricci 39
40 RMI REGISTRY LocateRegistry.getRegistry( ) restituisce un riferimento ad un registry allocato sull'host locale e sulla porta di default 1099 Se si vuole eseguire il registry su una porta diversa, occorre specificare il numero di porta da linea di comando, al momento dell'attivazione start rmiregistry 2100 la stessa porta va indicata sia nel client che nel server al momento del reperimento del riferimento al registro, mediante LocateRegistry.getRegistry Registry registry = LocateRegistry.getRegistry(2100); nel caso più semplice si utilizza un registry locale, attivato sullo stesso host su cui è in esecuzione il server se non ci sono parametri oppure se il nome dell'host è uguale a null, allora l'host di riferimento è quello locale NOTA BENE: il registry ha bisogno dell'interfaccia e dei.class, per cui attenti a come sono impostati i path! Remote Method Invocation Laura Ricci 40
41 JAVA: IL REGISTRY Supponiamo che registry sia l'istanza di un registro individuato mediante getregistry( ) registry.bind() crea un collegamento tra un nome simbolico (qualsiasi) ed un riferimento all oggetto. Se esiste già un collegamento per lo stesso oggetto all interno dello stesso registry, viene sollevata una eccezione registry.rebind() crea un collegamento tra un nome simbolico (qualsiasi) ed un riferimento all oggetto. Se esiste già un collegamento per lo stesso oggetto all interno dello stesso registry, tale collegamento viene sovrascritto è possibile inserire più istanze dello stesso oggetto remoto nel registry, con nomi simbolici diversi Remote Method Invocation Laura Ricci 41
42 REGISTRY: ALTRI METODI Poichè il registry RMI è a sua volta un server RMI, è possibile creare una gerarchia di registry LocateRegistry.createRegistry(1099); Registry theregistry = LocateRegistry.getRegistry(1099): Registry myregistry = LocateRegistry.createRegistry(1664); theregistry.rebind( myregistry,myregistry); myregistry.rebind( someserver,server); String registryname = myregistry ; String name = someserver ; Remote regobj = theregistry.lookup(registryname); Registry reg = (Registry) regobj; RemoteObject = reg.lookup(name): serverobject = (server) RemoteObject: Remote Method Invocation Laura Ricci 42
43 RMI: UNDER THE HOOD Analizziamo le caratteristiche di un servizio remoto non vogliamo analizzare dettagliatamente l'implementazione studiamo il comportamento tramite un insieme di esempi Vogliamo capire: poiché esiste un solo oggetto remoto, i metodi di quell'oggetto possono essere invocati in modo concorrente da client diversi o da thread diversi dello stesso client? In caso affermativo, viene creato un thread per ogni richiesta? Per ogni client? cosa accade se non sincronizzo opportunamente gli accessi sull'oggetto remoto? Remote Method Invocation Laura Ricci 43
44 RMI: INVOCAZIONE CONCORRENTE DI METODI Per verificare se i metodi dell'oggetto remoto sono invocati in modo concorrente, definiamo un oggetto remoto che esporta due metodi ogni metodo non fa altro che stampare per un certo numero di volte che è in esecuzione attiviamo due client: uno invoca il primo metodo, uno il secondo si ottiene un interleaving delle stampe? public interface threads extends java.rmi.remote { public void MethodOne() throws java.rmi.remoteexception; public void MethodTwo() throws java.rmi.remoteexception; Remote Method Invocation Laura Ricci 44
45 RMI: INVOCAZIONE CONCORRENTE DI METODI import java.rmi.*; public class threadsimpl implements threads { public threadsimpl() throws RemoteException {super();} public void MethodOne() throws RemoteException { long TimeOne = System.currentTimeMillis(); for(int index=0;index<25;index++) { System.out.println("Method ONE executing"); // Inserito un ritardo di circa mezzo secondo do{ }while ((TimeOne+500)>System.currentTimeMillis()); TimeOne = System.currentTimeMillis(); } } Remote Method Invocation Laura Ricci 45
46 RMI: INVOCAZIONE CONCORRENTE DI METODI public void MethodTwo() throws RemoteException { long TimeTwo = System.currentTimeMillis(); for(int index=0;index<25;index++) { System.out.println("Method TWO executing"); // Inserito un ritardo di circa mezzo secondo do{ }while ((TimeTwo+500)>System.currentTimeMillis()); TimeTwo = System.currentTimeMillis(); } } } Remote Method Invocation Laura Ricci 46
47 RMI: INVOCAZIONE CONCORRENTE DI METODI import... public class threadserver { public threadserver() { try {LocateRegistry.createRegistry(args[0]); Registry r=locateregistry.getregistry(args[0]); System.out.println("Registro Reperito"); threadsimpl c = new threadsimpl(); threads stub =(threads) UnicastRemoteObject.exportObject(c, 0); r.rebind("threads", stub); } catch (Exception e) { System.out.println("Server Error: " + e); } } public static void main(string args[]) { new threadserver(); }} Remote Method Invocation Laura Ricci 47
48 RMI: INVOCAZIONE CONCORRENTE DI METODI public class threadsclient { public static void main(string[] args) { try { Registry r= LocateRegistry.getRegistry(args[0]); threads c = (threads) r.lookup("threads"); if (args[1].equals("one")) c.methodone(); else if (args[1].equals("two")) c.methodtwo(); else System.out.println("Error: correct usage - treadsclient port {one two}"); } catch (Exception e){ }}} Remote Method Invocation Laura Ricci 48
49 RMI: INVOCAZIONE CONCORRENTE DI METODI Una possibile traccia di esecuzione Remote Method Invocation Laura Ricci 49
50 RMI: INVOCAZIONE CONCORRENTE DI METODI Dalla documentazione ufficiale A method dispatched by the RMI runtime to a remote object implementation (a server) may or may not execute in a separate thread. Calls originating from different clients Virtual Machines will execute in different threads. From the same client machine it is not guaranteed that each method will run in a separate thread Invocazioni di metodi remoti provenienti da client diversi sono eseguite da diversi thread consente di non bloccare un client in attesa della terminazione dell'esecuzione di un metodo invocato da un altro client ottimizza la performance del servizio remoto Invocazioni concorrenti provenienti dallo stesso client possono essere eseguite dallo stesso thread o da thread diversi Remote Method Invocation Laura Ricci 50
51 RMI: INVOCAZIONE CONCORRENTE DI METODI Supporto RMI utilizza multithreading Può comportare comportamenti non thread-safe Due client diversi possono aggiornare concorrentemente una struttura dati condivisa, producendo risultati errati perdita di aggiornamenti occorre assicurare il corretto accesso alla struttura dati condivisa Remote Method Invocation Laura Ricci 51
52 CONDIVISIONE OGGETTO REMOTO import java.rmi.remote; import java.rmi.remoteexception; public interface Fib extends Remote { int getnextfib() throws RemoteException; } Remote Method Invocation Laura Ricci 52
53 CONDIVISIONE OGGETTO REMOTO import java.rmi.*; import java.rmi.registry.locateregistry; import java.rmi.registry.registry; import java.rmi.server.*; public class FibServer implements Fib { private int F1; private int F2; public FibServer() throws RemoteException { F1 = 1; F2 = 2; } public int getnextfib() throws RemoteException { int temp = F1; F1 = F2; F2 = temp + F2; return temp;} Remote Method Invocation Laura Ricci 53
54 CONDIVISIONE OGGETTO REMOTO public static void main (String args[]) { try{locateregistry.createregistry(args[0]); System.out.println("Registro Creato"); Registry r=locateregistry.getregistry(args[0]); System.out.println("Registro Reperito"); FibServer statsserver = new FibServer(); Fib stub =(Fib) } UnicastRemoteObject.exportObject(statsServer,0); r.rebind("fib-server", stub); catch (RemoteException e) { System.out.println("Communication error " + e.tostring());}}} Remote Method Invocation Laura Ricci 54
55 CONDIVISIONE OGGETTO REMOTO import java.rmi.*;import java.rmi.registry.locateregistry; import java.rmi.registry.registry; import java.lang.*; public class FibClient { public static void main (String args[]) { Fib serverobject; Remote RemoteObject; try { Registry r= LocateRegistry.getRegistry(args[0]); RemoteObject = r.lookup("fib-server"); serverobject = (Fib)RemoteObject; for (int i = 0; i < 10; i++ System.out.println(serverObject.getNextFib()+"\n");} } catch (Exception e) { e.printstacktrace();}}} Remote Method Invocation Laura Ricci 55
56 CONDIVISIONE OGGETTO REMOTO Client1: risultati restituiti 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 Client2: risultati restituiti 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, L'esecuzione di Client2 è iniziata dopo che Client1 è terminato, ma il riferimento all'oggetto remoto è rimasto lo stesso. Remote Method Invocation Laura Ricci 56
57 CONDIVISIONE OGGETTO REMOTO Il server genera una unica sequenza di numeri di Fibonacci, che viene 'condivisa' dai due client che accedono concorrentemente E' stato creato un unico oggetto remoto Il supporto può attivare più threads, uno per ogni client, ma ognuno di questi fa riferimento allo stesso oggetto remoto Comportamento non corretto per la semantica del servizio In generale problemi di sincronizzazione a strutture dati comuni Remote Method Invocation Laura Ricci 57
58 SERVIZI DI ESECUZIONE REMOTA il meccanismo di RMI consente di implementare strutture più complesse si consideri il seguente scenario: esistono alcuni host sulla rete con capacità computazionali elevate oppure con hardware specializzato si vuole realizzare su queste macchine un servizio remoto che consenta ai client di sottomettere al servizio un task per l'esecuzione, di eseguirlo e di reperirne i risultati implementazioni possibile utilizzare ObjectInput/OutputStream ed il meccanismo della serializzazione per serializzare oggetti, valori in input, risultati utilizzare RMI ed implementare un servizio remoto di esecuzione con un unico metodo che permetta di eseguire i task sottomessi Remote Method Invocation Laura Ricci 58
59 COMPUTE ENGINE Remote Method Invocation Laura Ricci 59
60 COMPUTE ENGINE: SOLUZIONE 1 import java.io.serializable; public class somma implements Serializable { public somma ( ) {super(); }; public int execute(int x) { int somma=0; for (int i=1; i<x; i++) {somma=somma+i;} return somma; }} Remote Method Invocation Laura Ricci 60
61 COMPUTE ENGINE: SOLUZIONE 1 import java.net.*; import java.io.*; public class ServerSocketc { public static void main (String args[]) throws Exception { ServerSocket ss = new ServerSocket(args[0]); Socket s= ss.accept(); InputStream is=s.getinputstream(); ObjectInputStream ois= new ObjectInputStream(is); somma som= (somma) ois.readobject(); int par=(int) ois.readobject(); int i=som.execute(par); OutputStream os= s.getoutputstream(); ObjectOutputStream oos= new ObjectOutputStream(os); oos.writeobject(i);}} Remote Method Invocation Laura Ricci 61
62 COMPUTE ENGINE: SOLUZIONE 1 import java.net.*; import java.io.*; public class ClientSocket { public static void main (String args[]) throws Exception {InetAddress ia= InetAddress.getLocalHost(); Socket s = new Socket(ia, 2330); somma tasksomma = new somma(); OutputStream os = s.getoutputstream(); ObjectOutputStream oo = new ObjectOutputStream(os); oo.writeobject(tasksomma); oo.writeobject(100); InputStream is = s.getinputstream(); ObjectInputStream ois = new ObjectInputStream(is); int i=(int) ois.readobject(); System.out.println(i);}} Remote Method Invocation Laura Ricci 62
63 COMPUTE ENGINE: SOLUZIONE 1 problema principale: il Server offre il servizio di esecuzione per un solo task, il task somma come generalizzare il Server in modo che offra un servizio di esecuzione per qualsiasi tipo di task? se si conosce l'insieme di Task che possono essere eseguiti dal Server, allora una soluzione è inviare un codice che indica il tipo di Task da eseguire inviare il task il codice inviato indica al Server quale cast effettuare e quali parametri di ingresso per l'esecuzione del task sono spediti sullo stream. Soluzione alternativa utilizza RMI + Generics Remote Method Invocation Laura Ricci 63
64 COMPUTE ENGINE: INTERFACCE REMOTE import java.rmi.remote; import java.rmi.remoteexception; public interface Compute extends Remote { <T,Q> T executetask(task <T,Q> t, Q q) throws RemoteException; public interface Task<T,Q> { T execute(q q); } } l'unico metodo definito nella interfaccia è executetask è un metodo che deve eseguire un task qualsiasi passato dal client esempi di task: somma dei primi n numeri interi, calcolo della approssimazione di π non si conosce al momento della definizione del servizio remoto ne il tipo dei parametri del task da eseguire ne il tipo del risultato utilizzo delle variabili di tipo, generic Q tipo dell'input, T tipo del risultato Remote Method Invocation Laura Ricci 64
65 IL SERVIZIO REMOTO import java.rmi.remoteexception; import java.rmi.registry.locateregistry; import java.rmi.registry.registry; import java.rmi.server.unicastremoteobject; public class ComputeEngine implements Compute { public ComputeEngine() throws Exception { super(); } public <T,Q> T executetask(task<t,q> t, Q q) { return t.execute(q); } Remote Method Invocation Laura Ricci 65
66 IL SERVIZIO REMOTO public static void main(string[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { String name = "Compute"; Compute engine = new ComputeEngine(); Compute stub = (Compute) UnicastRemoteObject.exportObject(engine, 0); System.out.println(stub); LocateRegistry.createRegistry(args[0]); Registry registry = LocateRegistry.getRegistry(args[0]); registry.rebind(name, stub); System.out.println("ComputeEngine bound"); } catch (Exception e) { System.err.println("ComputeEngine exception:"); e.printstacktrace();}}} Remote Method Invocation Laura Ricci 66
67 L'IMPLEMENTAZIONE DEL TASK import java.io.serializable; public class somma implements Task<Integer,Integer>,Serializable { public somma ( ) {super(); }; public Integer execute (Integer x) { int somma=0; for (int i=0; i<x; i++) {somma=somma+i;} return new Integer(somma); }} Remote Method Invocation Laura Ricci 67
68 IL CLIENT import java.rmi.registry.locateregistry; import java.rmi.registry.registry; public class Client { public static void main(string args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { String name = "Compute"; Registry registry = LocateRegistry.getRegistry(args[0]); Compute comp = (Compute) registry.lookup(name); somma task = new somma(); Integer s = comp.executetask(task,100); System.out.println(s); } catch (Exception e) { System.err.println("ComputePi exception:"); e.printstacktrace(); } } } Remote Method Invocation Laura Ricci 68
69 ESERCIZIO 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 i programmi delle 3 giornate del congresso, ciascuno dei quali è memorizzato in una struttura dati come quella mostrata di seguito, 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). Remote Method Invocation Laura Ricci 69
70 ESERCIZIO Il client può richiedere operazioni per registrare uno speaker ad una sessione; ottenere il programma del congresso; Il client inoltra le richieste al server tramite il meccanismo di RMI. Prevedere, per ogni possibile operazione una gestione di eventuali condizioni anomale (ad 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). Il client è implementato come un processo ciclico che continua a fare richieste sincrone fino ad esaurire tutte le esigenze utente. Stabilire una opportuna condizione di terminazione del processo di richiesta. Remote Method Invocation Laura Ricci 70
Lezione n.8 LPR Informatica Applicata Multicast UDP RMI-Remote Method Invocation. 03/05/2010 Laura Ricci
Lezione n.8 LPR Informatica Applicata Multicast UDP RMI- 03/05/2010 Laura Ricci Laura Ricci 1 RIASSUNTO DELLA LEZIONE paradigma di interazione domanda/risposta remote procedure call RMI (): API JAVA Esercizio
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
DettagliLEZIONE n.8 LPR REMOTE METHOD INVOCATION. 28/04/2008 Laura Ricci
LEZIONE n.8 LPR REMOTE METHOD INVOCATION 28/04/2008 Laura Ricci Remote Method Invocation Laura Ricci 1 RIASSUNTO DELLA LEZIONE paradigma di interazione domanda/risposta remote procedure call RMI (Remote
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
DettagliLezione n.9 LPR- INFORMATICA APPLICATA REMOTE METHOD INVOCATION CALLBACKS. 04/05/2009 Laura Ricci
Lezione n.9 LPR- INFORMATICA APPLICATA REMOTE METHOD INVOCATION CALLBACKS 04/05/2009 Laura Ricci Laura Ricci 1 RIASSUNTO DELLA LEZIONE paradigma di interazione domanda/risposta remote procedure call RMI
DettagliLezione n.8. RMI: Remote Method Invocation. 1/12/2009 Vincenzo Gervasi
Università degli Studi di Pisa Dipartimento di Informatica Lezione n.8 LPR-A-09 RMI: Remote Method Invocation 1/12/2009 Vincenzo Gervasi Lezione U 8: RMI - Remote Method Invocation Vincenzo Gervasi 1 Da
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
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
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
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 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
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:
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
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
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
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
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
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
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
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
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
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
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
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
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. 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
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
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
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
DettagliOrganizzazione della lezione. Lezione 16 Remote Method Invocation - 4. Modello Client Server. Le classi di Archivio Client-Server
Organizzazione della lezione Lezione 16 Remote Method Invocation - 4 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno
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
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
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
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:
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
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)
DettagliGESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
DettagliLaboratorio di Reti Lezione 10 RMI: Callbacks, Code Mobility. 29/11/2016 Laura Ricci
Laboratorio di Reti Lezione 10 : 29/11/2016 Laura Ricci Laura Ricci 1 IL MECCANISMO DELLE CALLBACK Il meccanismo delle callback consente di realizzare il pattern Observer in ambiente distribuito, utile
DettagliLA PROGRAMMAZIONE RMI
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Remote Method Invocation Prof. Franco Zambonelli A.A. 2005-2006 LA PROGRAMMAZIONE
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
DettagliProgrammazione di rete in Java
Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo
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
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
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
DettagliChiamata remota di metodi
Chiamata remota di metodi Architettura di Java RMI Esecuzione di una Java RMI Architettura di RMI client server Stub & Skeleton Stub & Skeleton Remote Reference Remote Reference Trasporto Ciascun livello
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
DettagliLaboratorio di reti I
Laboratorio di reti I Stefano Brocchi brocchi@dsi.unifi.it 13 ottobre, 2009 Stefano Brocchi Laboratorio di reti I 13 ottobre, 2009 1 / 27 Introduzione Obiettivi del corso Aspetti di programmazione Java
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
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 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
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
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
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
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
DettagliConcorrenza e sincronizzazione
Concorrenza e sincronizzazione Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Cosa faremo oggi 2 Concorrenza Sincronizzazione Concorrenza 3 Nei programmi Java fino ad ora sviluppati è presente
DettagliEsercitazione di Sistemi Distribuiti: Java RMI
Esercitazione di Sistemi Distribuiti: Java RMI Anno Accademico 2007-08 Marco Comerio comerio@disco.unimib.it Richiami Teorici Oggetti distribuiti 2-16 Usuale organizzazione di un oggetto remoto con un
DettagliArchitetture 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
DettagliCorso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
DettagliRMI remote method invocation
RMI remote method invocation Marco Danelutto Lab. Programmazione di Rete :: A.A. 2007-2008 Concetto RPC/RMI invocazione di procedura/metodo o.method(params); eseguita su oggetto remoto: metodo per ottenere
DettagliRMI e Firewall. Una soluzione è offerta dal transport layer di RMI stesso
Firewall Ogni applicazione di rete, che opera fuori da quelli che sono i confini di una rete locale, incontra inevitabilmente i cosiddetti firewall Tipicamente i firewall bloccano tutto il traffico di
DettagliI Thread. un thread è uno stream di esecuzione del programma
I Thread un thread è uno stream di esecuzione del programma Sistema Operativo e Thread Un processo o thread una successione di operazioni che vengono eseguite dal sistema operativo in modo sequenziale
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
DettagliRETI DI CALCOLATORI Linguaggio Java: Eccezioni
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione
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
DettagliCorso di Reti di Calcolatori T
Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 1 (proposta) Socket Java senza connessione Luca Foschini Anno accademico 2016/2017 Esercitazione 1 1
DettagliLe classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:
Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata
DettagliI Thread. Sistema Operativo e Thread
I Thread un thread è uno stream di esecuzione del programma Sistema Operativo e Thread Un processo o thread una successione di operazioni che vengono eseguite dal sistema operativo in modo sequenziale
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
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
Dettaglidomenica 9 giugno 13 Serializzazione
Serializzazione A cosa serve? Ad ottenere una rappresentazione di una struttura dati che possiamo memorizzare, trasmettere via rete Cosa possiamo serializzare? OK NO Tipi primitivi, Riferimenti stringhe
DettagliFileHandler. +getcontent():string +getline(number:int):string
Proxy 85 12. Proxy (GoF pag. 207) 12.1. Descrizione Fornisce una rappresentazione di un oggetto di accesso difficile o che richiede un tempo importante per l accesso o creazione. Il Proxy consente di posticipare
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
DettagliMultithreading in Java I parte. Lorenzo Gallucci
Multithreading in Java I parte Lorenzo Gallucci Java: un linguaggio ed un sistema predisposti per il multitasking È possibile creare e gestire Thread nativamente (senza dover ricorrere a librerie esterne)
DettagliLezione n.5 LPR-Informatica Applicata 13/3/2006
Lezione n.5 LPR-Informatica Applicata 13/3/2006 1 LA CLASSE BYTEARRAYOUTPUTSTREAM Definisce una struttura dati protected byte buf [ ]; protected int count buf memorizza i bytes che vengono scaricati sullo
DettagliGestione delle eccezioni in Java
Gestione delle eccezioni in Java Fondamenti di Informatica Ingegneria Gestionale Canale AL 1 Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel
DettagliProgrammazione di sistemi distribuiti
Programmazione di sistemi distribuiti I Sistemi Distribuiti, per loro natura, prevedono che computazioni differenti possano essere eseguite su VM differenti, possibilmente su host differenti, comunicanti
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi
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
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
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
DettagliLezione n.2b. Threads: Callable & Future. 6/10/2008 Vincenzo Gervasi
Università degli Studi di Pisa Dipartimento di Informatica Lezione n.2b LPR-A-09 Threads: Callable & Future 6/10/2008 Vincenzo Gervasi Lezione U 2b: Callable & Future Vincenzo Gervasi 1 CALLABLE E FUTURE
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
DettagliProgrammazione a Oggetti Lezione 11. Eccezioni e Packages
Programmazione a Oggetti Lezione 11 Eccezioni e Packages Sommario Eccezioni Sollevamento Cattura Trattamento Packages e visibilità Eccezioni I programmi spesso si trovano ad operare in condizioni anomale:
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
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
DettagliLE ECCEZIONI. Dott. Riccardo Zese.
LE ECCEZIONI Dott. Riccardo Zese riccardo.zese@unife.it Che cosa sono le eccezioni In un programma si possono generare situazioni critiche che provocano errori. Non è però accettabile, soprattutto in applicazioni
DettagliRemote Method Invocation (RMI)
(RMI) Remote Method Invocation (RMI) in Java. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. e-mail: cazzola@disi disi.unige.it Walter Cazzola Java: Remote
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
DettagliInizializzare oggetti
Inizializzare oggetti Uso della Classe Software per TLC - AA 2008/2009 1 Costruttori e polimorfismo Uso della Classe Un codice migliore Software per TLC - AA 2008/2009 2 Costruttori ed Ereditarietà Output:
DettagliPROVA FINALE Ingegneria del software
PROVA FINALE Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Laboratorio N 5 Cosa faremo oggi 2 Comunicazione tramite TCP socket Comunicazione tramite UDP socket RIPASSO: Input Output 3 In
DettagliApplicazioni distribuite e sistemi ad oggetti distribuiti. RPC RMI - Web Services 1
Applicazioni distribuite e sistemi ad oggetti distribuiti RPC RMI - Web Services 1 Complessità delle applicazioni distribuite La scrittura di applicazioni distribuite basate sull utilizzo di protocolli
DettagliApplicazioni distribuite e sistemi ad oggetti distribuiti
Applicazioni distribuite e sistemi ad oggetti distribuiti Complessità delle applicazioni distribuite La scrittura di applicazioni distribuite basate sull utilizzo di protocolli di comunicazione asincroni
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
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
DettagliIL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma
DettagliEccezioni e Thread (cenni)
Eccezioni e Thread (cenni) Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149
DettagliProgrammazione Java Avanzata Programmazione Object- Oriented in Java
Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione
Dettagli