RMI Remote Method Invocation



Documenti analoghi
Socket & RMI Ingegneria del Software - San Pietro

Programmazione di sistemi distribuiti

RMI. Java RMI RMI. G. Prencipe

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

Programmazione distribuita

Java Remote Method Invocation

Telematica II 17. Esercitazione/Laboratorio 6

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

Programmazione in Java Parte I: Fondamenti

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

RMI. Prova pratica di Sistemi Distribuiti:

Programmazione a Oggetti Lezione 10. Ereditarieta

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Introduzione alle applicazioni di rete

GESTIONE DEI PROCESSI

Inizializzazione, Assegnamento e Distruzione di Classi

Esercitazione di Sistemi Distribuiti: Java RMI

appunti delle lezioni Architetture client/server: applicazioni server

Oggetti Lezione 3. aspetti generali e definizione di classi I

Funzioni in C. Violetta Lonati

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Progettazione : Design Pattern Creazionali

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

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

Concetto di Funzione e Procedura METODI in Java

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

Architetture Applicative

Elementi di UML (7): Diagrammi dei componenti e di deployment

Approccio stratificato

Programmazione dei socket con TCP #2

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

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

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Il Gestore Eventi di OpenSPCoop i. Il Gestore Eventi di OpenSPCoop

Java Virtual Machine

PRACTICAL DEVELOPMENT OF A WEB SERVICE

Procedura per creare un archivio storico remoto nelle 24 ore giornaliere

Soluzione dell esercizio del 2 Febbraio 2004

Dispensa di database Access

Introduzione a Java Remote Method Invocation (RMI)

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Modulo 4: Ereditarietà, interfacce e clonazione

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

sito web sito Internet

Java: Compilatore e Interprete

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Corso di Informatica

Traccia di soluzione dell esercizio del 25/1/2005

Struttura di un programma Java

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Matematica in laboratorio

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Per utilizzare il sistema VCP il programmatore deve inserire una porzione di codice di VCP nella sua applicazione.

Soluzione dell esercizio del 12 Febbraio 2004

Reti di Calcolatori. Il Livello delle Applicazioni

PROCEDURA PER LA GESTIONE ESAMI DI STATO AREA ALUNNI AXIOS

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

InitZero s.r.l. Via P. Calamandrei, Arezzo

Dispositivi di rete. Ripetitori. Hub

Definire un surrogato per un oggetto per controllare gli accessi ad esso.

Architettura MVC-2: i JavaBeans

Comunicazione tra Processi

Comunicazione tra Processi

Diagrammi di Interazione

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Scuola Superiore Sant Anna. Progetto parte Unix. AA : Distributed File Repository

Applicazioni distribuite

Manuale per la configurazione di un account di PEC in Mozilla.

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

CONTABILITÀ FINANZIARIA ASCOT 3 IL PROSPETTO DI CONCILIAZIONE SPECIFICHE FUNZIONALI SCHEMI OPERATIVI SOLUZIONE AI PROBLEMI

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Java Server farm. M. Danelutto. Progetto conclusivo LPRb A.A Versione 1.0

La struttura dati ad albero binario

FRANCESCO MARINO - TELECOMUNICAZIONI

Il protocollo BitTorrent

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Documenti utili. La presentazione delle ricevute bancarie

Parte II: Reti di calcolatori Lezione 10

Registratori di Cassa

Database e reti. Piero Gallo Pasquale Sirsi

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Programmazione a Oggetti Modulo B

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

RMI: metodi equals e hashcode

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Parte II: Reti di calcolatori Lezione 12

4. Un ambiente di sviluppo per Java

Coordinazione Distribuita

appunti delle lezioni Architetture client/server: applicazioni client

MODULO 5 ACCESS Basi di dati. Lezione 4

Laboratorio di reti Relazione N 5 Gruppo 9. Vettorato Mattia Mesin Alberto

Esercitazione n 4. Obiettivi

Algebra Di Boole. Definiamo ora che esiste un segnale avente valore opposto di quello assunto dalla variabile X.

3. Introduzione all'internetworking

Lezione n.10 LPR- Informatica Applicata RMI CallBacks

I file di dati. Unità didattica D1 1

Transcript:

RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106)

Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server: JVM che: crea oggetti remoti ne rende accessibili i riferimenti ne attende le invocazioni da parte dei client e le serve client: JVM che: ottiene riferimenti a oggetti remoti (presenti su un server) ne invoca metodi, che, eseguiti sul server, restituiscono un valore se un oggetto x mette a disposizione i suoi metodi (ad altri oggetti), attraverso la rete: i metodi di x si dicono remoti l oggetto x si dice remoto N.B.: quelli di client, server e oggetto remoto sono ruoli, che i componenti possono rivestire simultaneamente. P.es. dati due oggetti x e y, componenti di un applicazione RMI e residenti su JVM separate X e Y : sia x che y possono essere remoti e, in particolare: x può invocare i servizi (metodi) di y y può invocare i servizi (metodi) di x per la terminologia introdotta: x (o un sistema residente su X che lo contiene) fa da cliente, nei confronti del server y (o del sistema su Y che lo contiene) le stesse osservazioni valgono scambiando x e y (1 12 2004) slide 4:2/18 (p.107)

Layer RMI Nell architettura di un applicazione distribuita Java, l astrazione oggetto remoto è supportata dal layer RMI, che: fornisce i servizi richiesti alle applicazioni implementa i meccanismi necessari per questi. Principali servizi/meccanismi del layer RMI: comunicazione tra oggetti remoti: nascosta dall astrazione fornita dagli oggetti remoti implementata dai layer RMI e di trasporto (sotto RMI) localizzazione (cf. p. 110); consente a un cliente di ottenere riferimenti di oggetti remoti, mediante: servizio rmiregistry meccanismi standard del linguaggio (parametri, return ) caricamento remoto di bytecode di classi (non remote) (cf. p. 112): richiesto dalla trasparenza evita limitazioni a parametri/return-value di metodi remoti (1 12 2004) slide 4:3/18 (p.108)

Architettura RMI (1 12 2004) slide 4:4/18 (p.109)

Ottenere riferimenti a oggetti remoti rmiregistry un nome-stringa: è un name server distribuito per oggetti, individuati da il server vi registra un oggetto, associandolo al suo nome (binding) il client ottiene un riferimento all oggetto (per lui) remoto, in cambio del nome (lookup) il cliente può ora invocare ogni metodo (dell oggetto) remoto Localizzazione di iferimenti remoti. Due possibilità: 1. Inizialmente, un primo riferimento remoto dovrebbe essere messo in circolazione via rmiregistry. 2. In seguito, il cliente può ottenerne altri (cf. esempi factory, p.??): chiamando metodi (di oggetti) remoti... che restituiscono (riferimenti a) oggetti remoti Infine, i riferimenti remoti sono cittadini di 1a classe : possono circolare liberamente come parametri di metodi, anche remoti (p. 111). (1 12 2004) slide 4:5/18 (p.110)

RMI: riferimenti remoti come parametri Come detto, un oggetto (tipicamente remoto): può ottenere un riferimento a un altro oggetto remoto ricevendolo come parametro dell invocazione di un proprio metodo Esempio: a, b, c siano oggetti remoti sulle JVM A, B, C rispettivamente b possiede i riferimenti: 1. ref a ad a 2. ref c a c se b chiama un metodo f() di c e gli passa come argomento (il riferimento ad) a, p.es.: ref_c.f(ref_a,...); c sulla JVM C otterrà, come 1 argomento del suo metodo f(), un riferimento all oggetto remoto a sulla JVM A. (1 12 2004) slide 4:6/18 (p.111)

RMI: caricamento remoto di oggetti non remoti Il sistema RMI può trasferire il bytecode di una classe non remota MyClass, dal client al server e viceversa. Questi trasferimenti possono essere supportati anche dal protocollo http e da Web server, come in figura. Essi possono aver luogo se un oggetto (non remoto) MyClass figura: come parametro di un metodo remoto invocato dal client (direzione client server) come oggetto restituito da un metodo remoto eseguito sul server (direzione server client) Osservazioni: trasparenza: nessun vincolo su parametri/return val di metodi remoti RMI passa automaticamente gli oggetti con il loro vero tipo Java loading remoto 100% trasparente e implicito ciò consente di fornire nuove classi a JVM remote a run time, e aiuta a rendere dinamico il comportamento delle applicazioni (p. 123) (1 12 2004) slide 4:7/18 (p.112)

Programmazione con oggetti remoti in Java Un applicazione RMI è fatta, come le altre applicazioni Java, di: interfacce: definiscono (intestazioni di) di metodi classi, di cui alcune implementano le interfacce Caratteristiche specifiche RMI: (i bytecode del)le classi possono risiedere su JVM distinte o remote su una JVM si possono invocare metodi di oggetti residenti su una JVM remota; tali oggetto e i suoi metodi si dicono remoti (1 12 2004) slide 4:8/18 (p.113)

RMI: aspetti linguistici Dal punto di vista del linguaggio: un interfaccia è remota se estende java.rmi.remote : public interface RmtInt extends java.rmi.remote { public int get() throws java.rmi.remoteexception;... } un oggetto è remoto se la sua classe implementa un interfaccia remota Dal punto di vista del deployment : gli oggetti remoti e il loro bytecode vivono sulla JVM server sulla JVM cliente, non esiste una copia dell oggetto remoto esiste invece una classe stub che: rappresenta localmente l implementazione di una o più interfacce remote; p.es. per l interfaccia remota RmtInt ci sarà una classe stub class RmtInt intercetta le chiamate ai metodi remoti provvede a marshalling/unmarshalling di parametri/risultato usa i layer RMI e sottostanti per comunicare con la JVM remota (1 12 2004) slide 4:9/18 (p.114)

Creazione di un applicazione RMI Passi principali: 1. progetto e implementazione dei componenti remoti, tipicamente: cliente server interfaccia remota implementazione dell interfaccia remota p.es.: Client.java RmtInt.java RmtIntImpl.java Server.java 2. compilazione dei sorgenti in altrettante classi 3. generazione con rmic di classi stub per l interfaccia remota 4. distribuzione delle classi generate tra client e server: lato client: cliente, interfaccia remota e stub lato server: server e, per la classe remota: interfaccia, implementazione, stub 5. avvio dell applicazione: lato server: rmiregistry lato client: client & e server (1 12 2004) slide 4:10/18 (p.115)

Generazione di applicazione RMI: strumenti 1. Progetto e implementazione dei componenti remoti; porta ai file sorgente: Client.java RmtInt.java RmtIntImpl.java Server.java 2. compilazione dei sorgenti; p.es.: javac RmtInt.java crea RmtInt.class javac RmtIntImpl.java crea RmtIntImpl.class richiede RmtInt.class javac Client.java crea Client.class richiede RmtInt.class javac Server.java crea Server.class richiede RmtInt.class, RmtIntImpl.clas s 3. generazione con rmic di: stub (anche lato server, per marshalling) solo per JDK 1.1, skeleton (solo lato server) rmic -v1.2 RmtIntImpl crea RmtIntImpl_Stub.cl as s richiede RmtInt.class e RmtIntImpl.class 4. distribuzione classi e avvio dell applicazione: &, da dir in cui sono le classi di: lato server: rmiregistry interfaccia della classe remota: RmtInt.class stub della classe remota: RmtIntImpl Stub.class lato server: java Server & ; nel class path servono: interfaccia della classe remota: RmtInt.class stub della classe remota: RmtIntImpl Stub.class implementazione della classe remota RmtIntImpl.class lato client: java Client... ; nel class path servono: interfaccia della classe remota: RmtInt.class stub della classe remota: RmtIntImpl Stub.class (1 12 2004) slide 4:11/18 (p.116)

Progetto e implementazione dei componenti remoti Passi: scelta dell architettura e di come distribuire i componenti definizione delle interfacce remote, cioè che linguisticamente estendono java.rmi.remote logicamente definiscono un astrazione dei servizi remoti (a uso dei clienti) attraverso i loro metodi per questi metodi occorre introdurre risultato/parametri, ognuno con un tipo per ogni tipo nuovo va definita una classe o interfaccia implementazione dei servizi remoti, attraverso: classi che implementano (i metodi del)le interfacce remote, e, se necessari, altri metodi (locali) N.B.: una classe può implementare più interfacce remote implementazione di classi/interfacce di risultato/parametri dei metodi delle interfacce implementazione dei clienti (svincolata da quella dei servizi) Come esempio, si veda examples/rmi/rmtint. (1 12 2004) slide 4:12/18 (p.117)

RMI: Nozioni avanzate RMI: Nozioni avanzate (1 12 2004) slide 4:13/18 (p.118)

Oggetti remoti multipli Come si è visto, nell uso di base c è una corrispondenza 1-1 tra stringhe e oggetti remoti: 1. il server istanzia un oggetto remoto 2. il server registra l oggetto con un nome-stringa 3. il cliente ottiene un riferimento all oggetto remoto attraverso la stessa stringa NB: dopo (2) il server non termina, per quanto non contenga un Thread.wait(). Spiegazione: il thread main() (all rmiregistry). ha rilasciato un riferimento all esterno D altra parte, un server che elimina il riferimento remoto, p.es. con unbind(), terminerà. Problema: supponiamo che un applicazione RMI necessiti di istanze multiple allocate dinamicamente di un oggetto remoto: il server potrebbe istanziare e registrare più oggetti, ma il client dovrebbe conoscere tutte le stringhe con cui verranno registrati gli oggetti: poco pratico! Soluzione: il client fa il lookup di un solo oggetto remoto, di base quindi ne invoca più volte un metodo che gli restituisce ogni volta un riferimento a un nuovo oggetto remoto Esempi: examples/rmi/factoryrem examples/rmi/factoryimp. e RMI: Nozioni avanzate (1 12 2004) slide 4:14/18 (p.119)

Multithreading Quando un client su una JVM A invoca un metodo di un oggetto remoto, residente sulla JVM B: se il client è il primo a far questo dalla JVM A, su B viene attivato un nuovo thread per l elaborazione se no, viene riutilizzato il thread attivato in precedenza Quindi: richieste concorrenti da thread concorrenti dalla stessa JVM (p.es. A) vengono in effetti trattate sequenzialmente se si desidera un maggiore parallelismo dal lato server, che rispecchi il paralleismo introdotto dal lato client, conviene che: sul server (p.es. JVM B) girino istanze multiple degli oggetti remoti, ognuna eseguita da un thread distinto idealmente un istanza/thread distinto per ciascun thread dei clienti per questo scopo si usano gli schemi factory o dispenser RMI: Nozioni avanzate (1 12 2004) slide 4:15/18 (p.120)

Binding all inizializzazione Il binding su rmiregistry di un oggetto remoto x di classe può essere effettuato: RemXImpl 1. dal server, subito dopo l istanziazione: x = new RemXImpl(); java.rmi.naming.rebind( "PIPPO", x ); 2. oppure dal costruttore della classe RemXImpl x = new RemXImp("PIPPO"); il costruttore si occuperà del binding La seconda soluzione risulta: più comoda: non si deve ripetere la chiamata a rebind() ogni istanziazione di un oggetto remoto; dopo più elegante: in generale, in Java i compiti di inizializzazione degli oggetti vanno delegati, per quanto possibile, ai costruttori. Esempio: examples/rmi/rmtintselfbind. RMI: Nozioni avanzate (1 12 2004) slide 4:16/18 (p.121)

Loading del client a run-time Il cliente avrà un metodo, p.es. run() che sostituisce main(). Vedi examples/rmi/rmtintclntload. RMI: Nozioni avanzate (1 12 2004) slide 4:17/18 (p.122)

Esempio: remote compute engine Interfaccia: examples/rmi/compute/comput Compute.executeTask(Task generico examples/rmi/compute/task.j Task execute() e.ja va T) esegue un Task ava è un interfaccia di cui si sa solo che contiene il metodo Esempio: remote compute engine (1 12 2004) slide 4:18/18 (p.123)