Lezione n.9 LPR Informatica Applicata RMI-Remote Method Invocation 09/05/2013 Laura Ricci

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Lezione n.9 LPR Informatica Applicata RMI-Remote Method Invocation 09/05/2013 Laura Ricci"

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-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

Dettagli

LPR 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 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

Dettagli

LEZIONE n.8 LPR REMOTE METHOD INVOCATION. 28/04/2008 Laura Ricci

LEZIONE 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

Dettagli

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

Lezione 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

Dettagli

Lezione 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 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

Dettagli

Lezione n.8. RMI: Remote Method Invocation. 1/12/2009 Vincenzo Gervasi

Lezione 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

Dettagli

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

Esercizi 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

Dettagli

Corso di Reti di Calcolatori L-A

Corso 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

Dettagli

Programmazione distribuita

Programmazione 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

Dettagli

Lezione n.10 LPR. RMI CallBacks

Lezione 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

Dettagli

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

Esercizi 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

Dettagli

Lezione 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 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:

Dettagli

Remote Method Invocation

Remote 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

Dettagli

PROVA FINALE Ingegneria del software

PROVA 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

Dettagli

Corso di Reti di Calcolatori LA

Corso 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

Dettagli

Corso di Reti di Calcolatori T

Corso 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

Dettagli

Oggetti Distribuiti e Java RMI

Oggetti 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

Dettagli

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

Organizzazione 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

Dettagli

Esercizi su Callback RMI

Esercizi 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

Dettagli

Esercitazione di Sistemi Distribuiti

Esercitazione 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

Dettagli

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:

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: 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

Dettagli

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

Organizzazione 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

Dettagli

16. Java Remote Method Invocation (4)

16. 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

Dettagli

Compute engine generici in RMI

Compute 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

Dettagli

19 - 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 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

Dettagli

Organizzazione 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) 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

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. 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

Dettagli

Socket & RMI Ingegneria del Software - San Pietro

Socket & 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

Dettagli

Organizzazione 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. 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

Dettagli

Organizzazione 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. 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

Dettagli

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

Programmazione. 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

Dettagli

Introduzione a Java Remote Method Invocation (RMI)

Introduzione 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

Dettagli

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

Programmazione. 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

Dettagli

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

Laurea 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:

Dettagli

Java Remote Method Invocation

Java 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

Dettagli

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

7 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)

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE 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

Dettagli

Laboratorio di Reti Lezione 10 RMI: Callbacks, Code Mobility. 29/11/2016 Laura Ricci

Laboratorio 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

Dettagli

LA PROGRAMMAZIONE RMI

LA 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

Dettagli

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

Lezione 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

Dettagli

Programmazione di rete in Java

Programmazione 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

Dettagli

Le basi del linguaggio Java

Le 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

Dettagli

RMI. 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 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

Dettagli

Compute engine generici in RMI

Compute 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

Dettagli

Chiamata remota di metodi

Chiamata 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

Dettagli

Sistemi Distribuiti Multiagente A.A.2010-11 Informatica Magistrale Università di Bari

Sistemi 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

Dettagli

Laboratorio di reti I

Laboratorio 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

Dettagli

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

Contesto 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

Dettagli

15. Java Remote Method Invocation (3)

15. 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.

Dettagli

Organizzazione 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. 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

Dettagli

Organizzazione 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. (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

Dettagli

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

Activation 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

Dettagli

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

Java 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

Dettagli

12. Java: Remote Method Invocation (3)

12. 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

Dettagli

Concorrenza e sincronizzazione

Concorrenza 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

Dettagli

Esercitazione di Sistemi Distribuiti: Java RMI

Esercitazione 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

Dettagli

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

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

Dettagli

Corso 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) 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

Dettagli

RMI remote method invocation

RMI 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

Dettagli

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

RMI 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

Dettagli

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

I 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

Dettagli

Organizzazione della lezione. Lezione 13. Applicazioni ad oggetti distribuite. Remote Method Invocation (RMI)

Organizzazione 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

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI 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

Dettagli

Gerarchia 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 Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1 Gerarchia delle classi Una sottoclasse eredita metodi, variabili, etc. dalla superclasse... Per

Dettagli

Corso di Reti di Calcolatori T

Corso 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

Dettagli

Le 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: 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

Dettagli

I Thread. Sistema Operativo e Thread

I 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

Dettagli

Organizzazione 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) 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

Dettagli

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Principi, 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

Dettagli

domenica 9 giugno 13 Serializzazione

domenica 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

Dettagli

FileHandler. +getcontent():string +getline(number:int):string

FileHandler. +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

Dettagli

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

Organizzazione 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

Dettagli

Multithreading in Java I parte. Lorenzo Gallucci

Multithreading 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)

Dettagli

Lezione n.5 LPR-Informatica Applicata 13/3/2006

Lezione 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

Dettagli

Gestione delle eccezioni in Java

Gestione 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

Dettagli

Programmazione di sistemi distribuiti

Programmazione 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

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione 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

Dettagli

18. Applicazioni ed Esempi (2)

18. 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

Dettagli

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

UnicastRemoteObject. 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

Dettagli

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

Interfacce. 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

Dettagli

Lezione n.2b. Threads: Callable & Future. 6/10/2008 Vincenzo Gervasi

Lezione 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

Dettagli

Agenti Mobili in Java RMI

Agenti 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

Dettagli

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

Programmazione 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:

Dettagli

RMI: metodi equals e hashcode

RMI: 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

Dettagli

Programmazione a oggetti

Programmazione 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

Dettagli

LE ECCEZIONI. Dott. Riccardo Zese.

LE 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

Dettagli

Remote Method Invocation (RMI)

Remote 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}

{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

Dettagli

Inizializzare oggetti

Inizializzare 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:

Dettagli

PROVA FINALE Ingegneria del software

PROVA 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

Dettagli

Applicazioni distribuite e sistemi ad oggetti distribuiti. RPC RMI - Web Services 1

Applicazioni 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

Dettagli

Applicazioni distribuite e sistemi ad oggetti distribuiti

Applicazioni 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

Dettagli

14. Java Remote Method Invocation (2)

14. 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

Dettagli

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo 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

Dettagli

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

IL 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

Dettagli

Eccezioni e Thread (cenni)

Eccezioni 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

Dettagli

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione 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