Il linguaggio Java. Remote Method Invocation (RMI)

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

Garbage Collection Distribuito

Java Remote Method Invocation

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

RMI: metodi equals e hashcode

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

Oggetti Distribuiti e Java RMI

Programmazione di sistemi distribuiti

Remote Method Invocation (RMI)

Programmazione distribuita

Esercitazione di Sistemi Distribuiti: Java RMI

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

RMI. Java RMI RMI. G. Prencipe

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

Comunicazione fra oggetti distribuiti

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

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

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193

RMI Remote Method Invocation

Socket & RMI Ingegneria del Software - San Pietro

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern

Java RMI: Esempio Completo di un Applicazione Distribuita

RMI. Remote Method Invocation. Enrico Tassi, 3/4/2009. Slides originali di Nicola Gessa

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

LA PROGRAMMAZIONE RMI

Introduzione a Java Remote Method Invocation (RMI)

Laboratorio di Reti, Corsi A e B. Text-Twist. Progetto di Fine Corso A.A. 2016/17

Java RMI (Remote Method Invocation)

Agenti Mobili in Java RMI

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Sistemi Distribuiti Multiagente A.A Informatica Magistrale Università di Bari

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

Programmazione di rete in Java

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

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

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

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Il problema nasce dalla caratteristica di Java di essere distribuito

Internet Socket e RMI

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

Java: loading dinamico e reflection

RMI. Introduzione DI GIOVANNI PULITI

SCD. Sistemi distribuiti: il modello Java RMI. UniPD - SCD 2011/12 - Sistemi Concorrenti e Distribuiti 1. Architettura del modello 1

Compute engine generici in RMI

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

La classe java.lang.object

Sistemi Operativi (modulo di Informatica II)

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

RMI. Prova pratica di Sistemi Distribuiti:

Corso Programmazione Java Standard

Laboratorio di Programmazione di Rete Laurea Triennale in Informatica Applicata Progetto di fine Corso - A.A. 08/09

Java Native Interface Appunti

Corso di Reti di Calcolatori LS

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Corso di Applicazioni Telematiche

Internet Socket e RMI

SISTEMI DI ELABORAZIONE

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Gestione delle eccezioni in Java

Descrivono la collaborazione di un gruppo di oggetti per implementare collettivamente un comportamento

JNDI. Massimo Merro Programmazione di Rete 214 / 229

Linguaggi di Programmazione: Paradigmi di Programmazione

Lo strato di applicazione in Internet

Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi

domenica 9 giugno 13 Serializzazione

Sicurezza in Java. Evoluzione dei modelli di sicurezza in Java Architettura di autorizzazione nel JDK 1.2

Interfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato

IL CONCETTO DI CLASSE

Reti (già Reti di Calcolatori )

Oggetti Composti (1) Oggetti Composti (2)

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

ALTRI TIPI DI CONNESSIONE

SISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.

Programmazione di reti Corso B. 22 Novembre 2016 Lezione 9

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Esercitazione n 1. Obiettivi

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Java Le stringhe. Stringhe

CORBA ( Common Object Request Broker Architecture ) Le specifiche più conosciute sono UML e CORBA

SISTEMI OPERATIVI DISTRIBUITI

1 Il Paradigma ad Oggetti

Modelli di interazione tra processi

Funzioni, Stack e Visibilità delle Variabili in C

Oggetti distribuiti in Python. Linguaggi dinamici A.A. 2010/2011 1

Protocolli multimediali

Modello a scambio di messaggi

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Open Database Connectivity (ODBC)

Sistema operativo & file system 1

Dipartimento Affari Interni e Territoriali Direzione Centrale per i Servizi Demografici INA-SAIA. SSLProxy. Manuale Utente. versione 1.

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

24 - Possibili approfondimenti

Sommario 1 Introduzione progetto Soluzione Integrazione Conclusioni... 10

I THREAD O PROCESSI LEGGERI

Macchine astratte, linguaggi, interpretazione, compilazione

Programmazione ad oggetti

Installazione e Configurazione del servizio DHCP. Orazio Battaglia

Architetture di rete. 4. Le applicazioni di rete

Transcript:

Il linguaggio Java Remote Method Invocation (RMI)

RMI MECCANISMI BASE 2

Oggetto remoto Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete Client Server 3

Schema di principio oggetto client oggetto server riferimento interfaccia implementazione client server riferimento remoto stub, proxy oggetto remoto 4

Schema di principio interfaccia interface stub oggetto remoto implements class Esempio Calculator 5

Realizzazione di un oggetto remoto Progettare l interfaccia l interfaccia estende Remote la clausola throws di ciascun metodo remoto specifica RemoteException (eccezione controllata) Realizzare l interfaccia (oggetto remoto) Implementare ciascun metodo remoto Definire il costruttore con una clausola throws che specifica RemoteException Eventualmente dichiarare altri metodi, non specificati nell interfaccia (invocabili solo localmente) 6

Realizzazione di un oggetto remoto Realizzare il server Creare ed installare un Security Manager (quando serve) Creare ed esportare uno o più oggetti remoti Registrare gli oggetti remoti (quando serve) Realizzare il cliente Creare ed installare un Security Manager (quando serve) Localizzare gli oggetti ed ottenere gli stub relativi Invocare i metodi remoti 7

Esportare e registrare un oggetto Prima che l'oggetto remoto possa essere utilizzato, il server deve esportare l'oggetto Il server deve rendere l oggetto visibile in rete e disponibile a ricevere richieste remote registrare l'oggetto Il server può associare un nome (stringa) ad un oggetto remoto per mezzo di un naming/directory service (operazione bind) I clienti utilizzeranno tale nome per interrogare il naming/directory service ed ottenere un riferimento remoto per l'oggetto (operazione lookup) Più precisamente, il server associa un nome al riferimento remoto dell'oggetto 8

Nominazione degli oggetti lookup (RMI) rmiregistry rmiregistry lavora sulla porta 1099 bind (RMI) client RMI server Il client 1. interroga l rmiregistry usando il nome pubblico ed ottiene uno stub dell oggetto remoto 2. invoca i metodi dello stub Il server 1. crea ed esporta un oggetto e lo registra sotto un nome pubblico per mezzo di rmiregistry 2. attende le invocazioni di metodo, le esegue e così via all'infinito 9

Una visione d'insieme lookup naming / directory service Ø rmiregistry JNDI bind, rebind Client Server Stub implementano la stessa interfaccia Oggetto remoto 10

Realizzazione di un oggetto remoto Le classi Calculator.java (interfaccia remota) CalculatorImpl.java (oggetto remoto) CalculatorServer.java (server) CalculatorClient.java (client) Compilazione javac Calculator*.java Generazione stub (& skeleton) rmic CalculatorImpl.class (genera automaticamente lo stub CalculatorImpl_Stub.class) A partire da Java SE 5 questo passo non è più necessario 11

Realizzazione di un oggetto remoto Esecuzione (Windows) start rmiregistry Eseguire questo comando nella directory che contiene l interfaccia e lo stub (Calculator.class, CalculatorImpl_Stub.class) start java CalculatorServer start java CalculatorClient La classe Calculator.class deve essere nel classpath del cliente a meno che non si usi il caricamento remoto delle classi 12

La gerarchia delle classi La classe RemoteObject implementa la semantica remota di Object implementando i metodi hashcode, equals, e tostring Object interfacce Remote classi astratte RemoteStub RemoteObject RemoteServer Serializable La classe RemoteObject fornisce un framework per supportare varie semantiche di remote object, in particolare, come rendere visibile l oggetto in rete UnicastRemoteObject 13

La classe UnicastRemoteObject La classe UnicastRemoteObject permette di definire oggetti remoti, non replicati, volatili, non rilocabili e basati sui flussi TCP non replicato: esiste una sola copia dell oggetto volatile: il riferimento remoto all oggetto è valido solo mentre il processo server è attivo non rilocabile: l oggetto remoto non può migrare da un server all altro Tipicamente, gli oggetti remoti estendono RemoteObject, attraverso UnicastRemoteObject; altrimenti, la classe implementazione deve implementare hashcode, equals, e tostring in modo appropriato per gli oggetti remoti 14

Esportazione di un oggetto remoto Un oggetto remoto deve essere esportato in modo da accettare richieste ascoltando invocazioni remote di metodo da parte dei clienti su di una porta (anonima) Esportazione implicita. Se la classe remota estende UnicastRemoteObject, un oggetto viene implicitamente esportato al momento della creazione Il costruttore di UnicastRemoteObject esegue l esportazione Il costruttore dichiara RemoteException nella sua clausola throws Esportazione esplicita. Se la classe remota non estende UnicastRemoteObject, l oggetto remoto deve essere esportato esplicitamente invocando UnicastRemoteObject.exportObject 15

Esportazione esplicita import java.rmi.*; import java.rmi.server.*; public class Calculatormpl implements Calculator { } } public CalculatorImpl(String n) throws RemoteException { name = n; UnicastRemoteObject.exportObject(this); // il resto 16

La classe UnicastRemoteObject protected UnicastRemoteObject() throws RemoteException crea ed esporta questo oggetto usando una porta anonima protected UnicastRemoteObject(int port) throws RemoteException crea ed esporta questo oggetto usando la porta specificata static RemoteStub exportobject(remote obj) throws RemoteException esporta l oggetto remoto obj e lo abilita a ricevere richieste usando una porta anonima static RemoteStub exportobject(remote obj, int port) throws RemoteException esporta l oggetto remoto obj e lo abilita a ricevere richieste usando la porta port 17

Parametri e valore di ritorno Trasmissione dei parametri e del valore di ritorno tipo primitivo: la trasmissione per valore in un formato esterno indipendente dalla piattaforma (trasmissione per valore) riferimento ad oggetto: viene trasmesso l oggetto in forma serializzata (trasmissione per valore) riferimento ad oggetto remoto: viene trasmesso lo stub (trasmissione per riferimento) Esempio: Hello 18

Serializzazione in RMI Annotazione della classe Quando un oggetto viene trasmesso in una RMI, la serializzazione viene estesa con il meccanismo di annotazione della classe Annotazione della classe: nel flusso, le informazioni relative alla classe sono estese per mezzo di informazioni aggiuntive (URL) che indicano da dove la classe (.class) può essere caricata 19

Callback Problema. Il cliente si deve sincronizzare con eventi che si verificano sul server Esempio. Ad esempio, un server offre un'interfaccia di rete ad un servizio di back-end. Questo servizio richiede un tempo lungo di esecuzione. Il server monitorizza l'esecuzione del servizio. Il cliente vuole essere avvisato quando si verificano gli eventi e 1 = 25% del lavoro svolto, e 2 =50% del lavoro svolto (analogamente si può definire sul tempo). Possibili approcci Polling Callback 20

Polling e callback Polling Idea. Il client chiede periodicamente al server se l evento di interesse si è verificato Vantaggi. Semplice da realizzare Svantaggi. Callback. Prestazioni. Aumenta il traffico di rete ed il carico sul server Tempestività. Si può ridurre la frequenza di polling ma si perde in tempestività Idea. Quando l evento si verifica, il server informa il client. Svantaggi. Realizzazione più complessa. Vantaggi. Il callback risolve gli svantaggi del polling 21

Callback con RMI stub callback object notifica registrazione registration object Client Il client implementa un callback object (oggetto remoto) che il server utilizza per notificare eventi Server Il server fornisce un registration object (oggetto remoto), tramite il quale un client può registrare un callback object Quando si verifica l evento, il server invoca il metodo remoto di notifica dell evento 22

Callback con RMI // Interfaccia di registrazione del registration object import java.rmi.*; public interface Registration extends Remote { public void register(callback em) throws RemoteException public void unregister(callback em) throws RemoteException } // Interfaccia del callback object import java.rmi.*; public interface Callback extends Remote { public void notify(event e) throws RemoteException } 23

Problemi con la callback Il server necessita di una lista aggiornata dei clienti registrati Meccanismo di lease permette di gestire i casi in cui i clienti terminano senza notificare il server Il server esegue una serie di invocazioni sincrone di RMI verso i callback object dei clienti La notifica ad un cliente è ritardata perché la connessione verso un client è guasto oppure il cliente è guasto o disattivato Il client ed il server sono disaccoppiati da una mailbox 24

Il caricamento remoto delle classi

Una visione d insieme RMI rmiregistry RMI client RMI server HTTP web server HTTP HTTP web server 26

Attributi di un programma Java Un programma Java viene eseguito in un ambiente di esecuzione caratterizzato da attributi Attributo = (nome, valore) Esempio: (os.name, Solaris) Tipi di attributo Attributi di sistema (macchina host, utente, directory corrente, ), gestiti dalla classe System Attributi di programma (preferenze) configurabili (opzioni di avvio, dimensione delle finestre, ) 27

Attributi di un programma Un programma può impostare gli attributi di programma mediante: Proprietà, che definiscono attributi che persistono (stream) tra invocazioni successive di un programma (classe java.util.properties) Argomenti della linea di comando, che definiscono attributi in modo non persistente, cioè che valgono per una singola esecuzione di un programma Parametri delle applet, che sono simili agli argomenti della linea di comando ma sono utilizzati con le applet e non con le applicazioni 28

Proprietà e classe Properties Java utilizza le proprietà per gestire gli attributi Le proprietà sono realizzate dalla classe java.util.properties che gestisce coppie nome-valore Attributi di sistema: sono gestiti dalla classe System per mezzo della classe Properties Attributi di programma: un programma Java può utilizzare direttamente la classe Properties per gestire gli attributi di programma L'accesso alle proprietà è soggetto all'approvazione da parte del Security Manager 29

Codebase Il caricamento remoto delle classi in RMI è controllato dalle seguenti proprietà: proprietà java.rmi.server.codebase Specifica l URL della locazione che fornisce le classi per gli oggetti che sono inviati da questa JVM L'URL può specificare vari protocolli per scaricare le classi: file:, ftp:, http:, Quando serializza un oggetto, RMI inserisce l'url nel flusso (annotazione della classe) La JVM che riceve l'oggetto serializzato, se ha bisogno di caricare la relativa classe, può caricarla dalla locazione specificata dall'url NOTA BENE: JVM non invia la classe con l'oggetto serializzato continua 30

Codebase Il codebase specifica la locazione da cui si caricano le classi nella JVM Il classpath è il codebase locale La proprietá java.rmi.server.codebase permette di specificare un codebase remoto 31

Security Manager SM è responsabile di controllare a quali risorse una JVM ha accesso Per default, un'applicazione standalone non ha SM mentre un applet usa il SM del browser in cui gira SM determina se il codice caricato remotamente può accedere al file system oppure eseguire operazioni privilegiate Se SM non è definito, il caricamento remoto non è permesso Una JVM che deve caricare classi remotamente deve istanziare un SM definire una politica di sicurezza (insieme di permessi) RMISecurityManager è il SM di default per RMI e garantisce gli stessi controlli del SM di un browser 32

Proprietá in Java RMI (semplificato) continua proprietà java.security.policy Il codice, locale o remoto, è soggetto ad una politica di sicurezza La politica di sicurezza definisce un insieme di permessi concessi ai vari moduli di codice per accedere alle risorse del sistema La proprietà java.security.policy specifica il file delle politiche che estende la politica di default per il controllo degli accessi 33

Caricamento remoto delle classi RMI Server 1 RMI Registry 1. RMI Server segue la [re]bind, specificando il codebase impostato tramite la proprietà java.rmi.server.codebase 2. RMI Registry carica la classe dello stub dalla locazione specificata dal codebase 2 Server Web 34

Caricamento remoto delle classi RMI Client 1 2 3 RMI Registry Server Web 1. RMI Client invoca Naming.lookup 2. RMI Registry ritorna un istanza dello stub 3. RMI Client preleva la classe dello stub (_stub.class) dall URL specificato dal codebase 35

Esempio Compute Realizzazione di un Compute Service che riceve un task, lo esegue e ne ritorna il risultato Compute object (remoto) ha un'unica operazione Object executetask(task t) Un Task ha un unica operazione Object execute() 36

Esecuzione: attivazione di rmiregistry unset CLASSPATH start rmiregistry RMI Registry deve essere attivato in una shell che non ha variabile CLASSPATH oppure in cui tale variabile non specifica il path di alcuna classe, inclusa quella che si vuole caricare remotamente Altrimenti, RMI Registry si dimenticherà che le classi devono essere caricate dal codebase specificato da java.rmi.server.codebase e, perciò, non invierà al cliente il vero codebase e quindi il cliente non sarà capace di localizzare e caricare le classi 37

Esecuzione: attivazione di client e server Attivazione di RMI Server java Djava.rmi.server.codebase=http://dini.iet.unipi.it:2002/ -Djava.security.policy=rmi/compute/engine/java.policy ComputeEngine Attivazione di RMI client java -Djava.rmi.server.codebase=http://dini.iet.unipi.it:2002/ -Djava.security.policy=rmi/compute/client/java.policy ComputePi dini.iet.unipi.it 20 38

ClassFileServer Il ClassFileServer è un HTTP Server semplificato che fornisce il servizio di caricamento delle classi porta su cui il server ascolta java ClassFileServer 2002 D:\home\didattica\tiga\materialedidattico\java\rmi\classfileserver\ classpath 39

RMI e threads RMI non specifica se l esecuzione di un metodo remoto avviene in un thread separato oppure no Siccome l esecuzione di un metodo remoto può avvenire in un thread separato, l implementazione dell oggetto remoto deve essere thread-safe 40

RMI CENNI IMPLEMENTATIVI

Architettura di RMI client server Stub & Skeleton Stub & Skeleton Remote Reference Remote Reference Trasporto Ciascun livello può essere sostituito o esteso senza modificare gli altri 42

Il livello Stub & Skeleton client Implementation results call call results stub forward call skeleton forward results 43

Il Livello Remote Reference Il livello Remote Reference implementa la semantica di Java RMI Oggetti unicast, volatili, at-most-once (JDK 1.1) Oggetti attivabili (JDK 2) Altre semantiche possibili: multicast Il proxy inoltra simultaneamente la richiesta ad un insieme di implementazioni ed accetta la prima risposta 44

Il livello di trasporto Tutte le connessioni sono TCP/IP Java RMI implementa Java Remote Method Protocol (JRMP) su TCP 45

Implementazione di RMI client remote reference skeleton & dispatcher server A S RRM C M REQUEST REPLY C M S&D RRM r B communication module remote reference module remote reference module 46

Siano: B un oggetto remoto RMI processing m un metodo della sua interfaccia remota R il riferimento remoto a B S uno stub che incapsula R r il riferimento locale al server dell'oggetto remoto B RMI processing deve affrontare due aspetti: l'invocazione (attraverso S) del metodo remoto m di B l'oggetto remoto B viene trasmesso come argomento o valore di ritorno 47

Stub & Communication Module Proxy/stub Il proxy/stub rende la RMI trasparente all oggetto cliente Il proxy/stub ha la stessa interfaccia dell oggetto remoto ed inoltra a questi l invocazione di metodo Il proxy/stub nasconde il riferimento remoto ed esegue marshalling ed unmarshalling (lato client) C è un proxy/stub per ogni oggetto remoto di cui il processo ha un riferimento remoto Communication Module (CM) esegue il protocollo request-reply e realizza la semantica (at-mostonce, at-least-once, ) della RMI 48

Skeleton & Dispatcher (S&D) Un modulo S&D per ciascuna classe remota Il modulo S&D ha il compito di: determinare il metodo da invocare; eseguire l unmarshalling degli argomenti; eseguire l'invocazione locale del metodo; eseguire il marshalling dei risultati; preparare il messaggio di reply Il modulo S&D è generato dinamicamente a partire dall interfaccia remota 49

Request processing RRM request reply C M III II I S&D r.m(args) B I. Alla ricezione del request message, CM invia il riferimento remoto R ad RRM, il quale reperisce in Remote Object Table (ROT) il corrispondente riferimento locale r all'oggetto B e lo ritorna a CM II. CM determina il modulo S&D sulla base del valore del campo Remote Class/Interface del riferimento remoto R e passa a tale modulo la coppia (request message, r) (continua) 50

Request processing: S&D III. Alla ricezione della coppia (request message, r), il modulo S&D esegue le seguenti azioni: a. determina il metodo m da invocare sulla base del valore del campo Method Identifier del Request Message b. esegue l'unmarshaling degli argomenti args contenuti nel campo Arguments del Request Message c. invoca il metodo results = r.m(args) d. esegue il marshalling dei valori di ritorno results e. prepara il Reply Message e lo passa a CM N.B.: l'elaborazione di una chiamata remota assume che il mapping R ç è r sia già disponibile nella tabella ROT di RRM 51

Remote Reference Module (RRM) RRM crea i riferimenti remoti RRM traduce rref è lref RRM mantiene la Remote Object Table (ROT) Remote Object Table riferimento remoto riferimento locale R r riferimento remoto riferimento locale riferimento locale a: oggetto remoto (server) stub (client) 52

Trasmissione dei parametri L'oggetto viene trasmesso come argomento (request message) Lo stub trasmette al modulo RRM il riferimento locale r all'oggetto il quale ritorna il riferimento remoto R da inserire nel request message; L'oggetto viene trasmesso come valore di ritorno (reply message) Il S&D trasmette al modulo RRM il riferimento locale r all'oggetto il quale ritorna il riferimento remoto R da inserire nel messaggio; 53

Il binder il binder è un servizio (directory service) separato che mantiene la corrispondenza tra nomi (stringhe) e riferimenti remoti un server registra un proprio oggetto remoto sotto un certo nome I client ottengono i riferimenti remoti a tale oggetto facendo una ricerca per nome 54

RMI DISTRIBUTED GARBAGE COLLECTION

Garbage Collection Distribuito Un oggetto può essere raccolto quando non ci sono più riferimenti, locali o remoti, ad esso JVM (client) JVM (server) stub JVM (client) oggetto remoto 56

Garbage Collection Distribuito In Java, il servizio Distributed Garbage Collector (DGC) collabora con il servizio Local Garbage Collector (LGC) JVM DGC JVM DGC LGC LGC 57

Garbage Collection Distribuito DGC è basato sul meccanismo del reference counting, cioè DGC tiene traccia dei riferimenti a ciascun oggetto remoto JVM (client) JVM (client) JVM (server) reference counter = 2 DGC viene informato di ogni creazione e distruzione di stub in modo da poter incrementare e decrementare, rispettivamente, il reference counter 58

Garbage Collection Distribuito Ogni oggetto remoto X è associato all'insieme holders che memorizza l'insieme dei clienti che detengono un riferimento all'oggetto stesso JVM (client) A JVM (server) B X JVM (client) Holders = {A, B} Ref. Counter = 2 59

Garbage Collection Distribuito ALGORITMO (semplificato) Quando riceve un riferimento remoto all'oggetto X, il cliente C invoca l'operazione remota addref(c) sul server e poi crea lo stub S(X); il server aggiunge C a X.holder Quando il LGC di C, LGC C, rileva che lo stub S(X) può essere raccolto, LGC C invoca l'operazione removeref(c) e cancella lo stub; il server toglie C da X.holder Quando X.holder è vuoto (ref. Counter = 0) e non ci sono riferimenti locali a X, l'oggetto X può essere reclamato 60

Il problema della corsa critica Si consideri questa situazione: C1 passa a C2 un riferimento remoto ad X come parametro o valore di ritorno JVM (client) C1 stub JVM (server) C2 X JVM (client) Holders = {C1} Ref. Counter = 1 61

Il problema della corsa critica Si consideri possibile esecuzione C1 (a) (b) C2 (c) (d) S (e) (f) (g) C1 passa un rif. Remoto a C2 (a). Alla ricezione (c), C2 alloca una stub ed invoca addref(c2) (d). Nel frattempo, C1 dealloca lo stub ed invoca removeref(c1) (b) Il server riceve removeref(c1) (e), holders diventa vuoto e quindi l oggetto viene recalamato (f). Quando arriva addref(c2) (g), l oggetto non esiste più! 62

Garbage Collection Distribuito IL PROBLEMA DELLA CORSA CRITICA removeref Server In questo intervallo, LGC potrebbe intervenire e raccogliere l'oggetto remoto holders = vuoto addref A questo istante l'oggetto potrebbe essere stato rimosso Una possibile soluzione consiste nei seguenti passi: si informa il server che il riferimento è stato trasmesso ad un cliente quando il server riceve la notifica, inserisce in holders un'entità fittizia in attesa di addref 63

Garbage Collection Distribuito Le azioni dell'algoritmo sono "nascoste" nella implementazione dell'oggetto remoto Un'applicazione server può ricevere una notifica dell'evento holders = vuoto implementando l'interfaccia java.rmi.server.unreferenced Questa interfaccia ha un solo metodo, void unreferenced(), che viene invocato dal RMI runtime 64

Garbage Collection Distribuito Le operazioni addref e removeref sono chiamate di procedura remota che seguono la semantica at-most-once non richiedono una sincronizzazione globale non interagiscono con le RMI del livello applicativo perché sono invocate solo quando viene creato o distrutto uno stub 65

Garbage Collection Distribuito Il servizio DGC di Java tollera i guasti di comunicazione Le operazioni addref e removeref sono idempotenti Se l'invocazione di addref ritorna un'eccezione, il cliente non crea lo stub ed invoca l'operazione removeref L'operazione removeref ha sempre successo Se l'invocazione di removeref dà luogo ad una eccezione interviene il meccanismo di leasing 66

Garbage Collection Distribuito Il meccanismo del leasing crash JVM (client) A JVM (server) B holders{a, B} JVM (client) X IL PROBLEMA Se il client va in crash non esegue removeref, perciò Holders non diventa mai vuoto e perció l'oggetto X non sarà mai reclamato Il LEASING Un riferimento remoto non viene dato per sempre ma affittato per un periodo di tempo massimo prefissato Quando il periodo è trascorso, il riferimento viene rimosso L'affitto è rinnovabile 67

Garbage Collection Distribuito Il meccanismo di leasing Il server dà un riferimento remoto in affitto (leasing) a ciascun cliente per un tempo massimo prefissato T Il periodo di affitto inizia quando il cliente esegue addref e termina quando il cliente esegue removeref e comunque non oltre T unità di tempo È responsabilità del cliente rinnovare l'affitto prima che scada A causa di guasti di comunicazione che impediscono al cliente di rinnovare il lease, l'oggetto remoto può "sparire" al cliente Quando l'affitto scade, il server considera il riferimento remoto non più valido e lo rimuove La durata del lease è controllata da java.rmi.dgc.leasevalue 68