SlideShare a Scribd company logo
1 of 31
Lezione 6: Remote Method
           Invocation
         Corso di Programmazione in Rete
        Laurea Magistrale in Ing. Informatica
          Università degli Studi di Salerno



1
Outline
    ✦ Middleware

    ✦ Remote Method Invocation

    ✦ Definizione e uso di oggetti remoti




2
Modelli distribuiti
    ✦ Molte applicazioni di rete possono essere
      realizzate usando un paradigma Client-
      Server
     •   il client invia la richiesta di un’operazione a un
         server
     •   il server elabora la richiesta
     •   il server fornisce una risposta al client
    ✦ Esempi
     •   Il protocollo HTTP per il World Wide Web
     •   La posta elettronica
     •   Il nostro sistema di chat
3
Modelli distribuiti
    ✦ Java permette una gestione semplificata
      dei socket, con il quale il programmatore
      è in grado di realizzare un meccanismo di
      comunicazione.
    ✦ I socket risolvono solo il problema di
      fondo “come instaurare la connessione”,
      ma non definiscono le modalità di
      comunicazione.
     •   codifica delle informazioni
     •   estensibilità dei protocolli

4
     •   gestione efficiente delle connessioni
Middleware
    ✦ Un middleware è uno strato di software
      che gestisce i meccanismi di
      comunicazione tra più processi, situati
      possibilmente su macchine diverse,
      presentando allo sviluppatore
      un’astrazione di livello più elevato, che gli
      consenta di ignorare una serie di
      problemi legati alla comunicazione
     •   Semplicità di sviluppo
     •   Indipendenza dagli specifici meccanismi di
         comunicazione

5
Middleware

      Client                        Server




    Middleware                    Middleware


                    Connessione

    Trasporto                     Trasporto




6
Middleware
    ✦ Esistono delle forti analogie concettuali
      tra un sistema distribuito client-server e
      la programmazione orientata agli oggetti
                         Invocazione metodo

               Oggetto                        Oggetto
                              Risultato




                            Richiesta

               Client                         Server
                              Risposta



    ✦ I middleware object-oriented usano queste
      analogie per presentare allo sviluppatore
      un modello “familiare”

7
Middleware
    ✦ In un middleware orientato agli oggetti,
      gli oggetti di un processo possono
      accedere ai servizi di un altro processo
      usando l’astrazione di oggetti remoti
    ✦ L’invocazione di metodi su oggetti remoti
      in realtà comporta la trasmissione di un
      messaggio al server che implementa tali
      oggetti, e l’attesa della risposta di tale
      server (comunicazione sincrona)

8
Remote Method Invocation
    ✦ Gli oggetti remoti sono gestiti attraverso
      riferimenti (Remote Reference) che si
      comportano, dal punto di vista dello
      sviluppatore, come riferimenti a oggetti
      locali (o quasi). L’unica differenza è il
      modo con cui vengono ottenuti questi
      riferimenti.
    ✦ La soluzione full-Java per l’esecuzione di
      codice remoto è conosciuta con il nome di
      RMI (Remote Method Invocation)

9
Architettura RMI

     ✦ quando un oggetto desidera invocare un metodo
       di un altro oggetto, deve prima ricavarne un
       riferimento (indirizzo), istanziandolo
       direttamente o ricevendone l’indirizzo
       dall’esterno, e successivamente eseguire un
       istruzione del tipo:
       nome_oggetto.nome_metodo(lista_parametri)




10
Architettura RMI

     ✦ Nel caso distribuito si deve ricavare il riferimento
       all’oggetto remoto e invocare i metodi a distanza
       •   la soluzione proposta da RMI consiste nello
           scaricare in locale un “rappresentante”
           dell’oggetto remoto e di considerarlo come se si
           trattasse a tutti gli effetti di un oggetto locale


     nome_ogg_remoto.nome_metodo(lista_parametri)




11
Architettura RMI
        Lo strato più alto è costituito su entrambi i lati
        (client/server) dall’applicazione che viene eseguita
        sulla Java-Machine




     ✦ RMI Client
        ‣   applicazione che effettua le chiamate ai metodi degli
            oggetti remoti residenti sul lato server
     ✦ RMI Server
        ‣   Applicazione che gestisce gli oggetti serventi




12
Architettura RMI
                  …sotto il livello applicazione si trovano i due
                  protagonisti di tutto il meccanismo RMI, lo stub e lo
                  skeleton, due rappresentanti della stessa entità.



Compiti dello stub sul client:                    Compiti dello skeleton sul
• inizia una chiamata via RRL                     server:
     ‣ invia i parametri (serializzazione)
                                                  • attende richieste
• invoca il metodo via RRL                        • riceve i dati dal client
     ‣ attende il completamento dell’operazione
                                                    ‣ deserializzazione dei parametri
• completa la chiamata                            • chiama l’effettiva
     ‣ riceve e deserializza il risultato
• ritorna                                         implementazione del metodo
                                                  • trasmette la risposta al client
                                                    ‣ serializza il risultato


13
Architettura RMI
           …i lati server e client sono collegati con il
           sottostante Remote Reference Layer (RRL) che a
           sua volta si appoggia al Transport Layer (TL)




      Al livello RRL viene instaurato un collegamento
      virtuale fra i due lati, client e server, mentre
      fisicamente la connessione avviene al livello
      sottostante
        (RRL) basato su protocollo generico ed indipendente dal particolare tipo di
        stub/skeleton




14
Architettura RMI
           …i lati server e client sono collegati con il
           sottostante Remote Reference Layer (RRL) che a
           sua volta si appoggia al Transport Layer (TL)


      Quando il TL riceve una richiesta di connessione da
      parte del client, localizza il server RMI relativo
      all’oggetto remoto richiesto:
        localizzazione   del server RMI
        connessione    per mezzo di un socket appositamente creato per
        il servizio
        passa la connessione al lato client del RRL ed aggiunge un
        riferimento dell’oggetto remoto nella tabella opportuna
        controllo   dello stato delle connessioni (es. timeout)



15
Architettura RMI
     RMI Client                               RMI Server


       Stub                                   Skeleton
                       Connessione virtuale

       RRL                                      RRL

        TL                                       TL

              socket                                   socket
       TCP                                      TCP
        IP                                        IP
     Network             Connessione fisica
                                              Network

16
Definizione e uso di oggetti remoti

     ✦ I passi da seguire sono:
      •   definire un’interfaccia remota
      •   definire un’implementazione dell’interfaccia
      •   creare un’applicazione server che istanzi
          l’implementazione e la renda pubblicamente
          accessibile
      •   creare un client che ottenga un riferimento
          remoto e lo usi per richiedere le operazioni al
          server



17
Interfaccia remota
     ✦ Per ogni oggetto che deve essere
       utilizzato come oggetto remoto occorre
       definire una interface detta interfaccia
       remota
      •   l’interfaccia remota deve estendere Remote
      •   ogni metodo deve dichiarare che può sollevare
          l’eccezione RemoteException
      •   Sia Remote che RemoteException sono definite
          nel package java.rmi



18
Interfaccia remota
      ✦ Esempio:
         •    supponendo che l’oggetto remoto che vogliamo
              realizzare svolga le operazioni aritmetiche
              fondamentali
     import java.rmi.*;

     public interface Calculator extends Remote {
     	 double add(double a, double b) throws RemoteException;
     	 double subtract(double a, double b) throws RemoteException;
     	 double divide(double a, double b) throws RemoteException;
     	 double multiply(double a, double b) throws RemoteException;
     }




19
Interfaccia remota
     ✦ I parametri e il valore di ritorno dei
       metodi dell’interfaccia remota possono
       appartenere solo a un insieme ristretto di
       tipi:
      •   tipi atomici (es. int)
      •   classi serializzabili
      •   interfacce remote (anche diverse da quella che
          contiene il metodo)
      •   array i cui elementi appartengono ai tipi
          sopraindicati


20
Implementazione
     ✦ La classe che contiene l’effettiva
       implementazione dell’oggetto remoto:
      •   deve essere derivata da
          java.rmi.server.UnicastRemoteObject
      •   deve dichiarare che implementa l’interfaccia
          remota
      •   inoltre deve avere un costruttore (anche vuoto)
          che dichiara di sollevare RemoteException
     ✦ Per convenzione, il nome della classe
       termina generalmente con “Impl”

21
Implementazione
      ✦ Esempio
     import java.rmi.*;
     import java.rmi.server.*;



     public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
     	 public CalculatorImpl() throws RemoteException {
        	 // Costruttore vuoto	
     	 }
     	 public double add(double a, double b) {
     	 	 return a+b;
     	 }
     	 public double divide(double a, double b) {
     	 	 return a/b;
     	 }
     	 public double multiply(double a, double b) {
     	 	 return a*b;
     	 }
     	 public double subtract(double a, double b) {
     	 	 return a-b;
     	 }
     }
22
Stub e skeleton
     ✦ Tradizionalmente, una volta definita la
       classe di implementazione, occorreva
       richiamare il tool rmic per effettuare la
       generazione dello stub e dello skeleton
       corrispondenti
     ✦ Da Java 1.2, lo skeleton viene generato
       dinamicamente in modo automatico
     ✦ Da Java 1.5, anche lo stub viene generato
       dinamicamente

23
Applicazione server

     ✦ L’applicazione server ha il compito di:
      •   creare una o più istanze delle classi che
          implementano le interfacce remote
      •   rendere accessibili al client i riferimenti remoti a
          queste istanze
          ‣   come fa il client a ottenere un riferimento remoto dal
              server?




24
Applicazione server
     ✦ Il modo principale con cui un client
       ottiene un remote reference è attraverso
       il valore di ritorno di un metodo remoto
      •   se il client ha un riferimento a un oggetto remoto
          A, l’oggetto può fornirgli il riferimento a un altro
          oggetto remoto B, che a sua volta può fornirgli il
          riferimento a C e così via
     ✦ Problema: “bootstrap”
      •   come fa il client a ottenere il riferimento al primo
          oggetto remoto?


25
Registry
     ✦ Per risolvere il problema del bootstrap il
       Java Development Kit mette a
       disposizione l’applicazione rmiregistry
      •   name server che associa nomi simbolici (o più
          precisamente URL) a riferimenti remoti
      •   il server registra i riferimenti agli oggetti di
          bootstrap (quelli da cui il client deve partire per
          accedere all’applicazione)
      •   il client consulta il name server usando un
          protocollo ad hoc (già implementato da una classe
          della libreria standard)

26
Registrazione di un riferimento

     ✦ Occorre usare il metodo statico rebind
       della classe Naming:
      ‣   static void rebind(String name, Remote obj)
                         throws RemoteException, MalformedURLException

      •   name è il nome assegnato all’oggetto (parte finale
          dell’URL)
      •   obj è l’istanza della classe di implementazione
      •   l’oggetto viene registrato su un rmiregistry che si
          trova sulla stessa macchina



27
Applicazione server
      ✦ Esempio


     import java.net.*;
     import java.rmi.*;

     public class CalculatorServer {
     	 public static void main(String args[])
                 throws RemoteException, MalformedURLException {
     	 	 Calculator calc=new CalculatorImpl();
     	 	 Naming.rebind("calc", calc);
     	 }
     }




28
Il client
     ✦ Il client ottiene un riferimento agli oggetti
       registrati usando il metodo lookup della
       classe Naming:
      •   static Remote lookup(String url)
                         throws NotBoundException,
                                MalformedURLException,
                                RemoteException
     ✦ Il formato dell’URL è:
      •   rmi://host/name



29
Il client

     ✦ Una volta ottenuto un riferimento (dal
       registry o da un altro oggetto remoto), il
       client lo usa come se fosse un oggetto
       “normale”
      •   occorre ricordare che ogni metodo dell’interfaccia
          remota può sollevare un’eccezione controllata
          RemoteException




30
Il client
       ✦ Esempio

     import java.net.*;
     import java.rmi.*;

     public class CalculatorClient {
     	 public static void main(String args[])
                       throws RemoteException, MalformedURLException, NotBoundException {
     	 	 Calculator calc=(Calculator)Naming.lookup("rmi://localhost/calc");
     	 	 System.out.print("9 per 9 fa "+calc.multiply(9,9));
     	 }
     }




31

More Related Content

What's hot

[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDIMarco Brambilla
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupalDay
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Codemotion fuse presentation
Codemotion fuse presentationCodemotion fuse presentation
Codemotion fuse presentationUgo Landini
 

What's hot (20)

Corso di servlet jsp e pattern
Corso di servlet jsp e patternCorso di servlet jsp e pattern
Corso di servlet jsp e pattern
 
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Corso web services
Corso web servicesCorso web services
Corso web services
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Portlet JSR168/286
Portlet JSR168/286Portlet JSR168/286
Portlet JSR168/286
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Tutorial su Java RMI
Tutorial su Java RMITutorial su Java RMI
Tutorial su Java RMI
 
Codemotion fuse presentation
Codemotion fuse presentationCodemotion fuse presentation
Codemotion fuse presentation
 
Web sockets
Web socketsWeb sockets
Web sockets
 

Similar to Lezione 6: Remote Method Invocation

Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheMauro Servienti
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSMorlini Gabriele
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS Imola Informatica
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!DotNetCampus
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-maxDotNetCampus
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioPar-Tec S.p.A.
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
2 Protocolli Applicativi
2 Protocolli Applicativi2 Protocolli Applicativi
2 Protocolli Applicativiacapone
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Fabio Armani
 

Similar to Lezione 6: Remote Method Invocation (20)

Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarche
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-max
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
2 Protocolli Applicativi
2 Protocolli Applicativi2 Protocolli Applicativi
2 Protocolli Applicativi
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 

More from Andrea Della Corte

More from Andrea Della Corte (11)

Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Recently uploaded

Turismo sostenibile o esperienze trasformative?
Turismo sostenibile o esperienze trasformative?Turismo sostenibile o esperienze trasformative?
Turismo sostenibile o esperienze trasformative?ANCI - Emilia Romagna
 
Solo con riqualificazioni profonde siamo troppo lenti!
Solo con riqualificazioni profonde siamo troppo lenti!Solo con riqualificazioni profonde siamo troppo lenti!
Solo con riqualificazioni profonde siamo troppo lenti!ANCI - Emilia Romagna
 
Riposizionare le CER con la piramide della decarbonizzazione
Riposizionare le CER con la piramide della decarbonizzazioneRiposizionare le CER con la piramide della decarbonizzazione
Riposizionare le CER con la piramide della decarbonizzazioneANCI - Emilia Romagna
 
DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...
DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...
DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...Martin M Flynn
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024Damiano Orru
 
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?Nicola Rabbi
 

Recently uploaded (6)

Turismo sostenibile o esperienze trasformative?
Turismo sostenibile o esperienze trasformative?Turismo sostenibile o esperienze trasformative?
Turismo sostenibile o esperienze trasformative?
 
Solo con riqualificazioni profonde siamo troppo lenti!
Solo con riqualificazioni profonde siamo troppo lenti!Solo con riqualificazioni profonde siamo troppo lenti!
Solo con riqualificazioni profonde siamo troppo lenti!
 
Riposizionare le CER con la piramide della decarbonizzazione
Riposizionare le CER con la piramide della decarbonizzazioneRiposizionare le CER con la piramide della decarbonizzazione
Riposizionare le CER con la piramide della decarbonizzazione
 
DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...
DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...
DIGNITAS INFINITA – DIGNITÀ UMANA - Dichiarazione del dicastero per la Dottri...
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
 
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
Parole inclusive: le parole cambiano il mondo o il mondo cambia le parole?
 

Lezione 6: Remote Method Invocation

  • 1. Lezione 6: Remote Method Invocation Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Middleware ✦ Remote Method Invocation ✦ Definizione e uso di oggetti remoti 2
  • 3. Modelli distribuiti ✦ Molte applicazioni di rete possono essere realizzate usando un paradigma Client- Server • il client invia la richiesta di un’operazione a un server • il server elabora la richiesta • il server fornisce una risposta al client ✦ Esempi • Il protocollo HTTP per il World Wide Web • La posta elettronica • Il nostro sistema di chat 3
  • 4. Modelli distribuiti ✦ Java permette una gestione semplificata dei socket, con il quale il programmatore è in grado di realizzare un meccanismo di comunicazione. ✦ I socket risolvono solo il problema di fondo “come instaurare la connessione”, ma non definiscono le modalità di comunicazione. • codifica delle informazioni • estensibilità dei protocolli 4 • gestione efficiente delle connessioni
  • 5. Middleware ✦ Un middleware è uno strato di software che gestisce i meccanismi di comunicazione tra più processi, situati possibilmente su macchine diverse, presentando allo sviluppatore un’astrazione di livello più elevato, che gli consenta di ignorare una serie di problemi legati alla comunicazione • Semplicità di sviluppo • Indipendenza dagli specifici meccanismi di comunicazione 5
  • 6. Middleware Client Server Middleware Middleware Connessione Trasporto Trasporto 6
  • 7. Middleware ✦ Esistono delle forti analogie concettuali tra un sistema distribuito client-server e la programmazione orientata agli oggetti Invocazione metodo Oggetto Oggetto Risultato Richiesta Client Server Risposta ✦ I middleware object-oriented usano queste analogie per presentare allo sviluppatore un modello “familiare” 7
  • 8. Middleware ✦ In un middleware orientato agli oggetti, gli oggetti di un processo possono accedere ai servizi di un altro processo usando l’astrazione di oggetti remoti ✦ L’invocazione di metodi su oggetti remoti in realtà comporta la trasmissione di un messaggio al server che implementa tali oggetti, e l’attesa della risposta di tale server (comunicazione sincrona) 8
  • 9. Remote Method Invocation ✦ Gli oggetti remoti sono gestiti attraverso riferimenti (Remote Reference) che si comportano, dal punto di vista dello sviluppatore, come riferimenti a oggetti locali (o quasi). L’unica differenza è il modo con cui vengono ottenuti questi riferimenti. ✦ La soluzione full-Java per l’esecuzione di codice remoto è conosciuta con il nome di RMI (Remote Method Invocation) 9
  • 10. Architettura RMI ✦ quando un oggetto desidera invocare un metodo di un altro oggetto, deve prima ricavarne un riferimento (indirizzo), istanziandolo direttamente o ricevendone l’indirizzo dall’esterno, e successivamente eseguire un istruzione del tipo: nome_oggetto.nome_metodo(lista_parametri) 10
  • 11. Architettura RMI ✦ Nel caso distribuito si deve ricavare il riferimento all’oggetto remoto e invocare i metodi a distanza • la soluzione proposta da RMI consiste nello scaricare in locale un “rappresentante” dell’oggetto remoto e di considerarlo come se si trattasse a tutti gli effetti di un oggetto locale nome_ogg_remoto.nome_metodo(lista_parametri) 11
  • 12. Architettura RMI Lo strato più alto è costituito su entrambi i lati (client/server) dall’applicazione che viene eseguita sulla Java-Machine ✦ RMI Client ‣ applicazione che effettua le chiamate ai metodi degli oggetti remoti residenti sul lato server ✦ RMI Server ‣ Applicazione che gestisce gli oggetti serventi 12
  • 13. Architettura RMI …sotto il livello applicazione si trovano i due protagonisti di tutto il meccanismo RMI, lo stub e lo skeleton, due rappresentanti della stessa entità. Compiti dello stub sul client: Compiti dello skeleton sul • inizia una chiamata via RRL server: ‣ invia i parametri (serializzazione) • attende richieste • invoca il metodo via RRL • riceve i dati dal client ‣ attende il completamento dell’operazione ‣ deserializzazione dei parametri • completa la chiamata • chiama l’effettiva ‣ riceve e deserializza il risultato • ritorna implementazione del metodo • trasmette la risposta al client ‣ serializza il risultato 13
  • 14. Architettura RMI …i lati server e client sono collegati con il sottostante Remote Reference Layer (RRL) che a sua volta si appoggia al Transport Layer (TL)  Al livello RRL viene instaurato un collegamento virtuale fra i due lati, client e server, mentre fisicamente la connessione avviene al livello sottostante  (RRL) basato su protocollo generico ed indipendente dal particolare tipo di stub/skeleton 14
  • 15. Architettura RMI …i lati server e client sono collegati con il sottostante Remote Reference Layer (RRL) che a sua volta si appoggia al Transport Layer (TL)  Quando il TL riceve una richiesta di connessione da parte del client, localizza il server RMI relativo all’oggetto remoto richiesto:  localizzazione del server RMI  connessione per mezzo di un socket appositamente creato per il servizio  passa la connessione al lato client del RRL ed aggiunge un riferimento dell’oggetto remoto nella tabella opportuna  controllo dello stato delle connessioni (es. timeout) 15
  • 16. Architettura RMI RMI Client RMI Server Stub Skeleton Connessione virtuale RRL RRL TL TL socket socket TCP TCP IP IP Network Connessione fisica Network 16
  • 17. Definizione e uso di oggetti remoti ✦ I passi da seguire sono: • definire un’interfaccia remota • definire un’implementazione dell’interfaccia • creare un’applicazione server che istanzi l’implementazione e la renda pubblicamente accessibile • creare un client che ottenga un riferimento remoto e lo usi per richiedere le operazioni al server 17
  • 18. Interfaccia remota ✦ Per ogni oggetto che deve essere utilizzato come oggetto remoto occorre definire una interface detta interfaccia remota • l’interfaccia remota deve estendere Remote • ogni metodo deve dichiarare che può sollevare l’eccezione RemoteException • Sia Remote che RemoteException sono definite nel package java.rmi 18
  • 19. Interfaccia remota ✦ Esempio: • supponendo che l’oggetto remoto che vogliamo realizzare svolga le operazioni aritmetiche fondamentali import java.rmi.*; public interface Calculator extends Remote { double add(double a, double b) throws RemoteException; double subtract(double a, double b) throws RemoteException; double divide(double a, double b) throws RemoteException; double multiply(double a, double b) throws RemoteException; } 19
  • 20. Interfaccia remota ✦ I parametri e il valore di ritorno dei metodi dell’interfaccia remota possono appartenere solo a un insieme ristretto di tipi: • tipi atomici (es. int) • classi serializzabili • interfacce remote (anche diverse da quella che contiene il metodo) • array i cui elementi appartengono ai tipi sopraindicati 20
  • 21. Implementazione ✦ La classe che contiene l’effettiva implementazione dell’oggetto remoto: • deve essere derivata da java.rmi.server.UnicastRemoteObject • deve dichiarare che implementa l’interfaccia remota • inoltre deve avere un costruttore (anche vuoto) che dichiara di sollevare RemoteException ✦ Per convenzione, il nome della classe termina generalmente con “Impl” 21
  • 22. Implementazione ✦ Esempio import java.rmi.*; import java.rmi.server.*; public class CalculatorImpl extends UnicastRemoteObject implements Calculator { public CalculatorImpl() throws RemoteException { // Costruttore vuoto } public double add(double a, double b) { return a+b; } public double divide(double a, double b) { return a/b; } public double multiply(double a, double b) { return a*b; } public double subtract(double a, double b) { return a-b; } } 22
  • 23. Stub e skeleton ✦ Tradizionalmente, una volta definita la classe di implementazione, occorreva richiamare il tool rmic per effettuare la generazione dello stub e dello skeleton corrispondenti ✦ Da Java 1.2, lo skeleton viene generato dinamicamente in modo automatico ✦ Da Java 1.5, anche lo stub viene generato dinamicamente 23
  • 24. Applicazione server ✦ L’applicazione server ha il compito di: • creare una o più istanze delle classi che implementano le interfacce remote • rendere accessibili al client i riferimenti remoti a queste istanze ‣ come fa il client a ottenere un riferimento remoto dal server? 24
  • 25. Applicazione server ✦ Il modo principale con cui un client ottiene un remote reference è attraverso il valore di ritorno di un metodo remoto • se il client ha un riferimento a un oggetto remoto A, l’oggetto può fornirgli il riferimento a un altro oggetto remoto B, che a sua volta può fornirgli il riferimento a C e così via ✦ Problema: “bootstrap” • come fa il client a ottenere il riferimento al primo oggetto remoto? 25
  • 26. Registry ✦ Per risolvere il problema del bootstrap il Java Development Kit mette a disposizione l’applicazione rmiregistry • name server che associa nomi simbolici (o più precisamente URL) a riferimenti remoti • il server registra i riferimenti agli oggetti di bootstrap (quelli da cui il client deve partire per accedere all’applicazione) • il client consulta il name server usando un protocollo ad hoc (già implementato da una classe della libreria standard) 26
  • 27. Registrazione di un riferimento ✦ Occorre usare il metodo statico rebind della classe Naming: ‣ static void rebind(String name, Remote obj) throws RemoteException, MalformedURLException • name è il nome assegnato all’oggetto (parte finale dell’URL) • obj è l’istanza della classe di implementazione • l’oggetto viene registrato su un rmiregistry che si trova sulla stessa macchina 27
  • 28. Applicazione server ✦ Esempio import java.net.*; import java.rmi.*; public class CalculatorServer { public static void main(String args[]) throws RemoteException, MalformedURLException { Calculator calc=new CalculatorImpl(); Naming.rebind("calc", calc); } } 28
  • 29. Il client ✦ Il client ottiene un riferimento agli oggetti registrati usando il metodo lookup della classe Naming: • static Remote lookup(String url) throws NotBoundException, MalformedURLException, RemoteException ✦ Il formato dell’URL è: • rmi://host/name 29
  • 30. Il client ✦ Una volta ottenuto un riferimento (dal registry o da un altro oggetto remoto), il client lo usa come se fosse un oggetto “normale” • occorre ricordare che ogni metodo dell’interfaccia remota può sollevare un’eccezione controllata RemoteException 30
  • 31. Il client ✦ Esempio import java.net.*; import java.rmi.*; public class CalculatorClient { public static void main(String args[]) throws RemoteException, MalformedURLException, NotBoundException { Calculator calc=(Calculator)Naming.lookup("rmi://localhost/calc"); System.out.print("9 per 9 fa "+calc.multiply(9,9)); } } 31