Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Java RMI - Java RMI-Informatica, Tesi di laurea di Fondamenti di informatica

Il documento "Java RMI " offre una panoramica dettagliata sulle Remote Method Invocation in Java, spiegando come questa tecnologia permetta la comunicazione tra oggetti distribuiti su diverse JVM. Vengono descritti i componenti principali come stub e skeleton, che fungono da intermediari tra client e server, facilitando le chiamate remote in modo trasparente. Il testo approfondisce l'architettura a layer di RMI, composta da Stub & Skeleton Layer, Remote Reference Layer e Transport Layer, evidenziando il ruolo di ciascuno nella gestione delle invocazioni e della comunicazione di rete. Si discute anche dei meccanismi di marshalling e serializzazione, essenziali per la trasmissione dei dati, e della sicurezza in RMI, con particolare attenzione al concetto di sandbox e ai quattro livelli di sicurezza in Java (linguaggio, bytecode verifier, class loader e security manager). Viene inoltre trattata la garbage collection distribuita per la gestione della memoria in ambienti distribuiti.

Tipologia: Tesi di laurea

2024/2025

In vendita dal 25/04/2025

charles-khama
charles-khama 🇮🇹

3.4

(23)

8.3K documenti

1 / 14

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Anteprima parziale del testo

Scarica Java RMI - Java RMI-Informatica e più Tesi di laurea in PDF di Fondamenti di informatica solo su Docsity!

4/25/25, 4:49 PM Java RMI - Java RMI Java RMI = Indice * Introduzione a Java RMI + Obiettivi di Java RNT * Package principali Struttura e componenti principali * Stub e Skeleton: comunicare con l'oggetto remoto + stub + skeleton Aspetti Fondamentali di RMI * oggetti, interfacce remote e eccezioni renote * Creazione di un'interfaccia remota + Inplementazione * Passaggio di parametri tra oggetti renoti è Classtoader + Caricamento dinanico di classi: codeba: Architettura a Layer di Java RAI * Stub & Skeleton Layer * Renote Reference Layer * Transport Layer Meccanismi di Marshalling e Serializzazione + Specializzazione della classe Objectoutputstream Sicurezza in Java RMI + Concetto di Sandbox * 1 Quattro Livelli di Sicurezza in Java Gestione della Menoria e Garbage Collection Distribuita (DGC) Servizio di Naming in Java RAI (rmiregistry) * Funzionamento di rmiregistry * Metodi Principali del Servizio di Naming (java.rmi.Naming) * Meccanismo di Bootstrapping, Processo di Creazione di un'Applicazione AMI Definizione dell’Interfaccia Renota Implementazione del Server Implementazione del Client Compilazione e Avvio Caricare un file di policy Introduzione a Java RMI £ Source * L'RMI (Remote Method Invocation) è uUn'API che fornisce un meccanisno per creare applicazioni distribuite in Java. L'RMI consente a un oggetto di invocare metodi su un oggetto în esecuzione în un'altra 31. * L'RAI fornisce una comunicazione renota tra le applicazioni utilizzando due oggetti stub e skeleton. Obiettivi di Java RMI ‘about:blank 1/14 4/25/25, 4:49 PM ‘about:blank = 1. Semplicità e Familiarità per 1 » dava < Uno degli obiettivi principali di Java RMI è stato renderlo senplice da usare e familiare ai programmatori già abituati al linguaggio Java. Questo significa che i programmatori dovrebbero poter invocare metodi remoti su oggetti distribuiti con la stessa semplicità e sintassi con cui chiamenebbero un metodo su un oggetto locale. + La semplicità si riflette nel fatto che 1PAPI di Java RMI è integrata nativamente in Java e si basa sui concetti di oggetti e interfacce, già familiari per chi usa 11 Minguaggio. Così, anche in un contesto distribuito, 11 programmatore non ha bisogno di usare tecniche completamente diverse da quelle della programmazione locale. 1. Sicurezza e Stabilità gava RAI eredita la sicurezza nativa di Ja Java RMI - Java RMI 1. Integrazione con il Linguaggio Java Java RMI è stato progettato per integrarsi profondamente nel linguaggio e nell'ambiente Java, sfruttando al massino le sue caratteristiche, come il supporto per oggetti e la gestione automatica della nenoria Grazie a questa integrazione, RMI permette di invocare metodi su oggetti remoti in nodo naturale, mantenendo una sintassi e semantica sinili alle invocazioni locali. I programmatori possono gestire oggetti remoti come se fossero locali, riducendo 11 divario tra programmazione distribuita e non. Questa integrazione include 11 supporto per la garbage collection distribuita (Distributed Garbage Collection o DGC), che consente al sistena di gestire automaticamente la mesoria anche per gli oggetti remoti. In questo modo, Java RMI previene possibili problemi di gestione della memoria e memory leaks, che possono essere critici nei sisteni distribuiti. sfruttando 11 meccanismo della sandbox, che linita le operazioni che il codice renoto può eseguire, e un set di livelli di sicurezza che protegge il sistema da accessi non autorizzati. * 11 security Manager e il file di policy forniscono un ulteriore controllo sui permessi per ogni azione renota. Questo significa che il programmatore può specificare quali operazioni sono consentite agli oggetti renoti, cone la lettura o la scrittura di File, l'apertura di connessioni di rete, ecc. * RIT sfrutta il modello di sicurezza di Java per garantire che le operazioni remote avvengano in un ambiente controllato. Questo è particolarmente inportante nelle applicazioni distribuite, dove un'applicazione client può avere accesso a risorse sensibili di un server. La sicurezza integrata di Java RMI è quindi fondasentale per prevenire attacchi e mantenere la stabilità del sistema. Package principali dava RIT è costituito da 5 package ova.rmi e jovo.ri.server : meccanismi basilari per le invocazioni renote; 1 per oggetti attivabili; ava.rmi.dgc : per 41 Distributed Garbage Collection; * ovo.rmi.registry : per 11 servizio di localizzazione. * java. rai.activatio Struttura e componenti principali Stub e Skeleton: comunicare con l'oggetto remoto 2/14 4/25/25, 4:49 PM ‘about:blank tone (To ll) bi] Mina Su i n Dio rr, e On iene S pline i ten ne + Per definire un oggetto remoto, bisogna specificare un'interfaccia remota per l'oggetto e poi fornire una L'interfaccia remota e la classe di inplesentazione vengono quindi Classe che inplementi tale interfacci: utilizzate da RNI per generare uno stub client e uno skeleton server per l'oj * La comunicazione tra gli oggetti locali e quelli resoti viene gestita tranite questi stub client e skeleton server Creazione di un'interfaccia remota Interfaccia Renota L'interfaccia remota definisce i metodi che possono essere invocati da remoto e stabilisce le funzionalità che l'oggetto remoto esporrà ai client. * La creazione di oggetti remoti inizia con la definizione delle interfacce renote per 1 tipi di oggetti da utilizzare in un contesto di oggetti distribuiti. * Questo processo è simile alla definizione delle interfacce pubbliche in un'applicazione non distribuita, con le seguenti eccezioni: * Ogni oggetto che si desidera distribuire tramite RMI deve estendere direttamente o indirettamente un'interfaccia che estende l'interfaccia jova.rmi.Renote (ovveero un ‘intrfaccio manker, vuota, che permette di segnalare che essa definisce dei metodi accessibili da renoto). * Ogni metodo nell'interfaccia remota deve dichiarare di generare un'eccezione jova. rm .RemoteException 0 una delle classi padre di Renoterkception « © pranple INTERFACCIA REMOTA impari CHA. "Memo; inpat | Cva. rn RemotEscapin Scinb sOyiello(Srin) nome) from RemoteExcepiin; 4 palio iero Remosiiello cxenda Remote { 6) Implementazione Java RMI - Java RMI setto renoto. © La classe Renoterxception ogni metodo renoto deve dichiarare che può lanciare un'eccezione di tipo Renotezxception , una checked exception (viene controllata dal compilatore e vista cone un errore se non c’è), che serve a gestire gli errori di rete 0 di connessione. Questa caratteristica è fondamentale per indicare la differenza tra i metodi locali e quelli remoti, poiché i metodi remoti possono fallire a causa di probleni di comunicazione. ans 4/25/25, 4:49 PM ‘about:blank Java RMI - Java RMI n Oggetto Remoto L'oggetto renoto è l’inplenentazione dell'interfaccia nesota e rappresenta l'oggetto che risiede server, esponendo i metodi renoti al client. + L'inplenentazione di un oggetto resoto spesso rome) estende java.riri.server.UnicostRenoteobject , che gestisce l'esportazione e rende l'oggetto import ava. r=i.servetine ntemoObies; een; disponibile per invocazioni remote. Questa i Ea Gr Classe fornisce anche un costruttore che lancia} ui ay SOI Renoteexception , da usare nel costruttore della on classe 5 protected Remoslilllmpi) dro * Se non si estende UnicastRemoteobject , RemoteEaception { l'oggetto deve essere esplicitamente 6 super); esportato tramite 7 UnicastRemoteobject. exportobject() ; 9 @Overide * Questa classe fa parte del pacchetto 10 public Strin) «iell(Srin!| name) throw java.rmi.server ed estende Remotexepiin ( java. rmi .servar.ResoteServer , che a sua "n tetra "Hello," + nome + "i" volta estende jova.rmi.server.Remoteobject, 1°) la classe base per tutti gli oggetti renoti ! ) gar Qui, Renotellellotnpl è l’inplementazione dell'interfaccia remota Remotellello . Estendendo UnicostResoteobject , l'oggetto diventa remoto e viene esposto tramite il metodo soyietlo . Passaggio di parametri tra oggetti remoti Tipo di Oggetto Metodo Locale Metodo Renoto Oggetti Locali Passati per riferimento Passati per valore (serializzati e copiati) Oggetti Renoti Non applicabile Passati per riferimento renoto (tramite stub) Gli oggetti remoti, ossia quelli che implementano l'interfaccia Resote , vengono passati per riferimento. In pratica, invece di inviare l'oggetto stesso, Java RNI invia un riferimento remoto (stub) che rappresenta l'oggetto renoto. Lo stub contiene tutte le informazioni necessarie per interagire con l'oggetto remoto, cose l'indirizzo e 1 metodi da invocare. In questo modo, un client può chiamare 1 metodi sull'oggetto resoto come se fosse locale, ma in realtà le chiamate vengono inoltrate al server tramite lo stub Caricamento dinamico di classi: codebase e ClassLoader “ Tn un sistema distribuito, non tutte le JV possono avere tutte le definizioni delle classi richieste, soprattutto quando si inviano oggetti cose parametri o valori di ritorno în metodi renoti. * Java RNI risolve questo problema con il caricamento dinamico delle classi, che permette di scaricare le definizioni di classi mancanti da un server trasite una URL (codebase). * La codebase è una URL che specifica la posizione (tipicamente un server HIT 0 un File server) da cui una IM renota può scaricare le classi mancanti. * Si imposta la codebase cone una proprietà di sistesa nel server: JV) DIUV I miseverzodiise-MtEp://nyserver. con/closses/ Helloserver Questa proprietà fa sì che, quando la 3VM remota riceve uno stub 0 un oggetto non presente nel suo classpath, possa scaricare automaticamente la definizione della classe dal server specificato nella codebase. 11 Classioader è fl meccanismo di Java per caricare dinamicamente le classi necessarie. 5/14 4/25/25, 4:49 PM Java RMI - Java RMI renoti che ricevono la stessa chiasata allo stesso tenpo) + Alcuni oggetti remoti sono “attivabili”, cioè non devono essere senpre în menoria; vengono attivati solo quando sono richiesti. + Il Remote Reference Layer gestisce l'attivazione di questi oggetti. In pratica, si assicura che l'oggetto remoto venga “risvegliato” risparaiando risorse Transport Layer 11 Transport Layer è lo strato più basso e si occupa di gestire la comunicazione di rete tra client e server. * Protocollo di trasporto: + Java RMI utilizza principalmente 11 Java Renote Method Protocol (JRMP), un protocollo specifico per RI che permette la comunicazione tra IV * Funzioni principali: * Stabilire connessioni di rete e gestire le sessioni tra IW4 divense. * Mantenere una tabella degli oggetti renoti attivi e instradare le pichieste in entrata verso l'oggetto corretto. + Gestione della connessione: * Connessione orientata: JRNP è un protocollo orientato alla connessione (basato su TCP/IP), assicurando una comunicazione affidabile tra client e server. * Gestione degli errori: Questo layer gestisce i timeout e le riconnessioni, se necessario, e rileva errori cone l'interruzione della rete. Meccanismi di Marshalling e Serializzazione Source Marshalling è il processo tramite 41 quale Java RMI prepara i dati (parametri o valori di ritorno) per essere trasferiti tra la IW client e la IVI server. Si occupa quindi di convertire gli oggetti in un formato trasnissibile, che può viaggiare tramite la rete verso una destinazione remota. * Marshalling: Gli oggetti da inviare (che siano parametri 0 risultati) vengono trasformati in una sequenza di byte (serializzati). * Trasmissione: I dati codificati vengono trasnessi dalla IWI client alla JV server (0 viceversa). UnnarshalLing: Una volta ricevuti, i dati vengono decodificati per ricreare l'oggetto originale nella JVM di destinazione, in modo che sia utilizzabile cone se fosse stato creato localmente. In sostanza, marshalling e unmarshalling sono un'estensione della serializzazione, specificamente orientata alla trasmissione di dati in un contesto di invocazioni renote. © Quindi tra Narshalling e Serializzazione che differenze ci sono? Pur essendo concetti vicini, marshalling e serializzazione non sono esattamente la stessa cosa: * Serializzazione: È il processo generale di conversione di un oggetto Java in una sequenza di byte, utilizzato principalmente per archiviare dati o trasferirli în modo persistente (ad esenpio, salvandoli in un file). In Java, la serfalizzazione avviene tranite le classi 0bjectoutputstrean e objectrnputstreos , che offrono metodi come writeobject() @ reodobject() per serializzare e deserializzare rispettivamente Marshalling în Java RNI: Va oltre la serializzazione, in quanto non solo converte gli oggetti in byte, na gestisce anche la trasmissione di riferimenti remoti. Ad esempio, se l'oggetto che viene passato è un oggetto remoto (ossia un oggetto distribuito RMI), il marshalling non trasferisce l'oggetto stesso, na 11 suo stub, ossia 11 proxy che permette al client di interagire con l'oggetto remoto. Inoltre, 41 narshalling può includere altre informazioni specifiche, come la codebase per il caricamento dinamico delle classi Specializzazione della classe 0bjectoutputStream ‘about:blank 714 4/25/25, 4:49 PM Java RMI - Java RMI * La classe objectovtputstreon în Java è responsabile della serializzazione degli oggetti, cioè della loro trasformazione in byte per essere trasmessi. In Java RMI, questa classe viene specializzata per gestire la particolarità dei riferimenti remoti. 1. Il metodo reploceobject() sì occupa di sostituire gli oggetti remoti con i loro stub 2. 11 metodo enobleReploceobject() che restituisce un booleano e stabilisce se la istanza deve oppure no specializzare il meccanisso di serializzazione, usando il metodo replaceobject() . 11 metodo annotateCloss() , che permette di inserire informazioni addizionali sulla class che viene usato per specificare 11 codebase e permettere quindi 11 caricamento dinamico È 5. import SUO. ci RePverRemoteStb; 1 pie clk CustomObjsiOutuStel)m entend ObjeeiOupuSte m { , pube CusomObjccupuiStc m(OnpuiSr:m qu$) divo [OExcepion { " saper); " en beep Ole); 4 A I sovituzione dll Detto n Ù 1 Govone ts preci Obi cpl \ccObjco(Otject obj) tirome 10Excpion { se 1) Se 03 et è remoto, esiti 1 suo stub " if (obj instCnecof RemoteOtio) { te retum RemuteStuh oStb((ReoEONe0) obi) » ) » eta Superrep ceObjcc(0b$): al Ù n GOverite ni protected vid Tino: ISCINss(CINs CM) ivows 1OPxcepiion { » ‘YA el doble ne 1 ser izzIzione PI Sti) codebase = "bipexmple combi; n uriteObjc(Codebose); 5) Ù » ) nr 39. PerineDCreil‘CustomObjoiOupuStetm' nell'esercizio on 1 css **Hell®* che BIO viso in 1, possi imo utilizzo nell pe del cin! 0 del server, second di dove volo peo processo di **miImbLlini *® (er. lizz zone sonttuzone deli Let) 36. Seriizazione in Hellosener 37 Beam yOnpuseCm byteStreoa = new ByicAryOsipulSteLmO; OsiplStelm outputStreom = new FikeOuipusie im TemoteObjectse"); CustomObjeiOuipuSteLim custonstreom = nem CistomOBjeiOsipuSte! moutputStreom; * sm PA LeSEreom = new si ice); 11m Anpuestrao® = new » 1m(fA LeStreom); helloDesertalized = (R AnputStreamse 408: AnputStreomcios; Sicurezza in Java RMI * La sicurezza în Java, e in particolare il concetto di sandbox, è stata progettata per proteggere il sistena quando esegue codice potenzialmente non affidabile, come applet 0 applicazioni distribuite. + La sandbox e i quattro livelli di sicurezza sono fondamentali per evitare che il codice remoto acceda a risorse sensibili o esegua operazioni non autorizzate ‘about:blank 8/14 4/25/25, 4:49 PM ‘about:blank accedere alla memoria di Java RMI - Java RMI specificata dal server o sistena Socesi client, fornendo la 2. Bytecode Verifier T1 Bytecode Verifier è un processo che verifica che il fe bytecode (51 codice Intermedio di Java eseguito dalla 3VH) sia conforme alle regole di sicurezza * Verifica del Bytecode: 11 Bytecode Verifier controlla che il bytecode non esegua operazioni irregolari, cone manipolazioni pericolose dello sttack 0 accessi non autorizzati ai canpi privati di altre classi. Questo previene che codice non autorizzato infranga le barriere di sicurezza del Linguaggio, cone 4 controlli di accesso e îl tipo delle variabili © Esenpio di file policy flessibilità di aggiornare il codice senza dover distribuire dele) cina menvalmente tutte le classi. dp Questo garantisce che solo le classi necessarie vengano caricate e în modo sicuro 4. Security Manager e File di Policy 11 Security Manager rappresenta 41 livello finale e più esteso della sicurezza în Java. definisce 1 pernessi di accesso alle risorse e stabilisce quali operazioni sono consentite, utilizzando un file di policy per applicare le restrizioni * File di poliey: Il file di policy specifica le autorizzazioni per operazioni particolari, come l'accesso a File di sistena, risonse di rete, 0 altre operazioni sensibili. Ad esenpio, una policy può permettere solo 1a lettura di una directory specifica 0 limitare l’uso di porte di rete particolari Consente al codice di gere file da una specific directory accede alla rete sun ang di pre Timiuio grone { permission }5v0. to. Fiesso “omelseriose®, “et: permission 151%.1t.SnckelPemision "oc ihos: 102465535" “comes ccp permission jovo.security.AltPermission; 6 il livello minimo di sicurezza Gestione della Memoria e Garbage Collection Distribuita (DGC) * Quando si tratta di AMI, si parla di Distributed Garbage Collection (DSC) e di memory leak perché 1a gestione della menoria diventa più conplessa in un Memory leak Un memory leak si verifica quando la memoria viene allocata per un oggetto, ma quell'oggetto non viene mai deallocato (cioè, non viene rilasciato), anche se non è più utilizzato. ambiente distribuito, rispetto a un contesto locale Distributed Garbage Collection (DGC) In un asbiente locale, la garbage collection (GC) tradizionale di Java libera autonaticamente la nenoria degli oggetti non più referenziati. Tuttavia, în un sistena distribuito come RMI, la 10/14 4/25/25, 4:49 PM Java RMI - Java RMI ‘about:blank 11/14 4/25/25, 4:49 PM Java RMI - Java RMI ‘about:blank 13/14 4/25/25, 4:49 PM Java RMI - Java RMI ‘about:blank 14/14