UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA Facoltà di Ingegneria Corso di laurea in Ingegneria Informatica JINI: una tecnologia Java innovativa per i servizi di rete Relatore: Chiar.ma Prof.ssa Letizia Leonardi Laureando: Pietro Marchesani _______________________________ Anno Accademico 1998/99 INDICE INTRODUZIONE 1. DISCUSSIONE DI MASSIMA SULLA TECNOLOGIA JINI 1.1 COS’È JINI 1.2 REQUISITI 1.3 COME TROVARE ED UTILIZZARE UN SERVIZIO 1.4 DISPONIBILITÀ E TEMPO DI UTILIZZO DI UN SERVIZIO 1.5 SUPPORTO TRANSAZIONALE 2. I FONDAMENTI DELLA TECNOLOGIA JINI 2.1 I PROTOCOLLI DI DISCOVERY E DI JOIN 2.1.1 Il multicast request protocol 2.1.2 Il multicast announcement protocol 2.1.3 L’unicast discovery protocol 2.2 PROBLEMATICHE DI RETE 2.3 ARCHITETTURA DEI DISPOSITIVI JINI 2.3.1 I proxY 2.4 IL JINI LOOKUP SERVICE 2.4.1 Il modello del Lookup Service 2.4.2 Gli attributi 2.4.3 Problemi di progettazione 2.5 ENTRY E TEMPLATE 2.5.1 Le operazioni 2.5.2 Entry 2.5.3 Serializzazione degli oggetti Entry 2.5.4 Template e Matching 2.6 GLI EVENTI DISTRIBUITI 2.7 IL LEASING 2.7.1 Il leasing e i sistemi distribuiti 2.8 LE TRANSAZIONI 2.8.1 Modello e terminologia 2.8.2 Transazioni distribuite e le proprietà ACID 3. I PROTOCOLLI DI DISCOVERY E DI JOIN 3.1 IL FORMATO DEI PACCHETTI DI DATI NEL MULTICAST DISCOVERY PROTOCOL 3.2 IL FORMATO DEI PACCHETTI DI DATI NEL MULTICAST ANNOUNCEMENT PROTOCOL 3.3 IL FORMATO DEI PACCHETTI DI DATI NELL'UNICAST DISCOVERY PROTOCOL 3.4 INFORMAZIONI PERSISTENTI NEL PROTOCOLLO DI JOIN 3.5 LE FASI DEL PROTOCOLLO DI JOIN 4. LE UTILITY DI SUPPORTO ALLA PROGRAMMAZIONE 4.1 L'INTERFACCIA SERVICEREGISTRAR 4.1.1 La classe ServiceItem 4.1.2 La classe ServiceTemplate 4.1.3 La classe ServiceMatches 4.2 LE INTERFACCE PER IL DISCOVERY 4.2.1 L'interfaccia DiscoveryManagement 4.2.2 L'interfaccia DiscoveryGroupManagement 4.2.3 L'interfaccia DiscoveryLocatorManagement 4.3 L'UTILITY LOOKUPLOCATORDISCOVERY ii 4.4 L'UTILITY LOOKUPDISCOVERYMANAGER 4.4.1 L'interfaccia DiscoveryListener 4.4.2 La classe DiscoveryEvent 4.5 L'UTILITY LEASERENEWALMANAGER 4.5.1 L'interfaccia LeaseListener 4.5.2 La classe LeaseRenewalEvent 4.6 L'UTILITY JOINMANAGER 4.6.1 L'interfaccia ServiceIDListener 4.7 L'UTILITY CLIENTLOOKUPMANAGER 4.7.1 L'interfaccia ServiceItemFilter 4.7.2 La classe ServiceDiscoveryEvent 4.7.3 L'interfaccia ServiceDiscoveryListener 4.7.4 L'interfaccia LookupCache 5. I SERVIZI DI SUPPORTO ALLA PROGRAMMAZIONE 5.1 IL LOOKUPDISCOVERYSERVICE 5.1.1 L'interfaccia LookupDiscoveryRegistration 5.1.2 La classe RemoteDiscoveryEvent 5.2 IL LEASERENEWALSERVICE 5.2.1 La classe ExpirationWarningEvent 5.2.2 La classe RenewalFailureEvent 5.3 L'EVENTMAILBOX 5.3.1 L'interfaccia MailboxRegistration 6. PRINT SERVICE: DESCRIZIONE GENERALE 6.1 UTILIZZO DEL JINI SERVICE FINDER 6.2 LE FUNZIONI DEL PRINT SERVICE 6.3 PERSISTENZA DEI DATI 6.4 GESTIONE DELLE CODE DI STAMPA 6.5 ULTERIORI POSSIBILITÀ IMPLEMENTATIVE 6.6 CARATTERISTICHE DELLA STAMPA IN JAVA 6.7 UTILIZZO DELL’RMI E DELL’HTTP SERVER CLASS 6.8 SCHEMA DI FUNZIONAMENTO 6.10 SUPPORTO ALL’INTERNAZIONALIZZAZIONE DEL CODICE 7. PRINT SERVICE: DESCRIZIONE DETTAGLIATA 7.1 DIAGRAMMA DELLE CLASSI 7.2 DIAGRAMMA SEQUENZIALE 7.3 L’INTERFACCIA PRINTSERVICE 7.4 LA CLASSE PRINTSERVICEPROXY 7.5 L’INTERFACCIA PRINTSERVICEADMIN 7.6 LA CLASSE PRINTSERVICEADMINPROXY 7.7 L’INTERFACCIA WIREDINTERFACE 7.8 LA CLASSE PRINTSERVICEIMPL 7.9 LA CLASSE PRINTSERVICEGUIENTRY 7.10 LA CLASSE PRINTSERVICEADMINIGUIENTRY 7.11 LA CLASSE PRINTCOMPONENT 7.12 LA CLASSE QUEUEFILES 7.13 LA CLASSE PRINTERSERVER 7.14 LE CLASSI DI RISORSE CONCLUSIONI LIMITI ATTUALI DELLA TECNOLOGIA ASPETTATIVE E SVILUPPI FUTURI iii APPENDICI A. SUDDIVISIONE DEL SOFTWARE DI SUPPORTO B. UTILIZZO DEL LOOKUP SERVICE, DELL’HTTP SERVER E DEL LOOKUP BROWSER PRESENTI NEL JSK C. TRANSAZIONI: LE SEMANTICHE PREDEFINITE D. JINI SERVICE FINDER: IL CLIENT JINI DISTRIBUITO DA OKI D-1 IL PANNELO REGISTRARS D-2 IL PANNELLO SERVICE TYPES D-3 IL PANNELLO ATTRIBUTES D-4 PANNELLO DI MACH D-5 VISUALIZZAZIONE DELLA FINESTRA DEL SERVIZIO D-6 GUI PREDEFINITE PER I SERVIZI D-7 AVVIO DEL FINDER E. COME CREARE UNA GUI SPECIFICA PER IL SERVIZIO E-1 L'INTERFACCIA SERVICEGUI E-2 COME AGGIUNGERE INTERFACCE GUI STANDARD iv Introduzione L'evolversi dei sistemi di elaborazione distribuita e l'esigenza di sviluppare applicazioni multi-piattaforma, hanno determinato la rapida diffusione del linguaggio di programmazione Java. La nascita della tecnologia Jini permette, inoltre, di sviluppare servizi di rete distribuiti basati su Java, i quali operano su piattaforme eterogenee. Le reti eterogenee, come Internet fra le altre, presentano numerose problematiche, prima fra tutte l'incompatibilità fra i vari sistemi. Nelle grosse reti, WAN o MAN, possono essere presenti numerose sottoreti con caratteristiche completamente differenti. Queste potrebbero avere complessità strutturali differenti, adottare elaboratori differenti e persino sistemi operativi diversi. In un contesto del genere non è semplice realizzare dei servizi utilizzabili dagli utenti dei vari sistemi senza creare frequenti crash o cadute di prestazioni. Inoltre, i servizi presenti dovrebbero poter essere utilizzati sia dall'utente esperto che dal principiante senza troppe difficoltà. Quindi, da un lato i servizi dovrebbero essere semplici da utilizzare per facilitarne la diffusione, dall'altro dovrebbero presentare un'alta tolleranza ai guasti per fornire un'elevata continuità di servizio. Si intuisce, dunque, che la soluzione a questo tipo di problematiche può non essere semplice. Il linguaggio di programmazione Java fornisce la soluzione ad alcuni dei problemi sopra citati. In particolar modo elimina le preoccupazioni legate all'eterogeneità dei sistemi. Infatti, un'applicazione Java è eseguibile su un gran numero di piattaforme. Resta comunque il problema della localizzazione dei servizi, della loro interazione e della semplicità d'utilizzo. Tali problematiche potrebbero essere risolte ricorrendo alla tecnologia Jini: infatti, "Jini comincia, dove Java finisce". Poiché la tecnologia Jini si basa interamente su Java, i servizi realizzati saranno multi-piattaforma. Jini però fa molto di più. Infatti, rivisitando concetti noti come le architetture client-server, i registri centralizzati, ecc., fornisce una soluzione alla localizzazione dei servizi ed al loro utilizzo, rendendo il tutto semplice e allo stesso tempo graficamente accattivante. Oltre alle caratteristiche sopra citate e all'elevata tolleranza ai guasti, l'altra caratteristica di sicuro interesse è la possibilità di utilizzare i protocolli TCP/IP per il trasporto dei dati e la comunicazione fra le entità con il grosso vantaggio di poter sfruttare l'infrastruttura della rete Internet, senza doverne creare una ad hoc. Sfruttando l'infrastruttura Internet, verrebbe notevolmente semplificato, ad esempio, l'utilizzo di un servizio sito a migliaia di chilometri di distanza. Nella presente tesi si passeranno in rassegna queste ed altre caratteristiche della tecnologia, mettendo in evidenza le innovazioni apportate alla realizzazione dei servizi di rete e si tratteranno le specifiche di questa nuova tecnologia. Per dimostrare le potenzialità di questa tecnologia è stata realizzata un'applicazione d'esempio che viene discussa nei capitoli finali e che permetterà di comprendere meglio le numerose differenze dalle applicazioni di tipo tradizionale evidenziandone pregi e difetti. La tesi è organizzata in sette capitoli. Nel primo capitolo viene fornita una descrizione di massima della tecnologia Jini cercando di coglierne le innovazioni più salienti. v Nel secondo capitolo si discuno le specifiche tecniche, trattando tutti gli aspetti funzionali di un servizio Jini: protocolli di comunicazione, attributi, lease, proxy, transazioni, ecc. Ampio spazio viene dato all'entità fondamentale di una rete Jini: il lookup service. Il capitolo tre definisce nel dettaglio i due procolli fondamentali della tecnologia Jini: join e discovery. Verranno analizzati i vari formati dei pacchetti di dati e verrano prese in cosiderazione le diverse fasi che caratterizzano i due protocolli. Il quarto ed il quinto capitolo descrivono le utility presenti nella nuova release Jini (attualmente in alpha draft 2), le quali semplificheranno la realizzazione di servizi di rete in tecnologia Jini. A partire dalla prossima release, infatti, saranno disponibili numerose utility e servizi che permetteranno di realizzare servizi complessi con minore sforzo, ma soprattutto permetteranno di realizzare agevolmente una serie di servizi di aiuto che potranno gestire la maggiorparte delle problematiche connesse alla tecnologia Jini per conto di altri servizi. Nel capitolo sei viene data una descrizione di massima dell'applicazione specifica realizzata (un servizio di stampa). Ne vengono evidenziate le caratteristiche principali e i problemi incontrati nella fase implementativa. Il capitolo successivo descrive nel dettaglio il servizio realizzato. Vengono discusse le classi ed interfacce sviluppate, i metodi implementati, le porzioni di codice di maggiore interesse e alcune caratteristiche interessanti proprie del linguaggio Java. Sono inoltre presenti una serie di appendici: alcune trattano in maniera dettagliata aspetti legati alla tecnologia Jini, altre intendono essere di supporto ad un efficiente utilizzo della tecnologia e del relativo software. Nei vari capitoli si è cercato di trattare sia gli aspetti generali della tecnologia, in modo da avere una visione generale per meglio comprenderne le potenzialità, sia gli aspetti più specifici, in modo da fornire gli strumenti necessari per lo sviluppo completo di servizi di rete utilizzando la tecnologia Jini. vi