Indice - Politecnico di Milano

Transcript

Indice - Politecnico di Milano
I
__________________________________________________________________________________________________________________________________________________________
Indice
1
INTRODUZIONE .............................................................................................................................................4
2
WORKFLOW....................................................................................................................................................7
2.1
WORKFLOW MANAGMENT COALITION (WFMC) ......................................................................................8
2.2
LINGUAGGI ...............................................................................................................................................10
2.2.1
2.2.1.1
Flow object ................................................................................................................................................14
2.2.1.2
Connection objects ....................................................................................................................................15
2.2.1.3
Swimlane ...................................................................................................................................................16
2.2.1.4
Artifact.......................................................................................................................................................17
2.2.1.5
Utilizzo di BPMN......................................................................................................................................19
2.2.1.6
Vantaggi di BPMN ....................................................................................................................................20
2.2.2
BPEL4WS (Business Process Executive Language for Web Services) ..............................................21
2.2.3
WSCI (Web Services Choreography Interface) ..................................................................................27
2.2.4
XLang (Microsoft BizTalk Language) ................................................................................................31
2.2.5
WSFL (Web Services Flow Language) ...............................................................................................31
2.2.6
UML ....................................................................................................................................................32
2.2.7
Linguaggi a confronto.........................................................................................................................33
2.3
3
BPML e BPMN (Business Process Management Language / Notation)............................................10
TOOLS .......................................................................................................................................................34
2.3.1
Collaxa BPEL Designer & Server ......................................................................................................34
2.3.2
Popkin’s System Architect...................................................................................................................35
2.3.3
IBM Business Process Execution Language for Web Services JavaTM Run Time (BPWS4J) ..........38
2.3.4
Intalio|n³ BPMS ..................................................................................................................................39
2.3.5
BEA WebLogic Workshop...................................................................................................................40
2.3.6
Metamill - Visual UML CASE Tool ....................................................................................................41
2.3.7
Visual UML .........................................................................................................................................43
TENDENZE ATTUALI NELLO SVILUPPO DI APPLICAZIONI WEB...............................................44
3.1
APPLICAZIONI PER LA REALIZZAZIONE DI PROCESSI DI BUSINESS .............................................................44
__________________________________________________________________________________________________________________________________________________________
II
__________________________________________________________________________________________________________________________________________________________
3.2
WEB SERVICE ...........................................................................................................................................46
3.3
MODELLAZIONE AD ALTO LIVELLO ..........................................................................................................46
3.3.1
Il modello di struttura .........................................................................................................................49
3.3.2
Modello di composizione ....................................................................................................................50
3.3.3
Modello di navigazione.......................................................................................................................51
3.3.3.1
Link............................................................................................................................................................52
3.3.3.2
Non-contestual link ...................................................................................................................................52
3.3.3.3
Automatic e Transport link........................................................................................................................53
3.3.4
Generazione automatica di applicazioni web.....................................................................................53
3.3.4.1
3.4
MODEL VIEW CONTROL ...........................................................................................................................55
3.4.1.1
4
5
Funzionamento di Struts............................................................................................................................57
VERIFICA FORMALE..................................................................................................................................59
4.1
MODELLO DELL’APPLICAZIONE ...............................................................................................................60
4.2
SPECIFICA DELLE REGOLE DI VERIFICA .....................................................................................................61
4.3
VALIDAZIONE AUTOMATICA ....................................................................................................................63
SCELTE PROGETTUALI.............................................................................................................................64
5.1
USE CASE DIAGRAM .................................................................................................................................64
5.2
REQUISITI DI FLESSIBILITÀ .......................................................................................................................65
5.3
SPECIFICA REQUISITI PER LA NOTAZIONE GRAFICA ..................................................................................65
5.3.1
5.4
6
Unit WebML per la modellazione di workflow ........................................................................................54
Elementi di BPMN adottati.................................................................................................................66
MAPPATURA DI WORKFLOW IN LTL.........................................................................................................68
TOOL ...............................................................................................................................................................69
6.1
L’INTERFACCIA GRAFICA (GUI) ...............................................................................................................69
6.1.1
Toolbar principale ..............................................................................................................................70
6.1.2
La canvas ............................................................................................................................................72
6.1.3
La toolbar della canvas ......................................................................................................................73
6.1.4
Panoramica del diagramma ...............................................................................................................73
6.1.5
Pannello informazioni.........................................................................................................................74
6.2
SALVATAGGIO DIAGRAMMI WORKFLOW ..................................................................................................75
__________________________________________________________________________________________________________________________________________________________
III
__________________________________________________________________________________________________________________________________________________________
6.2.1
6.3
FILE CONFIGURAZIONE .............................................................................................................................79
6.4
TRASFORMAZIONE LINEAR TEMPORAL LOGIC (LTL) ..............................................................................81
6.4.1
6.5
7
Output della trasformazione ...............................................................................................................81
PREDISPOSIZIONE AL MULTILIVELLO ........................................................................................................82
IMPLEMENTAZIONE ..................................................................................................................................83
7.1
7.1.1
CLASS DIAGRAM .......................................................................................................................................84
Implementazione del class diagram....................................................................................................85
7.2
LIBRERIA GRAFICA ...................................................................................................................................86
7.3
STRUTTURA DATI ......................................................................................................................................89
7.4
SALVATAGGIO FILE XML.........................................................................................................................91
7.5
GENERAZIONE TRASFORMAZIONE XSL....................................................................................................92
7.5.1
eXstensible Stylesheet Language (XSL) e XPath ................................................................................93
7.5.2
Alcuni esempi di codice ......................................................................................................................95
7.6
8
Documento XML generato..................................................................................................................77
FUNZIONI PARTICOLARI (POSIZIONAMENTO FRECCE) ...............................................................................96
CONCLUSIONI E SVILUPPI FUTURI ....................................................................................................100
APPENDICE A: BIBLIOGRAFIA .......................................................................................................................102
__________________________________________________________________________________________________________________________________________________________
Introduzione
4
__________________________________________________________________________________________________________________________________________________________
1
Introduzione
Dalla nascita di Internet ad oggi molte cose sono cambiate nella strutturazione delle
applicazioni web. Inizialmente erano disponibili solo semplici pagine html con scopi divulgativi
o informativi. Oggigiorno le necessità e le potenzialità della rete sono notevolmente aumentate
e di pari passo sono cresciute la complessità e le funzionalità offerte dalle applicazioni web:
sino a pochi anni fa era possibile solamente avere informazioni relative all’andamento dei titoli
di borsa, ora gli istituti finanziari forniscono anche servizi come Home Banking e Trading online.
Risulta quindi evidente che le applicazioni attuali necessitano di una progettazione molto
accurata e strutturata, sia dal punto di vista della formalizzazione del processo di sviluppo, sia
dal punto di vista delle notazioni formali e semiformali per la specifica dei requisiti e la
progettazione. In tale ambito esistono diversi linguaggi di modellazione che consentono la
generazione semiautomatica delle applicazioni.
Questi linguaggi forniscono dei costrutti atti a descrivere la realtà d’interesse ad un alto livello
di astrazione, prescindendo dai dettagli dell’architettura, tramite una modellazione che può
essere visuale o solamente formale. Per questo, si punta a distinguere i diversi ambiti di
realizzazione della appicazioni web consentendo di progettare in maniera indipendete tra loro
modello dei dati, modello dell’ipertesto e modello di rappresentazione dell’ipertesto.
Le applicazioni generate mediante questi linguaggi sono sempre più orientate ai processi, per
questo motivo è bene avere un modello di workflow sottostante che sia in grado di descriverle
in maniera semplice e comprensibile. Tramite questo modello è possibile definire delle regole
formali che consentano di verifcare la correttezza delle applicazioni rispetto a certe proprietà.
La verifica formale è un nuovo strumento che serve a validare la progettazione rispetto alla
specifica di partenza. Negli ultimi anni è nata un’intera disciplina che se ne occupa.
Tali concetti vengono trattati diffusamente in questa tesi, dando particolare importanza sia alla
specifica formale delle proprietà da soddifare che al modello delle applicazioni sulle quali viene
realizzata la validazione.
__________________________________________________________________________________________________________________________________________________________
Introduzione
5
__________________________________________________________________________________________________________________________________________________________
Per poter sfruttare le caratteristiche di questo tipo di verifica l’applicazione deve essere
specificata formalmente. Se questo vincolo viene rispettato allora il controllo del
soddisfacimento di proprietà formali può essere effettuato tramite dei verificatori automatici.
L’utilizzo di questo tipo di verifica permette la diminuzione dei tempi e dei costi nella
progettazione dell’applicazione sfruttando al meglio il concetto di anticipazione delle
conoscenze. Difatti, grazie a questa tecnica, è possibile avere un feedback prima ancora che la
realizzazione dell’applicativo venga terminata.
In particolare, questo lavoro di tesi si focalizza sulla verifica delle proprietà orientate ai
processi, concentrando l’attenzione sull’ordine di esecuzione delle attività e sul
soddisfacimento di vincoli sia temporali che logici.
Le proprietà delle applicazioni che vanno verificate, molto spesso sono specificate tramite
formule logiche temporali. Nel caso particolare delle proprietà dei workflow ben si adattano
linguaggi formali come Linear Temporal Logic (LTL). Scrivere e comprendere il tipo di
formule relative a questi linguaggi risulta essere molto complesso per un utente umano, ma ben
si adatta alle caratteristiche di una macchina. Nasce così l’idea di realizzare un tool che
consenta di generare automaticamente regole di logica temporale partendo da una descrizione
formale dell’applicazione web. Dopo un’attenta analisi della struttura delle applicazioni più
diffuse ci si è resi conto di come questa possa essere ben rappresentata tramite un processo di
business ma per la formalizzazione si rende necessario definire una notazione standard.
L’intento è quindi quello di facilitare il compito del progettista per ciò che concerne l’aspetto di
verifica formale delle proprietà associate alle applicazioni web. A tale scopo è stata definita una
notazione grafica, basata su uno standard esistente per la definizione dei workflow: BPML.
La rappresentazione grafica del modello di processo ha come scopo quello di descrivere le
proprietà (pre-condizioni, vincoli, ecc…) che la struttura dell’applicazione deve soddisfare. A
partire da tale rappresentazione vi è poi l’obiettivo di generare automaticamente, tramite
un’apposita trasformazione, formule temporali basate sulla logica di LTL.
Questa tesi è stata sviluppata presso il dipartimento di Elettronica e Informazione del
Politecnico di Milano, nell’ambito del gruppo di Basi di Dati.
Nella sua forma finale, il lavoro si presenta suddiviso in capitoli, del cui contenuto forniamo
una breve descrizione:
•
nel capitolo 2 viene fatta un’analisi degli standard candidati alla modellizzazione dei
processi di business. Inoltre vengono presentati alcuni tool basati su tali notazioni;
__________________________________________________________________________________________________________________________________________________________
Introduzione
6
__________________________________________________________________________________________________________________________________________________________
•
nel capitolo 3 sono presentate le tendenze attuali nello sviluppo di applicazioni web, in
modo particolare si tratterà di modellazione ad alto livello, model view control (MVC);
•
nel capitolo 4 si parla delle potenzialità offerte dalla verification e di come questa stia
assumendo un ruolo sempre più importante nello sviluppo di applicazioni complesse;
•
nel capitolo 5 sono presentate le scelte progettuali fatte per la realizzazione del tool
visuale di modellazione. Saranno analizzati in particolare due aspetti: l’analisi dei
requisiti che dovrà soddisfare la notazione grafica adottata per la rappresentazione dei
diagrammi di workflow e le regole di mapping tra i diagrammi di workflow e le
formule temporali espresse in LTL.
•
nel capitolo 6 si illustra il funzionamento del tool, dall’interfaccia grafica al salvataggio/caricamento dei file. In questo capitolo è descritta anche l’implementazione della
trasformazione LTL;
•
nel capitolo 7 si presentano le scelte implementative effettuate tra cui le librerie grafiche
e la struttura dati, oltre ad alcune funzioni ritenute di particolare rilevanza.
•
il capitolo 8 è dedicato alle conclusioni e ai possibili sviluppi futuri mentre l’ultima
sezione riporta la bibliografia delle fonti che hanno contribuito ad arricchire questa tesi
e la nostra formazione.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
7
__________________________________________________________________________________________________________________________________________________________
2
WorkFlow
La tendenza attuale delle appicazioni web tendono è quella di assumere un carattere sempre
più orientatato verso i processi. Per questo motivo diviene necessario utilizzare i diagrammi
di workflow per modellizzare le proprietà che devono soddisfare. In questo capitolo
andremo ad analizzare in dettaglio alcuni standard esistenti soffermandoci sulla loro
capacità espressiva.
I vantaggi che si possono trarre dall’utilizzo di questo genere di diagrammi possono essere
riassunti nei punti seguenti:
•
il lavoro non arriva in postazioni errate e non si blocca. Gli addetti sono raramente
chiamati a recuperare il lavoro in seguito ad errori;
•
i manager possono concentrarsi su problemi riguardanti l’azienda e il personale, come le
prestazioni individuali e le procedure di ottimizzazione, piuttosto che sull’assegnamento
dei compiti. Agli impiegati non è più richiesto d’inviare il lavoro ad un’altra postazione
e di controllarne il progresso;
•
le procedure sono documentate formalmente ed eseguite esattamente, assicurando che il
lavoro sia eseguito in maniera corretta e rispettando i requisiti a cui è vincolato;
•
ad ogni processo è assegnata la persona (o la macchina) più competente e i processi più
importanti sono assegnati per primi. Gli utenti non perdono tempo a cercare su quale
oggetto lavorare, magari procrastinando lavori importanti ma difficili;
•
il parallelismo, dove due o più compiti sono eseguiti in concorrenza, è più semplice da
realizzare rispetto ad un workflow tradizionale.
Se la persona più competente svolge il compito più importante e segue le procedure corrette
l’organizzazione è condotta in maniera più efficiente, i costi diminuiscono e il servizio al cliente
generalmente migliora notevolmente. Se il lavoro è equamente distribuito e si ha la sicurezza
che si stia svolgendo correttamente, gli utenti sono più soddisfatti.
Per questi motivi l’utilizzo di un workflow è un’ottima soluzione sia dal punto di vista
dell’azienda che del cliente.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
8
__________________________________________________________________________________________________________________________________________________________
2.1 Workflow Managment Coalition (WFMC)
La WFMC, fondata nell’Agosto del 1993, è un organizzazione internazionale no-profit
costituita dalle principali aziende sviluppatrici di software basato sui workflow, da utenti,
analisti e gruppi di ricercatori. Il suo scopo è quello di promuovere e sviluppare i workflow al
fine di definire degli standard nella terminologia, nell’interoperabilità e nella connettività tra i
software che ne fanno uso. Costituita da più di 300 membri in tutto il mondo, la WFMC è il
principale riferimento per il mercato del software di questo settore. Adottando la terminologia di
un generico workflow definita dalla WFMC, si definisce [25]:
•
Attività: elemento basilare (elemento logico) attraverso il quale è definito il processo.
Come per le istanze del processo anche per le istanze delle attività sono definiti degli
stati. Sempre per analogia, e per meglio chiarificare il concetto di istanza, facendo
l’esempio di una conferenza una delle attività è quella di “bidding”, mentre un istanza di
quell’attività è “l’espressione delle preferenze da parte dei revisori per i documenti
sottoscritti alla conferenza sull’integrazione degli ipertesti estesi con i workflow”. Ogni
istanza può dunque trovarsi in uno dei seguenti stati:
o inactive:
esiste l’istanza, ma nessun task esiste ancora;
o active:
esiste un task al quale è stata assegnata per l’esecuzione;
o suspended:
non accade nulla fino a quando l’attività non sarà resumed;
o completed:
l’attività è terminata consistentemente (correttamente).
Attori di un workflow possono essere sia utenti umani sia risorse computerizzate.
•
Processo di business: insieme di una o più attività collegate tra loro in modo da
realizzare un obiettivo di politica di business, ponendosi, generalmente, in un contesto di
struttura organizzativa con ruoli e relazioni.
•
Processo: rappresentazione di un “processo di business” che supporta una
manipolazione automatica come la gestione da parte di un workflow managment system.
La definizione del processo è data tramite una rete di attività, le relative relazioni,
elementi per indicarne l’inizio e la fine e informazioni riguardo le singole attività, come,
__________________________________________________________________________________________________________________________________________________________
WorkFlow
9
__________________________________________________________________________________________________________________________________________________________
per esempio, gli attori che ne prendono parte, le applicazioni informatiche e i dati
associati, ecc…
•
Workflow: automazione, parziale o totale, di un processo di business durante il quale
documenti, informazioni o compiti sono passati, tramite determinate regole procedurali,
da un attore ad un altro per eseguire operazioni.
•
Workflow Managment System: un sistema che definisce, crea e gestisce l’esecuzione di
workflow attraverso l’uso di software in grado di interpretare la definizione di processo,
di interagire con gli attori e, dove richiesto, di richiedere l’utilizzo di tool e applicazioni
informatiche.
Business Process
(i.e. qualcosa che dovrà
succedere)
è definito in una
è gestito da un
Process Definition
Workflow Managment System
(una rappresentazione di
quello che dovrà succedere)
(controlla gli aspetti automatici del Business
Process)
Sub-Processes
composto da
usato per creare
e gestire
attaverso
Activities
Process Instances
(una rappresentazione di quello che sta
attualmente succedendo)
che possono essere
Activities manuali
Activities automatizzate
durante l’esecuzione
sono rappresentate da
Activity Instances
(non sono gestite come
parte del Workflow System)
che includono
e/o
Work Items
(compiti assegnati ad un
attore del workflow)
Invoked
Applications
(applicazioni/ tool utilizzati
per supportare una activity)
Figura 2-1: relazioni tra gli elementi definiti dalla WFMC
In Figura 2-1 possiamo vedere le relazioni che intercorrono tra i vari elementi definiti dalla
Coalizione:
__________________________________________________________________________________________________________________________________________________________
WorkFlow
10
__________________________________________________________________________________________________________________________________________________________
2.2 Linguaggi
Nel mondo dei workflow, per sfruttarne al meglio le potenzialità, sono nati diversi linguaggi
ognuno dei quali con i suoi pregi e difetti. Alcuni sono ormai “datati” e sono stati rimpiazzati da
altri più “moderni” che hanno aggiunto nuove caratteristiche, non disponibili in precedenza,
senza toglierne alcuna. Tra i principali troviamo BMPL e la sua notazione grafica BPMN [14] e
YAWL [9].
Per quanto riguarda la rappresentazione dei workflow la tendenza attuale è quella di includere
nella notazione elementi per l’utilizzo dei web service. Tra questi citiamo BPEL4WS (che usa
come notazione BPMN) [14].
Nell’analisi daremo una visione generale dei linguaggi, parlando anche del supporto che questi
possono dare ai web service. Accenneremo quindi anche a Coreografia ed Orchestrazione
termini spesso utilizzati nella descrizione dei servizi. Nonostante la definizione di questi termini
non colga un consenso universale, ne forniremo ugualmente una sommaria. La Coreografia, che
in genere descrive i processi di più alto livello, tiene traccia della sequenza di messaggi che può
coinvolgere più applicazioni attraverso una visione globale del processo: tende a dare una
visione più collaborativa delle interazioni. L’Orchestrazione descrive come i servizi
interagiscano tra loro a livello di messaggi scambiati. Fornisce una descrizione della logica di
business e dell’ordine d’esecuzione delle interazioni.
Vediamo una panoramica dei linguaggi candidati, dal punto di vista notazione, alla
realizzazione del tool grafico.
2.2.1 BPML e BPMN (Business Process Management Language / Notation)
BPML è un meta-linguaggio per la modellazione dei processi di business così come XML è un
meta-linguaggio per la modellazione dei dati. BPML fornisce un modello esecutivo astratto per
creare processi di business collaborativi e transazionali basato concettualmente su una macchina
a stati finiti transazionale.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
11
__________________________________________________________________________________________________________________________________________________________
Allo stesso modo di come i documenti XML sono solitamente descritti da un XML Schema, i
processi BPML possono essere descritti in un linguaggio di modellazione chiamato extensible
BPML XML Schema.
Definito come mezzo per la convergenza delle applicazioni aziendali esistenti verso
l’orientamento ai processi, BPML offre il supporto esplicito a transazioni distribuite sia di tipo
sincrono che asincrono.
BPMN serve a definire un Business Process Diagram (BPD), questo diagramma sarà un insieme
di oggetti grafici collegati tra loro da frecce che rappresentano i controlli di flusso, il cui scopo è
quello di definire l’ordine di svolgimento delle azioni. Questi oggetti consentono il facile
sviluppo di semplici diagrammi di flusso che hanno il pregio di risultare familiari ed intuitivi
alla maggior parte degli utenti che ne fanno uso (es. flowchart). Gli elementi che compongono il
BPD sono stati definiti rispettando due criteri principali: il primo è che siano il più possibile
distinguibili l’uno dall’altro; il secondo che la forma risulti il più possibile familiare. Le attività
sono rettangolari mentre le decisioni hanno la forma di rombi.
Ciò che si evidenzia, in BPMN, è la ricerca di semplici meccanismi in grado di creare un
modello dei processi di business che forniscano la necessaria espressività del linguaggio per
gestire la complessità intrinseca dei processi di business. L’approccio che si è seguito per
soddisfare questi due requisiti, in apparente contrasto tra loro, è quello di organizzare gli aspetti
grafici della notazione in specifiche categorie. La generazione di questo ristretto gruppo di
categorie permette, a chi legge un BPD, di riconoscere facilmente a quale tipo di categoria
appartiene ogni elemento del diagramma, portando quindi ad una più intuitiva comprensione del
BPD stesso. All’interno di ogni categoria di base è possibile introdurre delle varianti che
permettono di arricchire l’espressività della notazione, senza comunque discostarsi dall’aspetto
originario.
Presentiamo di seguito i simboli utilizzati per la definizione di un processo di business:
•
Activity, Sub-process, Pool e Lane:
Name
Name
Activity: unitàdi lavoro
Subprocess: attività che può essere a sua volta
scomposta in un sottoprocesso
Lane: partizione di una pool, per scopi vari
Pool: rappresenta un partecipante
Figura 2-2: Activity, Sub-process, Pool e Lane in BPMN
__________________________________________________________________________________________________________________________________________________________
WorkFlow
12
__________________________________________________________________________________________________________________________________________________________
•
Eventi (Figura 2-3) caratterizzati per Flow Dimension e Type Dimension:
Flow Dimension
Type Dimension
Start
(avvio di un processo)
End
(conclusione di processo)
Intermediate (evento nel
corso del processo)
Figura 2-3: Eventi in BPMN
•
Flussi (Figura 2-4), nei quali, dove necessario, è possibile specificare condizioni:
Control/ sequence flow:
Sequenza di esecuzione
Default flow: in presenza di più
scelte, flusso scelto di default
Message flow
Conditional control/sequence flow:
seguito se la condizione specificata
all’inizio del flow è verificata
Association: associazione o
flusso di data-objects
Figura 2-4: Flussi in BPMN
__________________________________________________________________________________________________________________________________________________________
WorkFlow
13
__________________________________________________________________________________________________________________________________________________________
•
Gateway (Figura 2-5): punto di fusione, separazione e/o decisione tra diversi flussi:
Figura 2-5: Gateway in BPMN
Cust
Rappresentiamo ora (Figura 2-6) un esempio d’utilizzo di BPMN relativo ad una richiesta di
prestito:
Loan request
Application
Mgr
Preliminary
validation
Application
Final approval
Application
Financial check
+
Empl
+
JobCheck Req
Application
GetJobCheck
[type Send]
[type Receive]
Application
Application
SVC
Job Check
JobCheckS
JobCheckE
Figura 2-6: esempio d’utilizzo di BPMN
L’esempio rappresenta una transazione in cui un cliente può effettuare una richiesta di prestito
mediante la compilazione di alcuni form. Un manager eseguirà dei controlli preliminari e quindi
passerà la pratica ad un impiegato che svolgerà controlli più approfonditi. Sarà poi lo stesso
manager a prendere una decisione finale in base ai dati rilevati dall’impiegato.
Nei prossimi paragrafi saranno analizzati in dettaglio gli elementi principali di BPMN.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
14
__________________________________________________________________________________________________________________________________________________________
2.2.1.1
Flow object
Un BPD è basato fondamentalmente su tre oggetti base, che costituiscono la categoria dei flow
object, in tal modo l’utente non deve essere in grado di riconoscere un elevato numero di
differenti forme. I tre flow object sono:
Event :
è rappresentato graficamente da un cerchio ed è “qualcosa” che accade
durante lo svolgimento di un processo di business. Ci sono tre differenti
tipi di event che variano in funzione del momento in cui sono utilizzati
all’interno del BPD: Start, Intermediate e End (Figura 2-7).
Figura 2-7: rappresentazione grafica di Start, Intermediate e End
Activity:
è rappresentata graficamente da un rettangolo con gli angoli arrotondati
ed indica una generica mansione svolta all’interno di un processo. Ogni
attività può essere di due tipi o atomica (task) o non atomica (subprocess), in quest’ultimo caso l’activity avrà disegnato al suo interno
nella parte inferiore il simbolo ‘+’ che precisa la presenza di un sotto
processo all’interno della stessa. Tramite questa proprietà è possibile
generare dei diagrammi di tipo multi-livello.
Figura 2-8: rappresentazione grafica di Activity e Activity con Sub-Process
Gateway :
vengono rappresentati graficamente tramite un rombo e utilizzati per
controllare sia la divisione (split) che la riunificazione (merge) del flusso
di informazione all’interno di un BPD. In ogni rombo viene inserito un
simbolo che indica quale è il criterio di valutazione logica dello specifico
gateway. Nella Figura 2-9 sono descritti in successione i gateway And,
Or e Xor.
Figura 2-9: rappresentazione grafica di And, Or e Xor
__________________________________________________________________________________________________________________________________________________________
WorkFlow
15
__________________________________________________________________________________________________________________________________________________________
2.2.1.2
Connection objects
I flow object, definiti nel capitolo precedente, vengono tra loro collegati all’interno di un
diagramma così da creare la struttura base di un processo di business. Vi sono vari tipi di
Connecting object definiti dalla notazione di BPMN:
Sequence flow:
è rappresentato da una linea continua con una freccia posta ad un
estremo della linea per indicare il flusso che seguono i dati.
Tramite i sequenze flow è possibile conoscere quale è l’ordine con
cui vengono svolte le attività all’interno di un BPD;
Association:
è rappresentato graficamente da una linea tratteggiata con una
freccia posta al suo estremo. A differenza del sequence flow non
serve per collegare due attività, ma ha il compito di associare alle
flow object dati, testo o altre entità chiamate Artifact. Vedremo in
seguito, con un esempio, quali sono i possibili impieghi;
Message flow:
è rappresentato come una linea tratteggiata che ha un cerchio
aperto ad un capo e una freccia aperta all’altro, come si vede nella
seguente figura. E’ utilizzato per mostrare il flusso di messaggi tra
due differenti partecipanti al processo di business. In BPMN, i
due partecipanti sono rappresentati tramite due separate pool.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
16
__________________________________________________________________________________________________________________________________________________________
Di seguito (Figura 2-10) riportiamo un semplice esempio di BPD dove sono rappresentati gli
elementi base descritti nei precedenti paragrafi:
Figura 2-10: esempio di processo di business
2.2.1.3
Swimlane
BPMN inserisce nella propria notazione un concetto che era già presente in altri linguaggi di
modellazione (i.e. gli Activity Diagram di UML) cioè le swimlane. Tali costrutti hanno lo scopo
di organizzare graficamente le attività, in diversi gruppi, per illustrarne le diverse competenze
e/o funzionalità richieste.
I due tipi di elementi base che costituiscono la categoria delle swimlane sono:
Pool:
rappresenta un partecipante all’interno di un processo di business. Funge da
contenitore grafico per raggruppare tra loro le activity. Il nome che dà il titolo ad
ogni pool indica l’attore del processo associato. Questo ricopre un aspetto
importate nella definizione di processi di tipo Business to Business (B2B). Le
pool sono utilizzate quando il diagramma implica almeno due soggetti che
ricoprono dei ruoli distinti uno dall’altro, per questo all’interno del BPD
risultano fisicamente separati.
Figura 2-11: rappresentazione grafica di una pool
__________________________________________________________________________________________________________________________________________________________
WorkFlow
17
__________________________________________________________________________________________________________________________________________________________
Lane:
sono una sotto-partizione di una pool, servono ad organizzare e a specializzare le
activity all’interno della pool.
Figura 2-12: rappresentazione grafica di una Lane
Come si può notare dall’esempio, nella Figura 2-13, i sequence flow che collegano le activity
possono attraversare i bordi di una lane per collegare tra loro delle activity che hanno come
riferimento due differenti partecipanti al processo:
Figura 2-13: segmento di processo con lane
2.2.1.4
Artifact
Lo scopo di BPMN è quello di garantire la maggiore flessibilità possibile nello sviluppo di un
generico diagramma. Per ottemperare a questa specifica sono presenti nella notazione degli
artifact. Non c’è limite al numero di artifact che è possibile inserire in un diagramma, questo
per consentire di descrivere nel modo più accurato possibile i processi di business. La notazione
definisce tre oggetti per questa categoria:
__________________________________________________________________________________________________________________________________________________________
WorkFlow
18
__________________________________________________________________________________________________________________________________________________________
Data object:
sono utilizzate per mostrare quali sono i dati richiesti o prodotti da
un’activity. Le data object vengono collegate alle activity tramite un
collegamento di tipo association (vedi Figura 2-17 ).
Figura 2-14: rappresentazione grafica di una data object
Group:
è un rettangolo che ha gli angoli arrotondati, disegnato con una linea
tratteggiata. Può essere utilizzato per generare la documentazione o scopi
d’analisi, ma non ha alcuna influenza sui sequence flow.
Figura 2-15: rappresentazione grafica di un group
Annotation:
è un meccanismo per consentire a chi disegna il BPD di inserire dei
commenti testuali che aiutino ulteriormente il lettore nella comprensione
del diagramma del processo di business.
Figura 2-16: rappresentazione grafica di annotation
__________________________________________________________________________________________________________________________________________________________
WorkFlow
19
__________________________________________________________________________________________________________________________________________________________
Di seguito viene riportato un esempio in cui si dimostra come gli oggetti del gruppo artifact
vengono utilizzati all’interno di un BPD:
Figura 2-17: processo con elementi della categoria artifact
E’ bene sottolineare che l’introduzione degli elementi della categoria artifact in un diagramma
non altera in alcun modo la struttura base di un qualsiasi processo composto da activity,
gateway e sequence flow. Per questo è possibile fare un raffronto tra la Figura 2-13 e la Figura
2-17.
2.2.1.5
Utilizzo di BPMN
BPMN è utilizzato per descrivere un’ampia varietà d’informazioni a differenti tipi d'utenza. E’
possibile descrivere diversi tipi di processo di business, per ognuno dei quali è permessa la
rappresentazione di ogni singola parte a diversi livelli di dettaglio. Uno dei possibili utilizzi di
BPMN permette la realizzazione di un modello base sviluppabile all’interno di un BPD. Tale
modello prende il nome di processo Business to Business (B2B) di tipo collaborativo. Un
processo B2B descrive l’interazione tra due o più entità di business. I diagrammi per questo tipo
__________________________________________________________________________________________________________________________________________________________
WorkFlow
20
__________________________________________________________________________________________________________________________________________________________
di processo generalmente hanno una rappresentazione molto generale. Per questo motivo, un
processo non viene analizzato dal punto di vista di uno dei partecipanti ma è utilizzato per
descrivere l’interazione che c’è tra i partecipanti. Nella Figura 2-18 vediamo un esempio di
processo B2B.
Figura 2-18: esempio di processo B2B di tipo collaborativo
2.2.1.6
Vantaggi di BPMN
BPMN è il risultato di una lunga ricerca sui linguaggi di modellazione da parte del BPMI
notation working group, all’interno del quale confluisce una larga parte della comunità degli
sviluppatori di notazioni per modelli inerenti i processi di business.
La definizione di BPMN punta a ridurre la frammentazione che si è sviluppata con la
proliferazione di una miriade di tool per la modellazione dei processi di business. Lo scopo del
BPMI working group è stato quello di prendere da queste notazioni, tra loro divergenti, le idee
migliori e raggrupparle in un’unica notazione standard.
Le notazioni da cui si è preso spunto per la definizione di BPMN sono: UML Activity Diagram,
IDEF, ebXML, Activity Decision Flow e Rosettanet.
L’utilizzo di un unico standard consentirebbe, inoltre, una più rapida adozione da parte del
pubblico di strumenti per la modellazione dei processi di business, riducendo così il divario che
esiste tra la fase di analisi e la fase di implementazione del processo. Basti considerare che
__________________________________________________________________________________________________________________________________________________________
WorkFlow
21
__________________________________________________________________________________________________________________________________________________________
solitamente i due ambiti sono gestiti da persone che hanno una visione del problema
sostanzialmente diversa l’una dall’altra. In genere, l’analisi viene sviluppata a livello di
management di una azienda, che si concentra su aspetti del processo che non necessariamente
hanno la stessa rilevanza a livello implementativo, dove il progettista dovrà invece tenere conto
di altri fattori.
2.2.2 BPEL4WS (Business Process Executive Language for Web Services)
BPEL4WS, attualmente giunto alla versione 2.0 (Aprile 2004), è una notazione per specificare
il comportamento di processi di business basato su web service [14]. I processi in BPEL4WS
esportano e importano funzionalità usando esclusivamente interfacce di web service. BPEL4WS
nasce come risultato dalla fusione di XLang e WSFL (che vedremo nelle prossime sezioni). Si
pone uno strato sopra WSDL poiché ogni processo BPEL4WS può essere esposto come servizio
in WSDL, di cui, tra l’altro, sfrutta le definizioni di data types per descrivere il passaggio di
informazioni. BPEL4WF può anche referenziare servizi esterni specificati in WSDL.
In questo linguaggio i processi di business possono essere descritti in due modi:
•
i processi di business eseguibili modellano il comportamento reale di un partecipante in
un’interazione di business;
•
i protocolli di business usano descrizioni di processo per specificare lo scambio
reciproco di messaggi eseguito da ogni parte coinvolta nel protocollo, senza però
rivelare il relativo comportamento interno. Le descrizioni dei processi per protocolli di
business sono chiamate processi astratti.
BPEL4WS fornisce un linguaggio per la specifica formale di un processo di business e di
protocolli d’interazione di business. Così facendo, BPEL4WS estende il modello d’interazione
con i web service e consente di supportare transazioni di business. BPEL4WS definisce un
modello d’integrazione interoperabile che dovrebbe facilitare l’espansione verso l’integrazione
dei processi automatizzati sia nell’area intra-corporate che in quella B2B.
Uno degli scopi principali di BPEL è “diminuire il costo dell’automazione dei processi di
business tra imprese”.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
22
__________________________________________________________________________________________________________________________________________________________
Nella Figura 2-19 è illustrato un significativo esempio di utilizzo di BPEL4WS. L’esempio è di
tipo RFQ(Request for Qualifications)/Ordine/Pagamento tra un compratore (Buyer) e un
fornitore (Supplier):
Figura 2-19: esempio d’utilizzo di BPEL4WS
Questo esempio descrive contemporaneamente i tre diversi componenti del processo globale: il
processo privato dell’acquirente, il processo privato del fornitore e la collaborazione tra il
compratore, il fornitore, la banca e l’organizzazione che controlla il credito. Il processo privato
dell’acquirente inizia mandando, come parte della sua activity “GetQuote”, un documento RFQ
al venditore (in questo momento inizia la collaborazione). Quando il fornitore riceve il
documento lo invia alla sua activity “ProcessRFQ”. Quest’ultima invoca l’activity
“PrepareQuote” che è effettivamente eseguita da un utente. Come parte di questa activity,
l’utente invoca la “ManageAccount” la quale ha il compito di creare, se il cliente è nuovo, la
sua registrazione e, in ogni caso, di verificarne il credito attraverso un ente associato. Se tutto è
confermato, viene mandato un preventivo alla “processRFQ” che lo inoltra al cliente. Se il
__________________________________________________________________________________________________________________________________________________________
WorkFlow
23
__________________________________________________________________________________________________________________________________________________________
cliente accetta il preventivo, il suo processo stabilisce che inizierà la sua activity “SendOrder” la
quale crea e invia un ordine relativo al preventivo ricevuto. Quando l’ordine viene ricevuto dal
fornitore, questi lo invia alla sua activity “processRFQ”, che a questo punto finisce, e viene
quindi attivata l’activity “processOrder” che avvisa la “IssueInvoice” di inviare una fattura come
risposta all’ordine, e così via…
Andiamo ad analizzare in seguito, Figura 2-20, la struttura di un documento BPEL4WF:
<process attributi>
<!-- specifica partners -->
<!-- specifica variabili e correlazione -->
<faultHandlers>
<catch faultName=“…“ …>activity</catch>
<catchAll>activity</catchAll>
</faultHandlers>
<eventHandlers>
<onMessage partnerLink=“…" portType=“…” operation=“…">
<correlations>
<correlation set="ncname" initiate="yes|no“/> …
</correlations>
activity
</onMessage>
<onAlarm for="duration" until="deadline"?>
activity
</onAlarm>
</eventHandlers>
activity
</process>
Figura 2-20: struttura di documento BPEL4WS
All’interno di quest’esempio troviamo delle activity. L’elenco delle activity di base utilizzate in
BPEL4WS è il seguente:
•
<receive>:
ricezione di un messaggio di web service;
•
<reply>:
risposta a un messaggio di web service;
•
<invoke>:
chiamata di un servizio;
•
<assign>:
assegnamento di valore a variabile;
•
<throw>:
generazione di un fault (errore);
•
<wait>:
attesa (intervallo o deadline);
•
<empty>:
no-operation (es. utile per la sincronizzazione di thread concorrenti);
•
<terminate>: termina il processo (solo per processi eseguibili).
__________________________________________________________________________________________________________________________________________________________
WorkFlow
24
__________________________________________________________________________________________________________________________________________________________
Oltre alle activity di base ne esistono anche di strutturate che hanno il vantaggio di poter essere
innestate a piacere:
•
<sequence>:
sequenza di attività;
•
<switch>:
selezione esclusiva di un ramo;
•
<while>:
ciclo su espressione booleana;
•
<pick>:
attende
un
evento
(onAlarm|onMessage);
•
<flow>:
specifica attività concorrenti;
•
<scope>:
dichiara un’attività innestata, con la stessa struttura di processo;
•
<compensate>: attività di compensazione.
ed
esegue
le
activity
specificate
In BPEL4WS possono essere inoltre specificati i partner, ovvero i partecipati, e i loro ruoli. Un
esempio d’utilizzo si può vedere in Figura 2-21:
<partner name=“Amazon">
<partnerLink name="Venditore"/>
<partnerLink name="Addetto alla spedizione"/>
</partner>
Figura 2-21: partner in BPEL4WS
I ruoli in gioco vengono definiti tramite l’utilizzo di partner link e il loro tipo prende il nome di
partner link type. In Figura 2-22 è visualizzato il codice della dichiarazione di un partner link:
<partnerLinks>
<partnerLink name=“UPS" partnerLinkType=“trasporto"/>
... elenco di partner links
</partnerLinks>
Figura 2-22: partnerLink in BPEL4WS
__________________________________________________________________________________________________________________________________________________________
WorkFlow
25
__________________________________________________________________________________________________________________________________________________________
In particolare il partner link type serve per specificare le relazioni tra i servizi partecipanti alla
conversazione e ogni servizio non è altro che un port type WSDL. Vediamo (Figura 2-23) un
esempio anche di questo:
<partnerLinkType name="LinkAcquirenteVenditore">
<role name="Acquirente">
<portType name="buy:PortTypeAcquirente"/>
</role>
<role name="Venditore">
<portType name="sell:PortTypeVenditore"/>
</role>
</partnerLinkType>
Figura 2-23: partnerLinkType in BPEL4WS
Per eseguire il binding tra port type e port dei web service, BPEL4WS mette a disposizione le
endpoint references. Per ogni istanza di processo BPEL4WS, ad ogni partner role viene
associato un endpoint. Questa associazione può avvenire in due modi diversi: in modo statico
all’inizio del processo; in modo dinamico, ovvero durante l’esecuzione.
BPEL4WS consente l’utilizzo di identificatori di variabili che risultano essere univoci
all’interno di uno scope. Di ognuno può essere specificato sia il nome che il tipo. Quest’ultimo
può essere:
•
Message type: tipo di messaggio WSDL;
•
Type:
tipo semplice di XML Schema;
•
Element:
riferimento ad un XML Schema.
Le variabili hanno il compito di mantenere le informazioni di stato del processo e sono
modificabili tramite l’activity assign che permette la copia di valori di espressioni compatibili:
<assign>
<copy> from to </copy>
</assign>
Figura 2-24: utilizzo dell’activity “assign” in BPEL4WS
In BPEL4WS all’interno delle activity <invoke>, <receive> e <reply> si può utilizzare
un insieme di proprietà, chiamato <CorrelationSet>, che serve per definire la correlazione
all’interno di uno scope.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
26
__________________________________________________________________________________________________________________________________________________________
Un esempio di utilizzo può essere quello di Figura 2-25:
<correlationSets>
<correlationSet name="OrderID"
properties="cor:customerID cor:orderNumber"/>
</correlationSets>
<receive partnerLink="Buyer" operation="AsyncPurchase” ...>
<correlations>
<correlation set="OrderID" initiate="yes"/>
</correlations>
</receive>
<invoke partnerLink="Buyer" operation="AsyncPurchaseResp” ...>
<correlations>
<correlation set="OrderID" initiate="no" pattern="out">
</correlations>
</invoke>
Figura 2-25: correlationSet in BPEL4WS
Per quanto invece riguarda la gestione degli errori verificatisi in uno scope il tutto è reso
possibile dal Fault Handler il cui scopo è disfare il lavoro parziale/errato dello scope. È
permesso l’utilizzo di complesse regole di matching su nomi e variabili associate al fault.
L’handler che viene utilizzato di default è il catch all, eccone un esempio:
<faultHandlers>
<catch faultName=“…“ faultVariable=“…“>
activity
</catch>
<catchAll> activity </catchAll>
</faultHandlers>
Figura 2-26: utilizzo dell’handler “catch all” in BPEL4WS
Per quanto invece riguarda la gestione degli eventi esiste un Event Handler che si occupa di
gestire:
•
onMessage:
ricezione di messaggi;
•
onAlarm:
evento di timeout. Il conteggio del tempo, per il timeout, parte dall’inizio
del rispettivo scope;
__________________________________________________________________________________________________________________________________________________________
WorkFlow
27
__________________________________________________________________________________________________________________________________________________________
Ecco, anche di questo, un esempio di codice:
<eventHandlers>
<onMessage partnerLink=“…" … operation=“…">
activity
</onMessage>
<onAlarm (for="duration" | until="deadline“)>
activity
</onAlarm>
</eventHandlers>
Figura 2-27: gestione di errori “onMessage” e “onAlarm” in BPEL4WS
2.2.3 WSCI (Web Services Choreography
Interface)
WS
1
WSCI
Nato nell’Agosto del 2000, WSCI serve per
descrivere il comportamento interattivo tra
web service osservabile dall’esterno [27]. Le
caratteristiche peculiari di questo linguaggio
sono il supporto alla correlazione di messaggi,
alle regole di sequenza, alle transazioni e alla
collaborazione dinamica, oltre al fatto che è in
grado di gestire le eccezioni.
WSCI
WS
2
WSCI
WS
3
Figura 2-28: documenti WSCI e web service
Per quanto riguarda i documenti generati da
WSCI bisogna dire che, al contrario di quelli
ottenuti da BPEL4WF, non definiscono dei
processi di business eseguibili. Viene però
permesso di specificare dipendenze temporali e
logiche tra i messaggi scambiati. Ogni documento WSCI descrive solamente la partecipazione di un singolo partner nell’interazione.
Questo non consente di avere una visione globale
dell’interazione.
Figura 2-29: relazione tra WSCI e WSDL
I documenti WSCI sono composti da process,
activity (di tipo complesso) e action (di tipo
elementare) più una serie di altri elementi minori.
Le action referenziano operation dichiarate nel
WSDL.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
28
__________________________________________________________________________________________________________________________________________________________
In WSCI può essere aggiunto un ulteriore livello per la coreografia (per esempio usando
BPML), per la quale vengono utilizzati molteplici documenti WSCI i quali a loro volta
referenziano dei WSDL come illustrato nella Figura 2-29. WSDL serve per descrivere le
operazioni dei web service e WSCI descrive le possibili interazioni che queste possono avere.
Detto questo è facile capire come WSCI si ponga uno strato al di sopra di WSDL e in genere la
sua specifica si trovi direttamente all’interno del documento WSDL.
Vengono di seguito illustrate le activity presenti in WSCI:
•
Activity atomica: <ACTION> è l’operazione atomica di scambio messaggio e
corrisponde ad una operation WSDL. È l’activity base in WSCI e al suo interno si
possono specificare due azioni:
o <CORRELATE>:
serve a specificare che si fa uso di un elemento di
correlazione dichiarato in un comando <Correlation>;
o <CALL>:
serve per eseguire la chiamata di un processo;
Un esempio applicativo è illustrato in Figura 2-30:
<action name = "ReceiveConfirmation“
role = "TravelAgent“
operation = "TAtoTraveler/bookTickets">
<correlate correlation="tns:bookingCorr"/>
<call process = "tns:BookSeats" />
</action>
Figura 2-30: esempio di utilizzo di <Correlate> e <Call>
•
Activity complessa: composta da una serie di <ACTION> secondo una determinata
“coreografia”, specificata utilizzando gli elementi:
o
All:
o
Sequence;
esecuzione non sequenziale;
o Choice;
o For-each;
o Switch:
funziona anche con condizioni basate su eventi;
__________________________________________________________________________________________________________________________________________________________
WorkFlow
29
__________________________________________________________________________________________________________________________________________________________
•
Activity “speciale”: ne esistono di diversi tipi:
o Empty: vuota;
o Fault: genera un errore;
o Join.
In WSCI un process non è altro che una porzione di documento che viene etichettata con un
nome. Può contenere elementi sia di tipo <Activity> che di tipo <Action>. La sua
esecuzione avviene in seguito ad uno di questi tre eventi:
•
<call process=“nome”>:
•
<spawn process=“nome”>: chiamata esplicita asincrona in una action (esecuzione
in un nuovo thread);
•
ricezione di un messaggio di richiesta;
chiamata esplicita sincrona in una action (che resta
in attesa);
All’interno del process si dichiara il tipo d’attivazione tramite la variabile instantiation che può
assumere il valore “message” o “other”.
Altri elementi utilizzati in WSCI sono:
• <INTERFACE>:
raggruppa tutti i processi che coinvolgono un web service rispetto
ad un certo scenario. Se un web service partecipa a più scenari
allora avrà anche più interfacce;
•
<CORRELATION>: serve per dichiarare un elemento di correlazione, vale a dire un ID
che viene utilizzato per correlare diversi messaggi tra loro; l’ID così
dichiarato è, in seguito, usato nell’operatore <Correlate>
all’interno delle <Action>;
•
<PROPERTY>:
•
<TRANSACTION>: specifica le proprietà transazionali di un insieme di <Activity>
e consente di dichiarare attività comparative. Le <Transaction>
possono essere di tipo atomico o di tipo open-nested, ovvero
costituite a loro volta da <Transaction>;
serve per referenziare un “valore” all’interno di un’interfaccia.
Corrisponde alla variabile dei linguaggi di programmazione;
__________________________________________________________________________________________________________________________________________________________
WorkFlow
30
__________________________________________________________________________________________________________________________________________________________
Vediamo in Figura 2-31 la struttura di un documento WSCI:
<wsdl:definitions name = "">
<!-- WSDL complex types,message definitions,operations and port types -->
<!-- Definizione dei correlatori,usati poi all’interno delle action -->
<correlation name = “bookingCorr" property = “B_ID“/>
<interface name = "TravelAgent">
<process name = “…” instantiation = "message">
<!-- Definizione della coreografia del gruppo di action / activity -->
<sequence>
<action> …
</action>
<activity> …
</activity>
<action> …
</action>
…
</sequence>
</process>
<process name = “…" instantiation = "other">
…
</process>
</interface>
</wsdl:definitions>
Figura 2-31: esempio di documento WSCI
In WSCI l’ambiente, all’interno del quale una serie di elementi <Activity>/<Action>
vengono eseguiti, prende il nome di Context. Questo permette di definire property, correlatori,
eccezioni e proprietà transazionali per tutte le attività presenti in quel context.
Per quanto riguarda la gestione delle eccezioni, WSCI supporta tre tipi: quelle dovute a Fault,
quelle causate da Timeout e quelle che vengono riconosciute in seguito al ricevimento di un
particolare messaggio. Ogni eccezione è associata ad un insieme di <Activity> che viene
eseguito nel caso in cui si verifichi l’eccezione. La sua struttura è del tipo:
<exception>
content:((onMessage | onTimeout | onFault){+})
</exception>
Figura 2-32: un’eccezione in WSCI
__________________________________________________________________________________________________________________________________________________________
WorkFlow
31
__________________________________________________________________________________________________________________________________________________________
2.2.4 XLang (Microsoft BizTalk Language)
È nato nel 2001 per desrivere interazioni tra web service in MS BizTalkServer [29]. È basato su
WSDL e lo estende con alcune primitive che servono per descrivere, all’interno dello stesso
WSDL, il comportamento reciproco dei web service. XLang permette di specificare sequenze,
condizioni ed esecuzioni parallele di web service. È inoltre in grado di gestire eccezioni
nell’esecuzione. In seguito alla nascita di BPEL4WS viene considerato un linguaggio obsoleto.
In Figura 2-33 rappresentiamo una porzione di documento XLang. Possiamo notare dei
comandi già visti in WSDL come operation e port:
<switch>
<branch>
<case> inventory:InStock </case>
<sequence>
<xlang:action operation="AskLastTradePrice"
port="pGetRequest" activation="true"/>
<xlang:action operation="SendLastTradePrice"
port="pSendResponse"/>
</sequence>
</branch>
<branch>
<case> inventory:OutOfStock </case>
...
</branch>
</switch>
Figura 2-33: esempio di documento XLang
2.2.5 WSFL (Web Services Flow Language)
Realizzato da IBM e nato nel 2001, WSFL fornisce due livelli di specifica [28]:
•
Flow Model:
descrive un processo di business in termini di operazioni tra web
service, specificando i possibili usage pattern, ovvero le possibili
combinazione di web service, e gli obiettivi che questi consentono
di ottenere;
•
Global Model:
descrive gli interaction pattern di un insieme di web service:
fornisce una visione globale delle possibili interazioni tra più
partner;
Anche questo linguaggio è divenuto obsoleto con la nascita di BPEL4WS.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
32
__________________________________________________________________________________________________________________________________________________________
2.2.6 UML
Nato nell’ottobre del 1994 e diventato nel novembre del 1997 uno standard OGM, è giunto oggi
alla versione 1.5 (la versione 2.0 è già in fase di lavorazione) [21]. UML è un linguaggio
universale per rappresentare qualunque tipo di sistema. Permette di rappresentare sistemi sia
nuovi che già esistenti e consente la comunicazione tra i diversi ruoli coinvolti nello sviluppo e
nell’evoluzione dei sistemi. UML è in grado di coprire l’intero processo di produzione e
riunisce aspetti dell’ingegneria del software, delle basi di dati e della progettazione di sistemi.
Ha il vantaggio di essere indipendente da qualsiasi linguaggio di programmazione.
Le potenzialità di UML che interessano questa tesi sono quelle relative agli Activity Diagram.
Questi, che derivano da Event Diagram e reti di Petri, forniscono la sequenza di operazioni che
definiscono un’attività più complessa ovvero ci permettono di rappresentare un workflow.
In Figura 2-35 si vede una panoramica degli elementi grafici offerti da UML per la
rappresentazione di Activity Diagram:
Figura 2-35: elementi grafici degli Activity Diagram di UML
Inoltre in UML è possibile utilizzare le swimlane, ovvero
delle corsie che servono a identificare le unità organizzative. Figura 2-34: esempio d’utilizzo di
UML
Nella Figura 2-34 è possibile vedere un esempio di utilizzo.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
33
__________________________________________________________________________________________________________________________________________________________
2.2.7 Linguaggi a confronto
Come poter confrontare i vari linguaggi analizzati e il loro potere espressivo? Un modo è quello
di catalogarli verificando quali pattern di workflow ogni linguaggio è in grado di coprire [8].
Nella Tabella 2-1 diamo una rappresentazione sommaria delle differenze tra i linguaggi
analizzati. Nella colonna a destra troviamo la lista dei pattern considerati come interessanti. Per
ogni combinazione è stato analizzato se è possibile realizzare il pattern con il linguaggio. Se un
linguaggio supporta direttamente il pattern attraverso uno dei suoi costrutti allora è stato
classificato con il simbolo “+”. Nel caso invece non sia direttamente supportato è stato
classificato tramite “+/-“. Nel caso in cui il pattern non sia assolutamente supportato, o per la
sua descrizione sia richiesta una programmazione molto complicata o astrusa, allora la
compatibilità è stata indicata col simbolo “-“. Da notare che un pattern è stato considerato come
supportato direttamente solo se il linguaggio fornisce una caratteristica in grado di supportare il
costrutto senza ricorrere ad alcuna soluzione riguardante la parte implementativa del pattern.
pattern
Sequence
Parallel Split
Synchronization
Exclusive Choice
Simple Merge
Multi Choice
Synchronizing Merge
Multi Merge
Discriminator
Arbitrary Cycles
Implicit Termination
MI without Synchronization
MI with a Priori Design Time
Knowledge
MI with a Priori Runtime
Knowledge
MI without a Priori Runtime
Knowledge
Deferred Choice
Interleaved Parallel Routing
Milestone
Cancel Activity
Cancel Case
standard
XLANG WSFL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
UML
+
+
+
+
+
-
BPEL
+
+
+
+
+
+
+
+
+
BPML
+
+
+
+
+
+/+
+
WSCI
+
+
+
+
+
+/+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+/+
+
+
+
+
+
+
+
+
+
+
+
+
Tabella 2-1: confornto tra i linguaggi analizzati
__________________________________________________________________________________________________________________________________________________________
WorkFlow
34
__________________________________________________________________________________________________________________________________________________________
2.3 Tools
Prima della realizzazione dell’applicativo, il lavoro è stato orientato all’analisi dei tool esistenti
sul mercato e delle loro funzionalità.
2.3.1 Collaxa BPEL Designer & Server
Si tratta di un editor per la specifica BPEL 1.1 che funziona
anche sotto la piattaforma Eclipse (il test è stato effettuato
con questa “modalità”, la versione del Designer era la
0.0.6) [15]. Il server viene utilizzato per l’esecuzione dei
processi BPEL. Questo tool permette il debugging e il
monitoring di processi BPEL4WS tramite interfaccia web e
ne copre completamente l’orchestrazione.
Nella versione testata è possibile vedere
di un processo, sia una panoramica
(Overview) che il processo nei dettagli
(selezionando ProcessMap). Una volta
selezionato
ProcessMap
vengono
visualizzate le primitive BPEL utilizzate
nel processo tramite delle icone del tipo
mostrato in Figura 2-36:
specifica la primitiva <receive> di BPEL
indica l’utilizzo di una <assign>
specifica la primitiva <invoke> di BPEL
Figura 2-36: esempio di elementi BPEL in Collaxa
__________________________________________________________________________________________________________________________________________________________
WorkFlow
35
__________________________________________________________________________________________________________________________________________________________
In Figura 2-36 sono state rappresentate solo le principali
activity utilizzabili. Altre activity possono essere
selezionate da un menù appositamente definito per
Eclipse riportato in Figura 2-37.
Durante la creazione del processo, mediante notazione
grafica, è sempre possibile passare dalla visualizzazione
grafica a quella del codice BPEL generato.
Il tool, essendo basato su BPEL, è fortemente orientato
all’utilizzo dei web service, cosa che lo differenzia
fortemente da quanto si vuole realizzare in questa tesi.
2.3.2 Popkin’s System Architect
Questo software, giunto alla versione 10.0, si presenta
come un potente e completo tool per la modellazione e
sviluppo di sistemi aziendali [19]. L’obiettivo degli
sviluppatori di System Architect è di integrare, in un
unico prodotto multi-utente, il supporto ai più diffusi
strumenti di modellazione presenti sul mercato (come ad
esempio BPMN e UML), permettendo perciò di modellare Figura 2-37: BPEL Palette in Collaxa
processi di business, progetti object-oriented, database
relazionali, design di architetture di rete e analisi strutturali.
Nell’analisi effettuata, si è provato a realizzare un esempio di workflow per vedere cosa poteva
essere generato in seguito. La versione testata del tool è stata la 9.1.
Durante l’installazione viene richiesto l’utilizzo di un server SQL (è possibile utilizzarne uno
fornito insieme al tool) il cui utilizzo avviene unicamente per salvare i progetti all’interno di file
di database chiamati, nel software di Popkin, enciclopedie e aventi estensione .mdf.
Passando alla notazione BPMN utilizzata da System Architect, si nota che non è possibile, per i
sequenze flow, avere inizio in una pool e fine in un'altra (cosa invece possibile con le lane).
L’interazione tra differenti pool è permessa solo tramite message flow come si può vedere dallo
screenshot di Figura 2-39:
__________________________________________________________________________________________________________________________________________________________
WorkFlow
36
__________________________________________________________________________________________________________________________________________________________
Non è possibile collegare
una activity ad un gateway
tramite un message flow
Figura 2-39: esempio utilizzando le pool
Una volta appurata questo, è stato effetto un altro tentativo utilizzando una sola pool al cui
interno abbiamo messo tre lane e ottenendo così quanto si può vedere dallo screenshot in Figura
2-38:
Figura 2-38: esempio ottenuto usando le lane
__________________________________________________________________________________________________________________________________________________________
WorkFlow
37
__________________________________________________________________________________________________________________________________________________________
Per quanto riguarda invece le data object in System Architect è possibile utilizzarle solo come
negli esempi raffigurati in Figura 2-41: non è consentito fare un’associazione tra la data object e
due activity diverse.
Figura 2-41: problemi con message flow e data object
I message flow sono consentiti solo tra una pool ed un’ altra: non è possibile avere due elementi
della stessa pool (anche se di lane diverse!) collegati da un message flow. In Figura 2-40
mostriamo un diagramma BPMN (fornito come esempio di utilizzo in System Architect) che
utilizza correttamente le pool:
Figura 2-40: esempio di diagramma BPMN in System Architect
__________________________________________________________________________________________________________________________________________________________
WorkFlow
38
__________________________________________________________________________________________________________________________________________________________
In seguito alla creazione del diagramma BPMN abbiamo appurato che il software di Popkin
consente solo di passare ad uno Use Case di UML.
In conclusione questo tool, per quanto riguarda BPMN, consente di disegnare tutto quanto
definito dalla notazione rispettandone i vincoli e di passare, in seguito, allo Use Case Diagram.
Questo software presenta buone idee per la realizzazione dell’interfaccia grafica, ma non è in
grado di compiere trasformazioni sul diagramma BPMN generato, come invece richiesto dalle
specifiche di questo progetto.
L’idea è quella di ottenere una rappresentazione grafica simile a quella del tool di Popkin (in
quanto rispetta la notazione BPMN), con alcuni piccoli accorgimenti tra cui la possibilità di
salvare in un formato standard (cosa che non viene fatta da questo tool).
2.3.3 IBM Business Process Execution Language for Web Services JavaTM Run Time
(BPWS4J)
Giunto oggi (Aprile 2004) alla versione 2.1, supporta la versione 1.1 di BPEL4WS [13]. Questo
software include: una piattaforma in grado di eseguire i processi di business modellati
utilizzando BPEL4WS; un insieme di esempi dimostrativi riguardanti l’utilizzo di BPEL4WS e
un tool che permette la validazione dei documenti BPEL4WS.
La piattaforma di BPWS4J include anche un plug-in di Eclipse che fornisce un semplice editor
grafico per la creazione e la modifica dei file BPEL4WS. Le caratteristiche principali sono:
•
il sorgente XML risulta essere sempre sincronizzato con la visione ad albero del
processo appena creato;
•
flessibilità nell’utilizzo sia di un approccio bottom-up che di un approccio top-down
nella progettazione del processo;
•
menù sensibili al contesto che facilitano notevolmente la creazione di processi
corrispondenti alle specifiche;
•
permette la validazione dei processi, secondo determinate specifiche, durante la sessione
di editing;
__________________________________________________________________________________________________________________________________________________________
WorkFlow
39
__________________________________________________________________________________________________________________________________________________________
2.3.4 Intalio|n³ BPMS
È un software bastato su standard BPMS (Business Process Managment System) che partendo
da progetti di processi di business genera processi eseguibili platform indipendent gestibili
direttamente dagli utenti [16].
Permette la specifica e la gestione di WFMS e consente l’utilizzo di specifiche BPMN-like. Si
presenta come un ambiente di sviluppo di processi integrati e vuole essere in grado di coprire
l’intera vita del processo di business cercando di incrementare la visibilità e la maneggevolezza
del processo per quanto riguarda l’end-to-end.
In Figura 2-42 possiamo vedere uno screenshot del tool (versione 2.5):
Figura 2-42: screenshot di un diagramma generato con Intalio|n³
__________________________________________________________________________________________________________________________________________________________
WorkFlow
40
__________________________________________________________________________________________________________________________________________________________
2.3.5 BEA WebLogic Workshop
Sviluppato da BEA, è giunto alla versione 8.1.È un ambiente di sviluppo Java che permette di
costruire in maniera visuale applicazioni web, web service, pagine JSP, Portali, EJB, e
workflow [12]. Per quanto riguarda questi ultimi, bisogna sottolineare che BEA è ottimizzato
per il design di workflow orientati ai web service e quindi, ancora una volta, un tool che si
discosta da quanto noi vogliamo realizzare.
In Figura 2-43 è mostrato uno screenshot di come si presenta il tool:
Figura 2-43: screenshot di BEA WebLogic Workshop
__________________________________________________________________________________________________________________________________________________________
WorkFlow
41
__________________________________________________________________________________________________________________________________________________________
2.3.6 Metamill - Visual UML CASE Tool
Questo tool, sviluppato da una piccola softwarehouse lussemburghese è giunto oggi alla
versione 4.0, consente di disegnare dei workflow utilizzando diverse notazioni tra cui gli
activity diagram e i sequence diagram di UML [18]. In Figura 2-44 si può vedere un
diagramma di workflow realizzato con la versione demo del tool:
Figura 2-44: screenshot di workflow disegnato con Metamill
L’esempio risulta scarno perché la versione Demo consente solo l’utilizzo di un numero limitato
di elementi. Il tool rispetta la notazione UML e il file di salvataggio è in XMI (XML Metadata
Interchange), un formato che permette l'interscambio di metadati fra sistemi differenti sotto
forma o di flussi di dati o di file conformi all'architettura XML. Tramite l’analisi del file salvato
si sono ricavate delle idee utili alla realizzazione del tool grafico. Il codice XMI è suddiviso in
due parti principali. La prima denominata XMI.content contiene una specie di DTD di UML
mostrato, in parte, in Figura 2-45:
__________________________________________________________________________________________________________________________________________________________
WorkFlow
42
__________________________________________________________________________________________________________________________________________________________
<XMI.content>
<UML:Model name="Java Base Model" xmi.id="mm:20158658-c3c4-11d7-835d">
<UML:ModelElement.taggedValue>
<UML:TaggedValue tag="mpacksdir" value="${BASEMPACKSDIR}"/>
<UML:TaggedValue tag="sourcedir" value="${BASESOURCEDIR}"/>
<UML:TaggedValue tag="scriptdir"/>
<UML:TaggedValue tag="imprules"/>
…
<UML:StateMachine>
<UML:StateMachine.top>
<UML:PseudoState xmi.id="mm:2" name="start"
visibility="publ"/>
…
</UML:StateMachine>
…
</XMI.content>
Figura 2-45: XMI.content
La seconda parte invece è denominata XMI.extensions, descrive il diagramma e al suo interno è
possibile definire pre e post condizioni e le impostazioni per il passaggio di parametri:
<XMI.extensions xmi.extender="Metamill">
<UML:Diagrams>
<UML:Diagram name="Loan example" xmi.id="mm:09a82f42" kind="Act Diag">
<UML:Diagram.taggedValue>
<UML:TaggedValue tag="exportFile" value="?"/>
<UML:TaggedValue tag="flags"/>
</UML:Diagram.taggedValue>
<UML:Diagram.elements>
<UML:DiagElem vcode="Swiml" xmi.id="mm:3066"
geom="x=24;y=54;h=11"/>
<UML:DiagElem vcode="Swiml" xmi.id="mm:32c8"
geom="x=51;y=54;h=10"/>
<UML:DiagElem vcode="Text" xmi.id="mm:3a88" geom="x=129;y=25">
…
Figura 2-46: XMI.extensions
Dall’analisi si nota che codice generato è poco chiaro: risulta a volte difficile comprendere
alcuni attributi utilizzati e quale sia il criterio per la loro generazione.
__________________________________________________________________________________________________________________________________________________________
WorkFlow
43
__________________________________________________________________________________________________________________________________________________________
2.3.7 Visual UML
È un tool di modellazione che supporta la realizzazione di diagrammi compatibili con le
versioni 1.3, 1.4 e 2.0 dello standard UML: permette di disegnare Use Case diagram, Class
diagram, Object diagram, Activity diagram, Collaboration diagram, Sequence diagram, State
Machine diagram e altri. Il test è stato effettuato realizzando un esempio di workflow di cui è
riportato il risultato in Figura 2-47. Il software risulta abbastanza completo e semplice da usare,
ma con specifiche diverse da quanto si vuole realizzare.
Figura 2-47: screenshot dell’esempio realizzato con Visual UML
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
44
__________________________________________________________________________________________________________________________________________________________
3
Tendenze attuali nello sviluppo di
applicazioni web
L’evoluzione del web sta comportando un passaggio dai siti web “tradizionali” ad applicazioni
più complesse. Tale tendenza si concretizza in diverse direzioni:
•
applicazioni complesse per la realizzazione di processi di business;
•
integrazione di applicazioni web attraverso l’uso di web service;
•
modellazione ad alto livello: permette di gestisce applicazioni complesse consentendo
di concentrare l’attenzione sull’analisi e la progettazione piuttosto che sulla stesura del
codice (risparmio di tempo e denaro) attraverso una modellazione visuale;
•
model view control: permette di disaccoppiare il più possibile tra loro le parti
dell’applicazione adibite al controllo, all’accesso ai dati e alla presentazione;
•
verfication: consente una migliore qualità complessiva delle applicazioni grazie
all’utilizzo di una verifica automatica applicata già in fase di sviluppo.
3.1 Applicazioni per la realizzazione di processi di business
Lo scopo è quello di consentire all’utente di generare workflow che descrivano un generico
processo di business. Dai workflow deve essere possibile estrarre dei pattern noti in precedenza,
dai quali passare, tramite una determinata trasformazione, alla generazione di una prima bozza
dell’ipertesto finale. Si evidenzia quindi la necessità di mettere in relazione lo sviluppo di un
workflow con la generazione di un ipertesto. In genere, un ipertesto è un insieme di pagine
collegate tra loro tramite dei link, per questo la navigazione all’interno delle pagine risulta
essere del tutto arbitraria, ovvero priva di qualsiasi tipo di vincolo sulla possibile sequenza di
azioni da compiere. Al contrario, nei workflow si definiscono anticipatamente quali sono le
azioni che un utente può compiere, andando a gestire tutti i controlli sul flusso delle attività in
modo da rispettare i vincoli e fornendo all’utente le risorse necessarie per portare a termine il
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
45
__________________________________________________________________________________________________________________________________________________________
lavoro che costituisce le attività. La sequenza delle possibili azioni da svolgere è predeterminata
e l’utente è guidato, nel rispetto delle specifiche, lungo il percorso delle attività. I vincoli di un
workflow possono essere di diverso tipo:
•
logico:
una attività può essere svolta solo nel momento in cui una certa altra
attività è stata completata;
•
temporale:
una attività può essere avviata solo dopo un certo punto nel tempo;
L’integrazione degli ipertesti con i workflow implica la modellizzazione delle attività e
l’applicazione di vincoli per guidare la navigazione dell’utente attraverso le attività.
Chiameremo l’ipertesto esteso con i vincoli introdotti dai workflow “workflow-driven
hypertext” (in breve WFdHT).
Figura 3-1: workFlow e ipertesti
La Figura 3-1 rappresenta le caratteristiche dei Workflow Management Systems, degli ipertesti e
dei WFdHT. I Workflow Management System “puri” (WFMS) sono caratterizzati da molti e
stretti vincoli che guidano l’utente verso una predeterminata meta, non permettono una
navigazione “libera” e permettono all’utente di gestire solo quei dati utili per raggiungere la
meta prestabilita. Gli ipertesti “puri” (HT) sono opposti ai WFMS, dato che non pongono alcun
vincolo per l’utente che può navigare liberamente in modo non-lineare e l’informazione a cui
può accedere non è vincolata a priori. I WFdHT, invece, risiedono in mezzo al grafico, tra i due
estremi HT e WFMS.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
46
__________________________________________________________________________________________________________________________________________________________
3.2 Web service
Il crescente interesse verso applicazioni che usano i web service è principalmente dovuto al
passaggio dall’interazione uomo-web all’interazione macchina-macchina. In questo tipo
d’interazione è richiesto che i software realizzati con diversi linguaggi di programmazione e in
diversi sistemi operativi possano comunicare tra loro in maniera interoperabile. I web service
nascono per consentire questo scambio di informazioni. La loro potenza risiede non solo
nell’interoperabilità ed estensibilità ma anche nel fatto che possono essere combinati, per
ottenere servizi complessi, semplicemente facendo interagire un insieme di programmi che
forniscono, ognuno, un servizio semplice.
Tuttavia l’analisi di questo tipo d’applicazioni web non vuole essere oggetto di questa tesi.
3.3 Modellazione ad alto livello
La modellazione ad alto livello nasce dall’esigenza di gestire applicazioni complesse
consentendo di concentrare l’attenzione sull’analisi e la progettazione piuttosto che sulla stesura
del codice. A quest’esigenza vanno ad aggiungersi la necessità di una parziale o totale
generazione automatica del codice e il supporto alla prototipazione.
Queste richieste vengono soddisfatte tramite modellazione visuale. In particolare verrà descritta
quella proposta da WebML [23]. WebML è un linguaggio concettuale per la specifica e la
progettazione di applicazioni data-intensive[1] e viene definito come l’UML del web.
In particolare WebML propone una notazione per la specifica, la progettazione e la
pubblicazione automatica di un sito web a partire da specifiche di alto livello. Il linguaggio
fornisce una serie di costrutti, specificati formalmente mediante XML, per descrivere la realtà
d’interesse ad alto livello senza tenere conto dei dettagli architetturali.
WebML consente di specificare la struttura del contenuto di un’applicazione web e di
descrivere l’organizzazione e la presentazione di ogni contenuto in un ipertesto.
Il modello UML nell’ambito dei sistemi object-oriented ed il modello Entità-Relazione in
quello delle applicazioni orientate ai dati, devono il loro successo alla presenza di una notazione
grafica, più immediata di quella linguistica.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
47
__________________________________________________________________________________________________________________________________________________________
Il processo di progettazione e sviluppo WebML è supportato da un ambiente di lavoro grafico
in cui il connubio, tra costrutti del linguaggio e notazione grafica, consente una
rappresentazione intuitiva del sito da sviluppare.
I principali obiettivi del processo di progetto WebML sono:
•
esprimere la struttura di un applicazione web con una descrizione ad alto livello che
possa essere utilizzata per il mantenimento e lo sviluppo del sito;
•
fornire molteplici viste dello stesso contenuto;
•
separare le informazioni presenti nelle pagine, dalla navigazione e dalla presentazione,
che possono essere definite e sviluppate separatamente (logica a tre livelli);
•
immagazzinamento delle informazioni raccolte in fase di progetto in un repository, che
può essere utilizzato durante il ciclo di vita dell’applicazione per la successiva
generazione dinamica delle pagine web;
•
modellare utenti e gruppi esplicitamente nel repository per realizzare politiche di
personalizzazione ;
•
abilitare la specifica di operazioni di manipolazione dei dati per la modifica del
contenuto del sito o per l’interazione con arbitrari servizi esterni.
In WebML la realizzazione di un sito web può essere schematizzata individuando dei modelli
ortogonali, ognuno dei quali permette al progettista di concentrare la sua attenzione su una
particolare dimensione, senza che questo interferisca in alcun modo con le altre [11].
Figura 3-2: panoramica sui modelli usati da WebML
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
48
__________________________________________________________________________________________________________________________________________________________
I modelli utilizzati da WebML sono:
•
Modello di struttura:
descrive l’organizzazione concettuale dei dati trattati, in
maniera compatibile con il diffuso modello EntitàRelazione e con i diagrammi UML;
•
Modello di derivazione:
consente l’estensione del modello strutturale mediante la
definizione di dati ridondanti allo scopo di adattarlo ai
differenti requisiti;
•
Modello dell’ipertesto:
permette la descrizione di uno o più ipertesti pubblicati
nel sito e può essere ulteriormente suddiviso in:
o Modello di composizione: comprende le pagine di cui è composto un ipertesto e la
loro organizzazione interna in unità d’informazione
elementare (content unit);
o Modello di navigazione: descrive i link tra le pagine e le content unit allo scopo di
creare un contesto informativo in cui l’utente durante la
navigazione viene facilitato nella ricerca delle
informazioni;
Gli ipertesti definiti attraverso il modello di composizione e navigazione sono
racchiusi in costrutti di modularizzazione chiamati site view. Ognuna di queste
rappresenta la visione di una diversa dimensione dei dati dell’applicazione, con lo
scopo di soddisfare un insieme ben definito di requisiti che coprono i differenti
interessi dei gruppi d’utenza. Partendo dal modello WebML generato è poi possibile
ottenere automaticamente il codice di navigazione dei dati in un linguaggio di
scripting come ASP o JSP.
•
Modello di presentazione:
descrive come appaiono graficamente le pagine web
indipendentemente dal linguaggio usato per la loro
pubblicazione;
•
Modello utente:
definisce gli utenti ed i gruppi di utenti che avranno
accesso al sito;
•
Modello di personalizzazione:
permette di adattare i contenuti del sito ai diversi tipi di
soggetti che ne faranno accesso, mediante una
combinazione di utilizzo di dati derivati, modellizzazione
degli utenti e regole di alto livello (business rules);
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
49
__________________________________________________________________________________________________________________________________________________________
Nelle sezioni seguenti andremo ad analizzare più in dettaglio il funzionamento e il ruolo di
alcuni modelli qui sopra elencati. In particolare analizzeremo il modello dei dati dato dal
modello di struttura, e quello dell’ipertesto dato dai modelli di composizione e navigazione.
3.3.1 Il modello di struttura
In questo modello viene definita la struttura del sito web ovvero viene fatto il data design.
Questa attività è di fondamentale importanza nella progettazione di applicazioni data-intensive:
permette al progettista di formalizzare e, quindi, comprendere al meglio l’organizzazione dei
dati dell’applicazione che sta andando a sviluppare. L’obiettivo che questo modello si pone è
quello di dare una rappresentazione degli oggetti essenziali del dominio dell’applicazione, delle
loro proprietà e delle relazioni che intercorrono tra essi [4]. Il risultato di questa fase di
progetto è una rappresentazione chiara ed intuitiva dei dati a disposizione dell’applicazione che
verrà sviluppata.
Questo modello è compatibile con il modello Entità/Relazione e con i class diagram di UML.
Gli elementi utilizzati sono le entità, definiti come contenitori di dati, e le relazioni, definite
come connessioni semantiche tra le entità.
In Figura 3-3 è rappresentato un esempio di struttura dati di un sito in cui sono visualizzate: le
entità che rappresentano gli utenti ed i possibili gruppi: Product, Combination, BigImage e
TechRecord.
Figura 3-3: rappresentazione della struttura dati di un sito in WebML
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
50
__________________________________________________________________________________________________________________________________________________________
Ogni prodotto può avere: “0” o “N” Combination; “0” o “N” BigImage; “0” o “1” Technical
Record, invece le entità TechRecord e BigImage sono legate univocamente ad uno specifico
prodotto.
3.3.2 Modello di composizione
Lo scopo di questo modello è di definire i nodi che compongono l’ipertesto pubblicato in un
sito web [7]. In particolare serve per specificare:
•
quali pagine compongono l’ipertesto;
•
gli elementi atomici di informazione attualmente fornite all’utente, le unit;
•
le site view, cioè il modulo che definisce una modalità di accesso ai dati. Tramite più
site view è possibile distinguere l’utente non registrato, dall’amministratore del sito o da
altri tipi di utente, fornendo una visione del sito completamente diversa anche se basata
sugli stessi dati. È inoltre possibile usare le site view per creare modalità di navigazione
specificatamente pensate per un client di navigazione, ad esempio per un normale
browser su PC, per un cellulare Wap, o per un browser a sintesi vocale;
•
le unit, possono stare all’interno delle pagine o all’esterno delle pagine. Le unit interne
aggiungono alla pagina dei contenuti visibili, tipicamente prelevati dalla struttura dati,
ma è anche possibile visualizzare dati che sono temporaneamente memorizzati in
variabili temporanee globali. Le unit fuori pagina eseguono operazioni di modifica,
aggiornamento ed eliminazione delle informazioni o altre operazioni legate alla
navigazione dei siti (ad esempio tutte le unit che consentono la gestione dei workflow);
WebML supporta cinque tipi di unit per comporre un ipertesto di sola lettura:
•
DataUnit:
mostra le informazioni di un singolo oggetto; più precisamente,
permette di visualizzare l’istanza di un’entità;
•
MultidataUnit:
mostra le informazioni di un set di oggetti; consente di
visualizzare i dati relativi a più istanze di un’entità;
•
IndexUnit:
permette di definire e visualizzare indici d’accesso ai dati; mostra
una lista di proprietà descrittive di alcuni oggetti, senza presentare
le informazioni di dettaglio di ogni oggetto;
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
51
__________________________________________________________________________________________________________________________________________________________
•
ScrollerUnit:
visualizza i dati relativi a più istanze tramite una navigazione del
tipo “avanti/indietro - primo/ultimo”;
•
EntryUnit:
modella un’EntryForm, i cui campi prelevano valori in input (non
necessariamente inseriti da un utente di tipo umano) necessari per
effettuare ricerche o per introdurre dati di modifica;
Le DataUnit sono usate per mostrare le informazioni di un singolo oggetto (istanza di un’entità
o componente), mentre le rimanenti rappresentano modi alternativi di sfogliare un insieme di
oggetti. Le unità d’informazione sono definite basandosi sul modello di struttura: il progettista
specifica l’entità, il componente o la relazione su cui ciascuna unità si basa. Il tipico schema di
una pagina WebML è un grafo di unità, in cui le DataUnit, mostranti il contenuto di un oggetto,
si alternano alle altre permettendo varie forme di interconnessione tra oggetti correlati.
L’associazione tra entità e DataUnit è di tipo uno a molti; la stessa entità può essere associata a
diverse DataUnit, ciascuna mostrante un diverso insieme di attributi dell’entità. Perciò, le
DataUnit rappresentano diverse “viste virtuali” su concetti definiti nel modello di struttura,
adattabili a diversi requisiti.
Le EntryUnit servono per visualizzare o modificare informazioni ma soprattutto per inserire
nuovi dati attraverso maschere d’inserimento.
IndexUnit, MultidataUnit e ScrollerUnit sono tipicamente usate per specificare strutture
d’accesso al contenuto del sito e per raggruppare in una pagina diversi frammenti correlati
d’informazione. Questi tipi di unità possono essere definiti su una relazione 1:N, nel qual caso
permettono forme alternative di navigazione da un oggetto ad un insieme di oggetti ad esso
correlati. Queste unità possono anche essere definite su entità o componenti, permettendo di
selezionare un oggetto tra quelli contenuti. Come ultimo passo del progetto del modello di
composizione, tutte le pagine che definiscono una vista del sito web (rispondenti cioè alle
esigenze di uno specifico gruppo di utenti) vengono raggruppate in un singolo elemento,
chiamato site view.
3.3.3 Modello di navigazione
Le unità e le pagine non possono esistere da sole senza essere connesse a formare una
significativa struttura d’ipertesto. Gli ipertesti reali sono insiemi di pagine collegate con parti
interconnesse e con comandi che consentono all’utente di interagire con le applicazioni.
Lo scopo del modello di navigazione è quello di fornire il modo in cui le unità e le pagine sono
collegate per creare un determinato flusso informativo.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
52
__________________________________________________________________________________________________________________________________________________________
La principale nozione del modello di navigazione è quella di link (contestuale, non contestuale,
di trasporto).
3.3.3.1
Link
Un link è una connessione diretta tra unità o tra pagine e può assolvere i seguenti compiti:
•
cambiare la pagina visualizzata;
•
trasportare informazioni tra una unità o pagina ad un’altra unità o pagina;
•
produrre un side-effect;
L’informazione trasportata da un link è chiamata contesto di navigazione. I link che trasportano
un contesto si definiscono contestual link, mentre quelli a cui non è associata nessuna
informazione prenderanno il nome di non-contestual link.
Le informazioni di contesto sono tipicamente necessarie per assicurare la computabilità del
contenuto di un’unità. Ad esempio, una DataUnit che mostra i dettagli di un artista può essere
collegata ad una IndexUnit che mostri un indice di album pubblicati. Per calcolare la lista di
album pubblicati dall’artista mostrato dalla DataUnit, l’identificativo di tale artista deve essere
trasferito alla IndexUnit.
3.3.3.2
Non-contestual link
La Figura 3-4 mostra un non-contestual link che connette due pagine. Il link connette una
pagina sorgente (PopArtistPage) contenente una MultidataUnit che mostra gli artisti pop, con
una pagina (JazzArtistPage) destinazione contenente una MultidataUnit che mostra gli artisti
jazz. Il contenuto della pagina PopArtistPage è indipendente dal contenuto della pagina
JazzArtistPage, quindi la navigazione non richiede che sia passato nessun parametro dalla
sorgente alla destinazione.
Figura 3-4: esempio di utilizzo di non-contestual link
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
53
__________________________________________________________________________________________________________________________________________________________
3.3.3.3
Automatic e Transport link
Gli automatic link non richiedono che l’utente definisca il link parameter perché è il sistema
che è in grado di capire il tipo di parametro da passare. Tutti i link visti finora, infatti,
richiedono, per poter essere utilizzati, che l’utente prema un bottone. Ci sono casi in cui un link
è usato semplicemente per trasportare informazione e non è associato a nessun bottone di
navigazione. Questo tipo di link è chiamato transport link, per sottolineare il fatto che il link
serve solo per il passaggio dei parametri e non per la navigazione dell’utente. In Figura 3-5
mostiamo un esempio di transport link: la pagina CelineDionAlbums contiene una DataUnit
ArtistDetails, la quale contiene i dettagli dell’artista, e la IndexUnit PublishedAlbums che
contiene la lista degli album che ha pubblicato.
CelineDionPage
CelineDionAlbums
ArtistDetails
Artist
[FirstName="Celine"]
[LastName="Dion"]
ARTIST
PublishedAlbums
Album
[ ArtistToAlbum ]
FirstName: Celine
LastName: Dion
Photo:
ALBUMS
°
°
°
°
All the way
New day has come
Hits of ...
Colour of ...
Figura 3-5: esempio di transport link e relativa visualizzazione in una pagina HTML
3.3.4 Generazione automatica di applicazioni web
Partendo da un workflow, è possibile generare un ipertesto che rispetti i vincoli sia temporali
che logici introdotti dai workflow stessi. Quello di cui si ha bisogno per compiere questo
passaggio è la definizione di un trasformazione che in funzione delle informazioni in ingresso,
provenienti dal workflow, sia in grado di generare in uscita una prima bozza della struttura
dell’ipertesto. Questa parte esula dagli intenti di questa tesi, nonostante ciò, si è sempre tenuto
in considerazione questo possibile sviluppo futuro, specialmente nel momento in cui è stato
necessario definire i pattern che la notazione avrebbe dovuto supportare. Vengono presentate
nel prossimo paragrafo le unit che WebML mette a disposizione per la modellazione di
workflow.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
54
__________________________________________________________________________________________________________________________________________________________
3.3.4.1
Unit WebML per la modellazione di workflow
La modellazione dei workflow negli ipertesti va vista come estensione naturale della
modellazione di normali pagine e aree. In particolare, pagine e aree possono essere utilizzate
per rappresentare attività di un workflow. Diamo ora un elenco delle unit disponibili in
WebML:
• Start activity ed End activity: le pagine/unit associate all’esecuzione di un’activity
devono essere racchiuse tra queste due operazioni:
Figura 3-6: Start activity ed End activity
Delimitano una porzione dell’ipertesto dedicata
all’esecuzione di un’activity e hanno “l’effetto collaterale”
di aggiornare i dati del workflow.
•
Switch unit ed If unit:
la navigazione di un workflow può essere condizionata
dallo stato delle activity. Queste unit servono per
esprimere una navigazione condizionale:
Figura 3-7: Switch unit ed If unit
Entrambe ricevono in input un insieme di parametri e li
usano per valutare un’espressione. Se la valutazione
fallisce viene seguito il KO-link, altrimenti viene seguito
uno dei link di output (a seconda del risultato della
valutazione). L’if unit vaulta un booleano, mentre la
switch unit valuta un’espressione costante.
•
Workflow-aware index- unit: viene utilizzata per accedere ai dati di una particolare
activity instance. Questa unit è simile alla normale content
unit di WebML, ma permette di gestire l’espressione di
predicati che coinvolgono sia i dati dell’applicazione che
del workflow. La sua notazione grafica è quella di Figura
3-8.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
55
__________________________________________________________________________________________________________________________________________________________
Figura 3-8: Workflow-aware index unit
•
Assign unit:
viene utilizzata per collegare un’application object ad
un’activity instance. Può anche essere utilizzata per
specificare lo user incaricato di eseguire l’applicazione.
Figura 3-9: Assign unit
•
Activity status unit:
si utilizza per controllare lo stato di un’activity instance.
Figura 3-10: Activity status unit
3.4 Model View Control
Uno dei principali requisiti di qualsiasi applicazione web è quello di definire un modello
applicativo che consenta di disaccoppiare i diversi componenti dell'applicazione in base al loro
ruolo nell'architettura per ottenere vantaggi in termini di riusabilità e manutenibilità. Il pattern
MVC è un’implementazione di quello che va sotto il nome di "Model 2"; il Model 2 introduce il
concetto di controllo centralizzato dell'applicazione, implementato da una servlet di controllo
che gestisce tutte le richieste e le soddisfa delegando l'elaborazione a opportune classi Java.
In questo modello i ruoli di presentation, control e business logic vengono affidati a
componenti diversi e sono tra di loro disaccoppiati, con evidenti vantaggi in termini di
riusabilità, manutenibilità, estensibilità e modularità. In un'applicazione costruita secondo il
pattern MVC si possono quindi individuare tre livelli logici ben distinti che molto
schematicamente svolgono i seguenti compiti:
•
controller:
determina il modo in cui l'applicazione risponde agli input dell'utente.
Esamina le richieste dei client, estrae i parametri della richiesta e li
convalida, si interfaccia con lo strato di business logic dell'applicazione.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
56
__________________________________________________________________________________________________________________________________________________________
Sceglie la successiva
dell'elaborazione;
vista
da
fornire
all'utente
al
termine
•
model:
contiene i dati visualizzati dalle viste; è ciò che viene elaborato e
successivamente presentato all'utente;
•
view:
visualizza all'utente i dati contenuti nel model. È la rappresentazione
dello stato corrente del model;
In particolare si andrà ad analizzare l’implementazione di Struts del design pattern MVC [20].
Struts è un framework opensource per la generazione di applicazioni web in Java sviluppato
dalla Apache Software Foundation. Il nucleo del framework di Struts è basato su tecnologie
standard come Servlets Java, JavaBeans, ResourceBoundles, e XML oltre che su vari package
di Jakarta Commons (che è un sottoprogetto di Jakarta centrato su ogni aspetto dei componenti
di Java riusabili).
I componenti fonadamentali che Struts presenta sono:
•
actionServlet:
è la servlet di controllo centralizzata che gestisce tutte le richieste
dell'applicazione;
•
struts- config.xml:
è il file XML di configurazione di tutta l'applicazione. In questo
file vengono definiti gli elementi dell'applicazione e le loro
associazioni;
•
action:
le action sono le classi alle quali la actionServlet delega
l'elaborazione della richiesta;
•
actionMapping:
contiene gli oggetti associati ad una action nello struts-config.xml
come ad esempio gli actionForward;
•
actionForm:
sono classi contenitori di dati. Vengono popolati automaticamente
dal framework con i dati contenuti nelle request http;
•
actionForward:
contengono i path ai quali la servlet di Struts inoltra il flusso
elaborativo in base alla logica dell'applicazione;
•
custom-tags:
Struts fornisce una serie di librerie di tag per assolvere a molti dei
più comuni compiti delle pagine JSP.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
57
__________________________________________________________________________________________________________________________________________________________
Struts fornisce un suo componente Controller e si integra con altre tecnologie per fornire il
Model e la View. Per ciò che concerne il Model, Struts può interagire con le tecnologie standard
esistenti per l’accesso ai dati, come JDBC e EBJ. Per quanto riguarda invece la View, Struts si
integra sia con le Java Server Pages (JSP), includendo anche JSTL e JSF, sia con Velocity
Templates e XSLT.
Il framework di Struts provvede a fornire, in backgroud, le strutture invisibili di cui una
applicazione web ha bisogno per progredire. Struts aiuta a creare un ambiente di sviluppo
estendibile per le applicazioni, basato su standard esistenti e su pattern di progettazione
prestabiliti.
3.4.1.1
Funzionamento di Struts
Un’applicazione web usa un descrittore di struttura per inizializzare le risorse come le JAVA
Servlets e le Tag Libraries. Il descrittore di struttura, in questo caso, non è altro che un
documento XML chiamato “web.xml”.
In Struts tutto è controllato dalla servlet di controllo denominata actionServlet. Questa gestisce
tutte le richieste client e smista il flusso applicativo in base alla logica configurata. Si potrebbe
definire come la 'spina dorsale' di una applicazione costruita su Struts. Tutta la configurazione
dell'applicazione è contenuta nello struts-config.xml. Questo file XML viene letto in fase di
start-up dell'applicazione dalla actionServlet e definisce le associazioni tra i vari elementi di
Struts. Nello struts-config.xml sono ad esempio definite le associazioni tra i path delle richieste
http e le classi action associate alla richieste stesse. Le associazioni tra le action e gli
actionForm, che vengono automaticamente popolati dal framework con i dati della richiesta ad
essi associata e passati in input alla action. Contiene inoltre l'associazione tra la action e le
actionForward , ovvero i path configurati nello struts-config.xml ai quali l’actionServlet
redirigerà il flusso applicativo al termine dell’elaborazione della action.
Nella pagina successiva (Figura 3-11) riportiamo un esempio di file di configurazione di Struts
per un workflow di Login. Oltre a quelle riportate in questo file ci sono molte altre risorse che
possono essere specificate in un file di configurazione di Struts. Ad esempio, si può specificare
la validazione per gli actionForm usando lo Struts Validator.
Struts è un framework estendibile: ogni classe presente in Struts può essere rimpiazzata da una
classe di default definita e personalizzata dall’utente. Le proprietà di questa classe possono
essere impostate usando la funzione set-property di Digester (un package per la configurazione
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
58
__________________________________________________________________________________________________________________________________________________________
di file XML tramite regole che vengono attivate al riconoscimento di particolari pattern
all’interno del file). Questa è una delle ragioni per cui esistono tante estensioni per Struts.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean
name="logonForm"
type="app.LogonForm"/>
</form-beans>
<action-mappings>
<action
path="/Welcome"
forward="/pages/Welcome.jsp"/>
<action
path="/Logon"
forward="/pages/Logon.jsp"/>
<action
path="/LogonSubmit"
type="app.LogonAction"
name="logonForm"
scope="request"
validate="true"
input="/pages/Logon.jsp">
<forward
name="success"
path="/pages/Welcome.jsp"/>
<forward
name="failure"
path="/pages/Logon.jsp"/>
</action>
<action
path="/Logoff"
type="app.LogoffAction">
<forward
name="success"
path="/pages/Logoff.jsp"/>
</action>
</action-mappings>
<message-resources parameter="resources.application"/>
</struts-config>
Figura 3-11: esempio di file di configurazione di Struts per un workflow di Login
Struts presenta solo una base di framework, che può essere personalizzato per soddisfare le
esigenze del programmatore. Ovviamente questo aumenta la complessità nell’utilizzo, è quindi
poco indicato per chi vuol scrivere applicazioni semplici.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
59
__________________________________________________________________________________________________________________________________________________________
4
Verifica Formale
Nel contesto dei sistemi hardware e software, la verifica formale rappresenta l’atto di validare
la correttezza di un sistema rispetto a certe specifiche formali o proprietà.
La possibilità di realizzare nella fase di progettazione la verifica della correttezza del software
permette di anticipare la conoscenza riducendo così al minimo l’eventualità di compiere errori
di sviluppo.
I tipi di sistemi considerati nella letteratura per la verifica formale comprendono macchine a
stati finiti (FSM), Reti di Petri, protocolli di crittografia e astrazioni di parti generali di
software.
Esistono diverse strade per compiere la verifica formale nell’ambito dei sistemi software. Nel
caso si utilizzi un modello visuale per la realizzazione di ipertesti, come ad esempio WebML, è
possibile fare una prima verifica del progetto su specifici aspetti dello sviluppo come il
passaggio di parametri tra attività diverse.
L’obiettivo è spingersi oltre questa semplice validazione, cercando di definire un modello che
sia in grado di descrivere l’insieme di attività che l’applicazione deve implementare. Da questa
rappresentazione ad alto livello deve essere possibile estrarre delle formule logiche con le quali
valicare la correttezza dell’applicazione.
E’ bene sottolineare che la specifica formale di questi requisiti si riferisce alla fase di
esecuzione dell’applicazione, della quale si vuole garantire l’aderenza alle specifiche di
processo. Per questo motivo tali specifiche sono costituite generalmente da un insieme di
sequenze di input, azioni, e stati che risultano dall’interazione con l’utente. Ad esempio in
un’applicazione di e-commerce è bene che nessun prodotto venga spedito fino a quando non si
è ricevuto il pagamento, oppure si vorrebbe verificare che le transizioni tra le pagine non siano
ambigue (la prossima pagina da raggiungere è definita univocamente in qualsiasi istante del
processo), o che tutte le pagine siano raggiungibili dalla home page.
Questa modalità di verifica permette di realizzare delle applicazioni più robuste con una
struttura ben definita che garantisce una correttezza rispetto alla proprietà che l’applicazione
deve soddisfare.
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
60
__________________________________________________________________________________________________________________________________________________________
Nella maggior parte dei casi le proprietà da verificare vengono espresse tramite una logica
temporale. Esistono diverse notazione formali atte allo scopo, come linear-time temporal logic
(LTL) o computatiol tree logic (CTL).
Dato che il progetto è stato sviluppato in un più ampio ambito di ricerca, ci si è orientati verso
l’utilizzo della notazione presentata in LTL. Tale notazione rispetto alle altre possibili
soluzioni, garantisce sia un maggiore potere espresso che una migliore adattabilità rispetto al
progetto a cui è stata applicata.
L’utilizzo di LTL per la verifica formale delle applicazioni risulta molto complesso nel caso in
cui si cerchi di realizzarlo senza l’ausilio di tool in grado di estrarre automaticamente le regole,
partendo da una rappresentazione grafica dell’applicazione. L’obiettivo di questa tesi è cercare
di sopperire a questa mancanza fornendo una possibile soluzione.
In questo capitolo andremo ad analizzare quali sono i requisiti che bisogna soddisfare per
realizzare la verifica formale. Concentrando l’analisi, non solo sulla definizione della logica
temporale, ma anche andando a definire il modello delle applicazioni che è possibile validare.
4.1 Modello dell’Applicazione
Per poter realizzare la verifica delle applicazioni è necessario che sia data una specifica formale
delle applicazioni stesse. In particolare, il lavoro di tesi mira a modellizzare le applicazioni web
basate dai dati. Si assume quindi di rappresentare le applicazioni con il modello composto da:
•
un database nel quale vengono salvati tutti i dati riguardanti le istanze del processo;
•
un insieme di stati che variano, durante lo svolgimento del processo, in funzione degli
input provenienti dall’utente;
•
un insieme di schemi di pagine web, tra le quali è necessariamente definita una home
page;
•
ogni schema di pagina web definisce quali sono le possibili scelte che l’utente può fare,
all’interno della pagina stessa, in funzione di una query al database e dello stato attuale.
A seconda della scelta presa dell’utente sarà necessario conoscere la nuova transizione
di stato, l’azione da compiere e lo schema della pagina web successiva;
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
61
__________________________________________________________________________________________________________________________________________________________
Per esprimere tali proprietà è possibile utilizzare una generica rappresentazione formale, come
ad esempio, quella specifica nell’articolo [5]. Questo per due principali motivi:
•
ogni esecuzione di un processo deve soddisfare determinate condizioni sulla sequenza di
input, azioni e stati;
•
gestire il caso in cui vi siano esecuzioni simultanee dello stesso processo.
Figura 4-1: modello dell’applicazione
4.2 Specifica delle regole di verifica
In questo paragrafo vengono presentate le regole, definite dalla notazione di LTL, per la
verifica formale delle applicazioni. In particolare si evidenzia la relazione tra la specifica
formale delle regole stesse e la loro rappresentazione formale nell’ambito dei diagrammi di
workflow
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
62
__________________________________________________________________________________________________________________________________________________________
Partendo dal presupposto che le attività sono dei “compiti” da svolgere è necessario tenere in
considerazione in quale stato si trovino tali attività.
Introduciamo la seguente notazione per descrivere gli stati:
•
An a = > An . status = “ACTIVE”
•
An c = > An . status = “COMPLETED”
TEMPORAL LOGIC
BEFORE
( An c B An+1 a )
ALWAYS
G A na
AND
( F An a And F An+1 a )
OR
( F An a Or F An+1 a )
XOR
( F An a Xor F An+1 a )
BPMN
Tabella 4-1: relazione tra notazione di BPMN e LTL
__________________________________________________________________________________________________________________________________________________________
Tendenze attuali nello sviluppo di applicazioni web
63
__________________________________________________________________________________________________________________________________________________________
4.3 Validazione Automatica
Terminata la fase di estrazione delle regole temporali, sia dal workflow che dagli schemi delle
pagine web attraverso la modellazione descritta nel paragrafo 4.1, è possibile passare le formule
temporali ad un validatore per verificarne la coerenza. Ciò consente, in maniera completamente
automatica, di verificare che il processo rappresentato dal workflow venga implementato
correttamente, con i vincoli sia temporali che logici, nell’insieme di pagine web che
costituiscono l’applicazione data-intensive. Esistono dei software, come ad esempio SPIN
(Design and Validation of Computer Protocols) [6], che vengono utilizzati a tale scopo; cioè
come validatori di formule LTL. Difatti, SPIN supporta tutti i requisiti di correttezza esprimibili
tramite costrutti di tipo Liner Temporal Logic.
Passando tramite la validazione software è possibile fare un controllo finale sulla correttezza
dell’applicazione. Infatti, compiendo un confronto tra i vincoli introdotti nell’applicazione e
quelli presenti nel workflow si può evitare di avere discrepanze tra le due rappresentazioni.
__________________________________________________________________________________________________________________________________________________________
Scelte progettuali
64
__________________________________________________________________________________________________________________________________________________________
5
Scelte progettuali
In questo capitolo vengono presentate le scelte progettuali fatte per la realizzazione del tool
visuale. Saranno analizzati in particolare due aspetti:
•
l’analisi dei requisiti che dovrà soddisfare il tool dalla flessibilità alla notazione grafica
adottata per la rappresentazione dei diagrammi di workflow;
•
le regole di mapping tra i diagrammi di workflow e le formule temporali espresse in
LTL.
5.1 Use Case diagram
Cerchiamo di dare una definizione del comportamento del sistema tramite un diagramma Use
Case di UML.
disegno diagramma
workflow
salvo il diagramma
utente
carico diagramma
da file
eseguo una
trasformazione
Figura 5-1: use case diagram
__________________________________________________________________________________________________________________________________________________________
Scelte progettuali
65
__________________________________________________________________________________________________________________________________________________________
In Figura 5-1 possiamo vedere le principali funzioni che presenterà il tool. L’utente dovrà poter
realizzare un diagramma di workflow e in seguito salvarlo. Dovrà essere garantita la possibilità
di ricaricare un qualsiasi diagramma in precedenza salvato e, partendo dal diagramma, generare
le trasformazioni disponibili nel tool in quel momento.
5.2 Requisiti di flessibilità
Per soddisfare i requisiti posti nel paragrafo precedente e tenere aperti diversi orizzonti di
utilizzo, il tool deve essere configurabile, senza che questo comporti la modifica, e quindi anche
la conoscenza, del codice sorgente.
L’aspetto di personalizzazione deve essere accessibile in modo trasparente alla realizzazione a
basso livello e deve consentire sia l’aggiunta di nuove trasformazioni utilizzabili dall’utente sia
la modifica degli attributi degli elementi grafici. In particolare, bisogna permettere all’utente di
poter visualizzare nel diagramma di workflow anche solo alcuni degli attributi con cui ha
personalizzato gli elementi grafici. Grazie a questa caratteristica il tool potrà essere adattato a
più tipi di applicazione nell’ambito della progettazione tramite diagrammi di workflow.
Per soddisfare questi requisiti si è così deciso di consentire la configurazione del software
tramite dei file di documento in formato XML che hanno il vantaggio di essere facilmente
leggibili e modificabili (basta un semplice editor di testo), ma allo stesso tempo permettono di
gestire un’informazione articolata e ben strutturata che può essere facilmente interpretata ed
utilizzata all’interno di un programma senza appesantirne il funzionamento.
5.3 Specifica requisiti per la notazione grafica
La scelta dello standard da adottare per la realizzazione dei diagrammi di workflow ha
comportato un’attenta analisi dei requisiti.
Uno dei principali criteri di valutazione si basa sulla definizione, da parte dello standard, di una
notazione grafica, che descriva le fasi di lavoro all’interno di un generico processo di business.
Per questo, il modello deve essere in grado sia di coordinare la sequenza dei processi che il
passaggio di informazioni tra i processi coinvolti nella realizzazione di un certo numero di
attività.
__________________________________________________________________________________________________________________________________________________________
Scelte progettuali
66
__________________________________________________________________________________________________________________________________________________________
Lo standard ricopre un molteplice ruolo: permettere ad un utente di leggere e comprendere
senza difficoltà un diagramma e consentire allo sviluppatore di arricchire il diagramma con le
informazioni necessarie per una sua corretta implementazione.
Grazie a queste caratteristiche sarà possibile creare un collegamento, tra la fase di design del
processo di business e la fase di realizzazione.
Vista la necessità di rappresentare i workflow da implementare anche in ambito web, diviene
fondamentale avere degli strumenti per la suddivisione in categorie degli attori coinvolti nel
processo, così da individuare istantaneamente sia le possibili responsabilità sia le funzionalità
richieste.
Per soddisfare queste specifiche abbiamo orientato la nostra scelta verso la Business Process
Modeling Notation (BPMN) definita nel paragrafo 2.2.1.
5.3.1 Elementi di BPMN adottati
Per soddisfare le specifiche del progetto si è deciso di utilizzare solo una parte della notazione
definita da BPMN. Dalle quattro categorie base (Flow object, Connection object, Swimlane e
Artifact) sono stati estratti gli elementi necessari per la realizzazione del tool grafico. Una loro
classificazione è stata riportata in Tabella 5-1.
__________________________________________________________________________________________________________________________________________________________
Scelte progettuali
67
__________________________________________________________________________________________________________________________________________________________
CATEGORIA
ELEMENTO
TIPO
SIMBOLOGIA
Start
Event
End
Activity
Task
Flow object
And
Gateway
Or
Xor
Sequence flow
Connection object
Association
Swimlane
Lane
Artifact
Data object
Tabella 5-1: ogettti della notazione BPMN presenti nel tool grafico
Rispetto alla lista degli elementi in Tabella 5-1, è in previsione l’aggiunta delle activity con subprocess. Per farlo è necessario completare la loro implementazione nel tool grafico. Il codice è
stato progettato in modo che questa possibilità futura sia facilmente realizzabile, tramite
l’apposita predisposizione descritta nei precedenti paragrafi.
__________________________________________________________________________________________________________________________________________________________
Scelte progettuali
68
__________________________________________________________________________________________________________________________________________________________
5.4 Mappatura di workflow in LTL
Per la generazione delle regole introdotte dalla logica temporale è necessario analizzare tutti gli
elementi che compongono i diagrammi di workflow e per ognuno di questi si produce una
determinata regola. Di seguito riportiamo le regole di traduzione:
REGOLA
START
( F An a )
ACTIVITY
( An c B An+1 a )
SPLIT
GATEWAY
(Gn B ¬ ( F An a Oper F An+1 a))
MERGE
GATEWAY
(( F An c Oper F An+1 c) B ¬ Gn )
END
( F An c )
BPMN
Tabella 5-2: regole di traduzione tra operatori BPMN e LTL
Nella Tabella 5-2 non sono stati rappresentati tutti i casi che riguardavano gli operatori logici
And, Or e Xor; nella pratica la dicitura “Oper” sarà sostituita da And, Or o Xor in funzione della
rappresentazione grafica.
Mettendo un “AND” tra le regole generate dall’analisi del workflow si ottiene la formula
completa per descrivere un generico processo rispettando la notazione LTL.
__________________________________________________________________________________________________________________________________________________________
Tool
69
__________________________________________________________________________________________________________________________________________________________
6
Tool
Questo capitolo presenta le caratteristiche e il funzionamento del tool visuale. In particolare si
analizzerà:
•
l’interfaccia grafica;
•
il salvataggio dei diagrammi;
•
i file di configurazione;
•
la trasformazione LTL.
6.1 L’interfaccia grafica (GUI)
Per quanto riguarda l’interfaccia grafica abbiamo optato per una divisione del tool in quattro
parti fondamentali:
1. canvas all’interno della quale viene realizzato il disegno del diagramma di workflow;
2. toolbar relativa alla canvas, tramite questa serie di pulsanti è possibile decidere di
effettuare diverse operazioni come: disegnare gli oggetti, collegare tra loro gli oggetti o
fare dello zoom sulla canvas;
3.
panoramica del diagramma consente di ottenere sempre, indipendentemente dallo
zoom selezionato per la canvas, una visione globale del workflow che si sta realizzando;
4. pannello informazioni permette di visualizzare le informazioni relative all’oggetto
selezionato ed eventualmente di modificarle;
Vediamo nella Figura 6-1 uno screenshot di come appare il tool all’avvio:
__________________________________________________________________________________________________________________________________________________________
Tool
70
__________________________________________________________________________________________________________________________________________________________
2
3
1
4
Figura 6-1: screenshot del tool all’avvio
Come in tutti i software vi è una toolbar che presenta i menù a tendina File,
Transformation, Options e ?(About).
Andiamo ora a vedere come funzionano e cosa permettono di fare le vaire parti del tool
6.1.1 Toolbar principale
Come è possibile vedere dall’immagine qui a
fianco (Figura 6-2) nella toolbar sono presenti
quattro menù.
Figura 6-2: la toolbar principale
Selezionando il menù File vengono visualizzati gli elementi:
•
New:
consente di ripulire la canvas per la creazione di un nuovo
diagramma;
__________________________________________________________________________________________________________________________________________________________
Tool
71
__________________________________________________________________________________________________________________________________________________________
•
Open..:
apre un file chooser che permette di scegliere quale file
aprire. È consentita la visualizzazione dei soli file con
estensione XML;
•
Save As..:
apre un file chooser che consente di selezionare la
locazione e il nome del file in cui salvare il progetto
selezionato. Nel caso in cui l’estensione del nome del file
digitato sia diversa da .xml viene aggiunta;
•
Quit:
chiude il tool.
Nel menù Transformation troviamo le trasformazioni attualmente disponibili per il tool. Il
caricamento di questa “lista” viene fatto all’avvio del tool andando a leggere il file delle opzioni
Option.xml (vedi paragrafo 6.3). Le scelte possibili in questo menù variano a seconda degli
elementi presenti nella “lista”. Viene fornita a corredo la trasformazione:
•
Temporal Logic:
effettua la trasformazione del workflow in una formula di
Logica Temporale Lineare, ne salva il risulato in un file
HTML (che ha il nome uguale a quello del progetto
salvato) e lo visualizza tramite una finestra di Dialog.
Selezionando il menù Options appaiono, invece, 2 checkbox:
•
Button Autoselect:
quando è selezionato i bottoni della toolbar relativa alla
canvas (indicata con il numero 2 nella Figura 6-1)
rimangono selezionati, questo consente all’utente di
disegnare più oggetti dello stesso tipo senza dover
riselezionare ogni volta il tool desiderato;
•
Dialog Enabled:
serve per disabilitare o abilitare i messaggi di
avvertimento (come “file salvato con successo”, “vuoi
veramente cancellare l’oggetto?”, …) che il tool apre.
L’ultimo menù, indicato con il simbolo ?, non è altro che l’About.. , una finestra di dialogo
all’interno della quale vi sono le informazioni relative agli sviluppatori del tool.
Per l’analisi delle restanti parti del tool ci avvaliamo di un esempio, relativo alla realizzazione
di un workflow che descrive una richiesta di prestito. Si vuole creare un diagramma in cui un
cliente può effettuare una richiesta di prestito mediante la compilazione di alcuni form. Una
volta che i form sono stati compilati, la società di prestito effettua dei controlli, se tutto va a
__________________________________________________________________________________________________________________________________________________________
Tool
72
__________________________________________________________________________________________________________________________________________________________
buon fine il cliente verrà contattato da un impiegato per la stipula del contratto finale. I controlli
effettuati iniziano con il vedere se la richiesta è valida o meno. Nel caso non sia valida il
processo termina immediatamente, altrimenti viene comunicato al cliente un numero di
riferimento che gli permette di conoscere lo stato della sua richiesta; in contemporanea vengono
effettuati altri controlli dalla società di prestito. In seguito ai risultati di questi ulteriori controlli
la società prende una decisione relativa alla richiesta di prestito e termina il processo di
validazione. In questo processo abbiamo supposto che i manager effattuino l’inizio e la fine
dell’attività di validazione, mentre gli impiegati si occupino dei controlli. I controlli effettuati
dagli impiegati possono essere di due tipi: finanziario o situazione lavorativa, a seconda del tipo
di prestito richiesto dal cliente.
6.1.2 La canvas
Nella Figura 6-3 è realizzata una possibile rappresentare dell’esempio presentato in precedenza.
Come si può vedere gli elementi corrispondono a quelli della notazione BPMN descritta nel
paragrafo 2.2.1.
Figura 6-3: esempio di prestito: la canvas
__________________________________________________________________________________________________________________________________________________________
Tool
73
__________________________________________________________________________________________________________________________________________________________
6.1.3 La toolbar della canvas
1
2
3
4
5
6
7
8
Figura 6-4: screenshot della toolbar della canvas
In Figura 6-4 ne vediamo uno screenshot. Come si vede alcuni dei pulsanti sono stati
raggruppati: questa logica è stata pensata per avere una divisione dei bottoni secondo la
tipologia di funzionalità svolte.
Il primo bottone (indicato in figura con il numero 1) permette la selezione, lo spostamento e il
ridimensionamento degli oggetti.
Il gruppo di bottoni 2, 3, e 4 è relativo alle funzioni di ingrandimento/rimpicciolimento della
canvas. In particolare le loro funzioni sono, nell’ordine: ingrandire una determinata zona
utilizzando un rettangolo di selezione ottenuto attraverso il trascinamento del mouse;
rimpicciolire la canvas di un valore prefissato; impostare la dimensione della canvas in modo da
poter visualizzare tutto il progetto nella stessa schermata.
I bottoni seguenti(5, gruppo 6, 7 e 8) sono relativi alla realizzazione del diagramma di
workflow. Il bottone 5 permette di inserire una lane; i bottoni del gruppo 6 permettono di
inserire gli oggetti che devono essere posti all’interno di una lane: start, end, activity, and, or e
xor; il 7 inserisce una data object, oggetto che non deve essere posto in una lane; infine l’8
serve per creare un flow object: il tipo di oggetto realizzato cambia a seconda degli elementi che
stiamo collegando: se la connessione è tra un oggetto qualsiasi e una data object verrà creata
una association, negli altri casi (ricordiamo) verrà creato un sequence flow. E’ stato posto come
vincolo che non sia possibile collegare tra loro due data object, oltre a questo ne abbiamo posti
altri per evitare casi non contemplati dalla notazione BPMN: non è possibile creare un link che
parta e arrivi alla medesima activity, non è possibile fa terminare un link in un elemento start,
così come non è possibile far partire un link da un elemento end.
6.1.4 Panoramica del diagramma
Con quest’elemento (Figura 6-5) non è possibile interagire
direttamente, il suo cambiamento avviene in base alle modifiche
effettuate sulla canvas principale. Serve per avere una visione
panoramica del workflow, indipendentemente dal livello di
ingrandimento utilizzato sulla canvas principale. Come possiamo
Figura 6-5: esempio di prestito:
vedere in alto a destra è presente una linguetta che sta ad indicare
panoramica del diagramma
__________________________________________________________________________________________________________________________________________________________
Tool
74
__________________________________________________________________________________________________________________________________________________________
il livello di profondità del workflow a cui siamo. Il suo significato verrà spiegato più avanti
quando parleremo della “predisposizione al multilivello” (paragrafo 6.5).
6.1.5 Pannello informazioni
In questa sezione del tool, vengono visualizzati i dati relativi all’oggetto selezionato. Facciamo
un esempio per spiegarne il funzionamento. Selezioniamo un’activity tra quelle presenti nel
nostro workflow. Il bordo di questa si colora di rosso (Figura 6-6a) e nel pannello informazioni
vengono visualizzate le informazioni relative (Figura 6-6b).
a
b
Figura 6-6: a è l’activity selezionata e b il pannello informazioni relativo
Le informazioni visualizzate nel pannello sono personabilizzabili tramite un file di
configurazione XML che verrà descritto nel paragrafo 6.3. In questo caso gli attributi
dell’activity sono quattro: Name, Description, Type e Other. Andiamo a modificare i
campi vuoti della tabella presente nel pannello informazioni nel modo illustrato in Figura 6-7b:
a
b
Figura 6-7: a è l’activity dopo le modifiche effettuate nel pannello informazioni b
__________________________________________________________________________________________________________________________________________________________
Tool
75
__________________________________________________________________________________________________________________________________________________________
L’activity risultante dopo la suddetta modifica sarà quella che possiamo vedere in Figura 6-7a.
Come possiamo vedere sotto l’oggetto vengono visualizzati i valori di Description tra
parentesi tonde e di Type tra parentesi quadre come indicato anche nella tabella. Il campo
Other non viene visualizzato perché è stato specificato di non visualizzarlo nel file di
configurazione, ma anche, per quanto riguarda la spiegazione di questo punto rimandiamo al
paragrafo 6.3.
6.2 Salvataggio diagrammi workflow
Il salvataggio dei diagrammi di workflow è realizzato mediante l’utilizzo di costrutti, specificati
formalmente con XML. Analizziamo brevemente quali sono le caratteristiche e le funzionalità
messe a disposizione da questo linguaggio.
L’EXtensible Markup Language (XML) è un metalinguaggio, ossia un linguaggio destinato alla
creazione di linguaggi a marcatori, ufficializzato dal W3C (World Wide Web Consortium) nel
febbraio del 1998 con l’uscita della XML Recommendation 1.0.
XML è utilizzato per descrivere i dati, focalizzandosi su cosa essi rappresentino. I tag in XML
non sono predefiniti (come ad esempio in HTML) ma sono personalizzabili dall’utente. Questo
comporta l’utilizzo di un Document Type Definition (DTD) o di un XML Schema per descrivere
come i dati sono strutturati. E’ quindi sufficiente avere il documento XML con il rispettivo
DTD o XML Schema per determinare la natura e il tipo delle informazioni presenti nel
documento.
XML non è stato concepito per compiere azioni o istruzioni, l’ unico scopo è quello di
strutturare e memorizzare le informazioni, per questo può essere utilizzato per lo scambio di
dati tra sistemi incompatibili, riducendo di molto la complessità dovuta alla traduzione. Per
garantire l’indipendenza dalla piattaforma, sia essa hardware e/o software, i documenti XML
vengono salvati in formato testo, questo garantisce la loro condivisione da parte di differenti
applicazioni.
Nel progetto del tool grafico, il documento XML salvato, rappresenta un punto di partenza da
cui generare altre forme di output attraverso diverse possibili trasformazioni, tra cui le
trasfomzioni di tipo XSL (vedi paragrafo 7.5.1).
__________________________________________________________________________________________________________________________________________________________
Tool
76
__________________________________________________________________________________________________________________________________________________________
Osserviamo in dettaglio la sintassi utilizzata per scrivere un documento in XML:
1
2
3
4
5
<?xml version="1.0" encoding="ISO-8859-1"?>
<meeting date="29/11/2004">
<to>Rob</to>
<from>Frank</from>
</meeting>
Figura 6-8: esempio di codice XML
La prima riga del documento prende il nome di XML declaration, serve a definire la versione
dell’XML e il tipo di codifica utilizzata per il carattere. Nel caso specifico il documento è
conforme alla specifica 1.0 di XML e utilizza come carattere ISO-8859-1(Latin-1/West
European). La seconda riga del codice descrive l’elemento radice del documento “<meeting>”
a cui viene associato un attributo “date”. Le righe 3 e 4 descrivono i figli del nodo radice,
mentre la riga 5 è il tag di chiusura dell’elemento radice. E’ facile intuire come questo
documento contenga informazioni inerenti un certo incontro, tra due persone, ad una certa data.
Tramite questo esempio si dimostra la facilità di interpretazione dei documenti XML.
Del codice in Figura 6-8 è importante sottolineare alcuni aspetti; tutti gli elementi di XML
devono avere un tag di chiusura. A questa regola fa eccezione solo l’XML declaration che,
d’altra parte, non è un elemento del documento XML e perciò non necessita del tag di chiusura.
Tutti gli elementi devono essere correttamente annidati, prima di chiudere un elemento bisogna
assicurarsi di aver inserito il tag di chiusura a tutti gli elementi contenuti al suo interno. Il valore
degli attributi, associati ad un elemento, deve essere sempre racchiuso tra virgolette, come
mostrato nella riga 2 del codice di Figura 6-8.
__________________________________________________________________________________________________________________________________________________________
Tool
77
__________________________________________________________________________________________________________________________________________________________
6.2.1 Documento XML generato
Presentiamo un semplice esempio di workflow, con il relativo documento XML salvato:
<?xml version="1.0" encoding="UTF-8"?>
<SDSToolWF xmlns:auxiliary="http://www.webratio.com/ausiliario" xmlns:graphic="http://www.webratio.com/grafica">
<DIAGRAM graphic:go="Diagram_go" id="Diagram" version="0.9.2" creationDate="Wed Nov 10 2004">
<LANE graphic:go="lane1_go" id="Lane1" Name="Lane 1" Description="">
<START graphic:go="start1_go" id="Start1" Name="Start 1" Event="">
<LINK graphic:go="link1_go" id="Link1" to="Act1" Name="Link 1" Attr1="" Attr2=""/>
</START>
<ACTIVITY graphic:go="act1_go" id="Act1" Name="Activity 1" Description="" Type="" Other="">
<LINK graphic:go="link4_go" id="Link4" to="Act2" Name="Link 4" Attr1="" Attr2=""/>
</ACTIVITY>
<ACTIVITY graphic:go="act2_go" id="Act2" Name="Activity 2" Description="" Type="" Other="">
<LINK graphic:go="link3_go" id="Link3" to="End1" Name="Link 3" Attr1="" Attr2=""/>
</ACTIVITY>
<END graphic:go="end1_go" id="End1" Name="End 1" Event=""/>
</LANE>
<DATAOBJECTS/>
</DIAGRAM>
<auxiliary:GraphMetaData>
<graphic:Lane id="lane1_go" x="122.0" y="55.0" width="565.0" height="101.0"/>
<graphic:Start id="start1_go" x="179.5" y="83.75" width="31.0" height="31.0"/>
<graphic:Connection id="link1_go" xp1="195.0" yp1="99.25" xp2="336.0" yp2="99.0"/>
<graphic:Activity id="act1_go" x="298.0" y="76.0" width="75.0" height="45.0"/>
<graphic:Connection id="link4_go" xp1="336.0" yp1="99.0" xp2="481.0" yp2="99.0"/>
<graphic:Activity id="act2_go" x="443.0" y="76.0" width="75.0" height="45.0"/>
<graphic:Connection id="link3_go" xp1="481.0" yp1="99.0" xp2="615.0" yp2="99.25"/>
<graphic:End id="end1_go" x="598.5" y="82.75" width="33.0" height="33.0"/>
</auxiliary:GraphMetaData>
</SDSToolWF>
Figura 6-9: diagramma di workflow con documento XML associato
La Figura 6-9 consente di comprendere il risultato che si ottiene salvando un diagramma di
workflow. Il documento XML è suddiviso in due parti fondamentali, contraddistinte dagli
elementi:
•
DIAGRAM contenente informazioni inerenti la struttura del diagramma di workflow;
•
auxiliary:GraphMetaData contenente le informazioni per la rappresentazione grafica
degli oggetti;
Analizziamo in dettagli solamente la sintassi XML presente nell’elemento DIAGRAM, visto che
le informazioni nell’elemento auxiliary:GraphMetaData, hanno una valenza relativa alla solo
rappresentazione grafica generata dal tool grafico.
__________________________________________________________________________________________________________________________________________________________
Tool
78
__________________________________________________________________________________________________________________________________________________________
Ogni oggetto del diagramma di workflow è presente, ad un diverso livello di “annidamento”,
all’interno dell’elemento DIAGRAM. Il livello di annidamento di ogni oggetto segue il criterio
della struttura dati presente in memoria, descritta nel paragrafo 7.3.
I figli dell’elemento DIAGRAM sono tutte le LANE presenti nel diagramma più l’elemento
DATAOBJECTS che conterrà come figli tutte le data object specificate nel diagramma.
Nell’esempio di Figura 6-9 è presente un solo elemento di tipo LANE. Nel nodo LANE vengono
posti tutti gli elementi che fanno riferimento agli oggetti grafici posti all’interno della LANE
stessa come il nodo START, END e le due ACTIVITY. Nel caso in cui da uno di questi ultimi
elementi “esca” un collegamento verso un altro elemento, allora viene creato un ulteriore
elemento chiamato LINK che sarà posto come nodo figlio dell’elemento da cui esce.
Tutti gli attributi, ad eccezione di graphic:go, id e to (solo per gli elementi LINK), associati agli
elementi sono definibili a discrezione dell’utente tramite il file di configurazione (vedi
paragrafo 6.3). E’ interessante notare come tramite l’attributo to, presente in tutti gli elementi di
tipo LINK, sia possibile conoscere quali oggetti sono collegati tra loro nel diagramma di
workflow. L’oggetto di partenza del collegamento si conosce dato che è il nodo padre
dell’elemento LINK nel documento XML, mentre l’oggetto di arrivo viene trovato attraverso il
suo id posto come valore dell’attributo to del LINK.
Nelle esempio di Figura 6-9 non sono presenti data object, ma il meccanismo di salvataggio nel
documento XML è del tutto simile a quello utilizzato per gli altri elementi . L’unica sostanziale
differenza è che le data object fanno tutte riferimento ad un unico nodo padre rappresentato
dall’elemento DATAOBJECTS .
…….
<DATAOBJECTS>
<DATAOBJECT graphic:go="data1_go" id="Data1" Name="Data Object 1" Type=""/>
<DATAOBJECT graphic:go="data2_go" id="Data2" Name="Data Object 2" Type="">
<LINK graphic:go="link2_go" id="Link2" to="Act2" Name="Link 2" Attr1="" Attr2=""/>
</DATAOBJECT>
</DATAOBJECTS>
…….
Figura 6-10: documento XML inerente le Data object
L’esempio di Figura 6-10 rappresenta due data object, la prima non ha alcun elemento LINK in
uscita, mentre la seconda ne ha uno. Questo ci consente di sapere che la seconda data object è
collegata ad un oggetto di tipo activity con valore dell’id pari a “Act2”.
__________________________________________________________________________________________________________________________________________________________
Tool
79
__________________________________________________________________________________________________________________________________________________________
6.3 File configurazione
Per la realizzazione di questo progetto, si è reso necessario l’utilizzo di due distinti file di
configurazione, entrambi scritti in formato XML. Questi file hanno il compito di dare una
maggiore modularità al progetto, tenendo in considerazione i possibili sviluppi futuri.
Per il corretto funzionamento del tool è necessario che i file di configurazione, il cui nome è
Configuration.xml e Option.xml, siano presenti nella stessa directory del progetto.
Come evidenziato nel paragrafo 6.1.5, ad ogni oggetto grafico, vengono associate delle
proprietà (oltre all’id). Tali proprietà sono personalizzabili tramite il file Configuration.xml.
Lo scopo del file Option.xml è invece quello di definire il numero e il tipo di trasformazioni che
è possibile applicare al documento XML generato con il salvataggio del diagramma di
workflow. Tali trasformazioni appariranno nel menù Transformation. Sempre con il file
Option.xml si tiene traccia delle impostazioni, selezionate dall’utente nel menu Options (vedi
paragrafo 6.1.1).
<?xml version="1.0" encoding="UTF-8"?>
<CONFIGURATION>
<LANE>
<Name visual="true"/>
<Description visual="true"/>
</LANE>
<ACTIVITY>
<Name visual="true"/>
<Description visual="true" Open="(" Close=")"/>
<Type visual="true" Open="[" Close="]"/>
<Other visual="false"/>
</ACTIVITY>
<START>
<Name visual="true"/>
<Event visual="true" Open="[" Close="]"/>
</START>
<END>……….</END>
<OR>
<Name visual="false"/>
<Type visual="true" Open="[" Close="]"/>
</OR>
<AND>……….</AND>
<XOR>……….</XOR>
<DATAOBJECT>
<Name visual="true"/>
<Share visual="true" Open="[" Close="]"/>
</DATAOBJECT>
<CONNECTION>
<Name visual="true"/>
<Description visual="false"/>
<Typer visual="false"/>
</CONNECTION>
</CONFIGURATION>
Figura 6-11: file Configuration.xml
__________________________________________________________________________________________________________________________________________________________
Tool
80
__________________________________________________________________________________________________________________________________________________________
In Figura 6-11 è riportato il documento Configuration.xml. Come accennato, ad ogni oggetto
grafico è possibile legare delle proprietà. Ad ogni proprietà che si definisce deve essere,
necessariamente, associato una serie di attributi. Gli attributi variano al variare del tipo di
proprietà. Se il nome dell’attributo è Name bisogna assegnare all’attributo Visual i possibili
valori booleani true o false, per tutti gli altri tipi di attributo è necessario specificare altri
due attributi: Open e Close che hanno, come possibile valori, un dato di tipo char.
Specifichiamo l’utilità di questi attributi:
•
Visual:
se il valore è true il nome dell’oggetto, oltre a comparire nel
pannello informazioni, compare anche nella rappresentazione
grafica dell’oggetto.
•
Open / Close:
Sono i tag che vengono posti, nella rappresentazione grafica,
all’inizio e alla fine delle proprietà, questo per aumentare la
leggibilità e la chiarezza dei diagrammi.
L’unico vincolo, posto sui tag d’apertura e chiusura delle proprietà, è che il carattere utilizzato
sia uno solo. La scelta del carattere da utilizzare è lasciato all’utente, eventualmente è possibile
definire dei tag di apertura e chiusura anche diversi tra loro.
<?xml version="1.0" encoding="UTF-8"?>
<OPTIONS>
<TOOL>
<ButtonToolUnselect value="false"/>
<Dialog value="false"/>
</TOOL>
<TRANSFORMATIONS>
<T1 Name="Temporal Logic" Source="C:\Software\Jar File\ltlTransformation.xsl" Type="XSL"/>
<T2 Name="Java Transformation" Source="c:\T2.class" Type="JAVA"/>
</TRANSFORMATIONS>
</OPTIONS>
Figura 6-12: file Option.xml
Dalla Figura 6-12 si vede come il documento XML del file Option.xml sia suddiviso in due
parti:
•
TOOL:
in quest’elemento sono salvate le impostazioni selezionate
dall’utente nelle due checkbox del menù Option.
•
TRANSFORMATION:
vengono definite le trasformazioni che compariranno
all’interno del menù Trasformation.
Gli attributi che devono essere impostati per ogni trasformazione definita sono: Name, Source
e Type. Il primo è la stringa visualizzata nel menù Trasformation, il secondo è il percorso
__________________________________________________________________________________________________________________________________________________________
Tool
81
__________________________________________________________________________________________________________________________________________________________
del file che contiene la trasformazione ed il terzo è il tipo di trasformazione che si vuole
realizzare. Per l’attributo Type sono possibili due valori:
• XSL:
la trasformazione è definita tramite il linguaggio XSL.
• JAVA:
la trasformazione è definita all’interno di una classe JAVA
Nel seguente paragrafo descriveremo la trasformazione di tipo XSL a corredo del tool.
6.4 Trasformazione Linear Temporal Logic (LTL)
Il suo scopo è trasformare il workflow rappresentato graficamente in una formula di logica
temporale lineare rispettando la notazione presentata nel paragrafo 5.4. Questa trasformazione
avviene tramite XSL.
XSL è un linguaggio per scrivere stylesheet: serve per descrivere come dovranno essere
rappresentati i dati strutturati presenti all’interno di un certo tipo di file XML. Permette di
descrivere lo stile, il layout e la paginazione all’interno di un qualsiasi media, come ad esempio
la finestra di un browser piuttosto che quella di un dispositivo portatile. Nel caso specifico di
questo progetto, XSL è stato utilizzato per riconoscere elementi in particolari pattern all’interno
del diagramma e trasformarli in formule LTL come descritto nel paragrafo 5.4.
6.4.1 Output della trasformazione
La trasformazione viene eseguita partendo dal file XML del diagramma salvato. Per questo
motivo il tool richiede il salvataggio del progetto prima di generare l’output in LTL. Al file
salvato si applica la trasformazione XSL che genera la formula temporale, come evidenzia il
seguente esempio (Figura 6-13):
__________________________________________________________________________________________________________________________________________________________
Tool
82
__________________________________________________________________________________________________________________________________________________________
Figura 6-13: diagramma di workflow con relativa formula logica
La formula logica ottenuta dal diagramma presentato in quest’esempio rispetta le regole di
mapping definite nella Tabella 5-2. Nel caso specifico si nota come l’estrazione delle regole
non segue l’ordine con cui i rispettivi operatori BPMN compaiono all’interno del workflow,
nell’esempio la regola che esprime il gateway Or2 precede l’ultima regola che esprime la
precedenza tra l’attività Act2 e l’attività Act3 anche se nel workflow avviene il contrario.
Questo può rendere più difficile la lettura ad un utente “umano”, ma non inficia in alcun modo
la veridicità della regola temporale.
6.5 Predisposizione al multilivello
Come accennato nel paragrafo Panoramica del diagramma (6.1.4), il tool
è stato predisposto per supportare la realizzazione di workflow
multilivello, come definito dalla notazione BPMN. Per consentire
quest’ulteriore sviluppo è necessario aggiungere le unità di tipo activity
con sub-process (Figura 6-14). Lo scopo è quello di consentire
Figura 6-14: activity
all’utente, una volta selezionata activity con sub-process, di aprire una
con sub-process
nuova finestra all’interno della quale disegnare i sotto-processi. Questi
sotto-processi sono anch’essi specificabili tramite workflow, quindi una activity con subprocess non sarà altro che un insieme di diagrammi di workflow. La vista panoramica del
diagramma consente si avere sempre una visione globale del workflow. Per la realizzare della
finestra con la panoramica è stato utilizzando un pannello con linguette, in modo che sia
possibile selezionare la visualizzazione di uno dei livelli presenti nel diagramma.
__________________________________________________________________________________________________________________________________________________________
Implementazione
83
__________________________________________________________________________________________________________________________________________________________
7
Implementazione
Per lo sviluppo del tool si è deciso di utilizzare, come linguaggio di programmazione, Java. La
scelta è stata supportata dal fatto che esistono, per questo linguaggio, dei compilatori freeware e
che funziona indipendentemente dalla piattaforma d’esecuzione.
Java è nato originariamente come linguaggio per la rete, verso la metà degli anni novanta. Data
la giovane età è sempre in fase di sviluppo e ogni anno circa viene rilasciata una nuova
versione.
Da linguaggio nato solo per la rete è divenuto un vero e proprio linguaggio di programmazione
paragonabile, dal punto di vista delle funzionalità, al più blasonato C++. Il paragone può essere
fatto solo dal punto di vista delle funzionalità messe a disposizione perché funzionano in
maniera profondamente diversa: Java compila i sorgenti dei suoi programmi in un codice detto
bytecode, diverso dal linguaggio della macchina su cui è compilato; i linguaggi come il C++
compilano i sorgenti dei programmi in un codice che è il codice della macchina su cui è
compilato. Per eseguire un programma Java è necessario avere uno strumento che è chiamato
Java Virtual Machine (JVM), la quale interpreta il bytecode generato dal compilatore e lo
esegue sulla macchina su cui è installata. La JVM rende Java completamente indipendente dalla
piattaforma in quanto il programma compilato è legato solo alla JVM e non al sistema
operativo. Supponendo di avere due piattaforme, una Windows e l’altra Linux, per eseguire un
programma scritto in Java è sufficiente avere installato all’interno dei due sistemi operativi la
rispettiva versione della JVM. Le due JVM installate sono lo stesso programma compilato
rispettivamente per Windows e per Linux.
Per questo progetto è stato utilizzato, come compilatore, Java 2 Software Development Kit
versione 1.4.2_04, che comprende sia il compilatore che la JVM. Adottando questa soluzione è
possibile realizzare software senza alcuna spesa per l’acquisto di diritti come avviene invece
per certi ambienti di sviluppo proprietari.
Nonostante Java fornisca una grande quantità di funzionalità, per l’aspetto prettamente grafico,
si è deciso l’utilizzo di una libreria che andasse otre il semplice utilizzo di tabelle, liste o
bottoni. Questo perché ciò di cui abbiamo bisogno è uno strumento grafico che consenta di
rappresentare sia degli oggetti che le relazioni tra essi.
__________________________________________________________________________________________________________________________________________________________
Implementazione
84
__________________________________________________________________________________________________________________________________________________________
Per questo scopo sono state scelte le librerie grafiche denominate JKit/GO. Una panoramica
sufficientemente dettagliata sarà data in seguito. Nel prossimo paragrafo viene presentata la
struttura base del tool attraverso un diagramma delle classi.
7.1 Class diagram
Rappresentiamo qui di seguito il diagramma delle classi, realizzato in fase di progettazione, che
dà una sommaria visione di quelle che sono le classi java e i relativi metodi, che abbiamo in
seguito utilizzato per realizzare il tool:
Tool
+redraw()
+close()
#getFrame()
1
1
1
1
-compone
-compone
1
1..*
-compone
panoramica diagramma
pannello info
toolbar
-è formato da
finestra canvas
-color_background
#repaint()
#update()
#clear()
#redraw()
#clear()
#setInfo()
+open()
+close()
+update()
1
usato in
Salva
usato in
usato in
Carica
1
Trasformazione
+open_file()
-color_background
-dimension
-zoom
+selectGO()
+showGO()
+getTool()
+transform_xml()
-è composto da
-compone
canvas
-type
+select_file()
-compone
1
-compone
canvas_toolbar
-tool_number
+getSelectedTool()
contiene
utilizzato in
oggetto grafico
-dimension
-position
+add()
+remove()
+selected()
+unselected()
Lane
+getHeader()
+getBody()
Activity
+getName()
+getAttrib(i)()
And
Gateway
+getLinkIn()
+getLinkOut()
Or
Data Object
+getSource()
+getTarget()
+getEntity()
Xor
Link
-getParent
-getSource
Sequence
Association
Figura 7-1: diagramma delle classi
__________________________________________________________________________________________________________________________________________________________
Implementazione
85
__________________________________________________________________________________________________________________________________________________________
Nel paragrafo seguente si spiega come sono state implementate le classi partendo dal class
diagram, nel rispetto dei vincoli imposti dall’utilizzo delle librerie grafiche Jkit/GO, che
abbiamo utilizzato per lo sviluppo del tool grafico.
7.1.1 Implementazione del class diagram
Il class diagram presentato in Figura 7-1 è stato preso come traccia per la realizzazione delle
classi presenti nel progetto: le librerie Jkit/GO richiedono un elevato numero di listener per la
gestione degli eventi riguardanti gli oggetti, e quasi tutti sono stati implementati tramite classi
aggiuntive.
Analizziamo in generale, le relazioni tra le classi generate per il tool grafico e il class diagram
di Figura 7-1.
•
Tool ha preso il nome di SDSGraphicalTool ed è la classe principale del progetto;
•
Toolbar può essere associato alla classe FileListener che richiama le classi
OpenToolXML (Carica), SaveToolXML (Salva) e TransfActionListener
(Trasformazione);
•
Pannello Info ha preso il nome di InfoTabPanel;
•
Panoramica diagramma ha preso il nome di AeroCanvas;
•
FinestraCanvas è stata implementata mediante un metodo all’interno di
SDSGraphicalTool e solo alcuni dei suoi componenti sono stati realizzati come
classi separate: Canvas è diventato ScrollableCanvas, Lane è diventata
createLane, Activity createActivity e analogamente è avvenuto per gli altri
elementi del tipo oggetto grafico (inclusi And, Or e Xor);
Nel progetto finale sono presenti ulteriori classi, il cui compito principale è di gestire i listener
relativi agli oggetti creati.
__________________________________________________________________________________________________________________________________________________________
Implementazione
86
__________________________________________________________________________________________________________________________________________________________
7.2 Libreria Grafica
La realizzazione dell’interfaccia grafica è stata realizzata utilizzando le librerie SWING di
JAVA con l’ausilio delle librerie Jkit/GO sviluppate da Instantiations.
Le librerie JKit/GO forniscono un valido framework per la realizzazione e gestione degli
oggetti grafici. Il codice sorgente è stato scritto in Java, così da avere una completa compatibile
con tutti i compilatori Java. Utilizzando le JKit/GO è possibile realizzare dei diagrammi 2D
interattivi, grazie alla definizione di nuovi tipi di oggetti grafici non comuni in Java. Tali
oggetti contengono al loro interno delle informazioni di stato collegate alla rappresentazione
grafica. Nel capitolo precedente si è visto che un GFRoundedRectangleGO (classe per
rappresentare graficamente un rettangolo con angoli smussati) assume il significato di activity
all’interno di un workflow. Come il GFRoundedRectangleGO appare, le azioni che vengono
compiute quando viene selezionato e le opzioni che si possono selezionare sono tutte
funzionalità facilmente accessibili e personalizzabili grazie all’utilizzo delle JKit/GO.
Essendo state sviluppate nel 1998 presentano, per certi versi, delle caratteristiche obsolete, visto
che estendendo le librerie grafiche AWT di JAVA. Ciò comporta la mancanza di molti metodi
che vengono abitualmente utilizzati nelle SWING, ad esempio il metodo autoscroll (utilizzato
per scorrere automaticamente le pagine più grandi dello schermo) è presente nella classe JPanel
delle SWING mentre non lo è nella classe Panel delle AWT.
Le librerie sono basate sull’utilizzo degli eventi per conoscere lo stato in cui si trovano gli
oggetti grafici. E’ sufficiente associare un listener ad ogni oggetto, attraverso questo è possibile
inviare un opportuno messaggio nel momento in cui lo stato dell’oggetto cambia, come ad
esempio quando viene selezionato. Catturando il messaggio è possibile realizzare qualsiasi tipo
di azione in risposta all’evento generato.
Le JKit/GO introducono molte nuove classi Java, è comunque sufficiente conoscerne in
dettaglio cinque per comprenderne il funzionamento di base:
•
GFGraphicObject
•
GFDrawingManager
•
GFDrawingCanvas
•
GFHandle
•
GFTool
__________________________________________________________________________________________________________________________________________________________
Implementazione
87
__________________________________________________________________________________________________________________________________________________________
Per evitare ogni genere di conflitto con altre classi è stato introdotto il prefisso “GF” (Graphic
Frameworks) davanti al nome di tutte le classi associate alle JKit/GO. Per utilizzare
correttamente le JKit/GO non è necessario conoscere come funziona una certa classe. Bisogna
invece sapere quali sono le classi di cui si avrà bisogno e specialmente come queste
interagiscono tra loro. Analizziamo il ruolo e le responsabilità delle classi chiave definite in
precedenza:
GFGraphicObject:
questa è la classe centrale per lo sviluppo di applicazioni basate
sulle JKit/GO. Per riferirsi a questo classe in futuro si utilizzerà
l’abbreviazione “GO”. Un GO utilizza gli eventi per notificare, a
chi di dovereè interessato, tutto quello che gli accade. Gli eventi
sono utilizzati per far rispettare i vincoli e per evitare di legare il
GO con il dominio del modello che esso stesso rappresenta. Con
il seguente codice:
aGO.addSelectionListener(this)
l’oggetto grafico chiamato aGO invia un messaggio di
goSelected e di goUnselected ogni qual volta viene
selezionato dall’utente. Un GO gestisce la propria
visualizzazione, conosce quando un punto è contenuto al suo
interno e se interseca una certa area. Un GO è contenuto sempre
all’interno di un altro GO con un'unica eccezione che è il
GFDrawing. Un GFDrawing è l’oggetto grafico che contiene
tutti i GO in una finestra, esattamente un GFDrawing è un
contenitore che istanzia la classe GFDrawingManager.
GFDrawingManager:
questa classe gestisce l’editing e la manipolazione dei GO,
consentendo di aggiungere, eliminare o raggruppare gli oggetti
all’interno dei un generico disegno. Per aggiungere un oggetto al
disegno è necessario, creare un GO e colegarlo al manager, che è
una istanza di GFDrawingManager, con il seguente codice:
manager.add(aGO);
manager.redraw();
la seconda istruzione serve ad aggiornare il disegno per rendere
visibile anche il GO aggiunto.
__________________________________________________________________________________________________________________________________________________________
Implementazione
88
__________________________________________________________________________________________________________________________________________________________
GFDrawingCanvas:
è una classe che “eredita” direttamente dalle AWT di Java. Il suo
compito principale è quello di fornire una superficie dove
mostrare il disegno. Una volta creata l’istanza di questa classe è
necessario legarlo ad un manager, questo perché la gestione di
tutti gli oggetti è delegata al manager e non alla canvas. Di
seguito riportiamo il codice per associare una istanza di
GFDrawingCanvas con la istanza di GFDrawingManager:
GFDrawingCanvas canvas = new GFDrawingCanvas();
GFDrawingManager manager = new GFDrawingManager();
canvas.setManager(manager);
Creata la canvas è possibile aggiungerla come un componente
AWT all’interno di una generica finestra.
GFHandle:
tutti gli input, prodotti da un utente, su un GO vengono gestiti
tramite una istanza di GFHandle o di GFTool. Per spostare un GO
viene creata “al volo” una istanza di GFHandle, nel momento in
cui si preme il tasto del mouse all’interno dell’area del GO.
Esistono di default degli handle che sono sempre presenti in un
GO questo perché, ad esempio,è necessario ridimensionare
l’oggetto. Gli handle sono usati anche per definire un punto dove
è possibile collegare tra loro gli oggetti. Nelle JKit/GO gli handle
vengono rappresentati genericamente tramite un quadratino nero o
una “x”(dipende dal funzionalità associata), come in figura:
Figura 7-2: rappresentazione grafica degli handle
Selezionando uno dei quattro quadratini neri associato al GO è
possibile modificare la dimensione dell’oggetto. Le “x”
rappresentano invece i punti in cui vengono ancorate le linee che
collegano i GO.
GFTool:
il tool rappresenta il modo con cui si sta agendo sul disegno.
Quando si seleziona un oggetto implicitamente si utilizza il tool
chiamato GFSelectionTool, se invece si vuole creare un oggetto e
aggiungerlo alla canvas si utilizza un GFCreationTool. Per
__________________________________________________________________________________________________________________________________________________________
Implementazione
89
__________________________________________________________________________________________________________________________________________________________
decidere il tool da utilizzare è sufficiente andarlo a selezionare in
una serie di bottoni messi a disposizione dalle JKit/GO. I tool
assieme al manager sono gli strumenti per gestire la realizzazione
dei design. Una volta che il tool è impostato, tutti gli eventi
generati dall’utente sul disegno, passano attraverso di esso così da
filtrarli se necessario.
7.3 Struttura dati
Nel tool grafico, si è preferito realizzare una netta separazione tra la rappresentazione grafica
degli oggetto e il modello dei dati presente in memoria.
Visto che per il salvataggio su file si utilizza XML è stato necessario creare in memoria una
struttura che consentisse, in maniera semplice e coerente, di passare dalla rappresentazione
grafica del tool al file di salvataggio XML, per questo si è scelto una struttura dati ad albero
(vedi Figura 7-3). Ogni nodo dell’albero è definito come istanza della classe Java
DefaultMutableTreeNode, tale classe ha il pregio di definire svariati metodi per la
navigazione all'interno dell'albero; ad esempio è possibile conoscere il nodo radice, il nodo
padre, i nodi figli se esistono e il loro numero.
Il dato che viene salvato all'interno del singolo nodo è una istanza della classe GFNode
appositamente definita nel tool. In questa classe vengono salvate due informazioni, l'ID e gli
attributi dell’oggetto grafico associato. L’ID è generato in modo univoco alla creazione
dell'oggetto. Quando si crea la prima Lane, l'ID associato è "Lane1" per la seconda invece sarà
"Lane2" così via. Per creare un legame tra gli oggetti grafici disegnati sulla canvas e la struttura
in memoria è necessario, alla creazione del GO, usare questo codice:
aGO.setMetaObject(aNode);
dove aGO è una qualsiasi classe che definisce un oggetto grafico (es. GFRectangleGO),
mentre aNode è una istanza della classe GFNode. Se si conosce l’oggetto e si vuole sapere a
quale nodo dell’albero appartiene, basta utilizzare il seguente metodo che ritorna il GFNode
cercato:
aNode =
(GFNode) aGO.getMetaObject()
purtroppo questo non vale nel caso contrario, cioè quando si ha il nodo dell’albero e si vuole
risalire al GO associato. Per risolvere tale problema abbiamo utilizzato una lista, realizzata
attraverso l’istanza della classe Hashtable definita in Java.
__________________________________________________________________________________________________________________________________________________________
Implementazione
90
__________________________________________________________________________________________________________________________________________________________
1
2
3
Figura 7-3: struttura dati ad albero del tool
La struttura dati ad albero (Figura 7-3) è composta, oltre che dal livello radice, da tre livelli
fondamentali. Il primo livello contiene i nodi che fa fanno riferimento alle Lane presenti nel
disegno, più un ulteriore nodo utilizzato per raggruppare le Data Object. Al secondo vi sono i
nodi che fanno riferimento a tutti gli oggetti grafici che descrivono il workflow come lo Start,
l’End, le Activity e tutti i tipi di gateway (And, Or e Xor); questi nodi devono necessariamente
far riferimento al nodo che rappresenta la Lane dove sono posti. Sempre a questo livello
dell’albero vengono posizionate le Data Object raggruppate sotto il nodo padre Group Data
Objects. Nel terzo ed ultimo livello sono invece inseriti i nodi associati ai Link uscenti
dall’oggetto grafico a cui sono associati, in Figura 7-3 l’attività con ID “Activity 1” ha due Link
uscenti con ID rispettivamente “Link 1” e “Link 2”.
Conoscendo il Link uscente da un certo nodo, tramite l’oggetto grafico che rappresenta il Link
(solitamente un istanza di GFPolylineGO) è possibile risalire al nodo di destinazione. Come
detto in precedenza, per passare dal nodo nell’albero al GO è stato necessario utilizzare una
Hashtable.
Una Hashtable è una mappa tra chiavi univoche e entry. Ciò significa che nella tabella sono
presenti delle coppie (chiave; entry) e conoscendo la chiave si ricava la entry associata.
I due metodi per gestire l’inserimento e l’estrazione dell’informazione sono:
aHashtable.put(chiave, entry);
aHashtable.get(chiave);
__________________________________________________________________________________________________________________________________________________________
Implementazione
91
__________________________________________________________________________________________________________________________________________________________
è detta hashtable perchè il posizionamento effettivo della entry nella memoria e' determinato da
un "rimescolamento" (hashing) basato sulle chiavi. Ciò fornisce delle desiderabili proprietà
statistiche, tali che chiavi diverse tendono a generare posizioni diverse. Formalmente avremo
una funzione del tipom hash(chiave) che genera, ad esempio, un indice in un array.
L’implementazione dei due metodi di put e get sarà quindi:
•
put(chiave,entry)
:
array[hash(chiave)] = entry
•
get(chiave)
:
return
array[hash(chiave)]
il che garantisce una notevole velocità di accesso se comparata alle consuete strutture dati. Con
una lista unidirezionale, per implementare il metodo get(chiave) bisogna scorrere la lista
dall'inizio fino a quando o s’individua la chiave o la lista e' finita. Nel caso in cui due chiavi
diverse generino lo stesso indice si ha una "collisione", questo perché bisognerebbe mettere due
elementi distinti nella stessa posizione dell'array. Siccome questo non è possibile, per ovviare al
problema viene messa nell'array una “lista” (o altra struttura dati) di entry, invece che mettere
una sola entry. Inserendo un elemento, in caso di collisione, se nella posizione hash (chiave) c'è
già una entry, si fa semplicemente l'append sulla lista.
Nel caso specifico del tool grafico la chiave è istanza del GFNode mentre l’entry è il GO
associato.
Con l’utilizzo simultaneo della strutture dati ad albero e della Hashtable, è possibile gestire in
maniera completa sia l’inserimento sia la cancellazione degli oggetti nei disegni. Un caso
emblematico è rappresentato dalla cancellazione di una Lane. Ciò comporta la cancellazione di
tutti i GO presenti al suo interno oltre che dei Link entranti o uscenti dagli stessi GO cancellati.
7.4 Salvataggio file XML
Come visto nel precedente paragrafo in memoria è presente una struttura dati che contiene le
informazioni riguardanti i diagrammi di workflow disegnati. Partendo da questa struttura si
genera, in modalità completamente automatica, il documento XML che la descrive.
Al momento del salvataggio del diagramma di workflow viene richiamata un’istanza della
classe SaveToolXml, che ha il compito di creare il file XML. In Figura 7-4 riportiamo la parte
significativa della classe SaveToolXml:
__________________________________________________________________________________________________________________________________________________________
Implementazione
92
__________________________________________________________________________________________________________________________________________________________
1
2
3
4
5
6
7
8
9
10
11
12
Document doc = builder.newDocument();
Element SDSTool = doc.createElement("SDSToolWF");
…..
Element Diagram = doc.createElement("DIAGRAM");
…..
new SaveTreeDiagram(Tree, Diagram, doc, nodeGODict);
SDSTool.appendChild(Diagram);
Element GraphMetaData = doc.createElement("auxiliary:GraphMetaData");
new SaveTreeGraph(Tree, GraphMetaData, doc, nodeGODict);
SDSTool.appendChild(GraphMetaData);
doc.appendChild(SDSTool);
…..
Figura 7-4: classe SaveToolXml.java
Nella riga 1 viene creato il documento XML, nella riga 2 è definito l’elemento radice chiamato
SDSToolWF. All’elemento radice sono collegati i due elementi figli DIAGRAM e
auxiliary:GraphMetaData, rispettivamente alle righe 7 e 10. Questi due elementi, come detto
nel paragrafo 6.2.1, costituiscono la struttura base del documento. Per inserire le informazioni
presenti nei due elementi vengono richiamate rispettivamente le istanze delle classi
SaveTreeDiagram e SaveTreeGpaph. Le due classi sono entrambe di tipo ricorsivo; il
loro scopo è quello di scorrere la struttura dati ad albero ed estrarre le informazioni necessarie
al completamento del documento XML. Ad esempio la classe SaveTreeDiagram analizza i
nodo dell’albero e da ognuno di essi ricava: l’id, il nome e il valore degli attributi associati
all’oggetto grafico, tali dati verranno poi riportati nel file XML con la corretta sintassi.
7.5 Generazione trasformazione XSL
Per definire le trasformazioni presenti nel tool grafico vi sono due possibilità di codifica:
•
utilizzare una trasformazione XSL;
•
implementare una classe atta allo scopo;
Dato che nell’applicativo è presente una sola trasformazione (di tipo XSL), daremo una visione
generale dei linguaggi XSL e XPath. In conclusione si preseterà il codice che consente la
realizzazione della trasformazione dai diagrammi di workflow a formule logiche temporali
basate su LTL.
__________________________________________________________________________________________________________________________________________________________
Implementazione
93
__________________________________________________________________________________________________________________________________________________________
7.5.1 eXstensible Stylesheet Language (XSL) e XPath
XSL è un linguaggio per scrivere Stylesheet. Descrivere lo stile, il layout e la paginazione
all’interno di un qualsiasi media, come ad esempio la finestra di un browser.
Prima di presentare gli elementi più significativi di XSL è necessario introdurre XPath: un
insieme di regole di sintassi per definire le parti in un documento XML. Senza conoscere,
queste regole, non è possibile spiegare gran parte del codice XSL che abbiamo scritto. Bisogna
introdurre il concetto di asse: un asse definisce un insieme di nodi in relazione al nodo corrente.
Viene utilizzato un test di nodo per identificare un nodo attraverso un’asse. Un test di nodo può
essere effettuato sia per nome che per tipo. Ecco in Tabella 7-1 alcuni degli assi che abbiamo
utilizzato:
Nome dell’asse
Attribute
Child
descendant-or-self
Parent
Self
Tabella 7-1: assi principali di XPath
Descrizione
Contiene tutti gli attribute del nodo corrente
Contiene tutti i figli del nodo corrente
Contiene il nodo corrente più tutti I suoi discendenti (figli, nipoti, ecc.)
Contiene il padre del nodo corrente
Contiene il nodo corrente
Per velocizzare l’utilizzo degli assi si usano delle abbreviazioni che vediamo in Tabella 7-2:
Abbrev. Significato
nessuna child::
@
attribute::
Esempio
LINK è abbreviativo di child::LINK
LINK[@to="Act"] è abbreviativo di
child::LINK[attribute::to="Act"]
.
self::node()
.//LINK è abbreviativo di self::node()/descendant-orself::node()/child::cd
..
parent::node()
../LINK è abbreviativo di parent::node()/child::LINK
//
/descendant-or//LINK è abbreviativo di /descendant-orself::node()/
self::node()/child::LINK
Tabella 7-2: abbreviazioni degli assi utilizzati in XPath
Dopo aver dato una panoramica a XPath, si passa all’analisi degli elementi XSL utilizzati per la
realizzazione della trasformazione LTL. Di seguito riportiamo alcune delle più significative
istruzioni XSL:
•
<xsl:value-of>:
questo elemento può essere usato per selezionare il valore
di un elemento XML e aggiungerlo all’output della
trasformazione. Per esempio nel nostro codice:
<xsl:value-of select="@to"/>
Inserisce nel file di output che verrà visualizzato il valore
dell’attributo to dell’elemento analizzato in quel punto;
__________________________________________________________________________________________________________________________________________________________
Implementazione
94
__________________________________________________________________________________________________________________________________________________________
•
<xsl:for-each>:
può essere usato per selezionare ogni elemento XML di
uno specifico insieme di nodi. Riportiamone un esempio:
<xsl:for-each select="//START">
In questo caso dal for-each verranno selezionati tutti
quegli elementi che hanno come tag START;
•
<xsl:if>:
serve per effettuare un test condizionale sul contenuto del
file, per esempio:
<xsl:if test="starts-with(@to,'Act')">
Controlla che il valore dell’attributo to dell’elemento
attualmente selezionato inizi con il valore Act, se ciò
avviene allora il codice all’interno dell’if viene eseguito;
•
<xsl:choose>:
serve per inserire un test condizionale. Il suo utilizzo è
leggermente più complesso di quello dell’if, perché la
condizione favorevole e il relativo codice si inseriscono
utilizzando <xsl:when> mentre il codice da eseguire
se non si verifica la condizione espressa nel when si
inserisce all’interno di <xsl:otherwise> nel seguente
modo:
<xsl:choose>
<xsl:when test="position()=1"></xsl:when>
<xsl:otherwise>&#160;AND&#160;</xsl:otherwise>
</xsl:choose>
In questo esempio il when controlla che l’elemento
selezionato sia in prima posizione (ovvero il primo figlio),
se così non avviene viene eseguito il codice presente nel
blocco otherwise.
__________________________________________________________________________________________________________________________________________________________
Implementazione
95
__________________________________________________________________________________________________________________________________________________________
7.5.2 Alcuni esempi di codice
Vengono presentati di seguito alcune parti di codice per far comprendere il funzionamento della
trasformazione XSL che ci permette di visualizzare il risultato del workflow in LTL.
<xsl:for-each select="//START">
<xsl:choose>
<xsl:when test="position()=1"></xsl:when>
<xsl:otherwise>&#160;AND&#160;</xsl:otherwise>
</xsl:choose>
<xsl:for-each select="./LINK">
(<b> F </b>
<i><xsl:value-of select="@to"/></i>
<xsl:if test="starts-with(@to,'Act')">a</xsl:if>
&#160;)
</xsl:for-each>
</xsl:for-each>
Questa prima parte ricerca gli elementi START e li trasforma in una funzione “F elem a” dove
elem è l’ID dell’elemento collegato allo START. La “a” finale viene messa solo se “elem = act”.
Nel caso vengano trovati più elementi START ai successivi viene aggiunto un AND prima di
scrivere la formula.
Quindi passiamo all’analisi di tutte le lane:
<xsl:for-each select="./LANE">
<xsl:variable name="laneid" select="@id"/>
Da questo punto fino alla chiusura del tag <xsl:for-each select="./LANE"> gli
elementi considerati saranno tutti quelli presenti nella lane. AND, OR e XOR sono tra loro simili,
per quanto riguarda il codice della trasformazione, per questo commenteremo solo alcune parti
del codice dell’AND.
<xsl:choose>
<xsl:when test="$numOfChild>1">
<!--SPLIT-->
<xsl:for-each select="//LINK[@to=$andID]">
<!--ricerca del link entrante nel gateway-->
<xsl:if test="not(starts-with(parent::*/attribute::id,'Start'))">
&#160;AND (<i><xsl:value-of select="parent::*/attribute::id"/></i>
<xsl:if test="starts-with(parent::*/attribute::id,'Act')"> c
</xsl:if>
<b> B &#172;</b><i><xsl:value-of select="$andID"/> )</i>
</xsl:if>
&#160;AND ( <i><xsl:value-of select="$andID"/></i><b> B &#172;</b>(
</xsl:for-each>
…
__________________________________________________________________________________________________________________________________________________________
Implementazione
96
__________________________________________________________________________________________________________________________________________________________
Questa parte di codice è eseguita relativamente ad un gateway per riconoscere se è uno SPLIT
piuttosto che un MERGE. Il gateway è riconosciuto come SPLIT se il numero dei figli, che
possono essere solo di tipo LINK, è maggiore di uno ($numOfChild>1). Se è questo il caso,
viene in seguito ricercato il link entrante nel gateway, che può essere solo uno per definizione,
tramite la funzione XPath:
parent::*/attribute::id.
Questa funzione ritorna l’attributo id del nodo padre del LINK, cioè l’elemento da cui parte il
LINK che va a collegarsi al gateway.
7.6 Funzioni particolari (posizionamento frecce)
I Link tra gli oggetti presenti in un diagramma sono realizzati istanziando la classe
GFPolylineGO. Questo consente di generare una linea spezzata composta da un numero non
predefinito di segmenti. Le JKit/GO danno la possibilità di inserire all’inizio o al termine delle
linea alcuni oggetti predefiniti, come frecce, rombi o cerchi come si può vedere in questa Figura
7-5:
Figura 7-5: linee realizzabili con le JKit/GO
Tra queste, l’ultima rappresentata è quella che abbiamo adottato per collegare i GO, con
l’eccezione delle Data object. Adottando questa soluzione sono sorti diversi problemi legati al
posizionamento del punto a cui ancorare la linea sul GO di destinazione. Nella versione base
delle JKit/GO il collegamento tra il Link e un generico GO deve avvenire in punto prestabiliti
che contraddistinguono un GFHandle, definito tale punto non è più possibile muoverlo
dinamicamente. Solitamente viene scelto o un punto che si trova sul bordo (vedi Figura 7-2) o
al centro dello stesso.
__________________________________________________________________________________________________________________________________________________________
Implementazione
97
__________________________________________________________________________________________________________________________________________________________
Entrambe le soluzioni presentano diversi problemi come si vede nella seguente Figura:
Figura 7-6: collegamento sul bordo e al centro dei GO
Nel primo caso la freccia è collegata correttamente sul bordo ma perde l’esatto orientamento
verso il centro dell’oggetto quando questi viene spostato, nel secondo caso invece
l’orientamento è corretto ma l’ancoraggio della freccia sul GO non risulta esatta, visto che
inoltre va a coprire il GO. Per ovviare a questi inconvenienti, la soluzione è quella di usare
come punto di ancoraggio il centro dei GO, siano essi rettangoli o cerchi, definendo
contestualmente una diversa politica di posizionamento delle frecce in funzione della forma del
GO, così che risultino sempre posizionate sul bordo. È infatti possibile svincolare il punto di
ancoraggio della linea, dal posizionamento della freccia.
Stabilito a quale oggetto la linea viene collegata, si determinano i punti di posizionamento della
freccia, di seguito riportiamo il codice generato per la realizzazione di queste funzionalità
(Figura 7-7):
1 GFPolylineGO aGO = new GFPolylineGO(initialPoint, endPoint);
2 aGO.setLineColor(Color.black);
3 aGO.setLineEnd(GFLineEnd.END_POINT,GFGOLineEnd.newArrow(8,16,black,1));
4 …
5 GFGOLineEnd arrow = (GFGOLineEnd) aGO.getLineEnd(GFLineEnd.END_POINT);
6 …
7 if(node.getID().toString().startsWith("Act")){
8
…
9
policy = newArrowToActivityEdgeLineEndPolicy(ActGO());
10
arrow.setLineEndPolicy(policy);}
11 if(node.getID().toString().startsWith("End")){
12
policy = new ArrowToDiamondLineEndPolicy(EndGO());
13
arrow.setLineEndPolicy(policy);}
__________________________________________________________________________________________________________________________________________________________
Figura 7-7: calcolo della posizione della freccia
Implementazione
98
__________________________________________________________________________________________________________________________________________________________
Nelle righe di codice 1, 2 e 3 viene creato l’oggetto che rappresenta il Link, inserendo una
freccia al termine della linea. Alla riga 5 si ottiene dalla line la freccia che vi è attaccata. Alle
righe 7 e 11 si verifica rispettivamente,se l’oggetto di arrivo della linea, sia o una Activity o una
End. Nel primo caso la forma grafica dell’oggetto sarà un rettangolo con gli spigoli arrotondati,
nel secondo sarà un cerchio.
Alla riga 9 si istanzia la classe ArrowToActivityEdgeLineEndPolicy passando come parametro il
GO che sappiamo essere un rettangolo, tale classe viene richiamata a run-time ogni qual volta il
GO viene spostato.Questo serve a ricalcolare il punto del bordo dove la freccia va collocata,
alla riga 10 viene associata tale politica alla freccia. Medesimo discorso viene fatto alle righe 12
e 13 dove la forma del GO non è più un rettangolo ma bensì un cerchio, in questo caso il
calcolo della posizione viene comunque fatta ma non comporta la stessa difficoltà di calcolo,
dato che i punti sono calcolati in coordinate polari. Analizziamo in dettaglio la classe
ArrowToActivityEdgeLineEndPolicy:
public class ArrowToActivityEdgeLineEndPolicy extends GFArrowLineEndPolicy{
private GFGO graphNodeRenderer;
public GFGOLineEndPolicy copyForLineEnd ()
{
return copyForLineEndInto(new ArrowToActivityEdgeLineEndPolicy(graphNodeRenderer));
}
1 public GF2DGO computeDisplayedGO (GF2DGO aGO)
2 {
3
GF2DGO displayedGO = (GF2DGO) aGO.copyForCreation();
4
displayedGO.rotate(getTangentialTheta(), 0, 0);
5
6
int endPointIndex = getLineEnd().getPointIndex();
7
int orientationPointIndex = endPointIndex > 0 ? endPointIndex-1 : 1 ;
8
GF2DVector vector = new GF2DVector(getLineEnd().getPoint(),
getLineEnd().getLine().getPoint(orientationPointIndex));
9
GF2DVector resultVect = vector.liangBarskyClipTo(graphNodeRenderer.displayBox());
10
11
setLineEndAttachment(resultVect.p2);
12
displayedGO.translate(resultVect.p2);
13
14
15
return displayedGO;
16 }
public ArrowToActivityEdgeLineEndPolicy(GFGO gnR){
super();
graphNodeRenderer = gnR;
}
}
Figura 7-8: codice della classe ArrowToActtivityEdgeLineEndPolicy
__________________________________________________________________________________________________________________________________________________________
Implementazione
99
__________________________________________________________________________________________________________________________________________________________
Questa routine ha un parametro in ingresso che è il GO a cui la linea viene collegata. Ogni volta
che il GO è spostato nel disegno la routine viene richiamata. Lavorando su una copia della linea
è in grado di ritornare la posizione e l’orientamento che la freccia deve assumere. Le righe di
codici che compiono questa funzione vanno dalla 3 alla 15. Alla riga 4 la copia della freccia è
ruotare di una quantità pari all’inclinazione della linea stessa a cui è associata, in modo che
risulti orientata correttamente. Nelle righe dalla 6 alla 9 si determina sia l’ultimo che il
penultimo punto della linea (dato che la linea può essere un insieme di spezzate), ottenendo un
vettore di punti sul quale è calcolata la funzione Liang-Barsky che, dato il GO e la linea,
determina il punto di intersezione tra le due. Avendo il punto la freccia viene spostata in tale
posizione, come riportato alla riga 13 . La routine ArrowToActivityEdgeLineEndPolicy è del
tutto simile avendo come parametro gli oggetti di riferimento un cerchio.
__________________________________________________________________________________________________________________________________________________________
Conclusioni e sviluppi futuri
100
__________________________________________________________________________________________________________________________________________________________
8
Conclusioni e sviluppi futuri
Il lavoro di tesi, che si è completato con la realizzazione del tool grafico, ha rischiesto lo studio
e l'analisi di argomenti provenienti da ambiti tra loro diversi: la verifica formale di applicazioni
web, i diagrammi di workflow, le notazioni grafiche per la rappresentazione dei diagrammi
stessi, i linguaggi formali come Linear Temporal Logic (LTL), le librerie grafiche JKit/GO, il
meta-linguaggio XML e le trasformazioni XSL.
Lo studio sulla validazione formale rientra in un più ampio progetto svolto in collaborazione
con l’Università di San Diego nel quale si mira a generare delle applicazioni web robuste e ben
strutturate. L’obiettivo è quello di specificare le caratteristiche delle applicazioni web in
funzione degli input dati dall’utente, dello stato dell’applicazione e delle informazioni presenti
nel suo database. Per fare questo viene consentito agli sviluppatori di specificare le proprietà
che le applicazioni web devono soddisfare verificandone staticamente la correttezza nella fase
di design.
Il lavoro relativo alla realizzazione del tool è stato completato coprendo la rappresentazione
degli elementi base della notazione LTL che già permettono la verifica formale di numerose
applicazioni web. La progettazione del software è stata però effettuata in modo da consentire lo
sviluppo di un’estensione per sfruttare completamente il potere espressivo di LTL come
specificato nell’articolo [5].
Sin dall’inizio della progettazione l’intento è stato quello di generare un applicativo modulare
non limitato alla sola fase di verifica. Per questo il progetto è stato suddiviso in due parti ben
distinte: la prima consiste in un’interfaccia grafica per la modellizzazione delle applicazioni; la
seconda è la trasformazione che consente di passare dal diagramma a formule di logica
temporale.
Strutturando il progetto in questo modo si lasciano aperti numerosi scenari d’impiego. Difatti i
diagrammi di workflow disegnati sono salvati nel formato standard XML dal quale, tramite
apposite trasformazioni, è possibile ottenere svariati tipi di output. La flessibilità del tool è
garantita da una serie di file di configurazione attraverso i quali è possibile sia personalizzare i
diagrammi di workflow, definendo arbitrariamente gli attributi degli elementi, sia aggiungere
nuove trasformazioni che possono essere integrate senza dover modificare in alcun modo il
software.
__________________________________________________________________________________________________________________________________________________________
Conclusioni e sviluppi futuri
101
__________________________________________________________________________________________________________________________________________________________
Grazie a questa caratteristica il tool trova un impiego anche nella generazione di modelli di
ipertesto basati sullo standard WebML. Lo scopo è quello di generare del codice compatibile
con il tool CASE (Computer Aided Software Engineering) WebRatio [24].
In particolare, uno dei possibili sviluppi è quello di ottenere, tramite una trasformazione, un
primo modello dell’ipertesto realizzato con WebRatio partendo dai diagrammi di workflow
definiti con il tool. A tale scopo sono stati introdotti degli elementi specifici per questo utilizzo,
sebbene non utilizzati nella fase di verifica formale.
Inoltre il software è predisposto per supportare diagrammi di workflow multilivello. Questa
caratteristica, presente nella notazione BPMN, si rivela di particolare utilità per dare una
definizione più dettagliata di un’attività. Sfruttando tale potenzialità si potrebbe realizzare,
come sviluppo futuro, anche un livello “finale” nel quale inserire direttamente pagine web in
JSP e unit per automatizzare il passaggio dei dati.
__________________________________________________________________________________________________________________________________________________________
Bibliografia
102
__________________________________________________________________________________________________________________________________________________________
Appendice A:
Bibliografia
[1]
Paolo Atzeni, Giansalvatore Mecca, Paolo Merialdo, Design and Maintenance of DataIntensive Web Sites. EDBT 1998: 436-450
[2]
BPMI, Business Process Modeling Language, November 13, 2002 edited by Michael
Dailey
[3]
BPMI, Business Process Modeling Notation, Version 1.0, May 3, 2004 edited by
Stephen A. White, IBM Corporation
[4]
Stefano Ceri, Piero Fraternali, Aldo Bongio, Marco Brambilla, Sara Comai, Maristella
Matera, Designing Data-Intensive Web Applications, Morgan-Kaufmann, December
2002
[5]
A.Deutsch, L.Sui, V.Vianu, Specification and Verification of Data-Driven Web
Services, University of California San Diego, Computer Site and Engineering, 2004
[6]
Gerard J. Holzmann, Design and Validation of Computer Protocols, Prantice Hall, 1991
[7]
Yongjie Ren, Kam-Fai, Wong, Boon Toh Low, An Integrated Approach for Flexible
Workflow Modeling. ICSC 1999
[8]
W.M.P. van der Aalst, A.H.M. ter Hofstede, B. Kiepuszewski and A.P. Barros,
Workflow Patterns
[9]
W.M.P. van der Aalst and A.H.M. ter Hofstede, YAWL: Yet Another Workflow
Language, FIT Technical Report, June 2002
[10]
Workflow Management Coalition, Terminology & Glossary, Issue 3.0, February 1999,
Winchester (UK). Questo documento può essere trovato all’indirizzo web:
http://www.wfmc.org/standards/docs/TC-1011_term_glossary_v3.pdf
[11]
Stefan Jablonski, Christoph Bussler, Workflow Management: Modeling Concepts,
Architecture and Implementation
__________________________________________________________________________________________________________________________________________________________
Bibliografia
103
__________________________________________________________________________________________________________________________________________________________
[12]
Bea WebLogic Workshop website:
www.bea.com/framework.jsp?CNT=index.htm&FP=/content/products/workshop/
[13]
BPWS4J website: http://alphaworks.ibm.com/tech/bpws4j
[14]
BPMI e BPMN website: http://www.bpmi.org e http://www.bpmn.org
[15]
Collaxa website: http://www.collaxa.com
[16]
Intalio website: http://www.intalio.com
[17]
Linear Temporal Logic UCSD project: http://www.cs.ucsd.edu/~lsui/project/index.html
[18]
Metamill website: http://www.metamill.com
[19]
Popkin website relativo all’ultima versione del tool (la 10.0):
www.popkin.com/products/system_architect/system_architect_v10_new_features.htm
[20]
Struts website: http://struts.apache.org
[21]
UML website: http://www.uml.org
[22]
W3Schools website: http://www.w3schools.com
[23]
Web Modelling Language web site: http://www.webml.org
[24]
WebRatio website: http://www.webratio.com
[25]
Workflow Management Coalition website: http://www.wfmc.org
[26]
Workflow pattern website di Wil van der Aalst:
http://tmitwww.tm.tue.nl/research/patterns/patterns.htm
[27]
WSCI website: http://www.w3.org/TR/wsci
[28]
WSFL website: www-306.ibm.com/software/solutions/webservices/pdf/WSFL.pdf
[29]
XLang website: http://www.gotdotnet.com/team/xml_wsspecs/xlang-c/default.htm
__________________________________________________________________________________________________________________________________________________________