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