Ci si addentra in Jini e JavaSpaces, due scenari che fino a poco tempo prima apparivano inimmaginabili e che dovrebbero rivoluzionare il mondo della programmazione distribuita.
In questa serie di articoli si vede la teoria, ma soprattutto la pratica, della tecnologia Jini e in particolare dei JavaSpaces, analizzandone caratteristiche e facendo una panoramica sulle enormi potenzialità offerte.
Prefazione
Per chi fosse digiuno di Jini, l'argomento trattato è la famigerata distributed computing.
Jini è una tecnologia Java basata sul concetto di federazione di dispositivi. In pratica una rete Jini è composta da una serie di entità in grado di fornire servizi, computer, stampanti, scanner, programmi e così via, che al loro ingresso nella rete si registrano comunicando la loro presenza a tutta la rete e rendendo altresì disponibili i driver per il loro utilizzo.
Nel momento in cui una macchina accede alla federazione, tramite un servizio di lookup ha la possibilità di sapere quali servizi sono resi disponibili e da chi. A questo punto, privilegi permettendo, è in grado di accedervi e di utilizzarli.
JavaSpaces è una tecnologia Jini basata sulla creazione di spazi virtuali, gli Spaces, in grado di ospitare oggetti. Tramite questi spazi condivisi e accessibili in rete, diversi applicativi possono comunicare scambiandosi dati.
La cosa si fa molto più interessante se si considera che gli oggetti ospitati in un JavaSpace possono anche essere codice, che la tecnologia mette a disposizione spazi virtuali sia estemporanei sia persistenti, cioè in grado di conservare i dati anche in seguito ad un crash, che è già implementata la gestione delle transazioni e che gli applicativi che vi accedono possono risiedere su macchine diverse.
In pratica si ha in mano uno strumento che permette di costruire applicativi distribuiti con una semplicità notevole senza rinunciare a caratteristiche di sicurezza ed affidabilità.
Uno degli infiniti campi di applicazione degli Spaces è l'elaborazione distribuita di dati, ad esempio il rendering di realtà virtuale. Si può immaginare un processo server che suddivide il lavoro in una serie di task e mette i task in uno Space. I client prendono ciascuno un task, lo elaborano e ne restituiscono poi il risultato. Quando tutti i task sono stati completati, il server può prendere tutti i risultati parziali e comporre quello finale.
L'unica nota dolente è l'installazione: la preparazione dell'ambiente richiede l'installazione di tutta una serie di package, quelli di Jini.
Introduzione all'API
La vera potenza degli Spaces sta nella loro semplicità di utilizzo. Fondamentalmente le operazioni possibili su un oggetto che stia in uno Space sono:
Quindi si può leggere un oggetto, in pratica prenderne una copia lasciando l'originale nello Space, scriverlo, oppure prenderlo con take, che equivale a leggerlo sottraendolo allo Space.
L'articolo passa poi a un primo semplice esempio di utilizzo della API, immaginando uno Space usato per la pubblicazione di annunci di vendita di oggetti.
Per rappresentare l'inserzione vera e propria da scrivere nello Space, viene introdotto un oggetto che implementa Entry:
import net.jini.core.entry.Entry;
public class Inserzione implements Entry {
public String Categoria;
public String Descrizione;
Conclusioni
Questa prima parte ha soprattutto il compito di far percepire il cambio di paradigma introdotto da JavaSpaces: non solo oggetti remoti invocati, ma spazi condivisi in cui leggere, scrivere e prelevare entry.
È proprio la combinazione tra semplicità delle operazioni base e potenza degli scenari distribuiti che rende JavaSpaces uno degli aspetti più affascinanti dell'universo Jini.