Realizzazione di uno strumen web-based per la simulazione reti di

Facoltà di Ingegneria
Corso di Studi in Ingegneria Informatica
tesi di laurea
Realizzazione di uno strumento
web-based
based per la simulazione remota di
reti di sensori senza filo
Anno Accademico 2009/2010
relatore
Ch.mo prof. Marcello Cinque
correlatore
ing. Catello Di Martino
candidato
Luigi, Paolo Rossi
matr. 534 000 308
A mio padre e mia madre
Non aetate verum ingenio apiscitur sapientia.
Indice
Introduzione
4
Capitolo 1. Wireless Sensor Network: Modellazione e Simulazione
1.1
Wireless Sensor Networks: Reti di Sensori senza filo
1.2
Progettare e Simulare una WSN
1.3
Il Tool Failure Model WSN Generator
1.3.1
Il simulatore Mobius
1.3.2
La topologia della rete
1.4
Motivazioni del remoting nella simulazione di WSN
7
7
11
19
21
22
24
Capitolo 2. Analisi dei Requisiti e Progettazione
2.1
Web Model WSN Generator: concetti chiave
2.2
Casi d’uso
2.3
Diminuire l’accoppiamento
2.3.1
La classe AmbientVar
2.3.2
Logging
27
27
31
33
35
36
Capitolo 3. Tecnologie e Strumenti per le Rich Internet Applications
3.1
Le RIA e metriche di valutazione
3.1.1
AJAX e JavaScript
3.1.2
Caratteristiche e metriche di valutazione dei framework
3.2
Java Server Pages e IceFaces
3.3
Openlaszlo
3.4
Adobe Flex
3.5
Echo 3
3.6
Google Web Toolkit
3.7
Apache Click
38
38
40
43
44
48
50
52
54
57
Capitolo 4. ZK Framework
4.1
Direct RIA: cos’è ZK Framework
4.2
Caratteristiche principali di ZK Framework
4.3
Integrazione con Java: il funzionamento di ZK Framework
4.3.1
Framework Server-Centrico
Server
e Client-Centrico
4.4
Estensibilità: MVC, Spring, Hibernate ed Integrazione
4.4.1
Il Pattern MVC con ZK
4.4.2
Spring con ZK
4.4.3
Hibernate con ZK
59
59
61
62
65
67
67
71
73
II
4.4.4
Integrare linguaggi in ZK
4.5
Qualità del supporto: ZK Forge e case studies
4.6
Curva di apprendimento: programming skills e linguaggio ZUML
ZUML
4.7
Strumenti di supporto: i tool di ZK
4.8
Costi di sviluppo: le versioni disponibili
Capitolo 5. Implementazione del tool
5.1
Pattern MVC e struttura della RIA
5.2
Le classi controller
5.3
Classi di utilità del tool web-based
web
5.4
La view ed i file ZUL
5.5
Il Disegno della Topologia: draw2d
5.6
Esempi di funzionamento
75
76
77
78
81
82
82
84
85
86
88
91
Conclusioni
Bibliografia
Sitografia
95
97
98
III
Introduzione
I recenti sviluppi nel campo delle reti di sensori senza filo hanno ampliato lo spettro delle
loro possibili applicazioni, l'efficienza di monitoraggio e i loro costi di sviluppo e di
produzione.
Se da una parte tale progresso ha portato a dei risultati sicuramente ottimali riguardo la
loro applicazione concreta nel settore delle reti wireless, d'altro canto non può non essere
osservato che tale procedimento innovativo ha condotto ad un diverso approccio nella
progettazione, modellazione e simulazione delle Wireless Sensor Networks. Ciò in ragione
della difficoltà di gestire un numero elevato di nodi sensore, ed inoltre, nei costi in termini
economici e di tempo per testare in maniera pratica il funzionamento di questi
microsistemi al fine di valutarne l'efficienza della trasmissione, l'affidabilità e la tolleranza
ai guasti.
In ragione di quanto appena affermato nella prassi applicativa delle Wireless Sensor
network (WSN), si è posta l'esigenza della modellazione del sistema da implementare e
della simulazione dello stesso al fine di valutare i risultati ottenuti e correggere le scelte
effettuate riguardo la loro progettazione nelle varie modalità di utilizzo.
In tal senso è stata diretta l'attività del laboratorio Mobilab del Dipertimento di Informatica
e Sistemistica, il quale ha apportato un notevole contributo sia nell'approccio della
modellazione e simulazione dei sistemi WSN, sia nell'implementazione di framework e
strumenti software.
Nel procedere a tale attività il suddetto laboratorio ha adottato un metodo che si basa sulla
4
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
necessità di valutare a priori l’affidabilità dei sistemi, ricorrendo a modelli che possano
rappresentare adeguatamente le caratteristiche rilevanti del sistema stesso e a metriche e
tecniche di valutazione dell’affidabilità. In seguito tale attività si è concretizzata
nell'implementazione di un tool per la generazione automatica di modelli di fallimento.
Nell'ambito di tale lavoro sono emerse delle problematiche riguardo agli utilizzi di questo
strumento software con i framework di sviluppo WSN che sono stati progettati e sviluppati
dal Mobilab, poiché tali applicazioni richiedono notevoli risorse di calcolo nonché
determinano difficoltà in ordine alla configurazione dei software e distribuzione degli
stessi agli utenti finali.
E' nata, pertanto, l'esigenza di convogliare questi strumenti ed in particolare il tool di
generazione automatica dei modelli di fallimento, in un ambiente operativo che abbia
determinate caratteristiche: immediata disponibilità, estensibilità, facile manutenibilità,
sicurezza dei dati, minore carico computazionale, riduzione costi di gestione e
accessibilità.
Si è resa, inoltre, l'esigenza di associare alle suddette caratteristiche una funzionalità che
permetta allo sviluppatore WSN di riprodurre graficamente la topologia della rete da
modellare e simulare senza l'utilizzo di ulteriori strumenti software.
Le suddette caratteristiche hanno portato alla realizzazione di uno strumento web-based
per la simulazione e modellazione remota di reti di sensori senza filo che è oggetto di
trattazione del seguente lavoro di tesi.
Al fine di pervenire alla realizzazione di tale strumento sono state effettuate delle ricerche
sulle tecnologie più diffuse per la realizzazione di applicazioni web che presentano più
elementi di somiglianza in ordine al loro comportamento e alla visualizzazione degli
applicativi desktop tradizionali, ovvero più simili non ad una web application tradizionale
ma ad una RIA (Rich Internet Application) al fine di rendere più agevole l'utilizzo dello
stesso nei confronti dell'utente finale.
Al fine di addivenire a tale risultato si è reso necessario strutturare tale lavoro di tesi nel
seguente modo: il Cap. 1 è dedicato ad una panoramica delle wireless sensor network,
delle motivazioni che portano al remoting nella simulazione di WSN ed introduce il lettore
5
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
al dominio del problema. La progettazione e le scelte principali che sono state effettuate in
ordine all'implementazione del suddetto strumento software sono poste ad oggetto del
Cap. 2, nel quale contemporaneamente si procede alla analisi dei suoi requisiti. La
progettazione della applicazione web procede nel Cap. 3, attraverso una panoramica delle
tecnologie più diffuse per lo sviluppo delle RIA alla stregua delle seguenti metriche di
valutazione: integrazione con Java, estensibilità, qualità del supporto, curva di
apprendimento, strumenti di supporto e costi di sviluppo. Il Cap. 4 è dedicato al
framework ZK procedendo allo studio delle sue caratteristiche, del suo funzionamento e
delle sue potenzialità applicative sfruttate in combinazione con il tool web-based
implementato. Tale iter progettuale si concretizza nel Cap. 5, il quale è completamente
dedicato alla implementazione del tool, nonché all’esposizione della funzionalità disegno
della topologia della WSN e su come si è utilizzato il framework per realizzarla.
6
Capitolo 1
Wireless Sensor Network: Modellazione e Simulazione
1.1 Wireless Sensor Networks: Reti di Sensori senza filo
I recenti progressi tecnologici nei sistemi MEMS (Micro Electro Mechanical System),
nelle comunicazioni wireless e nell'elettronica digitale hanno permesso lo sviluppo di
piccoli apparecchi a bassa potenza dai costi contenuti, multifunzionali e capaci di
comunicare tra loro tramite tecnologia wireless a raggio limitato. Questi piccoli
apparecchi, chiamati nodi sensori, sono formati da componenti in grado di rilevare
grandezze fisiche (sensori di posizione, temperatura, umidità ecc.), di elaborare dati e di
comunicare tra loro. Un sensore è comunemente definito come un particolare trasduttore
che si trova in diretta interazione con il sistema misurato.
Una rete di sensori (detta anche sensor network) è un insieme di sensori disposti in
prossimità oppure all'interno del fenomeno da osservare. Questi piccoli dispositivi sono
prodotti e distribuiti in massa, hanno un costo di produzione trascurabile e sono
caratterizzati da dimensioni e pesi molto ridotti. Ogni sensore ha una riserva d'energia
limitata e non rinnovabile e, una volta messo in opera, deve lavorare autonomamente; per
questo motivo tali dispositivi devono mantenere costantemente i consumi molto bassi, in
modo da avere un maggior ciclo di vita. Per ottenere la maggior quantità possibile di dati
occorre effettuare una massiccia distribuzione di sensori (nell'ordine delle migliaia o
decine di migliaia) in modo da avere una alta densità (fino a 20 nodi/m3) e far sì che i nodi
siano tutti vicini tra loro, condizione necessaria affinché possano comunicare.
7
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
Fig. 1.1 – un esempio di Wireless Sensor Network – monitoraggio incendi
Una delle più comuni applicazioni in cui è possibile far uso di una rete di sensori consiste
nel monitoraggio di ambienti fisici come il traffico in una grande città oppure dati rilevati
da un'area disastrata da un terremoto.
I nodi sensore all'interno di una rete hanno la possibilità di collaborare tra loro dal
momento che sono provvisti di un processore on-board; grazie a quest'ultimo, ciascun
nodo, invece di inviare dati grezzi ai nodi responsabili della raccolta dei dati, può
effettuare delle semplici elaborazioni e trasmettere solo i dati richiesti e già elaborati.
La comunicazione, realizzata tramite tecnologia wireless a corto raggio, è solitamente di
tipo asimmetrico in quanto i nodi comuni inviano le informazioni raccolte ad uno o più
nodi speciali della rete, detti nodi sink, i quali hanno lo scopo di raccogliere i dati e
trasmetterli tipicamente ad un server o ad un calcolatore. Una comunicazione può avvenire
autonomamente da parte del nodo quando si verifica un dato evento, o può venire indotta
dal nodo sink tramite l'invio di una query verso i nodi interessati.
Le reti di sensori possono essere utilizzate in numerose applicazioni; tuttavia la
8
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
realizzazione di queste ultime richiede l'uso di tecniche utilizzate anche nelle reti wireless
ad hoc. Sfortunatamente, molti degli algoritmi usati nelle reti ad hoc non sono compatibili
con i requisiti di questo tipo di reti. I principali motivi derivano dal fatto che:
 Il numero di nodi che compongono una rete di sensori può essere di alcuni ordini di
grandezza maggiore rispetto al numero di nodi in una rete ad hoc
 I nodi sono disposti con un’alta densità
 I nodi sono soggetti a guasti
 La topologia di una rete di sensori può cambiare frequentemente a causa di guasti ai
nodi o della loro mobilità
 I nodi utilizzano un paradigma di comunicazione broadcast mentre la maggior parte
delle reti ad hoc sono basate su una comunicazione di tipo punto-punto
 I nodi sono limitati rispetto ad alimentazione, capacità di calcolo e memoria
 I nodi solitamente non possiedono un identificatore globale (come l’indirizzo IP dei
computer)
 I nodi necessitano di una stretta integrazione con le attività di rilevamento
Per questo motivo, questa tipologia di rete necessita di algoritmi pensati e realizzati in
maniera specifica per gestire la comunicazione e l’instradamento dei dati.
Le reti di sensori possono migliorare in modo significativo la qualità delle informazioni:
ad esempio possono garantire una elevata fedeltà, possono fornire informazioni in tempo
reale anche da ambienti ostili e possono ridurre i costi di trasmissione delle stesse
informazioni.
Lo scopo fondamentale di una rete di sensori è di produrre su un periodo esteso di tempo,
una informazione globale significativa ottenuta da una serie di dati locali provenienti dai
singoli sensori. È importante notare che la rete deve essere realizzata in modo da
garantirne l'integrità per un periodo di tempo che sia il più lungo possibile, allo scopo di
ottenere informazioni accurate anche in caso di attacco alla rete da parte di organi esterni o
di cedimenti hardware.
Il fatto che un singolo sensore sia dotato di una piccola quantità di energia non deve
impedirgli di inviare le informazioni elaborate, che verranno raccolte e unite alle
9
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
informazioni provenienti dagli altri sensori. Un'importante via da seguire consiste nel
rilevare il maggior quantitativo possibile di dati locali, evitando la trasmissione dei dati
inefficienti attraverso la rete.
Una rete di sensori quindi può essere vista come un insieme di sensori di diverso tipo
capaci di rilevare grandezze come temperatura, umidità, pressione, luce, ma anche capaci
di rilevare il movimento di veicoli, la composizione del terreno, livello di rumore, etc.
Sono tantissime le applicazioni in cui possono essere impiegate WSN rispetto ad altre
soluzioni, per migliorarne l’affidabilità e ridurne i costi.
I principali impieghi, ad esempio, possiamo trovarli negli ambiti militari, ambientali,
sanitari, casalinghi e commerciali.
Nell’ambito militare le possibili applicazioni vanno dal monitoraggio di forze alleate,
equipaggiamenti e munizioni alla sorveglianza del campo di battaglia. E’ possibile usare
una rete di sensori per effettuare il riconoscimento di nemici, la stima dei danni di una
battaglia oppure il riconoscimento del tipo di attacco (nucleare, biologico o chimico).
Questo col vantaggio che, essendo una rete di sensori basata su una disposizione densa di
nodi monouso ed a basso costo, la distruzione di alcuni nodi da parte del nemico non
danneggia le operazioni militari come potrebbe accadere con la distruzione di sensori
tradizionali.
Nell’ambito ambientale, le reti di sensori potrebbero essere utilizzate per effettuare il
monitoraggio di una foresta e rilevare prontamente eventuali incendi, per la previsione e
rilevazione di inondazioni, oppure per il monitoraggio del movimento di uccelli, piccoli
animali, insetti con l’obiettivo di studiarne l’habitat e il loro comportamento. Più nello
specifico, le reti di sensori possono essere utilizzate in ambito ambientale nell'agricoltura
di precisione: monitorare il livello dei pesticidi nell'acqua, il livello di erosione del terreno
e il grado di inquinamento dell'aria in tempo reale. Sempre nel settore ambientale, le reti di
sensori possono essere di interesse per studiare gli spostamenti ed il dinamismo all'interno
dei ghiacciai. A tal proposito i sensori vengono distribuiti all'interno del ghiaccio a
profondità differenti. I sensori sono capaci di rilevare temperatura e pressione
comunicando con una stazione base posizionata in cima al ghiacciaio che provvederà al
10
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
trasferimento di questi a chi di competenza.
Nell’ambito sanitario gli utilizzi delle reti di sensori sono rivolte a fornire un'interfaccia
per le persone affette da handicap, al monitoraggio di dati fisiologici, all'amministrazione
ospedaliera sia essa relativa ai pazienti che ai medici (per una facile rintracciabilità).
Inoltre è anche possibile usare i sensori per l'identificazione di allergie.
L’utilizzo di una rete di sensori in ambito domestico è potrebbe focalizzarsi
sull'automazione delle abitazioni: l’utilizzi di nodi, inseriti anche negli elettrodomestici,
possono interagire l'uno con l'altro e anche con reti esterne tramite l'utilizzo di internet o
del satellite permettendo la gestione dell’habitat familiare anche da distanze remote.
L'ambiente domestico viene ad assumere così le stesse caratteristiche di un piccolo centro
fornito di una rete in grado di mettere in comunicazione tra loro tutti i vari strumenti di cui
l'ambiente è composto.
In ambito commerciale l’utilizzo di WSN abbraccia i campi più disparati: controllo
ambientale di uffici, rilevamento furti d’auto, rilevamento della posizione e del movimento
dei veicoli (car tracking), monitoraggio del traffico, monitoraggio del consumo energetico
di uffici e abitazioni, etc.
1.2 Progettare e Simulare una WSN
La progettazione di una rete di sensori è influenzata da molti fattori che non solo sono
necessari per la progettazione della rete, ma influenzano a loro volta la scelta degli
algoritmi utilizzati nella rete stessa. Tra i più importanti citiamo:
 Tolleranza ai gusti:
Nella rete di sensori c'è la possibilità che alcuni nodi della rete siano affetti da
malfunzionamenti o guasti le cui cause possono essere danni fisici, interferenze o
batterie scariche. La tolleranza ai guasti è la capacità di far funzionare una rete di
sensori anche in caso di malfunzionamento da parte di alcuni nodi. I protocolli e gli
algoritmi possono essere progettati in modo da garantire il livello di tolleranza ai
guasti richiesto dalla rete. Il livello di tolleranza dipende fortemente dall'applicazione
in cui viene utilizzata la rete di sensori (uso militare, domestico, commerciale, etc...).
11
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
 Scalabilità
Il sistema deve essere in grado di funzionare anche all'aumentare del numero di nodi
(che possono andare da un basso numero di unità, fino ad arrivare a qualche milione
di sensori). La scalabilità può essere ottenuta anche sfruttando la natura densa delle
reti di sensori.
 Costi di produzione
Poiché una rete di sensori è formata da un grande numero di nodi, il costo di un
singolo nodo è molto importante. Se il costo della rete è maggiore rispetto all'utilizzo
dei sensori tradizionali allora l'uso di una rete di sensori non è giustificabile. Il costo
di un nodo sensore dovrebbe perciò essere abbastanza basso: un obbiettivo non molto
facile da raggiungere in quanto un nodo ha spesso molte unità hardware: processore,
campionatore, GPS, sistema radio e sensori di vario genere, e tutte queste cose
portano ad un incremento del costo di un sensore.
 Ambiente Operativo
I sensori sono disposti molto vicino o addirittura all'interno del fenomeno da
osservare. Perciò, spesso, si trovano a lavorare in zone geografiche remote (es:
all'interno di un macchinario, in fondo all'oceano, sulla superficie dell'oceano durante
un tornado, in una zona biologicamente o chimicamente contaminata, in un campo di
battaglia etc..) e senza la supervisione dell'uomo. Tutto ciò dà un'idea delle condizioni
sotto le quali i sensori devono essere capaci di funzionare (devono sopportare alte
pressioni se lavorano in fondo all'oceano, alte o basse temperature etc..).
 Topologia della rete
Un gran numero di nodi sono disposti l'uno accanto all'altro a volte anche con un'alta
densità. Questo richiede un'attenta attività per il mantenimento della topologia. Il
mantenimento e il cambiamento della topologia può essere diviso in tre fasi:
i) Pre-deployment e deployment phase: i sensori possono essere sia gettati sia disposti
uno ad uno nell'ambiente; infatti possono essere gettati da un aereo, da una catapulta,
collocati uno ad uno da un robot o da una persona umana.
ii) Post-deployment phase: i cambiamenti topologici della rete sono dovuti al
12
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
cambiamento della posizione dei nodi, oppure alla variazione della raggiungibilità di
un nodo, dell'energia disponibile, alla presenza di malfunzionamenti etc...
iii) Re-deployment of additional nodes phase: nodi sensore addizionali possono essere
ridisposti in qualsiasi momento per rimpiazzare i nodi malfunzionanti o a causa della
dinamica dei task. L'aggiunta di nuovi nodi comporta la necessità di riorganizzare la
rete. L'alta frequenza di cambiamenti topologici e il vincolo stringente del risparmio
energetico richiedono protocolli di routing molto particolari.
 Consumo energetico
Un sensore è dotato di una limitata sorgente di energia. Il tempo di vita di un nodo
sensore dipende molto dal tempo di vita della batteria. In una rete di sensori ogni nodo
ha il ruolo sia di generare che di ricevere dati, perciò la scomparsa di alcuni nodi può
portare a significativi cambiamenti topologici che possono richiedere una
riorganizzazione della rete e del routing. È per queste ragioni che molte ricerche si
stanno concentrando sulla creazione di protocolli e algoritmi power-aware, cioè
protocolli che ottimizzano il consumo energetico. Mentre nelle reti mobili e nelle reti
ad hoc il consumo di energia è un importante fattore ma non è il principale (che risulta
invece il soddisfacimento della QoS, cioè della qualità del servizio), nelle reti
sensoriali il consumo di energia è la principale metrica per valutare le performance:
questo perché nelle altre reti è possibile ricaricare o cambiare le batterie dei nodi
mentre nelle reti sensoriali una volta che la batteria è scarica il nodo è da considerarsi
morto. Il consumo di energia in un nodo sensore è essenzialmente dovuto alle tre
principali attività svolte dal nodo:
i) Sensing: la potenza necessaria per effettuare il campionamento dipende dalla natura
dell'applicazione;
ii) Data processing: l'energia spesa nel processare i dati è molto piccola se comparata
a quella spesa per la comunicazione;
iii) Communication: dei tre fattori è quello che necessita della maggior quantità di
energia. La comunicazione comprende sia la ricezione che la trasmissione di dati i cui
costi energetici possono essere ritenuti uguali.
13
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
Un ultimo fattore, importantissimo per la progettazione di una rete di sensori, è
l’affidabilità (in inglese dependability).
Esprimendo questo fattore nel senso più ampio di “sistema”, possiamo dire che un sistema
è detto dependable se esibisce una probabilità alta di comportarsi così com'è definito nella
sua specifica, ovvero l'abilità di un sistema di fornire un servizio che può essere
considerato "fidato" in maniera giustificata. Il concetto di dependability viene solitamente
utilizzato (insieme ad altri concetti che caratterizzano la cosiddetta “qualità del sistema”)
come concetto base per definire sia la specifica che il rispetto della specifica da parte del
sistema; nel fare ciò diviene fondamentale poter valutare la dependability attraverso
opportune tecniche.
La valutazione della dependability costituisce un’operazione utile e versatile in ogni fase
del ciclo di vita di un sistema. Durante la fase di progettazione può conferire fiducia nelle
scelte progettuali effettuate, validando e confrontando le diverse soluzioni individuate,
durante la vita operativa del sistema permette di rilevare eventuali colli di bottiglia per
l’affidabilità e suggerisce quali siano le soluzioni da adottare in future revisioni. Per poter
effettuare una valutazione della dependability è necessario poter valutare caratteristiche sia
qualitative che quantitative del sistema. Soffermandosi su quest’ultime, le tecniche di
analisi quantitativa si possono classificare in tecniche basate su misure e tecniche
modellistiche, a loro volta suddividibili in tecniche analitiche e simulative.
 Tecniche basate su misure
Le tecniche basate su misure si fondano sull’osservazione diretta del sistema sotto
analisi (o di un suo prototipo) utilizzando appositi moduli software e hardware
chiamati monitor (per questo spesso queste tecniche sono chiamate tecniche di
monitoraggio). Gli scopi di queste tecniche sono molteplici: permettono la
caratterizzazione qualitativa e quantitativa del carico di lavoro, delle performance e
dell'utilizzo delle risorse, informazioni utili ad esempio per creare un modello del
sistema, caratterizzare l'ambiente in cui il sistema opera e validare un modello creato.
Questo metodo è chiaramente costoso e complesso, e inoltre non sempre è attuabile
(si pensi al caso in cui il sistema non esista ancora e debba essere progettato), per di
14
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
più la dependability risulta spesso di difficile valutazione in quanto necessita di lunghi
tempi di osservazione.
 Tecniche basate su modelli
Un modello è una rappresentazione fisica, matematica, logica o concettuale di un
sistema di entità, fenomeni o processi. Lo scopo che si pone un modello è quello di
ricapitolare la conoscenza di un fenomeno e del suo comportamento senza il bisogno
di un testbed, o di una misura diretta sul sistema. I modelli sono tipicamente usati
quando è impossibile o poco pratico generare le condizioni sperimentali nelle quali gli
scienziati possono direttamente misurare i risultati. Un modello è sempre frutto di
assunzioni che si fanno sul sistema, ciò è inevitabile dal momento che la realtà è
spesso troppo complessa per essere modellata senza l’uso di semplificazioni, più
queste sono numerose più l’accuratezza e l’attinenza del modello diminuiscono e
conseguentemente i risultati che si ottengono da esso si allontanano dal
comportamento reale del sistema. L’uso di modelli richiede sempre di trovare un
punto di equilibrio tra la fedeltà del modello, ovvero l’accuratezza con cui questo
rappresenta la realtà, e la trattabilità del modello, ovvero la possibilità di definire e
risolvere il modello per ottenere le misure di interesse.
 Tecniche analitiche
La tecnica analitica (come anche quella simulativa) è basata sulla costruzione di un
modello del sistema e delle sue componenti; un modello rappresenta le nostre
assunzioni sul comportamento del sistema da analizzare. Nello specifico nei modelli
analitici le componenti del sistema sono rappresentate attraverso variabili di stato e
parametri, e le loro interazioni sono rappresentate attraverso relazioni fra queste
quantità. I limiti delle tecniche analitiche per la valutazione della dependability stanno
nella maneggevolezza e utilizzabilità del modello nei casi di sistemi di reale interesse,
in tali casi può spesso risultare difficile (anche se teoricamente possibile) riuscire a
trovare una rappresentazione esplicita che possa essere usata in maniera semplice: la
capacità di descrizione del modello e la sua aderenza al sistema reale stabilisce
l’eventuale necessità di passare ad un approccio simulativo.
15
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
 Tecniche simulative
Le tecniche simulative sono uno strumento potente sia per predire il comportamento
futuro di un sistema già esistente (forecasting), sia come supporto alla progettazione
per valutare la dependability di un sistema prima che venga implementato e dando
quindi i mezzi per la convalida del sistema o, in caso contrario, indicazioni utili al
miglioramento del sistema stesso fornendo la possibilità di confrontare soluzioni
progettuali differenti; inoltre permette una valutazione del sistema in condizioni rare o
pericolose, se studiate sul sistema reale, senza l’uso di tecniche invasive su
quest’ultimo e con la possibilità di effettuare la simulazione con diverse
configurazioni del sistema e con riferimento ad intervalli temporali di qualsiasi durata
e con l’ulteriore vantaggio della riproducibilità della simulazione, cosa non sempre
possibile nella realtà fisica; tutto ciò con costo, valutato in termini di tempo e
complessità, generalmente minore se paragonato a tecniche basate su misure dirette
del sistema. Le tecniche simulative consistono nella riproduzione del comportamento
dinamico del sistema nel tempo, viene generata così una storia artificiale del sistema
che può essere usata per il suo studio; per fare ciò è necessaria la presenza di un
modello simulativo che, con un determinato formalismo, descriva il comportamento
del sistema e l'esecuzione di un software dedicato detto simulatore tale da permettere
la rappresentazione dell'evoluzione temporale del sistema e da fornire una stima delle
misure di interesse. Infatti la simulazione è una tecnica model based, e presuppone
quindi l'esistenza di un modello che sia adeguatamente aderente al sistema reale
oggetto di studio, ossia fornisca con sufficiente accuratezza una descrizione del
comportamento del sistema.
Per valutare le caratteristiche che un tool web-based deve avere nella simulazione di reti
wireless di sensori, analizziamo dapprima come l’utente interagisce con i modelli analitici
e la simulazione. Infatti I modelli analitici sono usati per definire il fallimento e il
funzionamento di riconfigurazione del sistema (ad esempio, per modelli WSN vengono
presi in considerazione l’esaurimento della batteria, guasti hardware e ripristino guasti,
fallimenti di comunicazione, ecc.) e per eseguire le misurazioni desiderate. D’altra parte, i
16
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
simulatori di funzionamento vengono usati per calcolare cifre utili per generare e
configurare modelli analitici che hanno come parametri valori realistici (ad esempio,
simulatori di funzionamento di WSN possono essere usati per mettere a punto numero e
tipi di nodi e la topologia di connessione, per caratterizzare il carico di lavoro in
esecuzione sui nodi, per valutare calcoli e cifre significative, come il consumo di energia,
il profilo di propagazione wireless, ecc.). La simulazione di modelli analitici può essere
suddivisa in due parti principali:
i) generando il modello analitico attraverso i risultati delle simulazioni e preferenze
dell’utente, e
ii) gestendo i cambiamenti ottenuti durante l’evoluzione dei modelli analitici aggiornando
il modello analitico con i nuovi valori ottenuti, cercando di evitare di eseguire nuove
simulazioni ogni volta che avvengono cambiamenti.
Fig. 1.5 – Diagramma del procedimento adottato nella modellazione e nella simulazione di WSN.
Dal diagramma si può notare che nel passo 1 l’utente fornisce gli input necessari per
specificare il sistema in oggetto e per configurare lo scenario da sperimentare. Per una
17
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
WSN, equivale a specificare: i) il numero ed il tipo di nodi, ii) la topologia della rete, iii) il
carico di lavoro (ad esempio le applicazioni da eseguire) su ogni nodo, iv) il tipo di radio
installata sui nodi, v) l’algoritmo di routing adottato, vi) il tipo di tecnologia di batterie per
ogni nodo e vii) la tecnologia hardware di sensing adottata su ogni nodo. Questi input
vengono usati per configurare i simulatori di funzionamento adottati (Tossim, Mobius,
Avrora, etc.). In questa fase l’utente fornisce anche un set di metriche da valutare, come
per esempio disponibilità, performance, etc.
E’ importante notare che quest’approccio consente all’utente di lavorare all’interno del suo
dominio di conoscenza: ovvero, uno sviluppatore di WSN interagisce esclusivamente con
l’ambiente relativo al suo dominio applicativo (numero, tipo e posizioni dei nodi,
programmi e algoritmi da eseguire sui nodi, etc.) e alla fine del processo ottiene le
misurazioni richieste senza sapere o preoccuparsi di come le misurazioni vengono
calcolate e, cosa più importante, non ha bisogno di conoscere i dettagli sui modelli
analitici utilizzati.
Il passo 2 riguarda la simulazione del comportamento del sistema in oggetto. L’obiettivo
della simulazione
è valutare i parametri necessari richiesti dall’external engine per
generare e popolare il modello analitico, durante i passi 3 e 4. I parametri del modello
possono essere sia statici che dinamici: i parametri statici sono relativi agli aspetti che non
mutano durante la simulazione del modello analitico (ad esempio per una WSN sono la
piattaforma hardware, la tecnologia della batteria, la tecnologia di comunicazione radio,
etc.), i parametri dinamici dipendono invece dalla configurazione corrente del sistema, ad
esempio il numero dei nodi WSN guasti, il numero di nodi isolati, il rate di trasmissione di
ogni nodo, etc. e necessitano di essere ricalcolati ad ogni cambiamento durante
simulazione del modello analitico. Nel caso di WSNs, esempi di parametri calcolati sono il
profilo di consumo energetico per ogni nodo, la probabilità di perdita pacchetti di ogni
link, e le caratteristiche dei workload, ovvero il duty-cycle (la media percentuale del
lavoro utile eseguito da ogni nodo non in fase di stand-by) e la dimensione media dei
pacchetti trasmessi/ricevuti.
La generazione automatica del modello analitico viene effettuata nel passo 3 dal Model
18
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
Generator. Il Model Generator produce modelli analitici partendo da una predefinita
libreria di template modello, e il numero e il tipo di modelli da generare dipendono dagli
input dell’utente.
Per esempio, N modelli di nodo saranno generati per una WSN
composta di N nodi. Ogni modello di nodo verrà poi specializzato a seconda della
topologia (la quale specifica i vicini di ogni nodo), della piattaforma hardware (dalla quale
dipenderà il modello di fallimento), etc. I valori iniziali dei parametri del modello vengono
impostati partendo dai risultati delle simulazioni e da un set predefinito di parametri, come
ad esempio il failure rate dei componenti hardware.
Il passo 4 riguarda la simulazione del modello analitico generato. Risulta chiaro come il
funzionamento di un singolo nodo modifichi il comportamento dell’intera rete in modi
inimmaginabili, e viceversa differenti scelte da parte dell’utente (come ad esempio
l’algoritmo di routing) influenzino il comportamento di ogni singolo nodo. Per cercare di
dominare questa complessità, utilizziamo modelli parametrici e riusabili, i quali sono
autonomi e capaci di adattarsi ai cambiamenti indotti da altri modelli.
Infine, durante la simulazione, vengono valutate le metriche scelte e i risultati vengono
proposti all’utente al passo 5. A questo punto, in dipendenza dai risultati ottenuti, l’utente
può decidere se necessario di rivedere le proprie scelte e di riprogettare il sistema.
1.3 Il Tool Failure Model WSN Generator
L’uso di strumenti quali la simulazione possono mostrare la necessità dell’apporto di
modifiche alle specifiche iniziali, al progetto del sistema da implementare, o allo stesso
modello, ciò porterà ad una nuova simulazione in un processo iterativo di modifiche dove
la flessibilità e la propensione al cambiamento è fondamentale, e ciò viene ben supportato
da un tool di generazione automatica dei modelli di fallimento. Il supporto di un tool per la
generazione automatica di modelli pone il modellista ad un livello di astrazione più alto
rendendo la modellazione stessa più flessibile ed i modelli prodotti generali e facilmente
particolarizzabili. L’idea si fonda sulla costruzione di un modello versatile e
rappresentativo di un’ampia gamma di sistemi da un lato e sulla possibilità, offerta da un
generatore automatico, di specializzare tale modello ottenendo gli effettivi modelli
19
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
utilizzabili per la simulazione di un dato particolare sistema senza snaturare la generalità
del modello iniziale e senza apportarne modifiche dirette; si è potuto così ottenere, per il
particolare caso di studio, a partire da un modello che descrivesse in modo generale una
famiglia di reti WSN, la specializzazione a una data rete con un proprio numero di nodi e
una propria topologia tramite generazione automatica.
Fig. 1.2 – L’applicazione Failure model WSN Generator
Il Tool Failure Model WSN Generator, progettato e implementato nel lavoro di tesi [4],
consiste in un applicazione desktop scritta in Java con gui Swing in cui l’utente:
i) immette la path in cui si trovano i file della topologia da analizzare
ii) seleziona la quantità di nodi presente nella topologia, il tempo di simulazione
desiderato e la scelta di un’ottimizzazione del modello da generare
iii) seleziona il percorso in cui verranno generati i file del modello da simulare.
L’applicazione è formata da una serie di classi progettate partendo da un reverseengineering del simulatore Mobius adottato, le quali dagli input dell’utente e dal click del
tasto “Generate” si occupano di ricavare dalla topologia il modello corretto in forma di
progetto Mobius da simulare, includendo sorgenti ed header in c++ necessari al progetto e
librerie del modello di fallimento. La fase della generazione del modello viene descritta da
20
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
una serie di messaggi inviati ad una JtextArea della GUI e alla Console di Sistema: alla
fine della generazione del modello di fallimento, l’applicazione lancia il simulatore
Mobius per la compilazione dei file e per la simulazione.
Fig. 1.3 – Il nuovo approccio alla modellazione e simulazione utilizzato da Failure Model WSN Generator
1.3.1 Il simulatore Mobius
Il tool Failure Model WSN Generator sfrutta il funzionamento del software Mobius[s1],
uno strumento per la modellazione del comportamento di sistemi complessi.
Benchè sia stato originariamente sviluppato per lo studio della reliability, availability, e le
performance di sistemi di elaborazione e sistemi di rete, l'uso di Mobius si è espanso
rapidamente. Ora è usato per un’ampia gamma di sistemi a eventi discreti dalle reazioni
biochimiche agli effetti di attacchi maliziosi sulla sicurezza di sistemi di elaborazione, in
aggiunta alle applicazioni originarie. L’ampia gamma di usi è possibile per via della
flessibilità e potenza riscontabili in Mobius, che provengono dal suo supporto alla
modellazione multiformalismo e alla possibilità di ricorrere a diverse tecniche per la
soluzione dei modelli. Questa flessibilità permette al modellista di rappresentare il sistema
oggetto di studio nel linguaggio di modellazione più appropriato al dominio del problema
21
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
in questione e poi risolvere il modello in maniera efficiente e accurata usando la tecnica di
risoluzione più appropriata in relazione alla dimensione e complessità del sistema. Sono
supportate dal tool la simulazione a eventi discreti distribuita e la risoluzione analitica e
numerica.
Fig. 1.4 – L’architettura del tool Mobius
Per la costruzione di un modello Mobius mette a disposizione vari editor classificabili in
base al tipo di modello da generare (atomico, composto etc.). Per ogni modello Mobius
genera e compila del codice sorgente C++ ed i file oggetto prodotti vengono raccolti per
formare un archivio di librerie. Queste librerie sono collegate insieme, attraverso l’uso di
un linker, alle librerie base di Mobius per formare l’eseguibile per il solver [Fig. 1.4], che
viene poi lanciato per generare i risultati; l’uso di codice C++ conferisce efficienza nella
risoluzione, e una grande flessibilità nella definizione del modello dal momento che è
possibile arricchire il codice generato automaticamente da Mobius con proprie librerie.
1.3.2 La topologia della rete
La topologia della rete data dal modellista in input al tool di generatore modelli di
fallimento è composta dai seguenti file (di estensione .TXT):
 coordinate: racchiude le coordinate x e y esatte di ogni nodo. Esse sono espresse in
22
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
coppie di cifre in formato double separate da uno spazio e da un ritorno a capo per
ogni nodo.
 distances: è un file contenente una matrice quadrata in cui sono presenti le distanze dei
nodi: l’elemento [j,k] della matrice rappresenta la distanza euclidea bidimensionale tra
il nodo j e il nodo k calcolata con la formula: d 
 x1  x2    y1  y2 
2
2
; i valori j=k
(la distanza tra il nodo e se stesso) avranno ovviamente valore 0.000
 energy: un elenco contente per ogni nodo dei valori che caratterizzano la tecnologia
della batteria utilizzata.
 losses: contiene la matrice delle adiacenze, che associa all’elemento [j,k] della matrice
la probabilità che un’informazione giunga dal nodo j al nodo k: è un valore compreso
tra 0 e 1 ed esprime la qualità del link tra il nodo j e il nodo k.
 neighbor: ogni riga del file è associata ad ogni della topologia, e descrive i nodi
“vicini” a seconda che ci sia un link, nella forma: numero del nodo, numero dei vicini,
numeri nodo dei vicini
 radio: un elenco contenente per ogni nodo dei valori che caratterizzano la tecnologia
della radio utilizzata.
 TinySan: contiene in cifre il numero di nodi che compongono la topologia.
 topology: contiene un riepilogo riassuntivo dei file descritti in precedenza.
La generazione di questi file è a carico dell’utente, e si può immaginare come per
topologie con molti nodi ciò diventi un compito dispendioso soprattutto se svolto non
graficamente: la topologia può essere infatti ricavata da software di simulazione che hanno
come caratteristica la disposizione grafica dei nodi che compongono la topologia, in modo
che l’utente abbia anche una visione globale della disposizione dei nodi e di tutto
l’ambiente da modellare e simulare. Da ciò nasce l’esigenza di un tool nella progettazione
della topologia che si avvicini il più possibile all’ambiente WSN rispetto ad altri software
più “graficamente generici”, ma soprattutto che produca il file necessari per la
modellazione e la simulazione in modo diretto, senza che l’utente vada a ricavare o
modificare manualmente i file necessari al tool Failure Model WSN Generator. Ed è da
quest’esigenza e dagli innumerevoli vantaggi che comporta una web-application che è nata
23
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
la necessità di realizzare uno strumento web-based per la simulazione remota di WSNs.
1.4 Motivazioni del remoting nella simulazione di WSN
Le motivazioni subito evidenti nell’utilizzo di un’applicazione web-based piuttosto di
un’applicazione desktop-based derivano dal concetto stesso di web application, e dalle
caratteristiche che hanno decretato l’esigenza e il successo del web 2.0 e il trend attuale di
migrazione verso internet:
 Disponibilità: una web application non ha bisogno di essere scaricata, installata o
configurata: il digitare semplicemente l’indirizzo web rende l’applicazione subito
disponibile.
 Scalabilità: le applicazioni web-based possono crescere insieme all’esigenze di
un’azienda; features aggiuntive possono essere implementate immediatamente e rese
subito disponibili agli utilizzatori senza operazioni onerose quali installazione
aggiornamenti, verifica compatibilità ambiente, etc.
 Manutenibilità: la risoluzione di bug, il miglioramento delle prestazioni e
l’aggiornamento del codice in una web application possono avvenire ed essere diffuse
molto più rapidamente rispetto alle applicazioni tradizionali.
 Sicurezza dei dati: l’implementazione di un buon server, soprattutto se associata a
tecnologie di clustering o di cloud computing, assicura la conservazione e la
protezione dei dati (siao essi dati applicativi o dati utente) in caso di
malfunzionamenti, virus o problemi hardware in maniera più efficiente rispetto alle
applicazioni tradizionali. L’utente accede alla web application solo con il proprio
browser, e possiamo quindi immaginare che esso interagisce con una sorta di
“sandbox”, un ambiente protetto gestibile solo dal software di navigazione: dal lato
server inoltre un semplice servizio di backup automatico dei dati eseguito
periodicamente già è sufficiente per migliorare la sicurezza del sistema rispetto ad
un’applicazione che viene eseguita nel sistema non sandbox dell’utente.
 Carico di lavoro: una web application può essere progettata per eseguire totalmente il
carico computazionale sul server, oppure a seconda delle esigenze e dei costi di
24
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
gestione può distribuire le operazioni necessarie al suo corretto svolgimento sia sul
client che sul server; in questo modo si può eliminare la scelta obbligatoria di un thick
client per eseguire applicazioni e calcoli complessi.
 Riduzione costi di gestione: la migrazione verso i thin client piuttosto che la scelta
obbligata dei thick client, e l’indipendenza della web application dal sistema operativo
può permettere un risparmio sui costi di licenza, sui costi delle tecnologie hardware e
software.
 Accessibilità: un’applicazione web-based può essere eseguita ovunque e su qualsiasi
dispositivo, compresi smartphone, PDA e moderne console da gioco; con una giusta
scelta delle tecnologie software impiegate per la sua realizzazione, l’unico limite resta
solo la risoluzione dello schermo dei dispositivi client e della disponibilità di una
buona connessione ad internet.
Alla luce di quanto detto possiamo descrivere le caratteristiche derivanti applicando uno
strumento di tipo web-based al caso di simulazioni remote di WSN: è evidente come i
vantaggi elencati all’inizio di questo paragrafo si riflettono nell’uso degli strumenti appena
elencati da parte del modellista, ed in particolare:
 L’aggiunta di nuovi modelli analitici si propaga in tempo reale ed è subito a
disposizione di ogni utente che accede alla web application;
 L’utente non ha bisogno di installare e configurare particolari software di
modellazione e di simulazione in ogni macchina che utilizza per lo sviluppo di WSN,
e può accedere all’applicazione ovunque e da ogni sistema dotato di un web browser;
 Tutto il codice gestito dalla web application non è ne visibile ne accessibile da parte
dell’utente: tutto ciò che il modellista può accedere sono i dati di modellazione e
simulazione, accessibili ovunque e protetti da eventuali guasti hardware e software;
 Il calcolo computazionale delle simulazioni e della generazione di modelli analitici in
base alla topologia della rete avviene sul server o potrebbe addirittura avvenire su un
sistema distribuito di server, in modo tale che il modellista può utilizzare un normale
thin client con notevoli risparmi in ambito economico.
Si può pensare che questo tipo di approccio unisca il vecchio approccio computazionale
25
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 1: Wireless Sensor Network: Modellazione e Simulazione
accademico di trent’anni fa, quando l’utente immetteva i propri dati in calcolatori grandi
come stanze intere e ne attendeva i risultati, al moderno web 2.0 dove l’interazione,
l’accessibilità e la portabilità sono i veri punti forza.
26
Capitolo 2
Analisi dei Requisiti e Progettazione
Dopo aver dato uno sguardo d'insieme sulle reti di sensori senza filo ed analizzati i
vantaggi di un tool web based per la simulazione remota di WSN, questo capitolo si
occupa dapprima dei concetti chiave dei requisiti che il tool deve soddisfare, poi dei
concetti chiave che il lavoro di questa tesi ha implementato, soffermandosi brevemente
sugli use case dell'applicazione. Il come questi requisiti, insieme alle caratteristiche
spiegate nel primo capitolo, si riflettano nel tool implementato verrà descritto iniziando dal
paragrafo 2.3, dedicato al primo passo della progettazione, e continuerà nel terzo capitolo
dedicato alla scelta delle tecnologie per le Rich Internet Applications. Si sottolinea il fatto
che la maggior parte della documentazione che accompagna il software (compresi SRS,
Class e Sequence Diagrams, Test Cases, etc.) è stata omessa per non rendere prolisso il
presente lavoro di tesi.
2.1 Web Model WSN Generator: concetti chiave
Seguendo l'approccio della modellazione e simulazione descritto nella Fig. 1.5 e avendo
l'obiettivo di remotizzare il tool in Java Failure Model WSN Generator, abbiamo che la
nostra applicazione da implementare, denominata Web Model WSN Generator, è
caratterizzata innanzitutto da una gestione multi-utente: infatti essendo una web
application, l'accesso ad essa non è limitato ad un solo utente per volta, ma deve gestire
anche contemporaneamente più utenti che si collegano con il proprio browser; questo
27
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
impone un accesso protetto con username e password per ogni sessione, ma soprattutto un
ambiente personalizzato per ogni utente. Ovvero ogni modellista, progettista e
sviluppatore di WSN deve possedere ed accedere sul server le proprie cartelle e i propri
file contenenti le topologie, i modelli, e i risultati delle proprie simulazioni. Eseguendo
correttamente il primo accesso al web server, infatti, il tool Web prepara l'ambiente
personalizzato per l'utente: a questo punto viene presentata l'applicazione, il cui obiettivo
primario è svolgere il passo 1 descritto nel paragrafo 1.6, cioè quello in cui l’utente
fornisce gli input necessari per specificare il sistema in oggetto e per configurare lo
scenario da sperimentare.
L'applicazione deve memorizzare il numero di nodi da modellare, la topologia della rete
(con la possibilità di essere sia inviata dall'utente tramite upload oppure disegnata
direttamente dalla web application) e il tempo di simulazione da valutare. A seguito di ciò
l'utente può scegliere di scaricare il modello (generato oppure direttamente compilato) in
file pronti per il simulatore Mobius, da simulare e valutare nel proprio computer, oppure
può scegliere di far simulare il modello generato direttamente dal server, e attenderne i
risultati o essere avvisato tramite e-mail quando la simulazione sarà completata: in questo
caso l'utente dovrà scegliere le metriche da valutare nella simulazione (disponibilità,
performance, etc.), ed al termine della simulazione (passo 5 del paragrafo 1.6) i risulati
verranno presentati direttamente nella web application tramite un foglio di calcolo on-line
con la possibilità di salvare, stampare ed esportare i dati ottenuti. Nel caso in cui l'utente
sceglie di disegnare on-line la topologia dei nodi che compongono la rete, dovrà comparire
una schermata simile ad un software di disegno, dove l'utente può disporre i nodi con un
drag and drop su un piano bidimensionale e modificare, per ogni nodo, le coordinate, il
tipo di radio, il tipo di tecnologia della batteria e l'applicazione installata. Nel disegnare la
topologia, infine, l'utente può selezionare per la rete di nodi l'algoritmo di routing e il
modello di propagazione del segnale, il quale differisce dall'ambiente scelto.
Per quanto riguarda i passi 2, 3, 4 descritti nel paragrafo 1.6, se l'utente non decide di
scaricare il modello generato, i parametri calcolati, i modelli analitici e la simulazione del
modello analitico devono avvenire totalmente sul server, ma soprattutto i parametri statici
28
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
e dinamici, le librerie predefinite di template modello e i valori utilizzati e aggiornati dalle
simulazioni devono essere nascosti dall'utente della web application; ovvero da un lato si
richiede che il tool Web failure model WSN generator sia progettato in maniera da essere
ampliato con altri modelli, framework, template di librerie e simulatori, ma che queste
modifiche devono essere effettuate solo da chi gestisce l'applicazione e il server, in modo
tale che l'utente abbia solo una scelta, non modificabile, dei modelli a disposizione.
Dalla descrizione appena fatta di cosa il web tool deve completamente svolgere, il
seguente lavoro di tesi si è concentrato sulle richieste fondamentali impostando un ottimo
punto di partenza per il successivo completamento dell'applicazione, soprattutto perché la
scelta delle tecnologie e il modo di programmazione effettuato si sono concentrate sulla
massima espandibilità possibile sia per quanto riguarda il web tool sia per il tool desktop.
Prima di focalizzare però in che modo e come l'espandibilità caratterizza il software
implementato, questo paragrafo termina con i requisiti implementati nel tool, derivati dai
concetti chiave descritti precedentemente.
Dal seguente lavoro di tesi si è richiesto che il tool Web Model WSN Generator visualizzi
dapprima una schermata di accesso, dove l'utente immette username e password:
all'accesso eseguito correttamente il sistema mette a disposizione, in base all'utente, delle
cartelle sul server dove memorizzare la topologia della rete e i modelli generati. In seguito
all'utente viene presentata una schermata in stile wizard dove dapprima esso sceglie il
numero di nodi che compone la rete e il tempo di simulazione desiderato. In seguito, se
l'utente noi invia con un upload un file (di estensione .zip) contenenti i dati della topologia,
viene data la possibilità di disegnare la topologia della rete di sensori. Il disegno deve
essere fatto in maniera visuale, nei modi descritti precedentemente, e in particolare:
l'utente per ogni modo immette le coordinate e sceglie da una lista, non ancora funzionante
e implementabile successivamente, la radio, la batteria e il carico di lavoro: queste liste
sono tutte settate ad un valore di default, ma deve essere data la possibilità di caricare sul
server i file che le caratterizzano. Nella schermata del disegno in seguito l'utente può
scegliere di settare manualmente i link che compongono la topologia, oppure scegliere da
una lista il modello di propagazione desiderato: il sistema si occuperà di tracciare i link tra
29
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
i nodi e di impostare per ogni collegamento la probabilità di perdita dei pacchetti,
ovviamente compresa tra 0 e 1. Per aiutare la progettazione della rete, all'utente viene data
la possibilità di spostare i nodi sul piano bidimensionale, di impostare la scala di
riferimento e di aggiungere come sfondo al piano un'immagine che rappresenti la mappa
di riferimento dove verranno predisposti i nodi. Al termine del disegno, l'utente può
proseguire con la modellazione oppure cliccare sul tasto “export” e salvare sulla propria
periferica il file della topologia della rete. Proseguendo con l'applicazione, all'utente viene
presentata una schermata simile sia graficamente sia in termini di funzionalità al tool
Failure Model WSN Generator, ovvero con delle aree testuali che rappresentano i log
dell'applicazione e dei messaggi inviati alla console di sistema del server, e con i pulsanti
“Generate”, “Compile model” e “Simulation” a seconda se l'utente vuole generare il
modello, compilarlo o simularlo. Nel caso della generazione e della compilazione,
all'utente viene dapprima mostrato il log della generazione e in seguito viene data la
possibilità di scaricare il modello sorgente o il modello compilato, entrambi utilizzabili
con il simulatore Mobius. Nel caso in cui venga scelta la simulazione, all'utente viene
mostrata una schermata di scelta delle metriche da analizzare, e sarà avvertito che la
simulazione non è ancora funzionante. Infine, tutti in passaggi elencati deve essere
implementato un pulsante di “logout” che da la possibilità all'utente di ritornare alla
pagina di accesso invece di chiudere la finestra del browser web e al sistema di rilasciare
le risorse utilizzate per il disegno, la modellazione e la futura simulazione.
30
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
2.2 Casi d’uso
Dai requisiti appena elencati vengono qui proposti i casi d'uso principali:
Fig. 2.1 – Use Case Diagram – funzionamento principale della web application
CASO D'USO GENERAZIONE MODELLO
 Pre-condizioni: l'utente ha effettuato con successo il login
 Flusso di eventi:
1. L'utente imposta il numero di nodi e il tempo di simulazione
2. L'utente carica sul server il file .zip della topologia WSN
3. IF l'utente non carica il file della topologia, l'utente disegna la topologia
4. Il sistema importa la topologia in una cartella personale dell'utente
5. L'utente chiede la generazione del modello
6. Il sistema genera il modello e invia come download il file compresso del
modello all'utente
7. IF L'utente sceglie anche la compilazione, il sistema genera e compila il
modello per poi consegnare il file compresso all'utente
31
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
CASO D'USO DISEGNO TOPOLOGIA
 Pre-condizioni: l'utente ha effettuato con successo il login
 Flusso di eventi:
1. L'utente sceglie di disegnare una topologia WSN
2. Il sistema visualizza all'utente soltanto la parte di disegno topologia
3. L'utente chiede l'esportazione della topologia disegnata
4. Il sistema genera un file compresso contenente la topologia WSN e lo invia
all'utente
CASO D'USO SIMULAZIONE
 Pre-condizioni: l'utente ha effettuato con successo il login
l'utente ha terminato e compilato la modellazione della WSN
 Flusso di eventi:
1. L'utente seleziona una o più metriche da valutare (caso d’uso “selezione
metriche”)
2. Il sistema memorizza le scelte dell'utente in un archivio
3. L'utente inizia la simulazione
4. Il sistema simula il modello dell'utente e lo avvisa per e-mail quando
l'elaborazione è completata
5. L'utente si ricollega e chiede di visualizzare i risultati
6. Il sistema mostra i risultati in un foglio di calcolo
7. IF l'utente chiede di scaricare i risultati, il sistema manda all'utente un file .csv o
.xls del foglio di calcolo visualizzato
32
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
2.3 Diminuire l’accoppiamento
In ingegneria del software, l'accoppiamento misura l'interdipendenza di due moduli
(definiti come raggruppamenti di istruzioni, procedure e dichiarazioni): ad esempio, un
modulo A chiama una funzione definita nel modulo B o accede ad una variabile dichiarata
dal modulo B. Due moduli hanno un elevato accoppiamento se dipendono strettamente
l'uno dall'altro. Per ottenere la capacità di comporre, scomporre, comprendere e modificare
il software in maniera modulare, l'ingegnere del software deve progettare i moduli in
modo che abbiano alta coesione (cioè tutti gli elementi devono essere strettamente
connessi) e basso accoppiamento.
Questa definizione è stata la prima scelta effettuata nella progettazione del tool web-based:
infatti esso si basa principalmente sull'applicazione Java desktop Failure Model WSN
Generator implementata nel lavoro [4], e come prima cosa si è cercato di capire e di
scomporre le classi Java del software con l'obiettivo di separare l'interfaccia grafica (che
sfrutta le librerie Swing) dalla logica applicativa, in modo tale da utilizzare solo la logica
dell'applicazione nella web application.
Da una prima analisi si è notato che l'accoppiamento tra l'interfaccia grafica e le classi che
si occupano della generazione del modello era molto forte: come illustra il class diagram
seguente, molte classi in gioco acquisivano i dati necessari alla generazione del modello di
fallimento direttamente dalle JTextArea, CheckBox e ComboBox dell'istanza della classe
InterfacciaInput (la GUI del tool), ma soprattutto i messaggi generati da queste classi per
notificare il corretto svolgimento della generazione del modello all'utente venivano inviati
ad un oggetto del tipo JTextArea attraverso l'invocazione diretta del metodo .append.
33
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
Fig. 2.2 – Class Diagram dell'elevato accoppiamento tra la classe InterfacciaInput ed alcune classi del tool
Tutto ciò era lecito e giustificato dal fatto che il tool desktop aveva una semplice
interfaccia grafica e soprattutto che esso non era progettato per essere adattato e
riutilizzato in altri ambienti, tantomeno nell'ambiente web. Nel seguente lavoro di tesi però
una modifica e riprogettazione del codice di questo tool è inevitabile, e si è proseguito per
questa strada raggiungendo i seguenti obiettivi:
 Lo sviluppo dell'applicazione desktop e della web application possono essere eseguiti
in parallelo: eventuali correzioni di bug e migliorie del tool desktop-based verranno
riflesse automaticamente nel tool web-based.
 Il tool desktop-based potrà essere adattato in altri ambienti, compreso ad esempio
l'esecuzione e il controllo in maniera testuale da console di sistema.
Ciò è stato ottenuto principalmente implementando la classe AmbientVar e utilizzando le
classi Log di Java.
34
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
2.3.1 La classe AmbientVar
La classe Java AmbientVar implementata nel progetto del tool web-based gestisce tutte le
variabili necessarie alla modellazione e alla compilazione del tool failure model WSN
generator. Essa è composta principalmente da metodi get e set delle variabili visualizzabili
dall'interfaccia grafica del tool desktop-based, ovvero: i) numero di nodi, ii) path della
topologia della rete, iii) path dei file del modello generato, iv) tempo di simulazione, v)
ottimizzazione del modello. Questa classe si sovrappone tra la logica applicativa e
l'interfaccia grafica del tool, in modo tale che le scelte dell'utente dalla GUI vanno a
settare i campi di AmbientVar, e le classi responsabili della generazione del modello di
fallimento
tramite chiamate
get
acquisiscono i
dati
configurati
dalla classe
InterfacciaInput a tempo di esecuzione. In aggiunta sono state implementate alcune
variabili “flag” necessarie al corretto svolgimento dell'applicazione web (non sfruttate
quindi dal tool desktop) ed alcuni metodi per catturare ed inviare i messaggi inviati dalle
classi responsabili della generazione del modello di fallimento. Come illustra il
diagramma seguente:
Fig. 2.3 – Class Diagram dell'accoppiamento diminuito con la classe AmbientVar
35
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
l'accoppiamento è stato diminuito in maniera soddisfacente per il progetto web, e risulterà
ulteriormente diminuito sfruttando le classi Log di Java.
2.3.2 Logging
L'attività di logging consiste nel registrare automaticamente eventi che vengono generati
da un programma in modo da fornire una traccia che permetta di ricostruire e
diagnosticare eventuali problemi. Nel linguaggio Java le possibilità di implementare il
logging sono molteplici, e tra molte soluzioni valide vanno citate Apache Log4J e Java
Logging API, presente dalla versione 1.4 di Java. Entrambi i prodotti hanno una struttura
comune che prevede l’utilizzo di un oggetto logger al quale viene fornito il messaggio di
logging da generare in base ad una priorità predefinita. Il layout del messaggio e la
destinazione finale dello stesso è separata dalla generazione e viene gestita da opportune
classi che si occupano di formattare il messaggio e di inviarlo alla destinazione opportuna.
Fig.2.4 – Principali componenti logici dei framework di logging.
Questa struttura consente una notevole flessibilità in quanto distingue la fase di
generazione del messaggio dalla fase di formattazione e di invio alla destinazione finale
che può essere la console di sistema, un file, una e-mail , una socket o qualsiasi altra
destinazione si desideri.
Applicando la classe java.util.log al nostro tool desktop di generazione dei modelli di
fallimento, si sono modificate le classi che inviavano messaggi dirottando questi su i due
log creati, logger (per i messaggi diretti alla console) e guiLogger (per i messaggi diretti
36
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 2: Analisi dei Requisiti e Progettazione
alla JTextArea della classe InterfacciaInput) con semplici direttive del tipo:
this.varAmbiente.guiLogger.info("messaggio");
Si è proseguito poi nella creazione di un Output handler modificato a seconda
dell'ambiente in cui vengono catturati i messaggi: infatti i log handler creati derivano dalla
classe java.util.logging.Handler e contengono degli override dei metodi publish, close,
flush e setLevel tali che il layout e la destinazione dei messaggi avvengano diversamente a
seconda che si tratti dell'applicazione desktop-based o dell'applicazione web-based; in
questo caso il tool desktop possiede una classe TextAreaHandler in cui il layout è del tipo:
final String message = logRecord.getMessage() + "\n" ;
e la destinazione è proprio la JTextArea della GUI:
jGuiTextArea.append(message);
Mentre l'applicazione web possiede un proprio handler, con il layout simile al layout di
TextAreaHandler ma con destinazione un oggetto di tipo StringBuilder associato ad un
componente di tipo Text Box del framework utilizzato:
this.sb.append(message);
E' evidente da quanto descritto come l'accoppiamento sia diminuito: il tool desktop-based
e la web application sfruttano gli stessi log catturati con handler diversi: qualsiasi futura
estensione di entrambi i tool può usufruire degli stessi log senza interventi al codice,
creando handler diversi e personalizzandone il layout.
37
Capitolo 3
Tecnologie e Strumenti per le Rich Internet Applications
Il presente capitolo descrive il secondo passo della progettazione del tool web-based per la
simulazione remota di WSN, il quale si focalizza nella ricerca effettuata sulle tecnologie
per implementare la web application o, più in generale, una RIA (Rich Internet
Application). Verrà illustrato quali sono le più diffuse tecnologie disponibili oggi sul
mercato, come queste riflettono alcune metriche di valutazione scelte per questo progetto,
e quali sono i vantaggi e gli svantaggi di adottare un software piuttosto che un altro. La
scelta e la sua motivazione della tecnologia realmente adottata per lo sviluppo di questo
tool verrà affrontata nel capitolo 4, dove verrà descritto in maniera più dettagliata il
framework ZK.
3.1 Le RIA e metriche di valutazione
Da un breve sguardo sui requisiti del tool web based si nota subito che l’applicazione web
deve riflettere quanto più possibile l’applicazione desktop del generatore dei modelli di
fallimento e d’altra parte deve possedere una funzionalità di disegno che, anche se
semplice, deve somigliare quanto più possibile and un’applicazione desktop di disegno
diagrammi. Da ciò nasce l’esigenza di implementare non una normale web application, ma
una Rich Internet Application (RIA). La differenza tra queste due applicazioni sembra
sottile, ma diventa molto chiara descrivendo cosa sono RIA:
«Le Rich Internet Application (RIA) sono applicazioni web che possiedono le
38
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
caratteristiche e le funzionalità delle applicazioni desktop, senza però necessitare
dell'installazione sul disco fisso.»
Le RIA si caratterizzano per la dimensione interattiva, la multimedialità e per la velocità
d'esecuzione: parte dell'applicazione che elabora i dati è trasferita a livello client e fornisce
una pronta risposta all'interfaccia utente, mentre la gran parte dei dati e dell'applicazione
rimane sul server remoto, senza appesantire il computer utente: esse si fondano perciò su
un'architettura di tipo distribuito.
L'interazione con una RIA avviene in remoto, tramite un comune web browser: pertanto
esse rappresentano una generazione di applicazioni che permettono un'interazione
totalmente rinnovata, fondata sugli aspetti migliori delle caratteristiche funzionali e
progettuali che finora erano prerogativa alternata del web o delle applicazioni desktop.
Per tale livello spinto di interattività che esse offrono, le Rich Internet Application
rappresentano uno dei canali migliori attraverso il quale si va imponendo il paradigma del
Cloud Computing, che costituisce una nuova modalità di fruizione del software tramite
architetture distribuite.
Con questa premessa si sono esclusi, durante la ricerca della piattaforma software più utile
all’implementazione del progetto, quei linguaggi e quelle tecnologie che si discostano dal
concetto di RIA, ed in particolare sono state escluse a priori quelle tecnologie software
che durante il loro funzionamento impongono i seguenti vincoli:
 Il refresh della pagina sul browser web: caratteristica dei siti web in generale e
vincolo necessario fino a pochi anni fa, il refresh della pagina del client riduce
drasticamente l’interazione tra client e applicazione web, ed oltretutto risulta scomodo
ed inefficiente per lo sviluppatore di WSN che cerca di disegnare sul proprio browser
la topologia della rete.
 La disposizione e il controllo dell’interfaccia grafica diversa dalle applicazioni
tradizionali: Lo sviluppatore WSN ma anche l’utente in generale sono abituati a
software desktop-based che presentano interfacce grafiche i cui componenti sono tutto
sommato simili: finestre, aree testuali e label, barre degli strumenti, barre di stato,
layout, canvas, etc.: si deve pertanto cercare di rendere l’uso della web application
39
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
quanto più simile all’esperienza di utilizzo delle applicazioni desktop-based.
 I controlli degli input dell’utente non in tempo reale: il paradigma nel quale gli input
del client vengono direttamente spediti al server e, nel caso in cui sono errati o non
soddisfano determinati criteri, il server rimanda una risposta negativa al client, rende
l’uso dell’applicazione lento e produce un traffico internet maggiore rispetto al caso in
cui gli input del client vengono controllati direttamente dal client stesso.
La scelta della piattaforma software adottata si è basata innanzitutto sui vincoli appena
esposti, e ciò ha delineato una scelta obbligata sulla tecnologia AJAX e sull’utilizzo,
possibile ma non obbligatorio, del linguaggio Javascript
3.1.1 AJAX e JavaScript
L'acronimo AJAX, che significa esattamente Asynchronous JavaScript And XML
(JavaScript asincrono ed XML), è stato enunciato per la prima volta da Jesse Garrett, nel
18 Febbraio 2005 nel suo blog[s2]. Non si tratta di una nuova tecnologia né di
un'invenzione bensì di un concetto utilizzato per sviluppare applicativi avanzati e
particolari quali Gmail, Google Maps o Google Suggest. Il concetto è in parte espresso
nell'acronimo scelto, un utilizzo asincrono di Javascript che attraverso l'interfacciamento
con XML, può permettere ad un client di richiamare informazioni lato server in modo
veloce e trasparente, allargando gli orizzonti delle Rich Internet Applications. In
alternativa a queste tecniche di interazione client/server, quando nel 1996 venne introdotto
l'iframe in Internet Explorer 3, molti sviluppatori sfruttarono quest' ultimo modificando
l'attributo sorgente (src) della pagina racchiusa e simulando così un refresh trasparente di
una parte di contenuti, il che emulava, in modo abbastanza sporco, un'interazione
asincrona. Nel 1998 Microsoft cominciò a sviluppare una tecnologia, chiamata Remote
Scripting, con lo scopo di creare una tecnica più elegante per richiamare contenuti
differenti ed è in questo periodo, seppur con nome differente, che AJAX venne utilizzato
per la prima volta, per poi evolversi in versioni più mature fino a diventare un oggetto vero
e proprio, noto ora come XMLHttpRequest.
Il motivo principale di tanto successo è che solo ultimamente il Remote Scripting ha
40
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
suscitato lo stupore degli addetti ai lavori nel vedere cosa Google fosse riuscita a fare
all'interno dei suoi applicativi senza necessità di Flash Player o Java Virtual Machine,
mantenendo comunque la compatibilità con molteplici browser di utenti che per diversi
motivi non potevano usufruire di Javascript. Come spesso è accaduto negli ultimi anni,
molti hanno preso spunto da Google ed il web, noto per la sua immediatezza propositiva, è
stato in grado in poco più di un anno di regalarci numerosi esempi di applicativi basati su
AJAX, esagerando in alcuni casi nell'utilizzo ma considerando molto spesso e fin da
subito, a differenza di quanto accadde per Flash ed Applets anni prima, due delle
problematiche più diffuse del web attuale: accessibilità ed usabilità.
L'oggetto base di questa tecnologia è ovviamente XMLHttpRequest, che a seconda del
browser usato prende nomi differenti o viene richiamato in maniera differente: nel caso di
Internet Explorer, ad esempio, questo oggetto è restituito da un ActiveXObject mentre nei
browsers alternativi più diffusi (Mozilla, Safari, FireFox, Netscape, Opera, Internet
Explorer 7 e successivi, etc.) XMLHttpRequest è supportato nativamente.
Questo oggetto permette di effettuare la richiesta di una risorsa (con HTTP) ad un server
web in modo indipendente dal browser. Nella richiesta è possibile inviare informazioni,
ove opportuno, sotto forma di variabili di tipo GET o di tipo POST in maniera simile
all'invio dati di una form. La richiesta è asincrona, il che significa che non bisogna
necessariamente attendere che sia stata ultimata per effettuare altre operazioni,
stravolgendo sotto diversi punti di vista il flusso dati tipico di una pagina web.
Generalmente infatti il flusso è racchiuso in due passaggi alla volta, richiesta dell'utente
(link, form o refresh) e risposta da parte del server per poi passare, eventualmente, alla
nuova richiesta da parte dell' utente. Ciò che resta del vecchio flusso, il tempo di attesa,
passa spesso in secondo piano ed in molti tipi di interazione è praticamente impercettibile.
L'utilizzo di questa tecnologia in senso puro non può divincolarsi dalla conoscenza, anche
lieve, del linguaggio Javascript, di cui ora si descrivono brevemente l'etimologia e le sue
caratteristiche.
JavaScript è un linguaggio di scripting orientato agli oggetti comunemente usato nei siti
web. Fu originariamente sviluppato da Brendan Eich della Netscape Communications con
41
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
il nome di Mocha e successivamente di LiveScript, ma in seguito è stato rinominato
"JavaScript" ed è stato formalizzato con una sintassi più vicina a quella del linguaggio
Java. Esso è stato standardizzato per la prima volta tra il 1997 e il 1999 dalla ECMA con
il nome ECMAScript, ed è diventato uno standard ISO a partire dal 1999 (JavaScript 1.5).
La caratteristica principale di JavaScript è quella di essere un linguaggio interpretato: Il
codice quindi non viene compilato bensì c'è un interprete (in JavaScript lato client esso è
incluso nel browser che si sta utilizzando) che esegue riga per riga, a tempo di esecuzione,
quanto trascritto nello script. JavaScript presenta quindi tutte le caratteristiche di un
normale linguaggio interpretato (e di conseguenza i suoi vantaggi e svantaggi) con una
sintassi analoga a quella di un linguaggio compilato (essa è relativamente simile a quella
del C, del C++ e del Java), quindi con la possibilità di utilizzare funzionalità tipiche dei
linguaggi di programmazione ad alto livello (strutture di controllo, cicli, etc.) e con in più
anche la potenzialità di definire strutture più complesse, vicine a quelle adottate nei
normali linguaggi object oriented (creazione di prototipi, istanziazione di oggetti,
costruttori). Un'altra caratteristica importante di JavaScript consiste nel suo essere un
linguaggio debolmente tipizzato, ovvero il tipo delle variabili può non essere assegnato in
fase di dichiarazione e le variabili stesse vengono convertite in maniera automatica
dall'interprete. Inoltre JavaScript è un linguaggio debolmente orientato agli oggetti: ad
esempio il meccanismo dell'ereditarietà si discosta molto da Java e i suoi stessi oggetti
ricordano più gli array associativi del linguaggio Perl che gli oggetti di Java o del C++.
In JavaScript lato client il codice JavaScript viene eseguito interamente sul client, quindi il
server non viene sollecitato. Ciò risulta essere vantaggioso in quanto con la presenza di
script particolarmente complessi il server non verrebbe sovraccaricato. Di contro però, nel
caso di script che presentino una considerevole mole di dati, il tempo per lo scaricamento
potrebbe diventare troppo lungo.
Sebbene cominciare ad utilizzare AJAX sia abbastanza semplice e le conoscenze
necessarie potrebbero essere di livello molto basso, tutt'altro discorso vale per creare
applicativi ed interazioni avanzate: la padronanza nell'utilizzo del DOM (Data Object
Model) per la creazione avanzata di contenuti strutturali e per la manipolazione di file
42
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
XML, e le conoscenze di (X)HTML, CSS, XML ed XSLT (anche al di fuori di ambienti di
sviluppo visuali WYSIWYG come DreamWeaver, FrontPage, GoLive, etc.) fa sì che lo
sviluppatore utilizzi framework che si basano su AJAX piuttosto che utilizzare
direttamente questa tecnologia. D'altro canto però, la necessità di adattare vari tool
disponibili per le proprie esigenze (come ad esempio google maps, fogli di calcolo open
source oppure script per disegnare diagrammi) obbligano comunque la conoscenza del
linguaggio Javascript.
3.1.2 Caratteristiche e metriche di valutazione dei framework
Restando vincolati alla tecnologia AJAX, la scelta di un framework adatto per
implementare Web Failure Model WSN Generator si è basata considerando i seguenti
parametri:
 Integrazione con Java: il tool desktop-based di cui si basa la web application è scritto
utilizzando esclusivamente il linguaggio Java, quindi il framework scelto dovrà il più
possibile interagire ed essere compatibile con tale linguaggio, con l’obiettivo da parte
dello sviluppatore di non implementare inutile codice wrapper, di adattamento.
 Estensibilità: il framework deve supportare pattern e metodologie di sviluppo che
permettano interventi al codice nella maniera più efficiente possibile, e magari deve
essere permettere una facile integrazione con altri tool ed altri linguaggi di sviluppo
diversi da Java e Javascript.
 Qualità del supporto: intesa in questo senso come la capacità del framework di essere
manutenuto e migliorato nel tempo. L’affidabilità del framework deve anche riflettersi
sul suo supporto dato dagli sviluppatori nel tempo, e magari suo successo ed
importanza nella community del Web 2.0.
 Curva di Apprendimento: il framework deve avere una curva di apprendimento più
bassa possibile, tale da adattarsi ai tempi di sviluppo di un lavoro di tesi e alla
disponibilità dei futuri sviluppatori nell’imparare altri linguaggi di cui non hanno
un’immediata padronanza.
 Strumenti di supporto: il framework deve essere dotato di strumenti di sviluppo e di
43
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
supporto
alla
web
appllication
in
modo
da
rendere
agevole
e
rapida
l’implementazione. Inoltre deve avere un parco di componenti a disposizione molto
ampio, come ad esempio componenti grafici, strumenti di report, gestione dei
database, etc.
 Costi di sviluppo: sia in termini di tempo sia in termini economici, i costi di sviluppo
derivanti dall’utilizzo del framework devono essere i più bassi possibile: ad esempio è
preferibile utilizzare tecnologie open-source, ma deve essere un open.-source ben
documentato e supportato.
Alla luce di queste caratteristiche, vengono di seguito proposti ed analizzate varie
piattaforme software per lo sviluppo di RIA: ovviamente non saranno tutte le tecnologie
presenti sul mercato al giorno d’oggi, ma rappresentano le più famose, valide e
supportate attualmente, con uno sguardo d’attenzione ai canoni da seguire descritti
precedentemente
3.2 Java Server Pages e IceFaces
Come prima piattaforma software per lo sviluppo di RIA si parte da JSP (Java Server
Pages), poiché fa parte della versione enterprise di Java, nota come Java EE (Java
Enterprise Edition, o in passato J2EE) la quale rappresenta lo standard de facto per
sviluppare applicazioni di tipo enteprise e mission critical. Java Server Pages è una
tecnologia Java per lo sviluppo di applicazioni Web che forniscono contenuti dinamici in
formato HTML o XML. Si basa su un insieme di speciali tag con cui possono essere
invocate funzioni predefinite o codice Java (JSTL). In aggiunta, permette di creare librerie
di nuovi tag che estendono l'insieme dei tag standard (JSP Custom Tag Library). Le
librerie di tag JSP si possono considerare estensioni indipendenti dalla piattaforma delle
funzionalità di un Web server: nel contesto della piattaforma Java, la tecnologia JSP è
correlata con quella dei servlet. All'atto della prima invocazione, le pagine JSP vengono
infatti tradotte automaticamente da un compilatore JSP in servlet. Una pagina JSP può
quindi essere vista come una rappresentazione ad alto livello di un servlet. Per via di
questa dipendenza concettuale, anche l'uso della tecnologia JSP richiede la presenza, sul
44
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
Web server, di un servlet container, oltre che di un server specifico JSP detto motore JSP
(che include il compilatore JSP); in genere, servlet container e motore JSP sono integrati
in un unico prodotto (per esempio, Tomcat svolge entrambe le funzioni).
Quindi le Pagine JSP sono in effetti un'estensione diretta dei Servlet Java e offrono,
rispetto ad altre attuali tecnologie Server-Side, il vantaggio e la possibilità di separare la
sezione di gestione delle operazioni e di produzione dei contenuti, da quello di
visualizzazione vera e propria.
I vantaggi di utilizzare JSP seguono dal fatto che:
 JSP supporta il contenuto dinamico basato sia sugli script che sugli elementi di tipo
markup e consente agli sviluppatori di creare librerie di tag personalizzate per
soddisfare eventuali necessità specifiche di determinate applicazioni.
 Le pagine JSP sono compilate in modo da essere elaborate più velocemente dal server.
 Le pagine JSP possono essere usate insieme alle servlet che gestiscono la logica
applicativa, il modello preferito dai template engine per servel Java
 JSP è una specifica, non un prodotto. Ciò significa che i produttori possono
confrontarsi con implementazioni diverse, con uno sforzo che porta a prestazioni e
qualità migliori.
 Essendo parte integrande di Java EE, JSP può svolgere il suo compito sia nelle
applicazioni più semplici che in quelle più complesse e impegnative.
Normalmente una Pagina JSP è composta da: i) porzioni di codice HTML, JavaScript,
CSS e così via, non compilati dal motore Jsp (Jsp Engine) e comunemente definiti
blocchi di codice statico, e ii) porzioni di codice Java, compilati dal motore Jsp, che
prendono il nome di blocchi di codice dinamico: ciò equivale a dire che utilizzando solo
JSP si avrà alla fine un prodotto non RIA, ma simile alle web application tradizionali,
con refresh della pagina del browser e tutto quanto descritto in precedenza. Per
aggiungere la tecnologia AJAX, la tecnologia JSP può essere arricchita attraverso
l’utilizzo di IceFaces.
ICEFaces[s3] è un framework Ajax opensource utilizzato dagli sviluppatori Java EE per
creare ed effettuare il deploy di Rich Internet Application (RIA) usando il linguaggio
45
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
Java. ICEFaces sfrutta l'intero ecosistema di tools ed ambienti di esecuzione basati su
standard Java EE, e permette di sviluppare applicazioni RIA con numerose caratteristiche
sviluppate in Java senza bisogno di applet o plugin proprietari da integrare nel Browser.
Le applicazioni ICEFaces sono applicazioni JSP così che non ci sia bisogno dell'utilizzo
di Javascript, inoltre il meccanismo che sta alla base (Ajax) è completamente trasparente
allo sviluppatore. Ciò diviene possibile da un'architettura particolare di IceFaces, formata
da tre elementi:
1) Il Framework IceFaces: un'estensione del framework standard JSF con la
fondamentale differenza con cui viene tratta la fase di rendering. Diversamente da
JSF il rendering avviene nel DOM lato server e solo cambiamenti parziali sono
lasciati al browser ed in seguito assemblati con un bridge Ajax molto leggero. Il
risultato è un render fluido, effettuato solo su certi elementi della pagina. Ajax
utilizza le Api inizializzate dal server ed integra il meccanismo similmente al cycle di
JSF.
2) Il Bridge Ajax: presenta elementi lato server e lato client che coordinano la
comunicazione (basata su Ajax) fra il browser del client e l'applicazione lato server.
Il Bridge quindi si occupa di apportare i cambiamenti alla presentazione dalla fase di
rendering al browser del client e del riassemblamento di questi cambiamenti nel
DOM del browser per applicare i cambiamenti. Inoltre ha il compito di rilevare le
interazioni dell'utente con la presentazione e di portare le azioni dell'utente indietro
all'applicazione per essere processate dal JSP lifecycle. Un meccanismo chiamato
partial submit è integrato nei componenti di ICEFaces e facilita la generazione di
eventi attraverso il bridge. La prima volta che la pagina viene caricata viene creato il
bridge Ajax e coordina gli aggiornamenti della presentazione e la trasmissione degli
eventi dell'utente per tutto il lifetime dell'applicazione.
3) La Suite di componenti di ICEFaces: la suite fornisce tutti i componenti per la
costruzione dell'interfaccia grafica dell'applicazione. Include sia i componenti
standard di JSP e una vasta gamma di componenti che consente allo sviluppatore di
costruire applicazioni sofisticate e dall'interfaccia intuitiva. Oltre al meccanismo
46
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
succitato dell'interazione diretta con il DOM i componenti possono utilizzare un set
di effetti come il drag and drop tutto ciò con la semplice modifica di attributi così che
non si debba mai ricorrere a Javascript.
Applicando le metriche di valutazione del paragrafo 3.1.2 si è valutato che JSP insieme a
IceFaces possiede:
 Una perfetta integrazione con Java: essendo JSP parte integrante delle tecnologie Java
Enterprise Edition ed essendo IceFaces basato di JSP, viene naturale da parte dello
sviluppatore Java scrivere una web application con tale linguaggio;
 Un’ottima estensibilità: una web application con queste tecnologie può essere di
qualsiasi dimensione, semplice o complessa: inoltre nell’architettura Java EE è
integrata JSF (Java Server Faces), un’architettura basata sul pattern MVC (Model
View Controller), sfruttata soprattutto da IceFaces, che ben si presta a far crescere o
decrescere un progetto.
 Un’ottima qualità del supporto: Java EE è la migliore tecnologia opensource sul
mercato per lo sviluppo di applicazioni enterprise, e IceFaces, nato nel 2001, è
diventato un prodotto leader nel mondo dei framework complementari basati sullo
standard JSF.
 Bassa curva di apprendimento: rispetto agli altri framework analizzati, lo sviluppo di
un’applicazione web con Java EE, JSP, JSF e IceFaces obbliga lo sviluppatore ad
avere una buona padronanza di queste tecnologie, nonché una buona conoscenza dei
DOM, di XML, CSS, ed HTML. Una conoscenza di questo tipo comporta
sicuramente un’implementazione ottimale di un progetto in tempi più rapidi rispetto
all’utilizzo di altri framework, ma comporta anche un certo tipo di preparazione
sicuramente non ottenibile in tempi brevi.
 Strumenti di supporto ottimi: queste tecnologie si affidano a tool di sviluppo Java
potenti e gratuiti: IBM Eclipse, Sun NetBeans, Oracle Jdeveloper. I tool di supporto
ad IceFaces si integrano perfettamente con i software appena citati. Per quanto
riguarda componenti di terze parti, l’edizione commerciale di IceFaces comprende, a
pagamento, moltissimi strumenti in più per lo sviluppo delle RIA: componenti come
47
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
un foglio di calcolo, un canvas per il disegno e strumenti di report devono però essere
“importati” in maniera manuale.
 Bassi costi di sviluppo: nonostante la formazione teorica e pratica degli sviluppatori
per l’utilizzo di queste tecnologie comporti una spesa non trascurabile, si utilizzano
comunque piattaforme open-source, ottimamente documentate e supportate, le quali
abbattono sicuramente i costi di licenza.
Java EE, JSP e IceFaces sono state le prime tecnologie analizzate per questo lavoro di
tesi, e sarebbero state sicuramente scelte per l’implementazione di Web Failure Model
WSN Generator, se non fosse stato per la praticità e per la nuova (e innovativa)
metodologia di sviluppo che caratterizzano il framework che si è realmente scelto.
3.3 Openlaszlo
Openlaszlo[s4] è una piattaforma degna di nota soprattutto dal fatto che è stata una delle
prime ad offrire librerie e strumenti opensource per lo sviluppo delle RIA.
Originariamente nota col nome di Laszlo Persentation Server (LPS), dal 2004 diventa
opensource e mette a disposizione dello sviluppatore una piattaforma che produceva in
output dei file .swf (letti dal browser con il plug-in Flash) che costituivano la RIA,
programmata non utilizzando strumenti proprietari della Macromedia, ma attraverso un
linguaggio coniato dalla stessa società fondatrice, Laszlo System Inc.
Dalla versione 4.0B1 (2009) le applicazioni scritte utilizzando Openlaszlo possono
essere compilate non soltanto in file flash, ma anche in file DHTML, introducendo quindi
AJAX nello sviluppo. L’intera piattaforma è basata su due componenti principali:
1) Linguaggio LZX: un linguaggio risultante dalla fusione di aspetti dichiarativi,
derivanti dall’XML, con altri linguaggi tipici della programmazione Object-Oriented.
2) Openlaszlo Server: una particolare servlet Java che compila le applicazioni LZX in
binari eseguibili per la macchina target.
In pratica le applicazioni Laszlo possono essere sviluppate come tradizionali servlet Java,
il cui output viene dinamicamente restituito al browser (in questo caso è necessario che il
WebServer abbia in esecuzione l'OpenLaszlo server) o, in alternativa, le applicazioni
48
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
Laszlo possono essere compilate da LZX in un file SWF e caricate staticamente in una
pagina web esistente. Questa tecnica è nota come "SOLO deployment". Le applicazioni
sviluppate in questo modo mancano di alcune funzionalità rispetto alla versione basata su
servlet, come ad esempio la possibilità di interazione con Web Services tramite il
protocollo SOAP e la possibilità di effettuare invocazioni a procedure remote (RPC)
XML. In aggiunta, nel luglio 2009 è nato un progetto, di matrice italiana, di nome
“eu4ria” che ha l’obiettivo di integrare le applicazioni Openlaszlo con le componenti lato
server di un’applicazione Java EE in maniera semplice. In pratica il progetto consiste in
una serie di annotations nel codice Java, dalle quali vengono generate stubs in LZX in
maniera da invocare metodi di Java nel codice LZX. I criteri adottati nell’analisi dei
framework fanno sì che Openlaszlo possiede:
 Una scarsa integrazione con Java: nonostante Laszlo Server sia una servlet Java, lo
sviluppatore utilizza prettamente il linguaggio LZX, il quale non è solo di tipo
dichiarativo: il progetto eu4ria d’altronde non è ancora maturo per essere un buon
brigde tra Java e LZX, soprattutto per applicazioni complesse;
 Scarsa estensibilità: benché si presti bene a progetti software di piccole e medie
dimensioni, Openlaszlo si presta poco ai design pattern e all’integrazione con codice
di terze parti;
 Buona qualità del supporto: Openlaszlo è comunque un framework molto supportato
dall’azienda e dalla comunità opensource: si può dire che al principio è partito non
molto bene (offrendo in output dei file flash, tecnologia chiusa e incompatibile con
molti sistemi hardware) ma sta proseguendo una buona strada supportando l’HTML
Dinamico, e l’esperienza che sta accumulando questi anni ne sta accrescendo
notevolmente l’utilizzo e il supporto.
 Buona curva di apprendimento: il linguaggio LZX, anche se usato solo per
Openlaszlo, è molto simile a JavaScript, e sono presenti in rete molti esempi e molta
documentazione per apprenderlo velocemente. L’utilizzo del progetto eu4ria per
l’interfacciamento con Java comporta solo la padronanza, da parte dello sviluppatore,
dell’utilizzo delle annotations.
49
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
 Strumenti di supporto sufficienti: nonostante la poca maturità del framework, i tool di
sviluppo messi a disposizione da Openlaszlo sono stabili, efficienti e gratuiti; ma
l’assenza di strumenti di report, fogli di calcolo, mappe e canvas e la mancanza di
integrazione di tool di terze parti si nota ed è molto forte.
 Bassi costi di sviluppo: sia in termini di tempo sia in termini economici, i costi di
sviluppo derivanti dall’utilizzo di Openlaszlo sono molto bassi: infatti questo
framework viene spesso definito dalla comunità di sviluppatori RIA come
l’alternativa opensource ed economica ad Adobe Flex.
3.4 Adobe Flex
Nonostante non abbia nessun tipo di supporto alla tecnologia AJAX, Adobe Flex[s5] è
degno di menzione poiché si è affermato quale principale piattaforma tecnologica per la
realizzazione di RIA: in effetti il termine Rich Internet Application è stato coniato
proprio dall’azienda Macromedia (acquisita in seguito da Adobe) nel marzo del 2002[s6],
e con la tecnologia Flash Adobe ha cercato sempre di offrire un’esperienza utente
innovativa rispetto alle tecnologie presenti. Dalla versione 3 (la versione attuale è la 4 ed
il nome del tool di progettazione e compilazione cambia da Flex Builder a Flash Builder
4) la tecnologia Flex è diventata opensource, nonostante tutti i tool per utilizzarla siano
closed e non-free.
Il punto di partenza di questo framework è stato il fatto che i programmatori tradizionali
di applicazioni hanno trovato impegnativo doversi adattare alla metafora di animazione
su cui la piattaforma Flash originalmente è stata sviluppata. Flex cerca di minimizzare
questo problema fornendo un workflow e un modello di programmazione noto a quegli
sviluppatori, attraverso l’utilizzo di un linguaggio XML denominato MXML per la
stesura di interfacce utente, e tramite un linguaggio di scripting noto come Actionscript,
simile a Javascript e basato anch’esso sulla programmazione ad oggetti. Flex
inizialmente è stato rilasciato come una applicazione Java EE o JSP che compilano
MXML e ActionScript al volo in applicazioni Flash (file binari SWF). Le versioni
successive di Flex supportano la creazione di file statici che vengono compilati nello step
50
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
di creazione e possono essere pubblicate online senza la necessità di una licenza server.
Flex è già provvisto di componenti e caratteristiche come web services, remote objects,
drag and drop, sortable columns, charting/graphing, built in animation effects e altre
semplici interazioni. Il client viene caricato una volta sola, il workflow è migliorato
moltissimo a differenza delle applicazioni non RIA (eg. PHP, ASP, JSP, ColdFusionMX)
le quali richiedono l'esecuzione di interi processi per ogni azione. Il linguaggio Flex e la
sua strutturazione in sorgenti MXML per la GUI ed ActionScript per la Business Logic
sono studiati per distinguere la logica della programmazione dal design implementando
di fatto il Design pattern MVC. Inoltre, il server Flex funziona come gateway per
permettere al client di comunicare con XML Web Services le Remote Objects (come
Coldfusion CFCs, classi Java, e qualsiasi altra cosa che integra Action Message Format).
Un componente particolarmente utile per interfacciare Flex con Java, escludendo il
commerciale WebOrb[s7], è il progetto opensource BlazeDS[s8], una tecnologia lato server
che offre tre tipi di servizi:
 Remoting Service, che permette di richiamare metodi di Java object sul proprio
application server direttamente dall’applicazione sviluppata in Flex;
 Message Service, che fornisce un’infrastruttura di tipo publish/subscribe;
 Proxy Service, che permette di effettuare richieste a servizi di tipo cross-domain
BlazeDS è nato come parte integrante del componente Adobe LiveCycle Data Services
ES, una suite che permette una più ampia interazione con dati e business logic di
applicazioni Enterprise. Concludiamo questa breve descrizione di Flex descrivendone le
caratteristiche adatte al progetto Web Failure Model WSN Generator. Per
quest’applicazione web Adobe Flex presenta:
 Una buona integrazione con Java: WebOrb, BlazeDS e LiveCycle Data Services sono
progetti maturi ed efficienti per integrare tecnologie flash con Java, e forse lo
sviluppatore di RIA impega più tempo a configurare questi servizi che ad adattare il
codice Java dell’applicazione desktop-based all’interfaccia in Flash.
 Buona estensibilità: la piattaforma software sviluppata da Adobe oggi si presta bene
sia per piccoli progetti in espansione che per grandi progetti di tipo enterprise.
51
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
 Ottima qualità del supporto: Macromedia ha coniato il termine RIA, ed Adobe ha
sempre investito sul web dinamico. Da molti anni si è maturato in tutto il mondo il
supporto e la formazione, sia in termini commerciale sia in free community.
 Curva di apprendimento media: oltre alla padronanza di Java e la conoscenza di Java
EE o del framework Spring, lo sviluppatore deve imparare altri due linguaggi, MXML
ed ActionScript: i tempi di sviluppo rispetto alla scelta di altri framework sono
mediamente più lunghi
 Buoni Strumenti di supporto: Flex Builder è basato su Eclipse, e mette subito a suo
agio lo sviluppatore. Inoltre il parco software trovabile in rete di componenti per il
reporting, fogli di calcolo, diagrammi e canvas è molto ampio, anche se prettamente
closed e non-free.
 Alti costi di sviluppo: l’SDK di Adobe Flex e BlazeDS sono gli unici prodotti privi di
costi di licenza. Tutti gli altri strumenti, compreso l’editor, i diagrammi, e le
tecnologie per l’accesso avanzato ad applicazioni enteprise sono a pagamento ma con
un buon supporto.
Nonostante Flex sia una tecnologia stabile ed efficiente per lo sviluppo di RIA, al giorno
d’oggi un punto debole resta proprio l’output in Flash che, rispetto ad AJAX, è closedsource e risulta spesso incompatibile e di scarse prestazioni in molti dispositivi client.
3.5 Echo 3
Il web framework Echo3[s9] è la prima tecnologia analizzata che unisce i vantaggi di
Openlaszlo a quelli di Adobe Flex e, insieme ad altri framework (compreso quello
scelto) introduce un concetto di sviluppo RIA innovativo: adattare il modello ad oggetti
Swing per lo sviluppare web application event-driven. Questo concetto, approfondito nel
prossimo capitolo, fa sì che lo sviluppatore implementi rich internet applications in tempi
brevi, utilizzando AJAX ma senza conoscere Javascript e il modello DOM, con la quasi
totalità del codice scritto nel linguaggio Java.
Infatti le applicazioni Echo3 sono compilate in byte code Java e vengono eseguite su un
server Java. Il loro Java code è eseguito dallo strato “Web Application Container” di
52
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
Echo3, che risiede sopra una Servlet Java. Dal lato browser, il “Client Engine” di Echo
comunica ciò che è stato inviato dall’utente al Web Application Container tramite
richieste AJAX, con il server che risponde con direttive in modo da apportare
aggiornamenti incrementali allo stato del browser client.
Le componenti di Echo3 sono progettate per minimizzare una comunicazione
client/server il più possibile, limitandola nei tempi in cui il server deve essere notificato
immediatamente di eventi (ad esempio, semplici eventi come un input dell’utente in un
componente TextField non darà luogo ad una richiesta al server). La risposta del server è
il minimo insieme di istruzioni per l’aggiornamento incrementale del client, in modo da
riflettere uno nuovo stato della finestra del web browser. Inoltre i moduli Javascript del
framework Echo3 sono caricati pigramente (lazy-loaded) al client e da lì in poi messi in
cache. Un modulo sarà recuperato quando un componente che appare sul browser client
lo richiede. Il codice dell’applicazione non è mai mandato al client, solo lo stato
aggiornato dell’interfaccia utente.
Le applicazioni Echo3 supportano l’uso di una logica di applicazione distribuita o un
SOA (Service Oriented Architecture) o possono alternativamente essere costruite per
eseguirsi interamente su una singola istanza della JVM, appoggiata da un middle tier di
tipo POJO (Plain Old Java Object). Questo permette agli sviluppatori di costruire
applicazioni senza preoccuparsi della sicurezza della logica di applicazione distribuita –
affidata a robusti framework come Spring e Hibernate: inoltre, nessun oggetto remoto ha
bisogno di essere "esposto", poiché questo framework memorizza l’intero stato
dell’interfaccia web dell’utente sul server.
Per la scelta del framework da utilizzare, Echo 3 ha dimostrato di avere:
 Un’ottima integrazione con Java: la web application può essere scritta direttamente
lato server in Java utilizzando API event-driven e component-oriented oppure, dalla
versione 3, utilizzando codice JavaScript lato client. La parte AJAX dell’applicazione
non è obbligatoriamente a carico dello sviluppatore.
 Una buona estensibilità: la possibilità di integrare Struts, Hibernate e JSF con
applicazioni di terze parti (per la maggior parte però non ancora mature) rendono
53
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
Echo 3 adatto anche per progetti di medie e grandi dimensioni
 Sufficiente qualità di supporto: sia dalla società NextApp, autrice del framework, che
da molte applicazioni di terze parti, sono disponibili più prodotti in fase beta che
software stabile e maturo.
 Bassa curva di Apprendimento: la buona documentazione a corredo e la caratteristica
di Echo 3 di essere basato solo su Java e Javascript rendono l’apprendimento del
framework semplice e veloce
 Strumenti di supporto sufficienti: l’editor per l’implementazione di interfacce grafiche
in echo, a pagamento, non è attualmente stabile per la versione 3. I componenti di
terze parti per reportistica, diagrammi e fogli di calcolo scarseggiano e spesso bisogna
ricorrere a componenti esterne in JavaScript o Flash.
 Bassi Costi di sviluppo: Echo 3 è nato opensource, ed i costi da sostenere si riflettono
solo sul suo tool eclipse-based.
Presente nel web 2.0 dal 2005, il framework Echo 3 non ancora è riuscito ad affermarsi
rispetto agli altri framework presi in esame, nonostante la presenza di molti componenti
che, anche se in fase beta, lo rendono un prodotto interessante e all’avanguardia.
3.6 Google Web Toolkit
Essendo più un set di tools che un vero e proprio framework, Google Web Toolkit è uno
strumento degno di nota poiché ha contribuito notevolmente alla diffusione di Javascript
e AJAX (le stesse Gmail e Google Maps, applicazioni che hanno destato molta curiosità
e diffusione su internet, sono web application create con questa libreria) ma soprattutto
perché possono trovarsi sul web molti framework per sviluppo RIA basate su questa
tecnlologia (tra i più importanti citiamo Ext GWT[s10], SmartGWT[s11] e Vaadin[s12])
Google Web Toolkit (GWT) è un framework Java per scrivere applicazioni AJAX il cui
approccio è quello di permettere di scrivere le applicazioni utilizzando sempre il
linguaggio Java e solo alla fine convertire (tramite il compilatore di GWT) da classi Java
a codice Javascript e HTML browser compliant (Internet Explorer, Firefox, Mozilla e
Safari per ora). Infatti il ciclo di sviluppo con GWT si può riassumere nel modo
54
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
seguente:
1. Utilizzo di un IDE Java (Eclipse, Netbeans, Junit, IntelliJ, Jprofiler, ecc.) per scrivere
l'applicazione scritta in linguaggio Java, con l'ausilio di alcune librerie messe a
disposizione da GWT.
2. Test dell'applicazione (Hosted Mode) come codice Java compilato che gira all'interno
della JVM.
3. Utilizzo del compilatore GWT per convertire le classi Java in un'applicazione web
composta da files JavaScript e HTML.
4. Verifica dell'applicazione (Web Mode) con i browser che si vuole supportare.
Per implementare questo ciclo di sviluppo, GWT è composto principalmente da 4
componenti:
1. Compilatore GWT Java-to-JavaScript: converte il codice Java in codice Javascript.
Deve essere utilizzato quando si vuole eseguire l'applicazione in modalità "web
mode".
2. GWT Hosted Web Browser: permette di eseguire le applicazioni in modalità "hosted
mode", ossia di eseguire il codice Java nella JVM senza convertire il codice in
linguaggio JavaScript/HTML. Per fare questo, il browser GWT include speciali
librerie per Internet Explorer su Windows e Gecko/Mozilla su Linux.
3. JRE emulation libraryGWT: Contiene le implementazioni in linguaggio Javascript
delle librerie Java standard maggiormente utilizzate (package java.lang.* e
java.util.*). Tutti gli altri package (ad es. java.io.*, java.net.*, ecc.) non sono
supportati nativamente da GWT.
4. GWT Web UI class library: libreria User Interface contenente un insieme di
interfacce e classi che permettono di disegnare le pagine web (ad es. bottoni, text
boxes, immagini, ecc.) . Questa è la libreria principale per creare applicazioni webbased basate su GWT.
GWT compila i sorgenti Java compatibili con J2SE 1.4.2. Ovviamente, dovendo il
compilatore fare una conversione da Java a Javascript, non è supportato tutto il
linguaggio Java ma solo una parte: ad esempio il tipo long è supportato ma, non
55
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
esistendo in Javascript, questo tipo viene convertito come numero floating point doubleprecision; così come GWT non è in grado di utilizzare la finalizzazione degli oggetti
durante il Garbage Collection in quanto non è supportato dal linguaggio Javascript,
oppure GWT accetta le istruzioni di sincronizzazione ma, essendo Javascript un
linguaggio single-threaded, non ha effetti in esecuzione.
L’utilizzo pratico di questo set di tool opensource è di creare semplici ma potenti
interfacce utente per web application: il collegamento il codice prodotto (ma anche
codice Javascript proprietario) con codice sorgente Java di classi business avviene
attraverso la JavaScript Native Interface (JSNI) e attraverso il meccanismo Remote
Procedure Call (RPC): in particolare per far comunicare l’applicazione con il web
server, è sufficiente definire le classi Java che si vogliono utilizzare nel colloquio come
serializzabili ed è stesso GWT che si preoccupa del trasporto: per testare sia l’interfaccia
utente che i colloqui RPC, è possibile utilizzare JUnit.
Come scelta di utilizzare Google Web Toolkit per il nostro progetto abbiamo che questo
framework presenta:
 Una buona integrazione con Java: il codice è scritto e testato in Java e
successivamente convertito in JavaScript automaticamente, ma i tipi, la gestione delle
eccezioni e il multi-threading non sono completamente disponibili, e c’è bisogno di
uno sforzo ulteriore da parte dello sviluppatore di separare bene ciò che può essere
implementato con GWT e ciò che deve essere puramente lasciato in Java.
 Una sufficiente estensibilità: essendo in sintesi una libreria che permette “traduzione”
di codice, pattern e metodologie di sviluppo sono supportate comunque, ma per la
gestione di progetti di media grandezza è consigliabile comunque affidarsi ad altri
framework basati su GWT piuttosto che utilizzarlo direttamente.
 Buona qualità del supporto: dietro a GWT c’è Google, e versioni stabili vengono
rilasciate con molte frequenza. Inoltre il progetto è molto supportato dalla community
opensource.
 Bassa curva di Apprendimento: basterebbe solo la conoscenza di Java per produrre
applicazioni web utilizzando GWT.
56
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
 Strumenti di supporto sufficienti: il framework non ha a corredo strumenti particolari
che estendono gli ambienti di sviluppo che già si usano per creare applicazioni con
Java: anche particolari software che estendono le funzionalità dell’applicazione creata
con GWT sono da ricercare altrove, per poi integrarli attraverso JSNI.
 Bassi Costi di sviluppo: GWT è opensource, e i costi di sviluppo sono quelli che offre
il mondo Java in generale.
3.7 Apache Click
Un'alternativa interessante ai framework studiati, in particolar modo nel caso della
realizzazione di RIA in ambiente J2EE, è rappresentata da Click[s13], proposto da
Apache, che intende superare il modello di interazione basato su MVC, implementato da
framework come Struts, per passare a un modello event driven, tipico dei framework
come Swing.
La progettazione di un'interfaccia con Apache Click consiste nella definizione di almeno
due entità: una classe Java che estenda la classe Page, in cui andiamo a definire tutti gli
oggetti della nostra interfaccia grafica e i relativi eventi da associare agli stessi oggetti, in
maniera del tutto analoga a quanto avviene in Swing.
L'altra entità da definire è una pagina HTML, che si occuperà di visualizzare i controlli,
precedentemente definiti, e l'output dell'interazione con la stessa interfaccia. Tutto ciò è
possibile utilizzando Apache Velocity, un template-engine opensource in Java, che
interagisce con gli oggetti definiti nella classe sopra descritta, utilizzando una sintassi
decisamente comprensibile.
Inoltre Apache Click fornisce un discreto insieme di widget da poter utilizzare nelle RIA;
si integra con framework come Spring Security per quanto riguarda la realizzazione di
meccanismi di autenticazione, e cpm Cayenne per l'interazione con gli ORM.
Ad Apache Click non sono state applicate le metriche descritte nel paragrafo 3.1.2
poiché non è stata considerata una scelta valida rispetto ai framework elencati in questo
capitolo: i motivi principali sono stati la scarsa maturità del progetto (è il framework più
giovane, nato nel Novembre 2009) e non è all’altezza, per varietà ed estetica, dei
57
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 3: Tecnologie e strumenti per le Rich Internet Applications
framework menzionati.
Resta comunque una piattaforma degna di nota e da prendere in considerazione negli
anni a venire poiché è basata sull’esperienza dell’Apache Software Foundation ed è
incentrata su un modo di sviluppare RIA diverso e per certi versi innovativo, molto
simile a quello del ZK Framework, il framework scelto per Web Failure Model WSN
Generator: il direct RIA.
Come riassunto dalla seguente tabella, ZK è il framework che soddisfa in pieno le
metriche scelte per l’implementazione del tool web-based.
58
Capitolo 4
ZK Framework
Questo capitolo termina la fase di progettazione descrivendo il framework con cui è stata
implementata la Rich Internet Application: ZK Framework[s14] della Potix Corporation.
E' stato necessario suddividere questo capitolo dal precedente poiché la descrizione, le
caratteristiche, le features più importanti utilizzate nel progetto meritavano una sezione a
parte: si procede quindi ad analizzare questo framework introducendo prima le sue
caratteristiche, e in seguito approfondendo gli aspetti particolari che lo rendono
innovativo, flessibile e potente. Verranno poi approfondite le metriche di valutazione
scelte e il loro rapporto con ZK Framework, fornendo esempi pratici su questa tecnologia.
Si è preferito tralasciare gli aspetti puramente di programmazione ed analizzare più in
dettaglio cosa lo rende qualitativamente valido nella progettazione di un software.
4.1 Direct RIA: cos’è ZK Framework
Nel vasto mondo dei framework per lo sviluppo di applicazioni web, ZK si presenta come
un Web Framework basato su componenti Ajax, scritto interamente in Java e che permette
di creare ricche interfacce grafiche per applicazioni web senza alcun bisogno di utilizzare
il linguaggio JavaScript né Ajax. Inoltre ZK è open source, e ha adottato di recente la
licenza LGPL che permette di usarlo liberamente anche in ambito commerciale. La parte
centrale di ZK consiste sostanzialmente in un meccanismo "event-driven" basato su oltre
duecento componenti Ajax, e un linguaggio di mark-up (XUL/XHTML) usato per
59
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
disegnare le interfacce grafiche.
A differenza di altri framework basati su Ajax, ZK non richiede al progettista né al
programmatore alcuna conoscenza di Javascript per sviluppare applicazioni web basate su
Ajax, poiché il cuore di questa tecnologia auto-genera il codice Javascript necessario per il
corretto svolgimento dell’applicazione. Ciò si traduce nel fatto che per sviluppare una
web-application bisogna conoscere, oltre a Java, soltanto un minimo di html, poiché lo
sviluppo avviene come se fosse un’applicazione desktop. Questo è uno dei punti forza di
questo framework, ovvero ciò che viene definito dagli stessi creatori il Direct RIA, Rich
Internet Application Diretta, in cui la parte di interfaccia grafica e il controllo associato ad
essa vengono sviluppate come se si stesse utilizzando una qualsiasi libreria grafica, Swing
o AWT per esempio: direttamente vengono utilizzati componenti (bottoni, finestre, label,
container, etc.) direttamente vengono implementati listeners sugli eventi che si vogliono
monitorare (onClick, onChange, buttonPressed, etc.) e direttamente i risultati delle
elaborazioni vengono mostrate al browser, come se fosse una GUI desktop, senza accedere
o controllare i tipici eventi DOM della tecnologia AJAX. La semplificazione dello
sviluppo di web application avviene anche attraverso il ZK User Interface Markup
Language (ZUML) che consente di creare e aggiungere componenti all’interfaccia grafica
(effettivamente possiamo chiamarla così, invece di pagina web) semplicemente
dichiarando e chiudendo tag, così come si fa con HTML, XML e così via. Ovvero, ZK è
un framework che fondamentalmente implica il modello di programmazione desktop alle
applicazioni Web.
Prima di concludere questo paragrafo però, è interessante descrivere cosa ZK non è:
Il framework di base non ha alcun metodo rivolto alla persistenza dei dati; ZK è stato
progettato per essere più leggero possibile, e i metodi che permettono la memorizzazione
di oggetti e dati in file e database vengono delegate ad altre tecnologie che, come vedremo
in seguito, possono essere implementate con facilità nel framework. Inoltre non è nato per
supportare molti task a livello client (per giochi 3d ad esempio) e, a meno di scrivere
componenti personalizzati, non è nato per applicazioni che delegano la maggior parte del
computing ai client: di questo però possono delegarsi altre tecnologie, come ad esempio
60
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
JavaFX o Flash, anch’esse supportate nativamente come integrazione.
4.2 Caratteristiche principali di ZK Framework
La piattaforma software ZK è stata progettata per massimizzare l’efficienza della logica
enterprise e per minimizzare i costi di sviluppo attraverso l’innovativa architettura Direct
RIA. Visitando l’home page del progetto viene mostrata subito un immagine che
racchiude le caratteristiche peculiari del software:
Fig. 4.1 – la semplicità e l’efficienza del framework ZK nell’immagine in home page del progetto
 definisce un linguaggio dichiarativo XML (ZUML) per le interfacce grafiche (View)
che risulta essere estremamente intuitivo e molto meno prolisso del corrispondente
linguaggio XML usato dallo standard JSF;
 è basato su lancio di eventi e sull’utilizzo di componenti: in questa maniera permette
di utilizzare lo stesso modello di programmazione usato nelle applicazioni desktop
anche per le applicazioni web. In particolare, è dotato di un supporto Ajax ad alto
livello: gli input dell’utente dal web browser giungono attraverso Ajax al modello
desktop dell’applicazione lato server;
 si integra in maniera trasparente con Spring, Spring Web Flow, Spring Security, Jboss
Seam, JSP, JSF, Flash plugin, EJB. Oltre al supporto nativo con Hibernate, è
61
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
caratterizzato da un databinding efficiente tra annotations in-page e campi POJOs lato
server;
 supporto completo del CSS: componenti e interfacce grafiche sono personalizzabili
tramite fogli di stile ed è possibile creare temi e skin custom;
 componenti grafici avanzati, dotati di drag-and-drop, context menu (pop-up menu) e
Comet server push;
 permette di gestire i bookmark, ed è nativamente compatibile con i SEO (Search
Engine Optimization);
 presenta numerosi componenti di terze parti come: JFreeChart, JasperReports, Google
Maps, FCKeditor, Timeline, Timeplot, ExtJS, Dojo;
 supporta pattern differenti per la creazione di user interface;
 ZK Script: è possibile scrivere il codice di script che lega la parte business con la parte
vista in molti linguaggi: Java, JRuby, Groovy, JavaScript ma anche Python e PHP.
 è disponibile un ottimo editor WYSIWYG (come plugin per Eclipse) per disegnare e
avere una preview delle pagine che si stanno scrivendo;
 ZK Mobile: possibilità di adattare la web application su dispositivi mobili (in
particolare su Android, BlackBerry e dispositivi con Java Mobile o dotati di web
browser) senza modificare la business logic e il codice backend ;
 è principalmente server-centrico, ma la versione attuale supporta anche la
programmazione lato client in Javascript.
Le principali caratteristiche appena elencate sono sufficienti a far capire il perché sia stato
scelto questo framework per lo sviluppo di Web Failure WSN Generator: si preferisce
però approfondire, nei paragrafi successivi, in che modo le funzionalità di ZK sono state
utili nella realizzazione di questo lavoro di tesi.
4.3 Integrazione con Java: il funzionamento di ZK Framework
La nostra web application si basa, come prima realizzazione, principalmente sul tool
Failure Model WSN Generator: ed è per questo che si è scelta come prima qualità da
rilevare una perfetta integrazione con l’ambiente Java. Per comprendere come il
62
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
framework scelto si integri con quest’ambiente, basta descrivere il funzionamento che sta
alla base di ogni RIA scritta utilizzando ZK Framework.
Il diagramma seguente mostra che ZK è composto da tre componenti principali: ZK
loader, ZK AU Engine e ZK Client Engine.
Fig. 4.2 – Componenti principali di una RIA con ZK Framework
In ascolto alle richieste degli utenti, ZK Loader carica una pagina ZK, la interpreta, e
presenta i risultati ottenuti in pagine HTML in risposta a richieste di tipo URL.
In particolare una pagina ZK è scritta in un linguaggio di markup chiamato ZUML.
ZUML, come HTML, è usato per descrivere quali componenti creare e come
rappresentarli visualmente. Questi componenti, una volta creati, rimangono disponibili
finché non avviene un timeout di sessione.
ZK Client Engine e ZK AU Engine (Asynchronous Update Engine) lavorano sempre
insieme come "ascoltatore" e "notificatore" di messaggi: essi si scambiano eventi che
scaturiscono dalle azioni richieste dall'utente nel browser, e aggiornano il DOM tree lato
browser web in base a quanti componenti sono manipolati dall'applicazione: queste azioni
sono alla base della programmazione guidata dagli eventi (event-driven programming
model) per le web application.
Il Flusso di esecuzione di una RIA con ZK Framework può essere descritto più
chiaramente in questo modo.
1. Quando un utente digita l’indirizzo web o clicca su un hyperlink nel web browser,
63
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
viene fatta una richiesta al Web server: la richiesta, se l’indirizzo dell’applicazione è
corretto, viene servita da ZK Loader.
2. ZK Loader carica la pagina specificata e la interpreta per creare correttamente i
componenti richiesti dalla pagina.
3. Dopo aver interpretato l’intera pagina, ZK Loader presenta il risultato in una pagina
HTML. La pagina HTML viene mandata al browser dell’utente insieme allo ZK Client
Engine.
4. ZK Client Engine resta in ascolto nel browser per individuare qualsiasi evento
scatenato dall’attività dell’utente, come ad esempio spostamenti del mouse,
cambiamenti di valori, click sui componenti grafici. Appena individuato l’evento,
notifica lo ZK AU Engine con una speciale richiesta Ajax.
5. Appena ricevuta la richiesta Ajax, lo ZK AU Engine aggiorna se necessario il
contenuto del componente corrispondente, e notifica l’applicazione attraverso
l’invocazione di un handler di eventi (se esiste).
6. Se l’applicazione lato server sceglie di cambiare il contenuto del componente, o
aggiungere o rimuovere nuovi componenti, l’AU Engine spedisce il nuovo contenuto
dei componenti alterati al Client Engine usando particolari richieste Ajax (ZK
responses).
7. Le Zk Responses istruiscono il Client Engine ad aggiornare correttamente il DOM
tree.
Lo ZK Client Engine in particolare è interamente scritto in JavaScript, con il vantaggio di
essere messo in cache dai browser, e quindi spedito dal server al client solo alla prima
visita della web application. Tutto il procedimento appena descritto, a meno di particolari
esigenze, è nascosto al programmatore e presentato al web server attraverso servlet Java.
Tutta la logica che lo sviluppatore deve implementare (o, nel nostro caso, integrare) sfrutta
package Java del framework ZK, e a meno di particolari componenti customizzati, non c’è
bisogno di una conoscenza, neanche minima, di Javascript e Ajax: si è potuto realmente
constatare come nel nostro caso l’integrazione del tool di generazione di modelli di
fallimento è avvenuta in maniera semplice, utilizzando direttamente le classi interessate al
64
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
funzionamento, focalizzando l’attenzione solo alla view della web application non in
maniera tradizionale, ma con una programmazione java ad eventi. In sostanza,
l’impressione che si è avuta nell’implementazione dell’applicazione web-based è stata
un’attenta sostituzione dell’interfaccia di tipo swing originaria con un’altra, implementata
alla stessa maniera, ma che gira all’interno di un browser: ed è questo uno dei veri punti di
forza e di innovazione di questo framework.
4.3.1 Framework Server-Centrico e Client-Centrico
Prima di
continuare ad esaminare
come
la piattaforma
ZK
si
è prestata
all’implementazione del tool web based, è utile analizzare come funziona l’impatto di
questo framework sulle performance di una Rich Internet Application: le prestazioni sono
una metrica che è risultata non cruciale per il progetto, ma è comunque una caratteristica
da prendere in considerazione per futuri sviluppi del tool web-based. In realtà non esistono
test affidabili per misurare quali siano le reali performance di un framework web (in
particolare di quelli esaminati nel capitolo 3), ma possiamo basarci empiricamente su una
caratteristica base, ovvero quella di essere un framework server-centrico o client-centrico.
Fig. 4.3 – Workload tra Web framework Server Centrici e Client Centrici
Si può notare dalla figura precedente che nel caso di frame work client-centrici il carico
computazionale che comporta l’applicazione web, insieme a quello comportato
65
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
dall’interazione del framework con l’ambiente di esecuzione, sia distribuito sia sul client
che sul server: una web application sviluppata attentamente può ridurre notevolmente il
workload del server e migliorarne le prestazioni soprattutto in caso di richieste elevate e
numero elevato di client connessi ad esso (ciò può essere “un’arma a doppio taglio”,
poiché il codice JavaScript aumenta in proporzione alla complessità dell’applicazione
stessa, e quindi diventa facile "rallentare" il browser quando si devono creare molti
widget). Questo miglioramento di prestazioni va a discapito però della manutenzione del
codice; infatti un’architettura di questo tipo impone quasi sicuramente che la parte che
riguarda il client e la parte che riguarda il server siano scritte in due linguaggi differenti:
nel nostro caso ad esempio, scegliendo ZK framework il lato client deve essere scritto
interamente in JavaScript mentre la logica applicativa in Java.
Nel caso di framework Server Centrici il codice applicativo gira interamente sul server,
mentre il web framework si distribuisce tra server e client, in modo che ci sia una
“traduzione” automatica di messaggi tra loro: questo permette la possibilità di utilizzare un
solo linguaggio per gestire due ambienti, ma comporta un consumo di memoria e un
workload maggiore nel server, che aumentano all’aumentare dei client connessi ad esso.
ZK Framework è nato come una piattaforma server-centrica, ma a partire dalla versione
5.0 si possono scrivere applicazioni web client-centriche tramite Javascript: l’utilizzo che
si è fatto per la realizzazione del tool web-.based però è stato principalmente servercentrico per i seguenti motivi:
1. si è utilizzato direttamente il runtime environment di Java e le librerie incluse nel
server: questo è un vantaggio impossibile nelle architetture client-centriche.
2. il tool web-based con l'architettura server-centrica si è integrato efficacemente con il
codice dell'applicazione desktop remotizzata.
3. con il framework server-centrico, si è raggiunto l'obiettivo scrivendo molte meno righe
di codice rispetto all'utilizzo client-centrico, e sono state utilizzate strutture dati e
librerie scritte in Java, quindi molto più "comode" e manutenibili: si è avuto in questo
modo un aumento di produttività e una riduzione dei tempi di sviluppo.
Da questi motivi c’è da dire che il discorso sulle performance non viene automaticamente
66
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
abbandonato: cioè qualora si decida di migliorare l’efficienza del tool web-based, è
consigliabile di adottare tecniche di replicazione server o di cloud computing che svolgono
questo compito egregiamente piuttosto che “spostare” codice verso i client: la scelta del
framework da usare per scrivere la propria applicazione web infatti dovrebbe ricadere su
ciò che permette di completare il lavoro nel minor tempo possibile e contemporaneamente
di produrre un ottimo risultato.
4.4 Estensibilità: MVC, Spring, Hibernate ed Integrazione
ZK Framework mette a disposizione in maniera nativa diverse tecniche e tool per rendere
il software prodotto scalabile: queste tecniche sono opzionali (ad esempio non è necessario
produrre web application tramite pattern MVC, ma è fortemente consigliato dagli stessi
sviluppatori del framework) ma diventano obbligatorie qualora c’è l’esigenza di
accrescere o decrescere le funzionalità dell’applicazione sviluppata mantenendo una buona
manutenibilità del codice, soprattutto se questo codice deve adattarsi a progetti Java
esistenti o a servlet particolari. Tra le tecniche degne di nota, che saranno sicuramente
utilizzate negli sviluppi futuri del tool web-based, vengono analizzate il pattern MVC, i
tool Spring ed Hibernate, e l’integrazione di altri linguaggi e il loro rapporto con il
framework ZK.
4.4.1 Il Pattern MVC con ZK
Il pattern architetturale Model-View-Controller (MVC, talvolta tradotto in italiano
Modello-Vista-Controllore) è molto diffuso nello sviluppo di interfacce grafiche di sistemi
software object-oriented: esso è basato sulla separazione dei compiti fra i componenti
software che interpretano tre ruoli principali:
 il model fornisce i metodi per accedere ai dati utili all'applicazione;
 il view visualizza i dati contenuti nel model e si occupa dell'interazione con utenti e
agenti;
 il controller riceve i comandi dell'utente (in genere attraverso la view) e li attua
modificando lo stato degli altri due componenti).
67
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
Questo schema, fra l'altro, implica anche la tradizionale separazione fra la logica
applicativa (logica di business) a carico del controller e del model, e l'interfaccia utente a
carico della view.
Per comprendere come l’utilizzo del pattern MVC sia importantissimo anche scrivendo
semplici applicazioni, partiamo da un esempio semplice di un’applicazione scritta con ZK,
ovvero una semplice finestra “Hello World”, dotata di un input box in cui, con un click sul
tasto OK, viene aggiornata una label con il messaggio in input:
Fig. 4.3 – Esempio web application in ZK: Hello World
Tralasciando varie configurazioni con web server o application server (molte guide e
tutorial possono sono disponibili nei wiki di ZK) il codice, abbastanza semplice e
intuitivo, per generare quest’applicazione di esempio senza utilizzare il pattern MVC è il
seguente:
68
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
<zk>
<window title="My window" border="normal" height="200px"
width="200px" closable="true"
sizable="true">
Hello World Message:
<label id="lMessage" />
<textbox id="txMessage" />
<button id="okButton" label="OK" onClick="ok_onclick()" />
<zscript type="java">
<![CDATA[
//@DECLARATION
public void ok_onclick() {
lMessage.setValue(txMessage.getValue());
}
]]>
</zscript>
</window>
</zk>
Questo codice (salvato in index.zul nel web server) presenta prevalentemente tag nel
linguaggio di markup ZUL che descrivono i componenti dell’interfaccia grafica (in questo
caso una window, una label, una textbox e un button), tutti dotati di un univoco id,
fondamentale per accedere al componente grafico tramite script o controller. Tramite tag è
stato associato al button con id “okButton” l’evento onClick, gestito direttamente dal
codice Java introdotto nel file di esempio con il tag <![CDATA[ ]]>: è da notare che il
codice Java non fa parte di una classe, e che al linguaggio Java possono sostituirsi altri
linguaggi a seconda dell’interesse dello sviluppatore.
Lo stesso esempio riscritto utilizzando il pattern MVC è costituito da due file: il file
index.zul riscritto in questo modo:
<zk>
<window title="My window" border="normal" height="200px"
apply="esempio.HelloController"
width="200px" closable="true"
sizable="true">
Hello World Message:
<label id="lMessage" />
<textbox id="txMessage" />
<button id="okButton" label="OK" />
</window>
</zk>
e il file HelloController.java, del package esempio, che rappresenta la classe controller
69
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
associata al file index.zul:
package esempio;
import
import
import
import
org.zkoss.zk.ui.event.Event;
org.zkoss.zk.ui.util.GenericForwardComposer;
org.zkoss.zul.Label;
org.zkoss.zul.Textbox;
public class HelloController extends GenericForwardComposer {
protected Label
lMessage;
protected Textbox txMessage;
public void onClick$okButton(Event event) {
String message = txMessage.getValue();
lMessage.setValue(message);
}
}
Si intuisce facilmente che per ottenere il pattern MVC bisogna seguire le seguenti regole:
1. Nel file ZUL il componente da controllare deve avere nel tag l’attributo apply uguale
al nome della classe Java responsabile del controllo.
2. La classe Java controller deve estendere la classe GenericForwardComposer ed avere
come campi almeno i componenti descritti nel file ZUL con lo stesso nome id.
3. Ogni evento che si vuole controllare deve essere intercettato da un metodo dichiarato
nella forma: nomeEvento$nomeComponente (Event event)
In questo modo si applica il pattern MVC specificando che:
1) Con "Model" intendiamo sia le funzionalità di business che gli oggetti business, in
pratica logica applicativa e relativi oggetti.
2) La parte "View" è un insieme di componenti grafici che compongono la pagina web
(ZUL file) senza la logica di elaborazione degli eventi.
3) La parte "Controller" è una classe Java registrata su un EventListener di uno o più
componenti che ha il compito di elaborare gli eventi lanciati dalla View.
Seguendo questo approccio i vantaggi che ne derivano sono considerevoli: i file che si
ottengono sono più “puliti”, e sono sviluppabili separatamente; ovvero i progettisti di
70
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
interfacce grafiche possono lavorare ai vari file ZUL che compongono l’interfaccia
grafica, e parallelamente gli sviluppatori implementano la logica applicativa collegandosi
all’interfaccia grafica con il solo attributo apply=package.classeController.
4.4.2 Spring con ZK
Nell’esempio precedente abbiamo descritto come la parte Model quella contenente oggetti
business e di logica applicativa: possiamo quindi far gestire gli oggetti business ad un
framework come Spring. Spring è un framework open source per lo sviluppo di
applicazioni su piattaforma Java: Esso è stato largamente riconosciuto all'interno della
comunità Java quale valida alternativa al modello basato su Enterprise JavaBeans (EJB).
Rispetto a quest'ultimo, il framework Spring lascia una maggiore libertà al programmatore
fornendo allo stesso tempo un'ampia e ben documentata gamma di soluzioni semplici
adatte alle problematiche più comuni. Sebbene le peculiarità basilari di Spring possano
essere adottate in qualsiasi applicazione Java, esistono numerose estensioni per la
costruzione di applicazioni web-based costruite sul modello della piattaforma Java EE.
Questo ha permesso a Spring di raccogliere numerosi consensi e di essere riconosciuto
anche da importanti vendor commerciali quale framework di importanza strategica.
La scalabilità di cui è dotato ZK Framework ci permette di accedere al contesto di Spring
allo stesso modo come si accede a un qualsiasi altro componente grafico.
Come esempio, iniziamo ad aggiungere all’applicazione Hello World del paragrafo
precedente il listener di Spring (nel file web.xml del web container, es. Tomcat):
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<listener> <listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class> </listener>
A questo punto definiamo un semplice servizio Spring che effettua una elaborazione sul
71
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
messaggio di saluto immesso dall’utente:
<beans>
<bean id="helloService" class="esempio.HelloService">
</bean>
</beans>
package esempio;
public class HelloService implements IHelloService{
public String processMessage(String message) {
return "Ecco il messaggio: " + message; }
}
In questo semplice esempio il servizio HelloService non fa nulla di complicato: aggiunge
solamente un messaggio di saluto; ma in una applicazione reale possiamo legare il servizio
a un catalogo che accede via JPA (Java Persistence API) a un database e questo
meccanismo è completamente trasparente all’intero modulo che implementa le pagine
web. Per legare il bean "helloService" al Controller HelloController, basterà dichiarare un
elemento della classe HelloController che si chiami esattamente "helloService", ovvero
introdurre nel file HelloController.java il campo “protected IHelloService helloService;”.
Infine per ultimare l’integrazione Spring-ZK bisognerà aggiungere al file index.zul
dell’esempio il tag:
<zk>
<?variable-resolver
class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
.....
</zk>
che permette di installare il DelegatingVariableResolver per Spring sulla componente
window di ZK dell'esempio.
Grazie all’integrazione tra ZK e Spring (ma lo stesso discorso si fa con gli EJB) riusciamo
72
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
non solo a disaccoppiare elegantemente la parte modulare che implementa le interfacce
grafiche (Web 2.0) e la parte modulare che implementa la business logic, ma possiamo
sfruttare la features messe a disposizione da Spring (un esempio su tutte: Spring Security).
4.4.3 Hibernate con ZK
Quando la web application è scritta in Java e utilizza una base di dati nel model, è utile
utilizzare la piattaforma Hibernate, una soluzione opensource che fornisce un servizio di
Object-relational mapping (ORM), ovvero che gestisce la rappresentazione e il
mantenimento su database relazionale di un sistema di oggetti Java.
L’integrazione tra Hibernate e ZK, come Spring, è semplice ed efficiente in quanto ci
permette di accedere agli oggetti persistenti messi a disposizione da Hibernate allo stesso
modo come si accede a un qualsiasi altro componente grafico.
Tralasciando le configurazioni su web container, le tabelle del database e le annotazioni,
possiamo dire sommariamente che se abbiamo una classe Evento:
package eventi;
import java.util.Date;
public class Evento {
//come esempio, I metodi get e set sono omessi
public Long id;
public String titolo;
public Date date;
public Evento() {}
}
Dopo aver reso persistente la classe con Hibernate, associando ad esso il file di
configurazione “OR-mapping” Evento.hmb.xml:
73
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping3.0.dtd">
<hibernate-mapping>
<class name="eventi.Evento" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>
E dopo aver specificato una classe responsabile dell’accesso ai dati (EventDAO):
package eventi;
import org.zkoss.zkplus.hibernate.*;
import java.util.Date;
import java.util.List;
public class EventDAO {
org.hibernate.Session _session;
public EventDAO() {
_session=HibernateUtil.getSessionFactory().getCurrentSession();
}
public void saveOrUpdate(Evento anEvent, String title, Date
date) {
anEvent.setTitle(title);
anEvent.setDate(date);
_session.saveOrUpdate(anEvent); }
public void delete(Event anEvent) {
_session.delete(anEvent); }
public Event findById(Long id) {
return (Event) _session.load(Evento.class, id); }
public List findAll() {
return _session.createQuery("from Event").list(); }
}
74
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
il collegamento tra i componenti ZK e gli oggetti persistenti viene implementato nel file
.zul dell’interfaccia grafica in questo modo:
<zk>
<zscript><![CDATA[
import java.util.Date;
import java.text.SimpleDateFormat;
import events.Evento;
import events.EventDAO;
//ricava tutti gli elementi dal database
List allEvents = new EventDAO().findAll();
]]></zscript>
<listbox id="lbxEvents">
<listhead>
<listheader label="Title" width="200px"/>
<listheader label="Date" width="100px"/>
</listhead>
<listitem forEach="${allEvents}" value="${each}">
<listcell label="${each.title}"/>
<zscript>
String datestr = new
SimpleDateFormat("dd/MM/yy").format(each.date);
</zscript>
<listcell label="${datestr}"/>
</listitem>
</listbox>
</zk>
Ovvero, tutto si riduce alla fine ad un attributo ${metodo} del componente (tabella, lista di
selezione, textbox, etc.) di cui si vuole che vengano catturati i dati.
4.4.4 Integrare linguaggi in ZK
Una RIA scritta utilizzando ZK Framework può essere successivamente ampliata
sfruttando altri linguaggi oltre a Java:
<button onClick="javascript:do_something_in_js()"/>
<zscript language="groovy">
def name = "Hello World!";
</zscript>
75
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
Attualmente ZK supporta oltre a Java I linguaggi JavaScript, Ruby, Groovy e Python. In
alternativa è possibile estendere il supporto ad altri linguaggi manualmente, con un
semplice procedimento:
1. Fornire una classe che implementa l'interfaccia org.zkoss.zk.scripting.Interpreter,
oppure che derivi dalla classe org.zkoss.zk.scripting.util.GenericInterpreter (se si
vuole gestire direttamente i namespaces). In alternativa, se l'interpreter supporta BSF
(Bean
Scripting
Framework),
si
può
derivare
la
classe
org.zkoss.scripting.bsh.BSFInterpreter.
2. Dichiarare il linguaggio di scripting sia nel file WEB-INF/zk.xml che in zk/config.xml:
<zscript-config>
<language-name>SuperJava</language-name>
<interpreter-class>
my.MySuperJavaInterpreter
</interpreter-class>
</zscript-config>
Da come si è potuto osservare, la scalabilità di una RIA creata con ZK Framework è
ottima: l’applicazione può crescere o decrescere incorporando altri linguaggi e utilizzando
pattern e tool di supporto mantenendo una buona leggibilità e manutenibilità del codice.
4.5 Qualità del supporto: ZK Forge e case studies
ZK è un framework ideato, progettato e manutenuto dalla società Potix di Taiwan. È una
giovane società che si occupa fin dagli anni ’90 di consulenza per aziende che necessitano
di sviluppare applicazioni per il web (tra gli investitori di Poitx vi sono iD Innovation, di
proprietà Acer, e Asus). Questo prodotto è largamente usato nel web: il sito di ZK conta
più di un milione di download in tre anni di vita (un milione e 300 nel 2010); tra i propri
clienti la Potix annovera una larga varietà di società private e istituzionali, dalle più
piccole alle più grandi. La piattaforma software ha più di 5 anni di vita, e soltanto dal 2007
al 2010 sono state rilasciate più di 30 versioni corrette ed aggiornate di ZK Framework.
76
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
Questo framework gode di una buona qualità del supporto, e lo testimonia anche il fatto
che aziende come: Barclays, Sun Microsystems, Swiss Re, Oracle, Societe’ Generale,
Alcatel-Lucent, State Grid, MMC, China Southern Power Grid (che sono degli esempi di
clienti che fanno parte di Fortune 500) lo hanno utilizzato per molti progetti interni, di
consulenza e di outsourcing. Nato prevalentemente come software opensource e standardbased, ha riscosso un notevole successo anche nelle free comunity: sulla rete si trovano
molti forum, tutorial, guide e corsi di formazione a riguardo. In aggiunta, in collaborazione
con sourceforge, la socità Potix ha implementato ZK Forge[s15], un container di
applicazioni open source create e supportate da free community. Per adesso sono presenti
progetti software quali:
 ZeroKode, un ambiente Web-based per lo sviluppo visuale di pagine ZUML con dragn-drop.
 Zk-Dojo, un insieme di componenti per DOJO Toolkit.
 Zk-FCKEditor, un porting del noto rich text editor FCK come componente ZK.
 Zk-Gmaps, un porting di Google Maps API come componenti ZK.
 Zk Jet, un plug-in per i browser Firefox e Chrome che fornisce allo sviluppatore un
ambiente “sandbox” per testare applicazioni scritte in ZK.
La scelta di questo framework per implementare il tool web-based, con le prospettive
appena elencate, è sembrata una scelta affidabile per il futuro della web application.
4.6 Curva di apprendimento: programming skills e linguaggio ZUML
Allo sviluppatore che utilizza ZK Framework per implementare la propria RIA sono
richieste le sole conoscenze basi di:
 Java o linguaggi java scripting engine, quali Groovy, Rhino, JRuby (Java Ruby),
Jython (Java Python)
 HTML e XUL
In aggiunta, per sfruttare la scalabilità e tutte le features messe a disposizione da ZK, lo
sviluppatore (opzionalmente) deve avere una conoscenza di Javascript e Ajax (per la
programmazione lato client), Databinding dichiarativi (per avere controllo su POJO Java
77
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
Beans) e JSTL (JavaServer Pages Standard Tag Library). Si può notare che per progetti
web semplici non sono richieste conoscenze approfondite: in realtà si potrebbero sfruttare
sono linguaggi di scripting senza usare la programmazione ad oggetti (con tutti gli
svantaggi che ovviamente ne derivano). Per progetti più avanzati la curva di
apprendimento resta comunque bassa, considerando che oltre ad una buona conoscenza di
Java e della OOP lo sviluppatore deve imparare il linguaggio ZUML (ZK User Interface
Markup Language).
ZUML è un linguaggio di markup basato su XML usato esclusivamente per la definizione
di interfacce grafiche: il suo funzionamento può essere paragonato ai linguaggi XUL e
XHTML, ma chi ha dimestichezza con pagine web e HTML (requisito ovvio per lo
sviluppatore web) si trova subito a suo agio per leggerlo e comprenderlo; in aggiunta, il
tool di sviluppo visuale, ZK Studio, messo a disposizione dal framework, aiuta di molto
la comprensione nella definizione di componenti della RIA da implementare.
4.7 Strumenti di supporto: i tool di ZK
A corredo del framework RIA ci sono ottimi strumenti di supporto, suddivisi in prodotti
software creati dalla stessa Potix autrice del framework, e “tool wrapper” di software di
terze parti integrabili facilmente nella piattaforma di sviluppo.
Il primo software sicuramente utile al supporto di ZK è ZK Studio, un ambiente visuale di
sviluppo opensource integrato come plug-in Eclipse, che fornisce allo sviluppatore
strumenti intuitivi per il design UI, prototyping, sviluppo e deployment delle applicazioni
web scritte con ZK. Questo software mette a disposizione dello sviluppatore una View in
Eclipse dotata di una web window, una palette di componenti ZK, una property window e
un editor di file .zul : i componenti ZK possono essere inclusi nel progetto con un
semplice drag and drop, che va automaticamente ad aggiornare il file .zul del progetto,
oppure è possibile programmare nell’editor direttamente con i tag ZUML (compresa la
funzione di autocompletamento del codice) e il risultato viene aggiornato in tempo reale
nella web window. Per testare il funzionamento dell’interfaccia che si sta sviluppando con
ZK studio con il web container, il software si occupa automaticamente dei file manifest
78
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
XML necessari alla configurazione del server, e alla fine crea con poche configurazioni il
file .WAR della web application. In questo modo lo sviluppatore di RIA che utilizza
Eclipse come piattaforma di sviluppo non ha bisogno di tool esterni per programmare la
logica applicativa e l’interfaccia utente.
Fig. 4.3 – ZK Studio in esecuzione con Web Failure Model WSN Generator
Oltre a ZK Spring e ZK JSP Tags, librerie per l’integrazione di Spring e JSP analizzate nel
paragrafo precedente, il framework ZK è dotato di due software Ajax implementabili
liberamente nelle proprie web application: ZK Spreadsheet[s16] e ZK Calendar.
ZK Spreadsheet è un foglio di calcolo web-based con funzionalità ed interfaccia simili a
Microsoft Excel, con supporto a funzioni, grafici, import ed export di file .xls, e
diagrammi collaborativi. E’ un software molto utile per visualizzare, modificare ed
esportare dati in applicazioni web rimanendo nel web browser, e verrà sicuramente
utilizzato in Web Failure Model WSN Generator per visualizzare i risultati ottenuti dalle
simulazioni.
ZK Calendar è un invece un applicazione Ajax simile a Google Calendar che permette di
integrare un sistema di schedulino nelle proprie applicazioni web. Dal lato client offre
un’interfaccia intuitiva, con task e appuntamenti modificabili con drag and drop, mentre
lato server offre una efficiente integrazione con Java, database e Web services. Non è
certo un’applicazione utile per aumentare in futuro le funzionalità del tool web-based
79
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
implementato come lavoro di tesi, a meno che non si pensi di presentare all’utente uno
scheduling professionale sulle simulazioni e il tempo di simulazione effettuato, ma ZK
Calendar rimane comunque un’applicazione che dimostra il buon supporto del framework
ZK.
Fig. 4.4 – ZK SpreadSheet ZK Calendar
Per quanto riguarda i tool di terze parti, il framework ZK offre la possibilità di integrare e
gestire diversi tool sia come componenti grafici nei file .zul sia come metodi a
disposizione nelle classi Java. Tra i più importanti citiamo Jasper Report per la
reportistica, FCK Editor per l’editing di testi, JfreeChart per i grafici, SIMILE Timeline
per la visualizzazione di eventi time-based, Google Maps per le mappe interattive, etc.
L’integrazione e la gestione di questi tool viene implementata in realtà attraverso un
meccanismo di “wrapping” che può essere esteso[s17] teoricamente a qualsiasi software di
terze parti.
80
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 4: ZK framework
4.8 Costi di sviluppo: le versioni disponibili
Il Framework ZK e il software a corredo sono opensource e rilasciati con licenza GPL
nella versione 3 e LGPL nella versione 5. Inoltre la compatibilità con l’ambiente Eclipse e
l’utilizzo di Java fanno sì che lo sviluppo di applicazioni web con questa tecnologia sia
indipendente dal sistema operativo: ciò si riflette sui costi di sviluppo, che in termini
economici sono molto bassi rispetto ad altre piattaforme software presenti sul mercato.
Oltre a ciò esistono versioni due versioni commerciali del framework: Professional
Edition ed Enterprise Edition. Esse differiscono dalla versione free nell’aggiunta di nuovi
componenti grafici, nell’aumento generale di performance e nel supporto tecnico e
consulting; il fulcro principale però resta la community opensource del progetto, in quanto
ogni release viene prima rilasciata con licenza LGPL e poi perfezionata in ambienti
commerciali, e non viceversa.
Per quanto riguarda i costi in termini di tempo, si è discusso precedentemente
dell’innovazione di cui ZK è basato, ovvero quella di adottare una metodologia di
sviluppo di Rich Internet Applications simile allo sviluppo di Java Desktop Applications,
utilizzando programmazione orientata agli oggetti e guidata dagli eventi: analizzando vari
case studies di aziende che hanno sfruttato questo framework per i propri progetti si può
notare un netto miglioramento in termini di tempi di sviluppo. Un piccolo esempio lo è il
seguente lavoro di tesi, la cui implementazione pratica avrebbe richiesto con un approccio
tradizionale tempi di sviluppo più lunghi.
81
Capitolo 5
Implementazione del tool
Il presente capitolo descrive le fasi salienti per l’implementazione del tool web-based,
Web Failure Model WSN Generator. Nella tesi si è dato ampio spazio più alla
progettazione che all’implementazione, e per non dilungare troppo sulla programmazione
in sé, verranno descritte esclusivamente le classi create e il loro ruolo nel progetto.
Il capitolo termina sull’esposizione della funzionalità disegno topologia della WSN e su
come si è utilizzato il framework per realizzarla.
5.1 Pattern MVC e struttura della RIA
Per rendere il tool il più scalabile e modificabile possibile, si è adottato come prima scelta
implementativa la suddivisione dei componenti software utilizzando il pattern MVC, nelle
modalità elencate nel paragrafo 4.4.1. Si è scelto in particolare di racchiudere le classi del
progetto desktop-based Failure Model WSN Generator e il simulatore Mobius nel model,
compresa la nuova classe AmbientVar e il log. L’interfaccia grafica desktop scritta in
Swing, anche se esclusa dal funzionamento del tool web-based, resta comunque inclusa
nel progetto e nel model, in quanto si è prefissato nella progettazione che in futuro
entrambi i tool potranno essere sviluppati parallelamente. Nell’ambiente di sviluppo
eclipse, in particolare, non si sono inglobate le classi del progetto desktop nel progetto
web, ma si è creato un nuovo progetto (ZK Project) che fa riferimento al progetto esistente
del tool desktop-based: in questo modo il tempo che viene speso in configurazione (il
82
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
progetto desktop-based deve sempre rimanere aperto, e tutte le sue classi devono far parte
del classpath sia dell’ambiente eclipse che del web container tomcat scelto) ha reso più
efficiente e comodo lo sviluppo e il debugging di entrambi i tool.
Fig. 5.1 – struttura del tool web-based: MVC con ZK Framework
Alle componenti model è stata lasciata la possibilità di implementare un database
PostgreSQL, compatibile con Mobius, in quanto nelle future implementazioni è possibile
dotare questo simulatore di un archivio in cui memorizzare i risultati delle simulazioni.
Non essendoci vincoli stretti di compatibilità tra il web framework ed i vari software di
database, sarà possibile sfruttare l’archivio in PostgreSQL del server per memorizzare
anche le credenziali degli utenti, o per associare agli utenti le metriche di valutazione
83
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
scelte per la simulazione: per questo si è lasciato un collegamento progettuale, opzionale,
tra le classi controller che sfruttano quasi tutte il ZK Framework, e l’archivio dati.
In particolare il componente software controller racchiude le classi che dialogano sia con i
componenti ZK dell’interfaccia web, sia con i software Failure Model WSN Generator e
Mobius. Oltre a tutte le classi java realizzate per il controllo, questo componente include
anche il file .jar del progetto zkDiagram, un porting opensource della libreria JavaScript
draw2d necessaria per implementare la funzionalità disegno topologia WSN. La view
infine è composta di soli file .zul dell’interfaccia grafica dell’applicazione web, scritti
utilizzando sia il linguaggio ZUML sia HTML.
5.2 Le classi controller
Fanno parte del package webfamogen.controller tutte le classi che, richiamate dai file .zul
attraverso l’attributo “apply”, controllano il funzionamento della GUI web e dialogano con
i software desktop installati nel server. In particolare di questo package fanno parte le
classi:
 LoginBoxController: responsabile della sessione e dell’autenticazione dell’utente
attraverso l’interfaccia del file login.zul. Non avendo ancora implementato un
database e una tabella utenti, l’autenticazione viene eseguita con un semplice
controllo tra i campi user e password: se i campi sono corretti e non vuoti, vengono
sfruttati i metodi delle classi di utilità per creare i file e le cartelle necessarie al
funzionamento della simulazione remota, e se già esistono viene collega la sessione
corrente con le cartelle specifiche dell’utente che ha eseguito l’accesso.
 WebTopologyController: è la classe che controlla l’interfaccia principale del tool
web-based, responsabile di due compiti: emulare il comportamento del tool desktopbased (sia nell’interfaccia che nelle funzionalità) e gestire le scelte utente nella
modellazione e simulazione delle WSN.
 ModelGeneratedUtil: è la classe che gestisce il modello generato o compilato sia dal
tool desktop-based che da Mobius. Essa fornisce all’utente la possibilità di salvare i
modelli generati nel proprio sistema piuttosto che conservarli sul server, sfruttando sia
84
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
le classi di utilità dell’applicazione web sia il metodo org.zkoss.zul.Filedownload.save
messo a disposizione dallo ZK Framework.
 DesignerController: fa parte del package topology.designer ed è la classe controller
responsabile del disegno della topologia WSN ed in particolare della disposizione
corretta dei nodi, del corretto disegno dei link a seconda del metodo di propagazione
selezionato, e del controllo degli input dell’utente. Essa dialoga sia con l’interfaccia
grafica implementata in TopologyDesigner.zul, sia con la libreria ZKDiagram.jar, sia
con le classi di utilità.
 BorderLayoutComposer: è classe che ha l’unico compito di gestire e mostrare tutti i
file ZUL che compongono l’interfaccia grafica all’utente, a seconda delle sue scelte.
E’ la classe con meno logica applicativa delle altre, ma è fondamentale sia per gestire
il layout (di tipo border) delle pagine web sia per consentire lo sviluppo della GUI
suddividendolo in più file, in modo da lavorare in maniera più organizzata.
5.3 Classi di utilità del tool web-based
Così come si è proseguito per il tool desktop-based, anche per il tool web-based si sono
create delle classi di utilità a supporto dell’applicazione, e in particolare a supporto delle
classi controller:
 WebUtil: è la classe responsabile della creazione e controllo di directory e file
dell’utente correttamente autenticato al sistema. Essa fornisce metodi per la
decompressione del file .zip della topologia caricata dall’utente, per la compressione
del modello generato e compilato, e per la restituzione del path delle user directories.
In particolare WebUtil sfrutta i seguenti packages: java.io.File per la manipolazione
dei file e directory, java.util.zip per la compressione/decompressione,
org.zkoss.util.media e org.zkoss.zul.Fileupload per l’upload della topologia. I campi e
i metodi di questa classe sono stati implementati in modo da essere indipendenti dal
sistema operativo utilizzato per contenere il web server, in modo tale da far
distinzione tra i diversi filepath creati: si è notato infatti che i filepath creati nel
sistema Windows (con carattere separatore “\”), diversi dai percorsi creati nei sistemi
85
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
Unix/Linux (con carattere separatore “/”), impedivano il corretto funzionamento del
simulatore Mobius.
 ZKTextBoxHandler: si occupa di gestire i log creati dall’applicazione Failure Model
WSN Generator. Come descritto nel paragrafo 2.2, diminuendo l’accoppiamento tra
l’interfaccia grafica e la logica applicativa del software desktop-based è stato
possibile, attraverso l’utilizzo dei log Java, catturare i messaggi dell’applicazione e
mostrarli all’utente o all’amministratore in qualsiasi modo si voglia, creando soltanto
un nuovo handler. In questo caso, questa classe fornisce un Handler che cattura i log
dell’applicazione desktop e li invia al browser dell’utente in una ZK Text Box
dell’interfaccia grafica. L’implementazione di questa classe, che eredita dalla classe
Handler, ha dato inizialmente risultati imprevisti: infatti è stato difficile gestire thread
generati dai log lato server (cioè in un ambiente Java ben disposto al multi-threading)
che direttamente si collegano al componente grafico ZKTextBox, che viene generato
in run-time sfruttando il linguaggio JavaScript, il quale non supporta nativamente il
multi-threading. Si è aggirato questo vincolo sfruttando lato server un oggetto
StringBuilder e lato client un timer in ZK che aggiorna periodicamente la Text Box
con il suo contenuto.
 ExportUtil: insieme alle classi WSLink e WSNode, è responsabile della corretta
generazione dei file della topologia WSN disegnata dall’utente nel browser. Essa
viene richiamata dal controller DesignerController e sfrutta i package java.io.File e
java.util.zip per creare i file coordinate.txt, distances.txt, energy.txt, losses.txt,
neighbor.txt, radio.txt, TinySan.txt e topology.txt descritti nel paragrafo 1.5. Alla fine
della creazione questi file vengono compressi in un unico archivio zip e messi in
download all’utente.
5.4 La view ed i file ZUL
Lavorando con ZK Framework si è utilizzato un metodo molto comodo per separare e
sviluppare individualmente i componenti grafici visualizzabili dall’utente. Si possono
infatti creare diversi file .zul che compongono la grafica di un progetto, ognuno con un
86
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
diverso layout grafico, diversi componenti e comportamenti, e collegarli tra di loro sia
sfruttando il tag <include> del linguaggio ZUML sia chiamando i metodi Java
Executions.getCurrent().sendRedirect e Executions.createComponents messi
disposizione dal framework.
Ad esempio, per lanciare il tool web-based implementato bisogna digitare l’URL corretto
contenente il file index.zul: all’interno di questo file, escludendo i tag che compongono la
grafica della pagina web, è presente l’istruzione:
<include src="/view/Login.zul"></include>
la quale non solo richiama automaticamente il file Login.zul incluso nella directory view
del progetto includendolo interamente nella finestra corrente del browser, ma è
indipendente dal percorso generato nel web server dopo il deployment dell’applicazione:
in qualunque percorso o sistema è installato il web container tomcat, il file viene sempre
richiamato in maniera corretta.
Dall’altro lato, il file Login.zul è controllato dalla classe Java LoginBoxController, in cui il
frammento di codice che gestisce la corretta autenticazione dell’utente è:
if (isLogged) {
WebUtil.preparadirectory(user);
Executions.getCurrent().sendRedirect("/view/View.zul");
}
Il quale prepara file e directory personalizzate per l’utente e carica la pagina View.zul con
un redirect del browser. Infine la pagina View richiamata dal corretto login è controllata a
sua volta dalla classe controller BorderLayoutComposer la quale, a seconda della
funzionalità scelta dall’utente, con questo frammento di codice:
87
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
if (item!=null) {
MenuNode node = (MenuNode)item.getValue();
Executions.createComponents(node.getLink(),contentDiv,null);
}
ricava l’URL relativo della pagina .zul scelta dall’utente attraverso node.getLink(), elimina
i componenti presenti e li ricrea sfruttando la nuova pagina web e la funzione
Executions.createComponents(String, Component, Map). Il meccanismo appena descritto
di caricare dinamicamente le pagine web in formato .zul permette una buona scalabilità del
software creato attraverso la modularità con cui si aggiungono o si eliminano pagine web
necessarie al funzionamento dell’applicazione web.
Nel progetto Web Failure Model WSN Generator in particolare le pagine .zul
implementate sono:
 Login.zul: Window del login utente;
 View.zul: Layout Container di tipo Border dell’applicazione;
 Generator.zul: Window che emula graficamente il tool desktop-based;
 Model_generated.zul: Floating window del risultato della generazione e compilazione
del modello;
 Metrics.zul: Window per la scelta delle metriche da utilizzare nella simulazione;
 TopologyDesigner.zul: Window per il disegno della topologia WSN.
Per aumentare la sicurezza del tool web-based, si può impedire l’accesso diretto a queste
pagine da parte dell’utente principalmente in due modi: utilizzando i metodi a disposizione
della classe org.zkoss.zk.ui.Executions oppure sfruttare il più affidabile meccanismo
Spring Security messo a disposizione dal web frame work Spring.
5.5 Il Disegno della Topologia: draw2d
La funzionalità del disegno della topologia da parte dell’utente è stata implementata non
88
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
sfruttando direttamente ZK Framework, ma la libreria zkDiagram della Integrated
Modelling. Il disegno grafico su browser web e soprattutto l’oggetto Canvas di HTML5
non è ancora supportato da ZK, e per questo motivo molti sviluppatori hanno adottato
soluzioni alternative sia per implementare in tempi rapidi queste funzionalità, sia per
sfruttarle nello ZK Framework: ne è un esempio zkDiagram, la quale non è altro che un
porting per ZK della libreria Open-jACOB draw2d di Andreas Herz che, scritta
interamente in JavaScript, permette di disegnare e modificare diagrammi di vari tipi.
Rispetto a draw2d che attualmente è diventata una libreria matura e stabile per disegnare
diagrammi su browser web, zkDiagram è un porting incompleto e per certe funzionalità
instabile della suddetta libreria, in quanto non fornisce al framework ZK tutte le
funzionalità che draw2d possiede in Javascript: non è stato possibile utilizzare
direttamente la libreria JavaScript, poiché tutto ciò che l’utente svolge nel canvas di
draw2d deve essere intercettato da ZK, e il modo più semplice e rapido è utilizzare il
porting. ZK Framework mette comunque a disposizione una metodologia per importare
qualunque libreria scritta in Javascript nei suoi componenti grafici, ma il procedimento è
lungo e tedioso per librerie con molte righe di codice, come draw2d: questo perché
importare una libreria in ZK significa “sdoppiare” lo sviluppo in due parti e in due
linguaggi diversi; da un lato bisogna intercettare i cambiamenti provocati dal client
(libreria Javascript) e notificare al server lo stato attuale dell’applicazione, e dall’altro lato
bisogna modificare la parte della sessione utente che riguarda l’uso della libreria con i
cambiamenti voluti dal framework ZK lato server. Bisogna poi implementare tutte le
funzioni Java che riguardano i get ed i set dei campi della libreria Javascript e sviluppare
dei metodi Java che richiamano metodi JavaScript della libreria su cui fare il porting.
Fortunatamente le funzionalità del porting di draw2d per ZK sono state sufficienti per
realizzare la funzionalità del disegno della topologia, in quanto tutto ciò che lo
sviluppatore WSN ha bisogno come oggetti di disegno sono soltanto nodi e link: in
aggiunta, zkDiagram, anche se mal documentato, è un progetto opensource, ed è quindi
possibile modificare ed arricchire il codice sorgente a seconda di ulteriori funzionalità
richieste dal tool web-based per la simulazione remota di WSN. Allo stato attuale
89
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
quest’applicazione permette di disporre su un workspace di dimensioni personalizzabili
dall’utente dei nodi wireless con proprietà modificabili di coordinate, tecnologie radio e
batteria, routing, sensor board e application. Dopo la disposizione di nodi l’utente può
collegare i link manualmente oppure scegliere un modello di propagazione da una lista (ad
esempio, fixed Radius). Nella creazione dei link, automatica o manuale, viene creato
visualmente una curva che collega i nodi in esame, con una piccola label che indica la
probabilità di perdita di pacchetto.
Nell’utilizzo di ZK Framework si è notato infine come sia efficace l’utilizzo di codice
HTML iniettato nel linguaggio ZUML: nei tag infatti possiamo inserire l’attributo style, il
quale applica uno stile HTML al componente desiderato:
<workspace router="bezier" id="wrsTopology"
style="background:#FFFFFF
url(${c:encodeURL('/images/square_tiled.gif')}) repeat;">
</workspace>
Ad esempio nel codice precedente nella GUI web è stato disposto un componente
workspace di nome wrsTopology, con connessioni di tipo bezier e con stile HTML dotato
di un’immagine (la cui path è ricavata con codice JavaScript) di sfondo con un motivo di
riempimento: questo stile può essere modificato a tempo di esecuzione con codice Java:
if (whatBackground.equals("map_alvin")) {
this.wrsTopology.setStyle("overflow:auto;
background:#FFFFFF url(/WebFAMOGEN/images/alvin-map.jpg)
no-repeat; background-attachment: scroll;");
this.wrsTopology.invalidate();
}
attraverso il metodo set Style si è modificato totalmente lo stile del componente workspace
90
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
e tramite il metodo invalidate() si è forzato un refresh di tutti i componenti grafici della
sessione attuale: con questo piccolo “hack” l’utente può modificare lo sfondo del
workspace su cui disporre i nodi ed i link, scegliendo o caricando sul proprio spazio server
un immagine di una zona reale dove disporre la WSN.
5.6 Esempi di funzionamento
Il capitolo si conclude con i seguenti screenshot del tool implementato, i quali riflettono il
funzionamento descritto nel paragrafo 2.2 dedicato ai casi d’uso:
Fig. 5.2 – Login Page del tool
91
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
Fig. 5.3 – Pagina del Failure Model WSN Generator per la generazione del modello: upload della topologia
Fig. 5.4 – Generazione del modello e download del modello generato
92
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
Fig. 5.5 – Disegno della topologia WSN – Disposizione dei nodi
Fig. 5.6 – Disegno della topologia WSN – Creazione link con modello di propagazione Fixed Radius
93
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
Fig. 5.7 – Wizard per automatizzare il processo di disegno, modellazione e simulazione di una WSN
Fig. 5.8 – Wizard – scelta delle metriche di valutazione per la simulazione di WSN
94
Conclusioni
Il presente lavoro è stato diretto ad approfondire le fasi di generazione automatica di
modelli analitici e a porre le basi per estendere la fase della simulazione del modello
analitico generato. Partendo dal tool di generazione automatica di modelli di fallimento e
dal simulatore mobius, si è implementato un tool di remoting che mette a disposizione
questi strumenti in maniera semplice, rapida e con un carico computazionale esiguo da
parte dell'utente. Ciò nel più ampio disegno diretto a meglio inquadrare la progettazione e
la modellazione delle reti di sensori senza filo nelle varie applicazioni ipotizzabili.
Attraverso questo tool l’utente è in grado con un thin client di inserire o disegnare lo
scenario topologico da modellare, ottenere automaticamente un modello analitico atto ad
incentrarsi sulla dependability del sistema, scegliere le metriche da valutare e scaricare il
risultato ottenuto. Inoltre è in grado di ricavare dalla topologia come viene propagata la
comunicazione tra i vari nodi sensore attraverso un modello manuale, un modello di tipo
fixed radius e di altri modelli implementabili successivamente. Tutto questo via web,
senza installare o configurare nulla e senza avere un calcolatore particolarmente
performante.
Le scelte di progetto nella realizzazione dell'applicazione web sono mirate a rendere il
risultato ottenuto quanto più estensibile possibile. Successivamente, infatti, è possibile
l’aggiunta di altri modelli di propagazione, di altri modelli analitici e di ulteriori metriche
di valutazione che possono essere aggiunti in maniera semplice anche se si tratta di
sfruttare librerie esterne o software di terze parti.
95
Realizzazione di uno strumento web-based per la simulazione remota di WSN
Cap. 5: Implementazione del tool
Al fine di dimostrare quanto affermato è stato aggiunta la funzionalità del disegno della
topologia della rete di sensori, la quale è una funzionalità comoda per il progettista di
WSN e che è stata implementata integrando e adattando una libreria web nel progetto.
La scelta del framework per l'implementazione ha da un lato avvicinato le applicazioni
desktop alle applicazioni web e dall'altro ha offerto una programmazione event-driven e
un linguaggio di markup tali da rendere una bassa curva di apprendimento e tempi di
sviluppo relativamente brevi ed il risultato pratico ottenuto presenta caratteristiche che
giustificano il trend attuale dello sviluppo delle Rich Internet Applications e del
miglioramento che esse apportano al web 2.0.
Le metriche adottate nella scelta delle tecnologie RIA hanno reso il prodotto software
implementato adattabile al fine di ottenerne nuove funzionalità e futuri sviluppi. In
particolare lo sviluppo del tool desktop-based, che può essere arricchito di altri modelli
analitici, può proseguire parallelamente allo sviluppo dell’applicazione web based che
funge da container per nuovi modelli di propagazione, nuove metriche di valutazione,
nuovi software di simulazione e nuovi aggiornamenti dei framework di modellazione e di
simulazione. L’inclusione di una piattaforma software come Spring e di un database come
PostgreSQL, magari gestito da strumenti ORM (Object-relational mapping) come
Hibernate, sarà sicuramente necessaria per l’user managment e per memorizzare i risultati
delle simulazioni.
96
Bibliografia
[1]
Marcello Cinque, Domenico Cotroneo, Catello Di Martino, Stefano Russo.
“Modeling and assessing the Dependability of Wireless Sensor Networks”, 2007.
[2]
Catello di Martino "Resiliency assessment of wireless sensor networks: a holistic
approach", 2009.
[3]
W.H. Sanders, J.F. Meyer. “A unified approach for specifying measures of
performance, dependability, and performability”. In A. Avizienis, J. Kopetz, and
J.Laprie, editors, Dependable Computing for Critical Applications, volume 4 of
Dependable Computing and Fault-Tolerant Systems, 1991.
[4]
Umberto Sannolo, “Generazione automatica di modelli di fallimento per la
simulazione di reti WSN”, 2009.
[5]
D.D. Deavours, G. Clark, T. Courtney, D. Daly, S. Derisavi, J.M. Doyle, W.H.
Sanders, and P.G. Webster. “The Moobius framework and its implementation”
IEEE Transactions on Software Engineering, 28(10):956–969, 2002.
[6]
William H. Sanders and The Board of Trustees of the University of Illinois.
“Mobius, User manual”, 2006.
[7]
Roger S. Pressman. "Principi di Ingegneria del Software", 2007.
[8]
Bruce Eckel, “Thinking in Java”, 2007.
[9]
R. Asleson, N.T. Schutta, “Foundations of Ajax”, 2006
[10]
Potix Corp. “ZK: the developer’s guide”, 2009.
[11]
H. Chen, R. Cheng, "ZK: Ajax Without JavaScript Framework", 2007
97
Sitografia
[s1]
www.mobius.illinois.edu
(Mobius tool homepage)
[s2]
www.adaptivepath.com/ideas/essays/archives/000385.php (Ajax Manifest)
[s3]
www.icefaces.org (IceFaces Homepage)
[s4]
www.openlaszlo.org (Openlaszlo Homepage)
[s5]
www.adobe.com/products/flex/ (Adobe Flex Homepage)
[s6]
download.macromedia.com/pub/flash/whitepapers/richclient.pdf (RIA Manifest)
[s7]
www.themidnightcoders.com/products/weborb-for-java (Web-Orb Homepage)
[s8]
opensource.adobe.com/wiki/display/blazeds/BlazeDS/ (BlazeDS Homepage)
[s9]
echo.nextapp.com/site/ (Echo Framework Homepage)
[s10] www.sencha.com/products/gwt/ (ExtGWT homepage)
[s11] code.google.com/p/smartgwt/ (SmartWGT homepage)
[s12] vaadin.com/home/ (Vaadin Homepage)
[s13] click.apache.org (Apache Click Homepage)
[s14] www.zkoss.org (ZK Framework Homepage)
[s15] www.zkoss.org/community/zkforge.dsp (ZK Forge)
[s16] www.zkoss.org/product/zkspreadsheet.dsp (ZK Spreadsheet)
[s17] docs.zkoss.org/wiki/Behind_The_Scene:_Integrating_Google_Maps
(ZK Small Talk: Integration)
[s18] docs.zkoss.org/wiki/Small_Talks (ZK: Small Talks)
[s19] www.integratedmodelling.org/software/zk/zkdiagram.html (zkDiagram Project)
[s20] www.draw2d.org/draw2d/ (draw2d Homepage)
98