Remote Method Invocation (RMI)



Documenti analoghi
RMI. Java RMI RMI. G. Prencipe

Programmazione distribuita

Socket & RMI Ingegneria del Software - San Pietro

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

Java Remote Method Invocation

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

RMI: metodi equals e hashcode

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

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

RMI Remote Method Invocation

Esercitazione di Sistemi Distribuiti: Java RMI

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

Programmazione di sistemi distribuiti

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

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

Concetto di Funzione e Procedura METODI in Java

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Introduzione a Java Remote Method Invocation (RMI)

Java: Compilatore e Interprete

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:

Main System Monitor Keyboard

13. Chain of Responsibility

Appunti di Informatica 1

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193

Lezione n.10 LPR- Informatica Applicata RMI CallBacks

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

GESTIONE DEI PROCESSI

Telematica II 17. Esercitazione/Laboratorio 6

Parte II: Reti di calcolatori Lezione 10

Parola chiave extends

Java RMI (Remote Method Invocation)

Introduzione alle applicazioni di rete

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

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

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

Programmazione a Oggetti Lezione 10. Ereditarieta

Modulo 4: Ereditarietà, interfacce e clonazione

Multithreading in Java. Fondamenti di Sistemi Informativi

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

20 - Input/Output su File

RMI. Prova pratica di Sistemi Distribuiti:

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

Programmazione di rete in Java

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

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

RMI. Introduzione DI GIOVANNI PULITI

Inizializzazione degli Host. BOOTP e DHCP

Il Pattern PROXY. Ex presentazione realizzata dallo studente Paolo Melchiori (matricola 65734) nell a.a

Corso di Informatica Modulo T3 B2 - Database in rete

Progettazione : Design Pattern Creazionali

19. Introduzione al multi-threading

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Tale attività non è descritta in questa dispensa

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

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

Esercitazione 4 JDBC

Oggetti Lezione 3. aspetti generali e definizione di classi I

Funzioni in C. Violetta Lonati

Sistemi Mobili e Wireless Android - Servizi

JNDI. Massimo Merro Programmazione di Rete 214 / 229

Reti di Telecomunicazione Lezione 6

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

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Introduzione JDBC interfaccia java.sql driver caricare i driver

Algoritmi di Ricerca. Esempi di programmi Java

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

Java Virtual Machine

INTERNET e RETI di CALCOLATORI A.A. 2011/2012 Capitolo 4 DHCP Dynamic Host Configuration Protocol Fausto Marcantoni fausto.marcantoni@unicam.

Architettura Client-Server

Ministero della Giustizia

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

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

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

Altri tipi di connessione

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

1) GESTIONE DELLE POSTAZIONI REMOTE

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

FPf per Windows 3.1. Guida all uso

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

Database e reti. Piero Gallo Pasquale Sirsi

Reti di Telecomunicazione Lezione 7

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

Corso sul linguaggio Java

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Transcript:

(RMI) Remote Method Invocation (RMI) in Java. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. e-mail: cazzola@disi disi.unige.it Walter Cazzola Java: Remote Method Invocation 1

(RMI) RMI permette ad un oggetto di attivare metodi di un altro oggetto (remoto) indipendentemente da dove si trovi (cioè appartenenti a RTS distinti). I dettagli relativi alla comunicazione distribuita scompaiono. Tutti metodi sono invocati seguendo i dettami delle invocazioni classiche. Walter Cazzola Java: Remote Method Invocation 2

(RMI) Le classi che intendono rendere disponibili dei metodi per invocazioni remote devono implementare un'interfaccia che li dichiara. Stub e Skeleton devono essere creati per interfacciare i due oggetti.. In Java, sono creati automaticamente da rmic. lo stub traduce ogni invocazione del client in una comunicazione destinata al server. lo skeleton è il corrispondente dello stub sul lato server e accetta le comunicazioni dal client e le traduce in invocazioni. Walter Cazzola Java: Remote Method Invocation 3

(registrazione sul name server) L'oggetto remoto per poter essere localizzato deve essere registrato in un name server (rmiregistry( rmiregistry). Il client contatterà il name server per avere un riferimento all'oggetto remoto. Il client si aspetta un rappresentante del server tramite il quale potrà richiedergli l esecuzione del servizio. Walter Cazzola Java: Remote Method Invocation 4

(registrazione sul name server) L'identificazione è fatta tramite il nome con cui l'oggetto remoto si è registrato.. Il name server ritornerà il riferimento corrispondente. Il riferimento contiene: L'host su cui è in esecuzione La porta su cui è in attesa,, e OID Tutte informazioni usate internamente.. Per il programmatore il riferimento è uno stub che implementa i servizi richiesti. Walter Cazzola Java: Remote Method Invocation 5

(invocazione) Ottenuto il riferimento remoto, il cliente può procedere a invocare metodi dell'oggetto remoto,, come se fossero metodi locali. Tutte le comunicazioni di basso livello sono realizzate dal framework sottostante. Il framework supporta anche un sistema di eccezioni remote e di garbage collection remota. La chiamata viene intercettata dallo stub che la traduce e la invia allo skeleton del destinatario che la ritraduce ed attiva il metodo in questione. Infine lo skeleton restituirà i valori calcolati allo stub che li ritornerà al cliente come se fosse una chiamata locale. Walter Cazzola Java: Remote Method Invocation 6

(schema di invocazione remota) Client JVM 1 Server JVM 2 Remote r; Remote method() r.method(a,b); RemoteObject method() Stub Skeleton Remote Reference Layer Transport Layer Walter Cazzola Java: Remote Method Invocation 7

(oggetti remoti: interfaccia) Un oggetto remoto accetta richieste da oggetti in esecuzione su altre java virtual machine. L'oggetto remoto deve avere un'interfaccia che definisce quali sono i suoi metodi pubblici. L'interfaccia deve estendere: java.rmi rmi.remote ed i metodi sollevare l'eccezione java.rmi rmi.remoteexception. import java.rmi rmi.remote; import java.rmi rmi.remoteexception; MyRemote.java public interface MyRemote extends Remote { public int remotehash(string s) throws RemoteException; } Walter Cazzola Java: Remote Method Invocation 8

(oggetti remoti: implementazione) L'implementazione dell'oggetto remoto deve estendere la classe: java.rmi rmi.server..server.remoteobject o una sua sottoclasse, ed implementare tutte le interfacce remote che vuole supportare. import java.rmi rmi.*; import java.rmi rmi.server.*; MyRemoteImpl.java public class MyRemoteImpl extends RemoteObject implements MyRemote { public MyRemoteImpl() throws RemoteException {} public int remotehash(string s) { return s.hashcode hashcode(); } } Walter Cazzola Java: Remote Method Invocation 9

(stub & skeleton) Generazione di stub & skeleton Vengono generati automaticamente a partire dall'implementazione dell'oggetto remoto. rmic MyRemoteImpl Risultato: MyRemoteImpl_Stub.class, e MyRemoteImpl_Skel Skel.class. Operato di stub & skeleton stub e skeleton contengono il codice relativo alla serializzazione dei dettagli dell'invocazione e dei parametri di ritorno. Si basano sulle classi ObjectOutputStream e ObjectInputStream. Walter Cazzola Java: Remote Method Invocation 10

(registrare e riferire l'oggetto remoto) Il name server Per poter invocare metodi remoti,, i clienti devono avere un riferimento all'oggetto. Fornire i riferimenti è compito del name server (rmiregistry( rmiregistry). Registrarsi gli oggetti remoti si possono registrare tramite la classe: java.rmi rmi.naming ed adotteranno uno schema basato sugli URL per identificarsi. MyRemoteImpl remote-object object = new MyRemoteImpl(); Naming.bind( Oggetto Remoto,, remote-object); object); Recupero riferimenti Il recupero dei riferimetni viene fatto tramite la classe: java.rmi rmi.naming. MyRemote ref = (MyRemote( MyRemote) ) Naming.lookup( RMI:// RMI:// +args[0]+ [0]+ /Oggetto Remoto ); Walter Cazzola Java: Remote Method Invocation 11

(esempio data server: RMI server side) public interface DateServer extends Remote { public Date getdate() throws RemoteException; } DateServer.java public class DateServerImpl extends UnicastRemoteObject implements DateServer { public DateServerImpl() throws RemoteException {} public Date getdate() { return new Date(); } public static void main(string[] args) throws Exception { DateServerImpl dateserver = new DateServerImpl(); Naming.bind( Date Server, dateserver); } } DateServerImpl.java Walter Cazzola Java: Remote Method Invocation 12

(esempio data server: RMI client side) public class DateClient { public static void main(string[] args) throws Exception { if (args.length!= 1) throw new IllegalArgumentException( Syntax: DateClient <hostname> ); DateServer dateserver = (DateServer( DateServer)Naming.lookup( )Naming.lookup( RMI:// RMI:// +args[0]+ [0]+ /Date Server ); Date when = dateserver.getdate getdate(); System.out.println println(when); } } DateClient.java Walter Cazzola Java: Remote Method Invocation 13

(download classi remote) Si hanno 5 tipologie di classi coinvolte in un'invocazione di metodo remoto: 1. Implementazione del cliente 2. Implementazione del server 3. Interfaccia dell'oggetto remoto 4. Stub 5. Skeleton Per l'esecuzione del cliente sono necessarie le classi: : 1, 3 e 4. Invece per l'esecuzione del server occorrono le classi: : 2, 3, 4 e 5. Nota una simile distribuzione vale nel caso generale,, ma RMI permette oltre a computazioni client-server anche computazioni peer to peer. Walter Cazzola Java: Remote Method Invocation 14

(download classi remote) Il cliente deve poter accedere allo stub del server. Sia client che server devono avere a disposizione le classi degli oggetti che si scambiano come parametri. Spesso questo non è possibile. Svantaggio: poco flessibile. Le classi non riconosciute sono caricate da locazioni predefinite CLASSPATH locale, Se sono parametri di un RMI, si usano le informazioni usate durante la registrazione, Proprietà di sistema java.rmi rmi.server..server.codebase. Problemi dal punto di vista della sicurezza: : Java caricherà classi da server remoti solo se questi avranno installato un SecurityManager. Walter Cazzola Java: Remote Method Invocation 15

(interfaccia Remote) Solo i metodi definiti in un interfaccia che estende Remote possono essere invocati tramite RMI. Il passaggio dei parametri è per valore (side effect sugli oggetti). Tutte le classi coinvolte in un'interfaccia devono essere serializzabili. Tutti metodi devono dichiarare la possibilità di sollevare l'eccezione RemoteException public interface BankAccount extends Remote { public void deposit(int int amount) throws RemoteException; public void withdraw(int int amount) throws RemoteException, InsufficientFundsException; public int balance() throws RemoteException; public Portfolio addtoportfolio(portfolio portfolio) throws RemoteException; } Walter Cazzola Java: Remote Method Invocation 16

(classe Naming) Naming serve per indirizzare gli oggetti remoti: i servizi sono identificati tramite uno schema URL-like: RMI://hostname:port/service-name Remote lookup(string address) Ritorna un riferimento all'oggetto remoto identificato da address, se address non è un URL corretto viene sollevata l'eccezione MalformedURLException,, se il servizio richiesto non è registrato viene sollevata l'eccezione NotBoundException. void bind(string address, Remote obj) registra l'oggetto remoto obj identificandolo come address, se un oggetto remoto è già stato registrato come address allora viene sollevata l'eccezione AlreadyBoundException. Walter Cazzola Java: Remote Method Invocation 17

(classe RemoteObject) Ogni classe,, le cui istanze sono oggetti remoti,, DEVE estendere RemoteObject o classi derivate: RemoteObject implementa Serializable,, per permettere la serializzazione degli oggetti remoti. Se un metodo remoto prevede un oggetto come parametro, verrà passato un riferimento e non l'oggetto stesso. È un errore definire un metodo che attende lo stub (o lo skeleton) di un oggetto remoto. public class MyImpl extends UnicastRemoteObject implements MyRemote { public static void main(string[] args) throws Exception { MyImpl mine = new MyImpl(); HisRemote his = (HisRemote( HisRemote) ) Naming.lookup( his his ); his.invoke(mine); } devono } essere Walter Cazzola Java: Remote Method Invocation interfacce 18

(classe RemoteObject) Serializzazione Un oggetto remoto può essere serializzato su disco come qualsiasi altro oggetto e poi deserializzato altrove. ObjectOutputStream objectout;... MyImpl mine = new MyImpl(); objectout.writeobject writeobject(mine); ObjectInputStream objectin;... MyImpl mine2 = (MyImpl( MyImpl)objectIn.readObject(); Walter Cazzola Java: Remote Method Invocation 19

(estensioni di RemoteObject) RemoteServer Fornisce le funzioni comuni di un oggetto remoto che ha il ruolo di server. Cioè apre un socket su cui accetta le richieste dei clienti. UnicastRemoteObject Salvo casi eccezionali tutti gli oggetti remoti con ruolo di server saranno derivati da questa classe. Clonabile (permette di ottenere un oggetto remoto copia dell'oggetto corrente) Serializzabile (gli oggetti serializzati sono ancora oggetti remoti) Accessibile tramite TCP Walter Cazzola Java: Remote Method Invocation 20

(passaggio dei parametri) Tipi primitivi passati per valore; Oggetti remoti passati per riferimento; Oggetti non remoti passati per valore; si usa la Java Object Serialization (Serializzazione( Serializzazione). Walter Cazzola Java: Remote Method Invocation 21

(serializzazione) Serializzazione di un oggetto è sinonimo di persistenza: salva lo stato (cioè i dati) di una particolare istanza di un oggetto. Pertanto: serializzare significa salvare i dati; deserializzare significa ricaricare i dati. Walter Cazzola Java: Remote Method Invocation 22

(java.io io.serializable) Java serializza scrivendo gli oggetti come una sequenza di byte in uno stream e li usa per ricreare un altro oggetto (nuovo)) con gli stessi dati. Gli oggetti che implementano l interfaccia java.io io.serializable sono serializzabili. Tramite la reflection, tutti i dati (tranne quelli statici e quelli transienti) saranno serializzati. Walter Cazzola Java: Remote Method Invocation 23

(serializzazione) Non tutti gli oggetti sono serializzabili: Gli oggetti che non implementano Serializable; Gli oggetti che rappresentano un rischio per la sicurezza, es. FileInputStream Gli oggetti i cui valori dipendono dalla specifica virtual machine, es.. Thread; Gli oggetti che contengono oggetti non serializzabili (per ricorsione). Provando a serializzare un oggetto non serializzabile, l eccezione NotSerializableException viene sollevata. Walter Cazzola Java: Remote Method Invocation 24

(deserializzazione) Imcompatibilità. Se si aggiungono o tolgono campi da una classe, questa diventa incompatibile con i dati serializzati precedemente. se si tenta di deserializzare oggetti incompatibili l eccezione java.io io.invalidclassexception è sollevata. Forzare la compatibilità. si implementa il metodo readobject() per rendere compatibili i cambiamenti. private void readobject(objectinputstream ObjectInputStream stream) throws IOException { defaultreadobject(stream); // do compatible stuff } Walter Cazzola Java: Remote Method Invocation 25

(callback) Callback: funzionano. si passa il riferimento remoto al cliente,, ed il server riesce a chiamare i propri metodi trasparentemente; senza interagire con l RMIRegistry. Walter Cazzola Java: Remote Method Invocation 26

RMI Security (RMI Security Manager) Sicurezza: : i server non sono sicuri e gli stub potrebbero contenere codice malizioso.. Serve un SecurityManager. System.setSecurityManager setsecuritymanager(new RMISecurityManager()); AppletSecurityManager stub possono fare solo ciò che è consentito agli applet. RMISecurityManager disabilita tutte le funzionalità ad eccezione della definizione e dell accesso alle classi; la classe scaricata può fare una connessione se la connessione è stata iniziata tramite RMI. Nessuno il caricamento degli stub è disabilitato; gli stub funzioneranno solo se sono già nel classpath locale. Walter Cazzola Java: Remote Method Invocation 27

(limitazioni) RMI è solo Java si possono usare delle alternative server, es.. via JNI. Usa TCP e non UDP; Vengono creati almeno due socket per connessione. Walter Cazzola Java: Remote Method Invocation 28

Riferimenti Bibliografici Java Network Programming -Hughes et al. - Cap. 23 e 24 Java Remote Method Invocation Specification. 1998 Walter Cazzola Java: Remote Method Invocation 29