Java RMI: Esempio Completo di un Applicazione Distribuita

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Java RMI: Esempio Completo di un Applicazione Distribuita"

Transcript

1 Java RMI: Esempio Completo di un Applicazione Distribuita Il Problema Produttore/Consumatore in Ambiente Distribuito* *a cura del Prof. L. Nigro, Università della Calabria

2 Java RMI (Remote Method Invocation) Introduce uno strato di trasporto basato su TCP, per la chiamata e trasmissione di dati (opportunamente espressi in un formato di rete; Java usa la serializzazione come tecnica di marshalling) ) ad un oggetto remoto Un oggetto remoto è rappresentato presso il client da uno stub (proxy), che implementa la stessa interfaccia dell oggetto remoto.. Lo stub riceve la richiesta di invocazione di un metodo, prepara un blocco di informazioni (messaggio)) e lo spedisce alla macchina server dove risiede l oggetto remoto (oggetto effettivo), utilizzando i servizi di TCP Presso il server è presente lo skeleton che si interfaccia con la rete, converte le informazioni ricevute dallo stub, chiama il metodo effettivo sull oggetto remoto e, alla fine, costruisce un messaggio col risultato che è inviato allo stub e quindi al client Lo schema complessivo mira a rendere indistinguibile la chiamata di un metodo su un oggetto locale da quella relativa ad un oggetto remoto (semantica sincrona o bloccante) RMI richiede la mobilità del codice di classi Java e utilizza un meccanismo di garbage collection distribuita degli oggetti remoti basata su reference-count count IS_7 - L. Nigro 51

3 Architettura IS_7 - L. Nigro 52

4 Osservazioni Le prime versioni di Java effettivamente generavano stub e skeleton di un oggetto remoto Java 1.4 si limita a generare solo la componente stub Le ultime versioni (Java 5.0 o superiore) ) non generano più esplicitamente stub e skeleton dal momento che il linguaggio ne fornisce direttamente il supporto (basato sulla reflection e i proxy dinamici) indipendentemente dal particolare oggetto remoto implementato Ottenere un applicazione distribuita funzionante basata su Java RMI può essere non agevole dal momento che occorre padroneggiare tutta una serie di dettagli.. In quanto segue si mostrerà l uso di RMI attraverso lo sviluppo concreto di esempio non banale, rappresentativo della situazione generale I concetti base sono: progetto interfacce remote (da( collocare identicamente lato server e lato client) implementazioni delle interfacce lato server (UnicastRemoteObject( UnicastRemoteObject) pubblicazione di uno o più oggetti remoti su rmiregstry implementazioni delle applicazioni client con, es., lookup di oggetto remoti su rmiregistry predisposizione di un web server per il download di classi a runtime. IS_7 - L. Nigro 53

5 Produttore/consumatore/buffer limitato in ambiente distribuito Si tratta di un problema classico di programmazione concorrente Un certo numero di processi produttori e consumatori comunicano tra loro scambiandosi messaggi di un tipo generico, attraverso la mediazione di un buffer limitato (mailbox) Il buffer va realizzato in veste thread-safe mediante una scelta opportuna del meccanismo di controllo della concorrenza Il buffer costituisce un oggetto remoto condiviso tra i produttori e consumatori dispersi su varie macchine (dunque il problema coinvolge il vero parallelismo) Come meccanismi di controllo della concorrenza si considerano: semafori, lock/condition, monitor nativo di Java Si desidera che i risvegli dei processi avvengano in ordine FIFO Il buffer rappresenta il server, i processi produttori/consumatori i client IS_7 - L. Nigro 54

6 Impostazione del progetto Il progetto viene sviluppato su singola macchina ma è pensato esplicitamente per il distribuito. Tutto ciò si riflette,, ad esempio, nel controllo degli accessi alle classi che in una JVM è mediato dal classpath Sviluppare secondo RMI significa comprendere esattamente che il sistema software deve poter girare indipendentemente da ogni agevolazione di classpath Concretamente, è utile suddividere il lavoro in tre progetti associati rispettivamente al lato server, al lato client, agli aspetti comuni (common). Tali progetti possono essere sviluppati in ambiente Eclipse (dopo( aver scaricato dalla rete ed installato il plug-in di Java RMI) o direttamente utilizzando gli strumenti Java (il( metodo preferito di seguito) Siano bb_server, bb_client e bb_common le tre directory (es( es. di c:\) dei progetti. Siccome le varie componenti dell applicazione distribuita gireranno su macchine (e JVM) diverse, l utilizzo del packaging deve avvenire rigorosamente in modo congruente nei vari sotto progetti Si sottolinea ancora che le classi interne a bb_server o bb_client o bb_common non devono basarsi sul classpath per ottenere l accesso a classi degli altri progetti.. A tale proposito, si ammette che sulla macchina di sviluppo locale il classpath non contenga gli entry point di bb_server, bb_client e bb_common IS_7 - L. Nigro 55

7 Le interfacce Il punto di partenza è la definizione di opportune interfacce lato server Siccome le specifiche richiedono di poter lavorare su bounded buffer basati su diversi metodi di concorrenza, si è deciso di introdurre un factory che ottiene, a partire da informazioni di configurazione,, la dimensione del buffer e la specifica del tipo di controllo della concorrenza L oggetto factory è di fatto il primo oggetto remoto da realizzare. Altri oggetti remoti sono poi i vari tipi di buffer Le interfacce BoundeBuffer e BoundedBufferFactory rappresentano aspetti comuni dell intero progetto. Esse vengono sviluppate in bb_common e poi replicate identicamente (rispettando la struttura a package) in bb_server e bb_client Tanto BoundedBuffer quanto BoundedBufferFactory estendono l interfaccia Remote e i loro metodi devono dichiarare che possono sollevare l eccezione RemoteException (di tipo checked) Ogni (sotto) progetto ha package del tipo is.sottodirectory, il che significa che una corrispondente gerarchia di directory va realizzata in bb_common,, o bb_server etc. Ad esempio, siccome si desidera il package is.boundedbuffer per le interfacce BoundedBuffer e BoundedBufferFactory,, in bb_common si crea la directory is e al suo interno boundedbuffer etc. IS_7 - L. Nigro 56

8 Le interfacce di is.boundedbuffer package is.boundedbuffer; import java.rmi.*; public interface BoundedBuffer extends Remote{ public void put( Message m ) throws RemoteException; public Message get() throws RemoteException; //BoundedBuffer package is.boundedbuffer; import java.rmi.*; public interface BoundedBufferFactory extends Remote{ public BoundedBuffer getbuffer() throws RemoteException; //BoundedBufferFactory IS_7 - L. Nigro 57

9 Le interfacce di is.boundedbuffer In realtà, il package is.boundedbuffer dichiara anche l interfaccia Message che descrive la tipologia generica dei messaggi scambiati Message non è un interfaccia remota,, ma estende Serializable. Metodi esistono per fissare/ottenere il dato di un messaggio,, e per fissare/ottenere il tempo di permanenza del messaggio nel buffer package is.boundedbuffer; import java.io.*; public interface Message extends Serializable{ public void setdata( Object dato ); public Object getdata(); public long getbuffertime(); public void setbuffertime( long time ); //Message IS_7 - L. Nigro 58

10 Problemi di compilazione Dopo aver creato e compilato in bb_common le classi di is.boundedbuffer, si copia la gerarchia di directory is/boundedbuffer all interno di bb_server e bb_client Attenzione: l impostazione del lavoro richiede che per compilare correttamente es.. le interfacce di is.boundedbuffer, ci si debba collocare col prompt di sistema (uso di javac a riga di comando) ) in bb_common. Da dentro Eclipse, ovviamente,, le cose risulterebbero semplificate dallo strumento Utile è un file batch (es( es. jc.bat) posto in bb_common, col seguente contenuto: javac is/boundedbuffer boundedbuffer/*.java IS_7 - L. Nigro 59

11 Implementazioni lato server In bb_server si crea la sottodirectory di is es. denominata boundedbuffer_server, che si affianca alla sottodirectory boundedbuffer copiata da bb_common In boundedbuffer_server si programma l oggetto BoundedBufferFactoryImpl implementazione di BoundedBufferFactory ed erede di UnicastRemoteObject.. In questo modo l oggetto remoto (factory) si esporta ad RMI. L esportazione significa che RMI si fa poi carico di sentire richieste di connessioni dall esterno esterno, su una certa porta, dirette all oggetto remoto Nella stessa directory si implementano le classi bounded buffer concrete IS_7 - L. Nigro 60

12 BoundedBufferFactoryImpl Scopo di questa classe è consultare un file di properties (buffer.properties( buffer.properties) ) ed ottenere da questo le informazioni sulla buffer size ed il tipo di controllo della concorrenza. Esempio di contenuto di buffer.properties: BufferSize=5 ConcurrencyMethod=Semaphore Gli altri metodi di concorrenza sono indicati dai valori Lock e Native di ConcurrentMethod Se viene sollevata qualche eccezione (es. il file di properties non viene trovato) ) la classe ipotizza il controllo di concorrenza Native con una buffer size di default di 5 slot IS_7 - L. Nigro 61

13 BoundedBufferFactoryImpl package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import java.util.properties; import java.io.*; public class BoundedBufferFactoryImpl extends UnicastRemoteObject implements BoundedBufferFactory{ private BoundedBuffer bb=null; public BoundedBufferFactoryImpl() throws RemoteException{ public BoundedBuffer getbuffer() throws RemoteException{ if( bb!=null ) return bb; Properties p=new Properties(); int n=5;//dimensione di default IS_7 - L. Nigro 62

14 BoundedBufferFactoryImpl try{ FileInputStream in= new FileInputStream("c:\\bb_server\\is\\boundedbuffer_server\\buffer.properties"); p.load( in ); String size=p.getproperty("buffersize"); n=integer.parseint(size); System.out.println("buffer size="+n); String conctype=p.getproperty("concurrencymethod"); if( conctype.equalsignorecase("semaphore") ){ System.out.println("Semaphore"); bb=new BoundedBufferSemaphoreImpl(n); else if( conctype.equalsignorecase("lock") ){ System.out.println("Lock/Condition"); bb=new BoundedBufferLockImpl(n); else{//monitor nativo di default System.out.println("Java Native Monitor"); bb=new BoundedBufferSynchronizedImpl(n); catch( IOException e ){ e.printstacktrace(); System.out.println("Java Native Monitor"); bb=new BoundedBufferSynchronizedImpl(n); return bb; //getbuffer //BoundedBufferFactoryImpl IS_7 - L. Nigro 63

15 Le classi degli oggetti remoti bounded buffer Per facilitare lo sviluppo si è deciso di realizzare preliminarmente la classe BoundedBufferImpl che implementa BoundedBuffer ma senza alcun controllo della concorrenza L uso di questa classe da parte di più thread è unsafe Le classi eredi aggiungono il controllo della concorrenza,, ma si disinteressano della gestione del buffer IS_7 - L. Nigro 64

16 BoundedBufferImpl package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; public class BoundedBufferImpl extends UnicastRemoteObject implements BoundedBuffer{//bounded buffer non sincronizzato private Message[] buffer; private int n, in, out, count; public BoundedBufferImpl( int n ) throws RemoteException{ if( n<=0 ) throw new RemoteException ("La dimensione del buffer deve essere positiva!"); this.n=n; buffer=new Message[n]; in=0; out=0; count=0; //costruttore IS_7 - L. Nigro 65

17 BoundedBufferImpl public void put( Message x ) throws RemoteException{ buffer[in]=x; in=(in+1)%n; count++; System.out.println("Buffering "+x+"..."); x.setbuffertime( System.currentTimeMillis() ); //put public Message get() throws RemoteException{ Message x=buffer[out]; out=(out+1)%n; count--; x.setbuffertime( System.currentTimeMillis()-x.getBufferTime() ); System.out.println("Unbuffering "+x+"..."); return x; //get protected boolean empty(){ return count==0; protected boolean full(){ return count==n; //BoundedBufferImpl IS_7 - L. Nigro 66

18 BoundedBufferSemaphoreImpl package is.boundedbuffer_server; import java.util.concurrent.*; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; public class BoundedBufferSemaphoreImpl extends BoundedBufferImpl{ private Semaphore mutex=new Semaphore(1,true); private Semaphore empty, full; public BoundedBufferSemaphoreImpl( int n ) throws RemoteException{ super(n); empty=new Semaphore(n,true); full=new Semaphore(0,true); public void put( Message x ) throws RemoteException{ empty.acquireuninterruptibly(); mutex.acquireuninterruptibly(); super.put(x); mutex.release(); full.release(); //put public Message get() throws RemoteException{ full.acquireuninterruptibly(); mutex.acquireuninterruptibly(); Message x=super.get(); mutex.release(); empty.release(); return x; //get //BoundedBufferSemaphoreImpl IS_7 - L. Nigro 67

19 BoundedBufferLockImpl package is.boundedbuffer_server; import java.util.concurrent.locks.*; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; public class BoundedBufferLockImpl extends BoundedBufferImpl{ private Lock lock=new ReentrantLock(); private Condition empty=lock.newcondition(); private Condition full=lock.newcondition(); private List<Thread> listaproduttori=new ArrayList<Thread>(); private List<Thread> listaconsumatori=new ArrayList<Thread>(); private boolean produttoredevedormire(){ if( super.full() listaproduttori.get(0)!=thread.currentthread() ) return true; return false; //produttoredevedormire private boolean consumatoredevedormire(){ if( super.empty() listaconsumatori.get(0)!=thread.currentthread() ) return true; return false; //consumatoredevedormire public BoundedBufferLockImpl( int n ) throws RemoteException{ super(n); //costruttore IS_7 - L. Nigro 68

20 BoundedBufferLockImpl public void put( Message x ) throws RemoteException{ lock.lock(); try{ listaproduttori.add( Thread.currentThread() ); while( produttoredevedormire() ){ full.awaituninterruptibly(); listaproduttori.remove(0); super.put(x); empty.signalall(); finally{ lock.unlock(); //put public Message get() throws RemoteException{ Message x; lock.lock(); try{ listaconsumatori.add( Thread.currentThread() ); while( consumatoredevedormire() ){ empty.awaituninterruptibly(); listaconsumatori.remove(0); x=super.get(); full.signalall(); finally{ lock.unlock(); return x; //get //BoundedBufferLockImpl IS_7 - L. Nigro 69

21 BoundedBufferSynchronizedImpl package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; public class BoundedBufferSynchronizedImpl extends BoundedBufferImpl{ private List<Thread> listaproduttori=new ArrayList<Thread>(); private List<Thread> listaconsumatori=new ArrayList<Thread>(); private boolean produttoredevedormire(){ if( super.full() listaproduttori.get(0)!=thread.currentthread() ) return true; return false; //produttoredevedormire private boolean consumatoredevedormire(){ if( super.empty() listaconsumatori.get(0)!=thread.currentthread() ) return true; return false; //consumatoredevedormire public BoundedBufferSynchronizedImpl( int n ) throws RemoteException{ super(n); //costruttore IS_7 - L. Nigro 70

22 BoundedBufferSynchronizedImpl public synchronized void put( Message x ) throws RemoteException{ listaproduttori.add( Thread.currentThread() ); while( produttoredevedormire() ){ try{ wait(); catch( InterruptedException e ){ listaproduttori.remove(0); super.put(x); notifyall(); //put public synchronized Message get() throws RemoteException{ listaconsumatori.add( Thread.currentThread() ); while( this.consumatoredevedormire() ){ try{ wait(); catch( InterruptedException e ){ listaconsumatori.remove(0); Message x=super.get(); notifyall(); return x; //get //BoundedBufferSynchronizedImpl IS_7 - L. Nigro 71

23 Implementazione del server package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import javax.naming.*; public class BoundedBufferServer{ public static void main( String[] args ){ System.setProperty("java.security.policy", "c:\\bb_server\\is\\boundedbuffer_server\\server.policy"); System.setSecurityManager( new RMISecurityManager() ); try{ System.out.println("Costruzione factory..."); BoundedBufferFactory bbf=new BoundedBufferFactoryImpl(); System.out.println("Pubblicazione factory..."); Context naming=new InitialContext(); naming.rebind("rmi:boundedbufferfactory",bbf); System.out.println("In attesa di clienti..."); catch( Exception e ){ e.printstacktrace(); //main //BoundedBufferServer IS_7 - L. Nigro 72

24 Commenti Un programma server possiede il main ed il suo scopo è creare e pubblicare uno o più oggetti remoti di cui i client potranno scaricare lo stub su richiesta La pubblicazione sfrutta il servizio rmiregistry fornito da Java, che memorizza coppie <nome,riferimento> di oggetti remoti L utilizzo del servizio rmiregistry avviene mediante la classe Context di cui si crea un oggetto naming. Il metodo rebind inserisce una nuova coppia ed eventualmente aggiorna l oggetto se il nome è già presente.. I nomi sono del tipo rmi:nome_oggetto È importante assicurare nomi unici globali per gli oggetti remoti Nell esempio esempio,, solo l oggetto factory è creato e pubblicato sotto il nome rmi:boundedbufferfactory.. Un oggetto bounded buffer non viene pubblicato ma egualmente potrà essere ottenuto da un client invocando getbuffer() sul factory, che cosi restituisce lo stub del bounded buffer. Tutto ciò, tra l altro, assicura che i vari client ottengano e cooperino utilizzando uno stesso oggetto remoto bounded buffer IS_7 - L. Nigro 73

25 Commenti La compilazione di BoundedBufferServer implicitamente genera lo stub associato (in realtà Java 5.0 o superiore non lo genera più) Utilizzando una versione di Java sino alla 1.4, lo stub andrebbe creato esplicitamente col compilatore rmic come segue: >rmic is.boundedbuffer_server.boundedbufferserver invocato da dentro bb_server e specificando esplicitamente il package. Si otterrebbe il file BoundedBufferServer_Stub.class rmiregistry, una volta contattato, fornisce ad un client lo stub di un oggetto remoto pubblicato.. A questo scopo lo stub dovrebbe essere disponibile come una risorsa comune (si veda più avanti) ) cui rmiregistry può attingere on-demand IS_7 - L. Nigro 74

26 Implementazioni lato client Si presentano due processi client: uno con funzioni di produttore di messaggi,, un altro come consumatore.. Le relative classi (provviste del main) sono parte delle sotto directory boundedbuffer_producer e boundedbuffer_consumer di is di bb_client Il produttore ottiene un messaggio alla volta da tastiera e lo scrive sul buffer remoto Il consumatore, ogni qualvolta l utente digita Invio, chiede un messaggio al buffer e lo consuma, nel senso che ne mostra il contenuto su video unitamente al tempo di stazionamento del messaggio nel buffer Ma come è fatto un messaggio? È responsabilità del producer definire la tipologia dei messaggi scambiati In concreto, nella sotto directory boundedbuffer_producer si introduce la classe PCMessage che al momento risulta sconosciuta tanto al server (bounded buffer) quanto ai client consumer. La classe PCMessage verrà ottenuta dinamicamente dal server e dai consumatori sfruttando la mobilità del codice (si veda più avanti) presente in RMI IS_7 - L. Nigro 75

27 Classe PCMessage package is.boundedbuffer_producer; import java.io.*; import is.boundedbuffer.*; public class PCMessage implements Message, Serializable{ private long waittime; String content; public PCMessage( String s ){ content=s; public void setdata( Object s ){ content=(string)s; public Object getdata(){ return content; public void setbuffertime( long time ){ waittime=time; public long getbuffertime(){ return waittime; public String tostring(){ return content; //tostring //PCMessage IS_7 - L. Nigro 76

28 ProducerClient package is.boundedbuffer_producer; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import javax.naming.*; import java.util.*; public class ProducerClient{ public static void main( String[] args ){ System.setProperty("java.security.policy", "c:\\bb_client\\is\\boundedbuffer_producer\\client.policy"); System.setSecurityManager( new RMISecurityManager() ); String url="rmi://localhost/"; //prefisso url della macchina remota del server BoundedBufferFactory factory=null; BoundedBuffer bb=null; try{ Context naming=new InitialContext(); factory=(boundedbufferfactory)naming.lookup(url+"boundedbufferfactory"); bb=factory.getbuffer(); catch( Exception e ){ e.printstacktrace(); Scanner sc=new Scanner( System.in ); for(;;){ System.out.print("msg> "); String msg=sc.nextline(); try{ bb.put( new PCMessage(msg) ); catch( RemoteException e ){ e.printstacktrace(); //ProducerClient IS_7 - L. Nigro 77

29 ConsumerClient package is.boundedbuffer_consumer; import is.boundedbuffer.*; import java.util.scanner; import java.rmi.*; import java.rmi.server.*; import javax.naming.*; public class ConsumerClient{ public static void main( String[] args ){ System.setProperty("java.security.policy", "c:\\bb_client\\is\\boundedbuffer_consumer\\client.policy"); System.setSecurityManager( new RMISecurityManager() ); String url="rmi://localhost/"; BoundedBufferFactory factory=null; BoundedBuffer bb=null; try{ Context naming=new InitialContext(); factory=(boundedbufferfactory)naming.lookup( url+"boundedbufferfactory ); bb=factory.getbuffer(); catch( Exception e ){ e.printstacktrace(); Scanner sc=new Scanner( System.in ); String answer=null; Message msg=null; IS_7 - L. Nigro 78

30 ConsumerClient for(;;){ System.out.print("Press Invio to receive "); answer=sc.nextline(); try{ msg=(message)bb.get(); System.out.println("received msg "+msg+ " with buffer time="+msg.getbuffertime()+" ms"); catch( RemoteException e ){ e.printstacktrace(); //ConsumerClient IS_7 - L. Nigro 79

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

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

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1) Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Corsi A e B Esercitazioni 7 e 8 Bounded Buffer con sincronizzazione Java (1) public class BoundedBuffer private

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

Il linguaggio Java. Oggetto remoto. Remote Method Invocation (RMI) Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete

Il linguaggio Java. Oggetto remoto. Remote Method Invocation (RMI) Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete Il linguaggio Java Remote Method Invocation (RMI) Oggetto remoto Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete Client Server 2 Schema di principio oggetto client oggetto

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

RMI Remote Method Invocation

RMI Remote Method Invocation RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:

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

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

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

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

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

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

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

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

Java threads (2) Programmazione Concorrente

Java threads (2) Programmazione Concorrente Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and

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

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

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java) SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Monitor e variabili condizione in Java) Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università degli

Dettagli

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193 Servers Activatable Nelle lezioni precedenti abbiamo detto che una referenza remota ad un server di tipo UnicastRemoteObject rimane valida finchè il server è in esecuzione. Quando il server termina, o

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

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

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Java RMI (Remote Method Invocation)

Java RMI (Remote Method Invocation) Java RMI (Remote Method Invocation) Accesso ad oggetti remoti In Java non sono possibili riferimenti remoti RPC in JAVA Le RMI introducono la possibilità di richiedere esecuzione di metodi remoti in JAVA

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144 Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe

Dettagli

Sistemi Operativi (modulo di Informatica II)

Sistemi Operativi (modulo di Informatica II) Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2008-09 Sommario Processi cooperanti La comunicazione tra processi Necessità

Dettagli

Internet Socket e RMI

Internet Socket e RMI Internet Socket e RMI Programmazione in Rete e Laboratorio Architettura / Un servizio presso un computer-server è identificato dai seguenti valori: IP (32 bit, presto 128 bit) (16 bit) Servizi telnet TCP

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

Programmazione concorrente in Java

Programmazione concorrente in Java Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente

Dettagli

Java Virtual Machine

Java Virtual Machine Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina

Dettagli

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247 Registri RMI Per poter interagire con un server remoto, un client deve essere in possesso di una sua referenza remota (ovvero un oggetto stub). Un servizio di Naming è una risorsa centralizzata che può

Dettagli

Sincronizzazione con Java

Sincronizzazione con Java Sincronizzazione con Java Corse critiche e sincronizzazione Java implementa un meccanismo simile al monitor per garantire la sincronizzazione fra thread Ogni oggetto ha un lock associato ad esso Nelle

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

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Un ambiente di esecuzione che gestisce o naming di oggetti, sicurezza, concorrenza, transazioni, persistenza, distribuzione oggetti (location

Dettagli

Esercizi sul Monitor in Java

Esercizi sul Monitor in Java Esercizi sul Monitor in Java 1 I filosofi a cena (E. Dijkstra, 1965) 5 filosofi sono seduti attorno a un tavolo circolare; ogni filosofo ha un piatto di spaghetti tanto scivolosi che necessitano di 2 forchette

Dettagli

Il costrutto monitor

Il costrutto monitor Il Monitor 1 Monitor Definizione del monitor Esempi d uso Realizzazione del costrutto monitor Realizzazione di politiche di gestione delle risorse Chiamate innestate a procedure del monitor Realizzazione

Dettagli

TFA 42 Sistemi e Reti di Calcolatori per la Didattica

TFA 42 Sistemi e Reti di Calcolatori per la Didattica Università degli Studi di Pisa 42 Sistemi e Reti di Calcolatori per la Didattica 29/03/2013 Laura Ricci Laura Ricci 1 DNS: DOMAIN NAME SYSTEM Persone: molti identificativi: o # CF, nome, # passaporto Host

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File 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

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Laboratorio di Programmazione di Rete Corso A

Laboratorio di Programmazione di Rete Corso A Laboratorio di Programmazione di Rete Corso A Anno Accademico 2005-2006 Docente: Laura Ricci Assistente: Paolo Mori INFORMAZIONI UTILI Orario del Corso: Lunedì 9.00-11.00 Laboratorio Gruppo A 11.00-13.00

Dettagli

Sommario. G. Piscitelli

Sommario. G. Piscitelli Sommario Interprocess Communication Processi (e thread) cooperanti Il paradigma produttore-consumatore Shared Memory e Inter Process Communication (IPC) facility Proprietà caratteristiche della comunicazione

Dettagli

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1 + Programmazione concorrente in Java 1 + Introduzione al multithreading 2 La scomposizione in oggetti consente di separare un programma in sottosezioni indipendenti. Oggetto = metodi + attributi finalizzati

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 15 - Packages Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Gestione delle Eccezioni

Gestione delle Eccezioni Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un

Dettagli

Internet Socket e RMI

Internet Socket e RMI Internet Socket e RMI una breve introduzione alla programmazione in rete Chi sono? Come contattarmi? Matteo Baldoni Dipartimento di Informatica Università degli Studi di Torino Corso Svizzera, 185 I-10149

Dettagli

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Laboratorio di Sistemi Distribuiti Leonardo Mariani Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante

Dettagli

RMI. Introduzione DI GIOVANNI PULITI

RMI. Introduzione DI GIOVANNI PULITI 2001 proprietà di MokaByte s.r.l. tutti i diritti riservati è vietata la riproduzione non autorizzata anche parziale RMI DI GIOVANNI PULITI Introduzione La programmazione distribuita è tra gli argomenti

Dettagli

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa.

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa. Introduzione alla tecnologia JMX 1 Viene analizzata l architettura sottostante le Java Managment Extensions (JMX) mostrandone un utilizzo applicativo e analizzando altri possibili scenari d uso di Ivan

Dettagli

Scope e visibilità per classi

Scope e visibilità per classi Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:

Dettagli

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

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Un esercizio d esame. Flavio De Paoli

Un esercizio d esame. Flavio De Paoli Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

Comunicazione fra oggetti distribuiti

Comunicazione fra oggetti distribuiti Comunicazione fra oggetti distribuiti RMI RPC invocazione di metodo remoto - gli oggetti remoti ricevono le RMI interfaccia remota meccanismo per la comunicazione cliente servente come primitiva di un

Dettagli

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java.

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java. Corso di Laurea in Informatica e Comunicazione Digitale a.a. 2006-2007 Interazione Uomo-Macchina Introduzione a Java Seconda Parte Irene Mazzotta Giovanni Cozzolongo Vincenzo Silvetri 1 Richiami: Java

Dettagli

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 14 - Packages Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

progam ponteasensounicoalaternato ; type dir = ( nord, sud );

progam ponteasensounicoalaternato ; type dir = ( nord, sud ); Esercizio di Sincronizzazione Tra Processi: Ponte a Senso Unico Alternato Un ponte contiene una sola csia di traffico consentendo così l'accesso a macchine provenienti da una sola direzione per volta,

Dettagli

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)

Dettagli

Prova d Esame 07.04.2006 Compito A

Prova d Esame 07.04.2006 Compito A DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "Ciao"; protected int n; public General() { n = 1; public

Dettagli

La concorrenza in Java package java.util.concurrent Antonio Furone

La concorrenza in Java package java.util.concurrent Antonio Furone La concorrenza in Java package java.util.concurrent Antonio Furone Coda Bloccante La classe LinkedTransferQueue è stata esplicitamente disegnata per dare supporto a problemi di tipo produttore/consumatore.

Dettagli

Outline. Remote Method Invocation in Java. Remote Procedure Call (RPC) Introduzione Storica. Remote Procedure Call (RPC) Remote Procedure Call (RPC)

Outline. Remote Method Invocation in Java. Remote Procedure Call (RPC) Introduzione Storica. Remote Procedure Call (RPC) Remote Procedure Call (RPC) Outline Remote Method Invocation in Java Walter Cazzola Dipartimento di Informatica e Comunicazione Università degli Studi di Milano 1 2 3 Walter Cazzola Remote Method Invocation in Java Slide 1 of 33

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 12 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Parte II: Reti di calcolatori Lezione 12 Giovedì 16-04-2015 1 Confronto architetture C/S e

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

Sistemi Distribuiti. Anno Accademico 2005-06 Prof. Flavio De Paoli. Il modello ad oggetti

Sistemi Distribuiti. Anno Accademico 2005-06 Prof. Flavio De Paoli. Il modello ad oggetti Sistemi Distribuiti Anno Accademico 2005-06 Prof. Flavio De Paoli 1 Il modello ad oggetti 2 Distributed Objects 2-16 Common organization of a remote object with client-side proxy. 3 Caratteristiche Oggetti

Dettagli

Prova d Esame 07.04.2006 Compito B

Prova d Esame 07.04.2006 Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; public

Dettagli

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

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2) Gestione di errori e situazioni eccezionali Gestione delle eccezioni Una procedura (utente o di libreria) deve poter segnalare l impossibilità di produrre un risultato significativo o la propria terminazione

Dettagli

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Ottava Esercitazione. introduzione ai thread java mutua esclusione Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione

Dettagli

Parte II: Reti di calcolatori Lezione 10

Parte II: Reti di calcolatori Lezione 10 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione

Dettagli

RMI. Prova pratica di Sistemi Distribuiti:

RMI. Prova pratica di Sistemi Distribuiti: Prova pratica di Sistemi Distribuiti: RMI Di Nicola Milella Al fine di toccare con mano queste tecnologie e capirne i rispettivi pro e contro si è deciso di sviluppare un applicazione distribuita sfruttando

Dettagli

Linguaggi di Programmazione: Paradigmi di Programmazione

Linguaggi di Programmazione: Paradigmi di Programmazione Linguaggi di Programmazione: Paradigmi di Programmazione Socket, Servlet e Remote Method Invocation Matteo Baldoni Dipartimento di Informatica - Universita` degli Studi di Torino C.so Svizzera, 185 - I-10149

Dettagli

un programma Java 2.1 Scrittura, compilazione ed esecuzione

un programma Java 2.1 Scrittura, compilazione ed esecuzione 2 Scrivere ed eseguire un programma Java Contenuto 2.1 Scrittura, compilazione ed esecuzione 2.2 La compilazione 2.3 L esecuzione 2.4 I package e la direttiva import 2.5 Cosa può andare male? 2.6 Esercizi

Dettagli

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo. Prototype 28 4. Prototype (GoF pag. 117) 4.1. Descrizione 4.2. Esempio Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: Soluzioni Esercizi 13-23 Soluzione

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

Dettagli

PROGRAMMARE IN JAVA VOLUME II

PROGRAMMARE IN JAVA VOLUME II Graziano Frosini Alessio Vecchio PROGRAMMARE IN JAVA VOLUME II PROGRAMMAZIONE DI RETE INTERFACCE GRAFICHE STRUTTURE DATI JVM JVM SOCKET SOCKET PROGRAMMARE IN JAVA Volume II POGRAMMAZIONE DI RETE INTERFACCE

Dettagli

Programmazione Concorrente in Java

Programmazione Concorrente in Java Programmazione Concorrente in Java Lorenzo Bettini Dip. Sistemi e Informatica, Univ. Firenze http://www.dsi.unifi.it/~bettini Ottobre 2005 Gestione dei Processi Un processo è un programma in esecuzione.

Dettagli

Main System Monitor Keyboard

Main System Monitor Keyboard Composite 57 8. Composite (Gof pag. 163) 8.1. Descrizione Consente la costruzione di gerarchie di oggetti composti. Gli oggetti composti possono essere conformati da oggetti singoli, oppure da altri oggetti

Dettagli

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP D /LQH&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: i inviano al server pacchetti (vuoti) che vengono interpretati dal server come richiesta

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Lezione 5 Dott. Alessandro Roncato 08/11/2011 Riassunto Pattern Singleton Pattern Plolimorfismo Classi e Interfacce 2 Ereditarietà multipla In Java una classe può estendere

Dettagli

JAM: Java Agent Middleware

JAM: Java Agent Middleware JAM: Java Agent Middleware Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio Anno Accademico 2003/2004 Matteo Baldoni Attenzione! Questo documento non è definitivo ma sarà aggiornato

Dettagli

Corso di Reti di Calcolatori LS

Corso di Reti di Calcolatori LS Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori LS CORBA - Implementazione Naming Service e Interface Repository Luca Foschini Anno accademico 2008/2009 Agenda CORBA

Dettagli

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:

Dettagli

JNDI. Massimo Merro Programmazione di Rete 214 / 229

JNDI. Massimo Merro Programmazione di Rete 214 / 229 JNDI Abbiamo già visto come i registri RMI espletino un servizio di Naming attraverso cui vengono associati nomi simbolici a referenze a server remoti. Esistono comunque altri servizi di naming: COS (Common

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Reflection in Java 1 Reflection Riflessione

Dettagli

Laboratorio di Informatica Lezione 4

Laboratorio di Informatica Lezione 4 Laboratorio di Informatica Lezione 4 Cristian Consonni 28 ottobre 2015 Cristian Consonni Laboratorio di Informatica, Lezione 4 1 / 42 Outline 1 Canali standard 2 Input da tastiera 3 Output 4 Esercizi (parte

Dettagli

Oggi. Programmazione e laboratorio: introduzione al corso. Docenti: laboratorio. Docenti: teoria. Il corso. Orario.

Oggi. Programmazione e laboratorio: introduzione al corso. Docenti: laboratorio. Docenti: teoria. Il corso. Orario. Programmazione e laboratorio: introduzione al corso Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione per

Dettagli

PROGRAMMAZIONE CONCORRENTE IN JAVA

PROGRAMMAZIONE CONCORRENTE IN JAVA PROGRAMMAZIONE CONCORRENTE IN JAVA Supporto per il monitor con condition esplicite Al fine di facilitare l uso del monitor di Hoare in Java, sono utili le seguenti classi e interfacce appartenenti al package

Dettagli

Thread e Task. L20_MultiThread 2

Thread e Task. L20_MultiThread 2 I Thread in Java Thread e Task Multitasking: capacità dei sistemi operativi di eseguire più programmi contemporaneamente. Ciascun programma ha il proprio insieme di variabili, costanti, ecc. Multithreading

Dettagli

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca) Ministero dell Istruzione, dell Università e della Ricerca Istituto Tecnico Industriale Statale Enrico Mattei Via Martiri di Cefalonia 46-20097 San Donato Milanese Tel. 0255691411 - Fax 025276676 itisando@tin.it

Dettagli

INTRODUZIONE INTRODUZIONE JAVA JAVA

INTRODUZIONE INTRODUZIONE JAVA JAVA INTRODUZIONE INTRODUZIONE Lo sviluppo di applicazioni complesse porta a costruire moduli software sempre più potenti e versatili, che possano essere riutilizzati in numerosi progetti I linguaggi ad oggetti

Dettagli