Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola...

50
Lo sviluppo di applicazioni Lo sviluppo di applicazioni distribuite secondo il distribuite secondo il paradigma a scambio di paradigma a scambio di messaggi messaggi Gianpaolo Cugola http://www.elet.polimi.it/~cugola [email protected]

Transcript of Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola...

Page 1: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni Lo sviluppo di applicazioni distribuite secondo il paradigma a distribuite secondo il paradigma a

scambio di messaggiscambio di messaggi

Gianpaolo Cugolahttp://www.elet.polimi.it/~cugola

[email protected]

Page 2: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

2

Politecnico di Milano SommarioSommario

Il concetto di applicazione distribuita– L’architettura di una applicazione distribuita– Il paradigma a scambio di messaggi

• Il paradigma client-server• Il paradigma peer-to-peer

Internet e Intranet– Il protocollo TCP/IP

Lo sviluppo di applicazioni distribuite in Java– I socket TCP/IP in Java– L’invocazione remota di metodi in Java

(RMI)

Page 3: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

3

Politecnico di Milano Applicazione distribuitaApplicazione distribuita

Definizione:– Applicazione costituita da due o più

processi che eseguono in parallelo su macchine distinte connesse da una rete di comunicazione

I processi che costituiscono una applicazione distribuita cooperano sfruttando i servizi forniti dalla rete di comunicazione

Page 4: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

4

Politecnico di Milano

Applicazione distribuita: un Applicazione distribuita: un esempioesempio

Page 5: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

5

Politecnico di Milano

Internet e le applicazioni distribuiteInternet e le applicazioni distribuite

Gli anni 90 hanno visto il boom delle tecnologie di telecomunicazione– Il caso di Internet: milioni di computer collegati

in una rete unica Effetto pratico:

– Un aumento esponenziale nella richiesta di applicazioni distribuite

Principali campi di impiego delle applicazioni distribuite– Comunicazione: e-mail, web, chat, news– Supporto al lavoro collaborativo: sistemi di

workgroup e workflow– Supporto alle attività commerciali: sistemi di

commercio elettronico, sistemi di home banking

Page 6: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

6

Politecnico di Milano

Architettura di una applicazione Architettura di una applicazione distribuitadistribuita

Una applicazione distribuita è caratterizzata dalla propria architettura run-time

Definizione:– Con il termine “architettura run-time” si

indica l’organizzazione dei componenti (processi) che costituiscono l’applicazione a run-time

Elementi caratteristici di una architettura– Tipologia e ruolo dei componenti– Tipologia delle connessioni

Page 7: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

7

Politecnico di Milano

Le architetture basate su scambio Le architetture basate su scambio messaggimessaggi Lo scambio messaggi è il paradigma di

comunicazione più semplice per lo sviluppo di applicazioni distribuite– Identifica una categoria di architetture distinte

Caratteristiche:– Ogni componente dell’applicazione possiede uno o più

indirizzi– Un componente A comunica con un componente B

spedendo un messaggio ad uno degli indirizzi associati a B

Principali architetture basate su scambio messaggi:– Architetture client-server– Architetture peer-to-peer– Architetture a tre livelli (three-tiered architecture)

Page 8: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

8

Politecnico di Milano L’architettura client-serverL’architettura client-server

Caratteristiche:– Componenti distinti in due tipi: client e

server• I server erogano un servizio• I client sfruttano tale servizio

– Comunicazioni basate su scambio messaggi

Esempio: il web– Client: il browser– Server: il demone http che

fornisce i documenti ai client

Browser

Demone http

Richiestadocumento

Inviodocumento

Page 9: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

9

Politecnico di Milano L’architettura peer-to-peerL’architettura peer-to-peer

Caratteristiche– Componenti indifferenziati:

agiscono tanto da richiedenti di un servizio quanto da fornitori di servizio

– Comunicazioni basate su scambio messaggi

Esempio: talk Blah blah blahBlah blah blah

Page 10: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

10

Politecnico di Milano L’architettura a tre livelliL’architettura a tre livelli

Caratteristiche:– Tre tipologie di componenti:

• Client• Server applicativo• Data base

– Comunicazioni basate su scambio messaggi

Esempio: applicazioni di commercio elettronico

Client(browser + ActiveX o Applet)

Server applicativo(demone http+cgi o servlet) DB

Page 11: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

11

Politecnico di Milano

Internet e Intranet

una breve panoramicadelle caratteristiche e dei

protocolli di comunicazione

Page 12: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

12

Politecnico di Milano Internet: architettura logicaInternet: architettura logica

Rete

Serverftp

Clientweb

Clientftp

Serverweb

Clientweb

Clientweb

Serverftp

Serverweb

Page 13: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

13

Politecnico di Milano Internet: architettura fisicaInternet: architettura fisica

Host

Gateway

Internetprovider

Page 14: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

14

Politecnico di Milano Internet Protocol SuiteInternet Protocol Suite

Application

Session

Presentation

Network

Transport

Data Link

ISO/OSI

PhysicalNon specificati

IP e Protocolli di routing

TCP e UDP

Telnet

FTP

SMTP

HTTP RPC

Web-NFS

NFS

Internet Protocol Suite

Page 15: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

15

Politecnico di Milano Il protocollo IPIl protocollo IP

Caratteristiche:– protocollo connectionless– si occupa dell’instradamento e della

rilevazione d’errore Indirizzo IP:

– indirizzo numerico (32 bit) univocamente associato ad una interfaccia di rete di un host

Esempio: 131.175.21.8 I gateway hanno due o piu’ indirizzi IP

diversi ed una tabella di instradamento

Page 16: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

16

Politecnico di Milano

Gli indirizzi simbolici ed i DNSGli indirizzi simbolici ed i DNS

Un indirizzo simbolico può sostituire un indirizzo IP

Un indirizzo simbolico è composto da un nome di dominio e da un nome di host– esempio: ipmel2.elet.polimi.it

Il file hosts:– esempio:

127.0.0.1 localhost131.175.21.8 www.polimi.it131.175.21.1 ipmel2 ipmel2.elet.polimi.it

I Domain Name Servers (DNS):– costituiscono un data base distribuito per i nomi

simbolici– permettono l’associazione nome simbolico/indirizzo IP

Page 17: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

17

Politecnico di Milano Il protocollo TCPIl protocollo TCP

Caratteristiche:– protocollo connection-oriented (indirizzo IP

+ porta TCP)– fornisce un servizio full-duplex, con

acknowledge e correzione d’errore Due host connessi su Internet possono

scambiarsi messaggi attraverso canali TCP

TCP costituisce l’infrastruttura di comunicazione della maggior parte dei sistemi basati su scambio messaggi su Internet

Page 18: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

18

Politecnico di Milano Il protocollo UDPIl protocollo UDP

Caratteristiche:– protocollo connectionless (indirizzo IP +

porta UDP)– fornisce un servizio di correzione d’errore– Non assicura la consegna nè, tantomeno,

l’ordine di invio (unreliable, best-effort protocol)

Utilizzato nelle applicazioni client-server di tipo richiesta/risposta– Esempi:

NFS, DNS

Page 19: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

19

Politecnico di Milano IntranetIntranet

Il boom di Internet ha favorito la diffusione del protocollo TCP/IP anche in ambito locale

Intranet: rete locale basata sui protocolli di Internet (TCP/IP)

Page 20: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

20

Politecnico di Milano

Lo sviluppo di applicazionidistribuite basate su scambio

messaggi in Java

Socket TCP e UDP, RMI

Page 21: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

21

Politecnico di Milano Socket TCP e UDPSocket TCP e UDP

Con il termine “socket” si indica un’astrazione del sistema operativo per modellare la comunicazione tramite TCP o UDP

Nati in ambiente Unix BSD (1982) Disponibili su tutte le piattaforme Le librerie per la gestione dei

socket sono fornite con tutti i principali linguaggi di programmazione

Page 22: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

22

Politecnico di Milano

Socket TCP: meccanismo di Socket TCP: meccanismo di funzionamentofunzionamento

Server

P1 ClientP

2

P3

Page 23: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

23

Politecnico di Milano

Socket UDP: meccanismo di Socket UDP: meccanismo di funzionamentofunzionamento

Server

P1 ClientP

2

Page 24: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

24

Politecnico di Milano Socket TCP e UDP in JavaSocket TCP e UDP in Java

Le classi per la gestione dei socket (TCP o UDP) sono parte del package java.net

Classi principali– Classi di uso generale

• InetAddress

– Socket TCP• ServerSocket• Socket

– Socket UDP• DatagramSocket• MulticastSocket• DatagramPacket

Page 25: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

25

Politecnico di Milano La classe La classe InetAddressInetAddress

Descrive un indirizzo IP Non ha costruttori pubblici Metodi principali

– public static InetAddress getByName(String host)– public static InetAddress getLocalHost()– public String getHostAddress()– public String getHostName()– public boolean isMulticastAddress()

Page 26: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

26

Politecnico di Milano La classe La classe ServerSocketServerSocket

Usata dal lato server Costruttore principale:

– public ServerSocket(int port) Metodi principali:

– public synchronized void setSoTimeout(int timeout)

• permette di scegliere un timeout per la accept (in millisecondi)

– public synchronized int getSoTimeout()– public Socket accept()

• bloccante se timeout=0– public InetAddress getInetAddress()– public int getLocalPort()– public void close()

Page 27: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

27

Politecnico di Milano La classe La classe SocketSocket

Costruttori principali:– public Socket(String host, int port)– public Socket(InetAddress host, int port)

Metodi principali:– public InetAddress getInetAddress()– public InetAddress getLocalAddress()– public int getPort()– public int getLocalPort()– public InputStream getInputStream()– public OutputStream getOutputStream()– public void close()– public synchronized void setSoTimeout(int timeout)

• permette di scegliere un timeout per la lettura dei byte dall’InputStream associato (in millisecondi)

– public synchronized int getSoTimeout()

Page 28: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

28

Politecnico di Milano La classe La classe DatagramSocketDatagramSocket

Usata per inviare e ricevere messaggi UDP Costruttori principali

– public DatagramSocket()– public DatagramSocket(int port)

Metodi principali– public void close()– public void connect(InetAddress address, int port)– public void disconnect()– public void setSoTimeout(int timeout)– public int getSoTimeout()– public void receive(DatagramPacket p)– public void send(DatagramPacket p)

Page 29: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

29

Politecnico di Milano La classe La classe MulticastSocketMulticastSocket

Usata per inviare e ricevere messaggi multicast

Sottoclasse della classe DatagramSocket

Costruttori principali– public MulticastSocket()– public MulticastSocket(int port)

Metodi principali– public void joinGroup(InetAddress mcastaddr)– public void leaveGroup(InetAddress mcastaddr)– public void send(DatagramPacket p, byte ttl)– public void setTimeToLive(int ttl)– public byte getTimeToLive()

Page 30: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

30

Politecnico di Milano La classe La classe DatagramPacketDatagramPacket

Rappresenta un messaggio UDP Costruttore principale

– public DatagramPacket(byte[] buf, int length)

Metodi principali– public InetAddress getAddress()– public int getPort()– public byte[] getData()– public void setData(byte[] buf)– public int getLength()– public void setLength(int length)

Page 31: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

31

Politecnico di Milano

Applicazioni client-server basate su Applicazioni client-server basate su socket TCP: schema di funzionamentosocket TCP: schema di funzionamento

L’applicazione “server” rimane in attesa su una porta logica

L’applicazione “client” apre una connessione verso la macchina sulla quale gira il server specificando la porta

Il server riceve la connessione e apre una canale di comunicazione

Caso 1:– Il server riceve il messaggio inviato dal client, lo

interpreta e svolge il servizio richiesto inviando l’eventuale risposta

– Al termine si rimette in attesa di nuove connessioni Caso 2:

– Il server crea un nuovo thread incaricato di gestire la connessione e si rimette in attesa di nuove connessioni

Page 32: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

32

Politecnico di Milano I socket TCP: un esempio - 1I socket TCP: un esempio - 1

import java.net.*;

import java.io.*;

public class ServerTCP {

public static void main(String[] args) {

ServerSocket sSock = null;

try {sSock = new ServerSocket(4444);

} catch (IOException e) {

System.out.println("Could not listen on

port: 4444, "+e);System.exit(-1);

}

Socket sock = null;

while(true) {

try {

sock = sSock.accept();

new ServerThread(sock).start();

} catch (IOException e) {

System.out.println("Accept failed, " + e);

System.exit(1);

}

}

}

}

class ServerThread extends Thread {

Socket sock;

public ServerThread(Socket sock) {

this.sock=sock;

}

public void run() {

String inputLine;

try {

BufferedReader br=

new BufferedReader(

new InputStreamReader(

sock.getInputStream()));

while((inputLine=br.readLine())!=null){

System.out.println(inputLine);

if (inputLine.equals("Bye.")) break;

}

br.close();

sock.close();

}catch (IOException e)

{e.printStackTrace();}

}

}

Page 33: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

33

Politecnico di Milano I socket TCP: un esempio - 2I socket TCP: un esempio - 2

import java.io.*; import java.net.*;public class ClientTCP { public static void main(String[] args) { Socket sock=null; OutputStreamWriter osw=null; try{ sock=new Socket(args[0],4444); osw=new OutputStreamWriter(sock.getOutputStream()); } catch(IOException e) { System.out.println("Error opening socket, "+e); System.exit(-1); } try{ osw.write(args[1]); osw.write("Bye."); osw.close(); sock.close(); } catch(IOException e) { System.out.println("Error sending message, "+e); System.exit(-1); } }}

Page 34: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

34

Politecnico di Milano I socket UDP: un esempio - 1I socket UDP: un esempio - 1

import java.net.*;public class ServerUDP { public static void main(String[] args) { DatagramSocket sock = null; String mess=null; DatagramPacket pack = new DatagramPacket(new byte[128],128); try { sock = new DatagramSocket(4444); } catch (SocketException e) { System.out.println("Error opening socket, "+e); System.exit(-1); } while(true) { try { sock.receive(pack); } catch (java.io.IOException e) { System.out.println("Error receiving packet, " + e); System.exit(-1);

} mess=new String(pack.getData()); System.out.println(mess); if (mess.equals("Bye.")) break; } sock.close(); }}

Page 35: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

35

Politecnico di Milano I socket UDP: un esempio - 2I socket UDP: un esempio - 2

import java.net.*;public class ClientUDP { public static void main(String[] args) { DatagramSocket sock = null; DatagramPacket pack = null; try{ sock=new DatagramSocket(); sock.connect(InetAddress.getByName(args[0]), 4444); } catch(java.io.IOException e) { System.out.println("Error opening socket, "+e); System.exit(-1); } try{ byte[] buf=args[1].getBytes(); pack=new DatagramPacket(buf,buf.length); sock.send(pack); } catch(java.io.IOException e) { System.out.println("Error sending message, "+e); System.exit(-1); } sock.disconnect(); sock.close(); }}

Page 36: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

36

Politecnico di Milano

Le altre classi del package Le altre classi del package java.netjava.net

Il package java.net fornisce altre classi per:– usare gli URL– sfruttare il protocollo HTTP– Autenticare un utente

Page 37: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

37

Politecnico di Milano

Dai socket alla Remote Method Dai socket alla Remote Method InvocationInvocation

I socket TCPe UDP forniscono un valido strumento per la programmazione di applicazioni distribuite...

... ma risultano talvolta di difficile utilizzo– Occorre definire un “protocollo” per l’invio

delle richieste di servizio e delle risposte...– ... con relativa codifica e decodifica dei

parametri in sequenze di byte

La Remote Method Invocation (RMI) permette di superare tali limiti

Page 38: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

38

Politecnico di Milano Remote Method InvocationRemote Method Invocation

Attraverso i servizi RMI è possibile invocare metodi su un oggetto remoto come se si trattasse di un oggetto locale

Un oggetto remoto è ogni oggetto che implementi una interfaccia che estende l’interfaccia java.rmi.Remote

Gli oggetti remoti si comportano come gli oggetti tradizionali– è possibile passare riferimenti ad oggetti remoti nelle

chiamate a metodo La differenza principale riguarda il passaggio di

parametri non remoti a metodi di oggetti remoti– il passaggio è fatto per copia (i parametri devono essere

serializzabili) Lo stesso vale per i valori di ritorno restituiti da

metodi di oggetti remoti

Page 39: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

39

Politecnico di Milano RMI: schema di funzionamentoRMI: schema di funzionamento

Client

Server

Server_SkelServer_Stub

rmiregistry

IntServer

bind

IntServer

host A host B

lookup

invoke

Page 40: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

40

Politecnico di Milano

Implementazione di una applicazione Implementazione di una applicazione client/server basata su RMI: server - 1client/server basata su RMI: server - 1

Si crea una interfaccia che descriva i servizi forniti dal server– l’interfaccia deve estendere java.rmi.Remote

– tutti i metodi devono dichiarare di sollevare l’eccezione java.rmi.RemoteException

Page 41: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

41

Politecnico di Milano

Implementazione di una applicazione Implementazione di una applicazione client/server basata su RMI: server - 2client/server basata su RMI: server - 2

Si implementa il server– come sottoclasse di java.rmi.server.UnicastRemoteObject

– oppure come classe “generica” che reimplementi i metodi equals, hashCode e toString in maniera da mantenere la semantica corretta in ambito distribuito• in tal caso il server deve essere esplicitamente

esportato per essere visibile ai client, invocando il metodo:java.rmi.server.UnicastRemoteObject.exportObject

– il server può essere registrato sul rmiregistry attraverso un nome simbolico nella forma “//host:porta/nome”

– il server dovrebbe impostare come security manager un RMISecurityManager

Page 42: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

42

Politecnico di Milano

Implementazione di una applicazione Implementazione di una applicazione client/server basata su RMI: server - 3client/server basata su RMI: server - 3

Si compila il server Si creano le classi stub e

skeleton attraverso il compilatore rmic

Si lancia l’applicazione rmiregistry

Si lancia il server

Page 43: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

43

Politecnico di Milano

Implementazione di una applicazione Implementazione di una applicazione client/server basata su RMI: clientclient/server basata su RMI: client

Si implementa il client Il client ottiene un riferimento

all’oggetto remoto– passato da altri oggetti– ottenuto accedendo allo rmiregistry

Il client può invocare tutti i metodi elencati nell’interfaccia remota implementata dal server

Per il client non occorre alcun processo di compilazione speciale

Page 44: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

44

Politecnico di Milano

Implementazione di una applicazione Implementazione di una applicazione client/server basata su RMI: rmiregistryclient/server basata su RMI: rmiregistry

Il rmiregistry fornisce un servizio di directory per RMI

Un server RMI si può registrare su un rmiregistry attraverso un nome simbolico

Un client RMI può:– ottenere un riferimento ad un server RMI indicando

il nome simbolico– chiedere la lista dei server disponibili

Tali servizi sono realizzati attraverso le classi:– java.rmi.Naming– java.rmi.registry.LocateRegistry– java.rmi.registry.Registry

e attraverso l’eseguibile rmiregistry

Page 45: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

45

Politecnico di Milano

Esempio RMI: l’interfaccia del serverEsempio RMI: l’interfaccia del server

import java.rmi.*;

public interface RMIServer extends Remote {

public void print(String s) throws RemoteException;

}

Page 46: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

46

Politecnico di Milano

Esempio RMI: l’implementazione del Esempio RMI: l’implementazione del serverserver

import java.rmi.*;import java.rmi.server.UnicastRemoteObject;

public class RMIServerImpl extends UnicastRemoteObjectimplements RMIServer { public static void main(String[] args) { try { System.setSecurityManager(new RMISecurityManager()); RMIServerImpl server = new RMIServerImpl(); Naming.rebind("polimi/RMIServer", server); System.out.println("Server bound"); } catch (Exception e) { e.printStackTrace(); } } public RMIServerImpl() throws RemoteException {} public void print(String s) throws RemoteException { System.out.println(s); }}

Page 47: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

47

Politecnico di Milano Esempio RMI: il clientEsempio RMI: il client

import java.rmi.*;

public class RMIClient {

public static void main(String[] args) {

try {

System.out.println("Looking up server...");

RMIServer server = (RMIServer)

Naming.lookup("rmi://"+args[0]+"/polimi/RMIServer");

System.out.println("Server bound...");

server.print("prima prova");

server.print("seconda prova");

} catch (Exception e) {

e.printStackTrace();

}

}

}

Page 48: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

48

Politecnico di Milano Esempio RMI: la compilazioneEsempio RMI: la compilazione

javac RMIServerImpl.java– compila il server

javac RMIClient.java– compila il client

rmic RMIServerImpl– crea le classi RMIServer_Skel e RMIServer_Stub

rmiregistry– lancia il registry

java RMIServerImpl– lancia il server

java RMIClient localhost– lancia il client dicendo di collegarsi a localhost

Page 49: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

49

Politecnico di Milano Il deploymentIl deployment

Le classi stub devono essere accessibili al client (attraverso un opportuno class loader)

Il caso delle applet– le classi stub devono essere inserite

nella stessa directory della classe dell’applet (sul server http)• il classloader usato è AppletClassLoader

– il server RMI deve girare sullo stesso host su cui gira il server http dal quale viene scaricata l’applet

Page 50: Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola cugola cugola@elet.polimi.it.

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi

50

Politecnico di Milano

Domande?