Enterprise Application Integration - e-Lite

POLITECNICO DI TORINO
Facoltà di Ingegneria dell’Informazione
Corso di Laurea Specialistica in Ingegneria Informatica
Tesi di Laurea Specialistica
Enterprise Application Integration
Studio e realizzazione di una soluzione di Data Integrity in
un’architettura di integrazione software
Relatore:
prof. Fulvio Corno
Candidato:
Ivo Gianluca Vitiello
Anno accademico 2008-2009
II
Indice
Introduzione
1
1 EAI - Enterprise Application Integration
11
1.1
Panoramica sulle EAI . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2
I livelli di integrazione . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3
1.2.1
Il livello dato . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.2
Il livello applicazione . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.3
Il livello metodo . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2.4
Il livello interfaccia utente . . . . . . . . . . . . . . . . . . . . 20
Tecnologie middleware . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.1
RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.2
Message Oriented Middleware . . . . . . . . . . . . . . . . . . 22
1.3.3
Gli oggetti distribuiti . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.4
Database oriented . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4
Metodologie per l’implementazione . . . . . . . . . . . . . . . . . . . 24
1.5
Potenziali criticità
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.1
Problemi nel processo di integrazione . . . . . . . . . . . . . . 31
1.5.2
Dati non allineati . . . . . . . . . . . . . . . . . . . . . . . . . 32
2 Il Data Integrity in un’architettura EAI
35
2.1
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.2
Fasi per la realizzazione di un’applicazione di Data Integrity . . . . . 39
2.2.1
Analizzare le entità di business dell’azienda . . . . . . . . . . . 40
2.2.2
Analizzare il contesto operativo ed i sistemi informativi . . . . 40
III
2.3
2.4
2.2.3
Analizzare gli aspetti fisici di memorizzazione . . . . . . . . . 41
2.2.4
Effettuare transcodifiche sui campi . . . . . . . . . . . . . . . 45
2.2.5
Implementare le politiche di confronto sui dati . . . . . . . . . 47
2.2.6
Valutare le performance . . . . . . . . . . . . . . . . . . . . . 52
2.2.7
Visualizzare i risultati . . . . . . . . . . . . . . . . . . . . . . 53
2.2.8
Analizzare possibili processi di riallineamento . . . . . . . . . 53
2.2.9
Monitoraggio e test continui . . . . . . . . . . . . . . . . . . . 54
Vantaggi e svantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.1
Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.2
Svantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Un caso reale: introduzione ad un progetto di Data Integrity . . . . . 57
3 IBM Datastage: uno strumento di elaborazione dati
59
3.1
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2
I componenti principali . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3
L’applicazione Designer . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.4
Server job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.5
3.4.1
Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4.2
Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Job sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.5.1
Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.5.2
Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.6
L’applicazione Manager . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.7
L’applicazione Director . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4 Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
77
4.1
I sistemi controllati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.2
Descrizione del progetto . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.3
Il database delle repliche e degli esiti . . . . . . . . . . . . . . . . . . 88
4.4
Le procedure e funzioni PL/SQL . . . . . . . . . . . . . . . . . . . . 91
4.4.1
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
IV
4.5
4.4.2
Aggiornamento dati . . . . . . . . . . . . . . . . . . . . . . . . 91
4.4.3
Controllo coerenza dati . . . . . . . . . . . . . . . . . . . . . . 93
Server job e job sequence Datastage . . . . . . . . . . . . . . . . . . . 97
4.5.1
I job di caricamento . . . . . . . . . . . . . . . . . . . . . . . 100
4.5.2
I job per richiamare l’aggiornamento dei dati . . . . . . . . . . 102
4.5.3
I job per richiamare gli algoritmi di confronto . . . . . . . . . 104
4.6
Interfaccia utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.7
Generazione report . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.8
Interazione con l’ambiente di schedulazione . . . . . . . . . . . . . . . 110
5 Valutazioni del progetto di Data Integrity realizzato in azienda
111
5.1
Risultati ottenuti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.2
Riscontri numerici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.3
Considerazioni finali . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.4
Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Conclusioni
121
Allegato A
127
Glossario
139
Bibliografia
141
Sitografia
143
V
Elenco delle figure
1
EAI: esempio di architettura . . . . . . . . . . . . . . . . . . . . . . .
5
1.1
EAI: esempio di architettura per il livello dato . . . . . . . . . . . . . 15
1.2
EAI: esempio di architettura per il livello applicazione . . . . . . . . . 16
1.3
EAI: esempio di architettura per il livello metodo . . . . . . . . . . . 19
1.4
EAI: possibile problema di Data Integrity nell’architettura EAI
2.1
Data Integrity: esempio di applicazione di controllo dati in un’archi-
. . . 33
tettura EAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2
Data Integrity: esempi di transcodifiche sui dati (1) . . . . . . . . . . 45
2.3
Data Integrity: esempi di transcodifiche sui dati (2) . . . . . . . . . . 46
2.4
Data Integrity: esempi di dati assenti . . . . . . . . . . . . . . . . . . 48
2.5
Data Integrity: esempi di dati differenti . . . . . . . . . . . . . . . . . 50
3.1
Datastage: screenshot Designer . . . . . . . . . . . . . . . . . . . . . 64
3.2
Datastage: tipologie di stage Database . . . . . . . . . . . . . . . . . 66
3.3
Datastage: screenshot server job . . . . . . . . . . . . . . . . . . . . . 68
3.4
Datastage: screenshot job sequence . . . . . . . . . . . . . . . . . . . 71
3.5
Datastage: screenshot Director . . . . . . . . . . . . . . . . . . . . . . 75
4.1
Progetto Data Integrity: caricamento sistemi sul database centralizzato 83
4.2
Progetto Data Integrity: esecuzione degli algoritmi di aggiornamento
- controllo dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.3
Progetto Data Integrity: strumenti di monitoraggio . . . . . . . . . . 87
4.4
Progetto Data Integrity: database delle repliche e degli esiti . . . . . 88
VI
4.5
Progetto Data Integrity: la parte di progetto sviluppata su Datastage 97
4.6
Progetto Data Integrity: tipologie job Datastage . . . . . . . . . . . . 99
4.7
Progetto Data Integrity: server job / job sequence per il caricamento
dati
4.8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Progetto Data Integrity: server job per richiamare l’aggiornamento
dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.9
Progetto Data Integrity: server job per richiamare il confronto di
un’entità tra due sistemi . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.10 Progetto Data Integrity: applicazione WEB per la visualizzazione
degli esiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.11 Progetto Data Integrity: esempio di report contenente gli esiti dei
controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5.1
Progetto Data Integrity: calendario controlli . . . . . . . . . . . . . . 112
5.2
Progetto Data Integrity: riepiloghi controlli contratti - annunci SAPSEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.3
Progetto Data Integrity: riepiloghi controlli contratti - annunci SAPTCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
VII
Introduzione
La presente dissertazione ha come obiettivo principale la definizione e la descrizione di una possibile soluzione del problema di Data Integrity all’interno di un
contesto di integrazione dei sistemi informativi di un’azienda o di un’organizzazione.
In un’architettura di integrazione il Data Integrity fa riferimento all’integrità delle
informazioni che sono distribuite su più basi dati e che devono essere congruenti tra
loro.
Negli ultimi anni, l’esigenza di scambiare informazioni tra i sistemi è diventata una
questione delicata sempre più rilevante. Per questa ragione è in continua crescita
il numero di dati distribuiti tra applicazioni diverse. Per mantenere le informazioni distribuite le aziende stanno ricorrendo con maggior frequenza ad architetture
di integrazione EAI, ovvero a delle applicazioni specifiche il cui compito è la realizzazione di canali di comunicazione per condividere dati e processi di business.
Un’applicazione di Data Integrity si colloca in questo contesto come un’applicazione
EAI rivolta a verificare l’allineamento dei dati condivisi all’interno dell’infrastruttura di integrazione.
La tesi vuole mettere in evidenza perché è importante realizzare una procedura che
implementi dei controlli di Data Integrity sulle basi dati distribuite, definendo in
modo puntuale quali sono i passi fondamentali per una possibile realizzazione. I
risultati prodotti dalle verifiche sulle basi dati potranno essere utilizzati per monitorare e correggere le operazioni svolte dalle altre applicazioni EAI presenti in
un’azienda. Risulta evidente che il problema di Data Integrity rientra tra i requisiti
che le applicazioni EAI devono possedere per gestire con successo l’infrastruttura di
integrazione.
1
Introduzione
In questo elaborato verranno descritte brevemente che cosa sono le EAI, giustificando quali sono i motivi che spingono ad avere un’applicazione che si occupa
di operazioni di Data Integrity, intesa come strumento di verifica di funzionamento
dell’infrastruttura d’integrazione stessa.
Per fornire a questi aspetti teorici un contesto più applicativo sarà illustrato il progetto di controllo di Data Integrity, realmente implementato e su cui ho lavorato,
realizzato presso un’azienda operante nel settore pubblicità in collaborazione con il
team di Reply, società di ICT che lavora sull’architettura EAI di tale azienda.
Il termine EAI rappresenta l’acronimo di Enterprise Application Integration, con
il quale si intende la realizzazione di un’architettura software, di tipo middleware,
dedicata all’integrazione dei sistemi informativi di un’azienda o di un gruppo di
aziende. Il termine Data Integrity, in questo contesto di integrazione, viene assunto
con il significato di garanzia di allineamento e coerenza dei dati distribuiti, memorizzati sui diversi sistemi coinvolti nel processo di integrazione. La creazione di
un’applicazione di Data Integrity viene fatta con l’intento di realizzare uno strumento di controllo di congruenza delle informazioni presenti nelle applicazioni che
costituiscono il sistema informativo complessivo di un’azienda.
L’esigenza di avere un controllo di coerenza sui dati si riscontra soprattutto in aziende di dimensioni medio grandi all’interno delle quali coabitano diverse applicazioni,
quest’ultime utilizzate per formare un’infrastruttura IT complessa ed articolata. Generalmente, in questi contesti, il patrimonio informativo prevede una suddivisione
in vari applicativi differenti con propri database interni e distinti. Ciò avviene per
ragioni tecniche, di gestione ed anche per ragioni storiche. Ad esempio, in certe
realtà come banche ed assicurazioni, sono presenti ancora vecchi sistemi mainframe
e nel frattempo è stata sviluppata una serie di nuove applicazioni, utilizzando le
tecnologie più moderne, che devono interagire con questi sistemi più datati: da qui
la necessità di convivenza di applicazioni diverse.
La suddivisione in applicativi differenti può implicare l’utilizzo di sistemi operativi e
piattaforme tra loro incompatibili, creando di fatto delle “isole di automazione” non
comunicanti. Molto spesso, però, queste applicazioni non possono rimanere isolate.
Capita sovente di riscontrare la necessità di fare comunicare un sistema con un altro
2
Introduzione
per condividere, ad esempio, delle informazioni comuni o delle regole di business. È
evidente che ci si trova di fronte ad un problema di interoperabilità tra le applicazioni. Tale problema può essere risolto tramite un’architettura EAI, sviluppando parti
di software che si occupano di creare dei canali di comunicazione tra le applicazioni
esistenti, senza dover stravolgere la situazione attuale.
La prima parte della tesi, nello specifico il primo capitolo, ha lo scopo di introdurre e definire gli aspetti generali di un’architettura EAI. Verranno descritte
solo le caratteristiche principali e si cercherà di motivare perché le aziende ricorrono a questo tipo di approccio, senza però scendere nei dettagli troppo tecnici i
quali sono variabili a seconda del problema di integrazione. L’obiettivo di questo
primo capitolo è di definire il contesto in cui si può riscontrare l’esigenza di controllo dei dati su sistemi eterogenei e ricorrere ad implementazioni di meccanismi
di Data Integrity. Come già anticipato in precedenza, realizzare applicazioni EAI
significa ottenere un’integrazione dei dati, dei processi o delle interfacce tra i sistemi
informativi presenti ed utilizzati da un’azienda. Tale processo di integrazione può
essere di fatto realizzato su vari livelli, in base alle necessità aziendali. Tali livelli di integrazione saranno brevemente illustrati, evidenziandone le motivazioni e le
loro principali caratteristiche. L’intento è di mettere in evidenza i benefici che si
possono ottenere puntando su architetture di questo genere. Per contro, visto che
per creare delle architetture di integrazione è necessario realizzare del software che
metta in comunicazione i vari sistemi tra loro disomogenei, lo sviluppo di tali applicazioni presenta delle difficoltà di analisi e di realizzazione non di poco conto. La
prima criticità che si incontra nell’implementare applicazioni EAI è data dalla sua
collocazione all’interno dell’infrastruttura dei sistemi informativi di un’azienda. Più
precisamente le applicazioni EAI generalmente si pongono al centro dell’infrastruttura informativa, in modo del tutto analogo alla presenza di un HUB o SWITCH
utilizzati per realizzare una rete locale di computer. Come un HUB, tramite i cavi di
rete, fa comunicare i diversi computer ad esso collegati, l’architettura EAI si occupa
di mettere in comunicazione tutte le applicazioni che necessitano un continuo e duraturo passaggio di informazioni. Un esempio di questa situazione è riportata nella
figura 1 dove sono presenti tre sistemi che condividono la stessa entità Contratti e
3
Introduzione
necessitano di un’architettura EAI per poter propagare le informazioni aggiornate
da un sistema verso gli altri, in modo da mantenere l’allineamento delle informazioni distribuite. Questa sua collocazione, al centro dell’infrastruttura informativa,
da una parte potrà essere un punto di criticità, infatti, se non funzionerà l’architettura EAI le varie applicazioni non riusciranno a scambiarsi i dati e verrà meno lo
strumento di comunicazione. Dall’altro canto la sua posizione potrà rappresentare
un punto di forza, perché ponendosi al centro sarà più facile realizzare procedure
di controllo e di monitoraggio. Lavorando a livello centralizzato sarà più semplice
sfruttare e riutilizzare le parti già fatte per eventuali realizzazioni future. Da quanto
detto l’EAI dovrà necessariamente interagire con i diversi sistemi e sarà fondamentale avere la conoscenza dei processi di business e delle varie entità in gioco presenti
nell’azienda.
Possiamo ancora citare questo particolare sulle EAI: tale architettura potrà essere
utilizzata per evitare la situazione in cui ogni coppia di sistemi, per mettere in atto
la comunicazione utile per i fini già descritti, vada a crearsi un canale differenziato personalizzato a proprio uso e consumo. Adottando una modalità del genere
si rischierebbe di creare un numero via via sempre più elevato di questi canali.
L’eccessivo aumento di quest’ultimi potrebbe portare ad una situazione ingestibile
dell’intero sistema informativo e diventerebbe davvero difficile capire e comprendere
eventuali errori e problemi. Quindi, una soluzione EAI vuole mettere a disposizione
degli strumenti di comunicazione più semplici e generali rispetto ad altri approcci.
Questa breve introduzione sull’architettura EAI servirà successivamente, nel seguito della tesi, a comprendere l’importanza del problema di un’applicazione di Data
Integrity in un contesto del genere. Considerato che la realizzazione di un’architettura di integrazione è una fase molto delicata e critica, può risultare utile adottare
strumenti di verifica di allineamento di queste informazioni condivise. Infatti, a seguito di un errore nello sviluppo e nell’esecuzione delle applicazioni dell’architettura
EAI, corrisponderà molto probabilmente all’introduzione di disallineamenti sui dati
distribuiti. Di conseguenza è molto importante avere uno strumento che verifichi
l’integrità dei dati condivisi e scambiati tra le applicazioni in un contesto di integrazione.
4
Introduzione
Applicazione 1
Sull’applicazione 1 viene modificato il contratto avente il
codice 1234
1
Database
1
Tramite
un’applicazione
presente
nell’architettura EAI
viene prelevato il
dato modificato e
questo dovrà essere
comunicato agli altri
sistemi che
possiedono la stessa
entità
Applicazione 2
Tabella
Contratti
2
Database
2
Architettura EAI
Tabella
Contratti
Tabella
Contratti
Viene comunicato agli altri sistemi il dato
aggiornato del contratto con il codice 1234
modificato dall’applicazione 1
3
Database
3
L’entità contratto è distribuita su
tre database distinti su cui
fanno accesso
altrettante applicazioni.
Applicazione 3
Figura 1. EAI: esempio di architettura
5
Introduzione
Lo sviluppo di un’applicazione di Data Integrity sarà ampiamente descritto nel secondo capitolo dove saranno evidenziate le motivazioni ed i casi in cui potrà essere
utile implementarla. L’intento del secondo capitolo è di illustrare come un’applicazione di Data Integrity possa essere effettivamente uno strumento concreto di
controllo per mantenere l’allineamento dei dati. Verranno forniti i dettagli di come
è possibile affrontare l’analisi per effettuare una buona implementazione, partendo
dall’analisi generale del sistema fino al momento di definire le specifiche informazioni
sui campi da verificare.
Per dare un aspetto pratico al tema del Data Integrity, nel contesto delle EAI, sarà illustrato il progetto di controllo allineamento dati implementato in un’azienda
pubblicitaria. Introducendo brevemente quello che sarà poi descritto con maggiore
dettaglio nel quarto capitolo, in questa azienda è presente un’architettura EAI che
ricopre un ruolo chiave nel processo di comunicazione tra i sistemi. Questi sistemi
sono composti generalmente da una parte di front-end e back-end. L’obiettivo di una
soluzione di Data Integrity, in questo contesto, è di occuparsi di garantire la coerenza
dei vari back-end lavorando parallelamente alle altre applicazioni dell’architettura
EAI già presenti. I back-end sono i possessori fisici delle informazioni utilizzate dalle
applicazioni, ovvero i front-end, i quali devono essere supportati dalla garanzia di
qualità e congruenza dei dati per poter funzionare bene.
Le informazioni che possiamo definire come gli oggetti del core business di quest’azienda sono principalmente i contratti con i relativi annunci, le campagne pubblicitarie ed i dati associati ai clienti. Queste informazioni sono memorizzate in modo
distribuito su più database, i quali, sovente, sono gestiti da gruppi di lavoro diversi.
Dalla situazione appena descritta, nasce l’esigenza di mettere in comunicazione i vari
sistemi per mantenere allineati i dati distribuiti. Di conseguenza, si avrà la tabella
associata all’entità contratto definita su più database, ogni applicazione attingerà
alla propria tabella prendendo i campi di interesse, in modo analogo a quanto rappresentato nella figura 1. Se le informazioni tra le tabelle di una stessa entità, ad
esempio il contratto, non saranno allineate le applicazioni che vi accederanno potranno andare in errore.
L’architettura EAI implementata ha richiesto e richiede tuttora la collaborazione di
6
Introduzione
tanti attori che devono cooperare per il raggiungimento del fine comune. A maggiore
ragione in questo momento in cui sta avvenendo un aggiornamento di alcuni sistemi informativi. Le applicazioni CRM, contabili ed amministrative sono in una fase
di migrazione da un’applicazione personalizzata, chiamata CLIC verso il pacchetto
software SAP. Questa situazione porta con sé tutte le problematiche di allineamento
dati con il sistema CLIC e la modifica delle procedure di integrazione con i sistemi
che non sono stati sostituiti con l’avvento di SAP.
La situazione attuale può, quindi, presentare delle forti criticità in caso di differenze
nei dati. Infatti, nel caso in cui si verifichino delle anomalie o ci siano degli errori
nel passaggio di queste informazioni, il rischio principale sarà di causare disallineamenti di dati, generando incongruenze tra le informazioni memorizzate sui diversi
back-end che costituiscono la nuova infrastruttura informativa. Le differenze che
si possono generare sui dati sono molto pericolose in quanto, come già accennato,
le applicazioni potrebbero non funzionare correttamente oppure lavorando su dati
incoerenti o non aggiornati, potrebbero portare ad errori nel processo produttivo
e nella fornitura dei prodotti da parte dell’azienda stessa. Ad esempio, prendendo
come riferimento l’azienda analizzata in questo caso di studio, possiamo illustrare
una tipologia di criticità in cui è possibile incorrere se le informazioni della stessa
inserzione pubblicitaria presenti nei database di due sistemi aziendali fossero differenti tra loro. In un caso del genere potrebbe accadere di emettere la fattura ad un
cliente, dal sistema gestionale, per un annuncio il quale, per problemi di aggiornamento dati, potrebbe non essere lo stesso di quello in realtà pubblicato e presente
sul sistema dedicato alla produzione. O ancor peggio, nel caso in cui le informazioni dell’inserzione presenti sul sistema gestionale non riuscissero ad arrivare, sempre
per problemi di integrazione EAI, al sistema di produzione: in questa situazione
l’annuncio non verrebbe pubblicato, creando un disservizio perché non averebbe la
fornitura richiesta dal cliente. In definitiva, più le informazioni tra le diverse basi
dati risulteranno allineate meno anomalie dovranno essere gestite. Un’applicazione
che svolge operazioni di Data Integrity sarà utile proprio per questo motivo: permetterà di individuare rapidamente le differenze sui dati e di decidere, il prima possibile,
come operare per effettuare il riallineamento dei dati.
7
Introduzione
La realizzazione di un’applicazione di Data Integrity dovrà avvalersi di strumenti molto potenti e flessibili che possano adattarsi alle diverse situazioni e che
permettano un accesso facile ai dati, visto che il dato inteso come informazione presente nei campi delle tabelle, in questo contesto, è al centro dell’attenzione e deve
essere salvaguardato. Per la realizzazione del progetto Data Integrity nell’azienda
pubblicitaria, citata nel caso di studio, è stato utilizzato un software di IBM, Datastage, uno strumento molto potente di ETL utilizzato per estrarre, trasformare
e caricare dati tra sistemi eterogenei. IBM Datastage è uno dei possibili strumenti
per poter estrapolare i dati tra i sistemi, considerando che sul mercato sono presenti
altri prodotti. Visto che in questa tesi è presente la descrizione di un progetto di
Data Integrity dove è stato utilizzato Datastage sarà necessario fornire al lettore un
introduzione minima su questo strumento. L’obiettivo del terzo capitolo sarà proprio di descrivere le funzionalità principali di Datastage, illustrando come è possibile
impostare le operazioni di prelievo dati da database differenti.
Nel quarto capitolo si procederà a definire i punti chiave dell’applicazione di Data
Integrity realizzata, giustificando gli sforzi compiuti per l’analisi, l’implementazione ed i test. Posso affermare che l’applicazione di Data Integrity realizzata viene
utilizzata per controllare, in determinati giorni, gli allineamenti di sei sistemi che si
scambiano i dati tramite l’utilizzo dell’architettura EAI. I risultati forniti dall’applicazione di Data Integrity sono serviti e servono ancora oggi per localizzare gli
eventuali errori nella comunicazione delle informazioni tra i sistemi, permettendo di
analizzare la distribuzione dei disallineamenti e di valutare le operazioni di modifica
delle applicazioni EAI che realizzano l’architettura di integrazione.
Posso anticipare che nel processo di controllo si sono verificate due tipologie di anomalie: i dati assenti e quelli differenti. Come dati assenti intenderemo un record
di un entità monitorata, come ad esempio un contratto, che è presente in un sistema e non nell’altro, mentre per dati differenti intenderemo un record, sempre di
un’entità, che è presente su entrambi i sistemi ma che differisce su alcuni campi che
sono oggetto di controllo. L’operazione di correzione dei dati dovrà tenere conto
della tipologia di anomalia riscontrata ed attivare la funzione di riallineamento più
appropriata.
8
Introduzione
La tesi terminerà con l’analisi dei risultati ottenuti tramite l’utilizzo dell’applicazione di Data Integrity realizzata e dei possibili sviluppi futuri che potranno essere
implementati su tale applicazione.
9
Capitolo 1
EAI - Enterprise Application
Integration
1.1
Panoramica sulle EAI
Lo scopo di questo capitolo è di fornire un’introduzione sulle EAI, definendo
l’ambito in cui tale architettura può essere applicata ed utilizzata. Con il termine
EAI è possibile intendere lo sviluppo di una serie di applicazioni software il cui
obiettivo principale è la creazione di un’architettura per l’integrazione dei sistemi
informativi vecchi e nuovi di un’azienda.
Perché è necessario raggiungere un’integrazione? Per capire meglio i motivi che
spingono a raggiungere quest’obiettivo è importante fornire una panoramica della
situazione attuale che si riscontra nella complessa architettura dei sistemi informativi di molte aziende ed organizzazioni. Al giorno d’oggi molte aziende, soprattutto
quelle medio grandi, si ritrovano con tante applicazioni differenti, come ad esempio
sistemi CRM, applicazioni di contabilità, gestione vendite ecc., le quali non possono
interagire tra di loro, trovandosi in una evidente assenza di comunicazione. Una
prima causa dell’assenza di tali collegamenti può essere dovuta al fatto che queste applicazioni sono state scritte con linguaggi di programmazione differenti per
determinati sistemi operativi, creando di conseguenza il classico problema di interoperabilità. Inoltre si sono venute a creare situazioni in cui le aziende hanno fatto
11
1 – EAI - Enterprise Application Integration
sviluppare le loro applicazioni, investendo anche molti capitali, senza pensare minimamente al problema dell’integrazione. Infatti, il loro obiettivo principale è stato
(ed in certi casi lo è ancora) di avere un’applicazione personalizzata creata nel più
breve tempo possibile, utilizzando anche la tecnologia più in voga in quel momento,
senza considerare, però, la problematica di come questa possa integrarsi, scambiando
informazioni con i sistemi e le architetture già funzionanti. Utilizzando un approccio
del genere è evidente il rischio di duplicare delle funzionalità già presenti e collaudate
che, tramite un intervento di integrazione, potrebbero invece essere riutilizzate, con
la conseguente razionalizzazione di tempo e di denaro.
In aggiunta a quanto appena descritto, sono presenti, soprattutto in grosse organizzazioni come banche ed assicurazioni, applicazioni che funzionano ancora su sistemi
mainframe che per problemi di costi di porting su nuove piattaforme si preferisce mantenere piuttosto che dismettere e riscrivere da zero. Anche in questo caso
è necessario prevedere dei meccanismi di comunicazione con le nuove applicazioni
sviluppate, le quali, molto probabilmente, avranno necessità di attingere ad informazioni memorizzate su tali sistemi mainframe.
In questo contesto così eterogeneo è fondamentale studiare ed implementare delle
soluzioni per realizzare architetture di integrazione. Infatti, se alle applicazioni venisse fornito un canale di comunicazione queste potrebbero predisporre, ad esempio,
di una condivisione di dati e potrebbero definire delle regole di business comuni.
Invece, utilizzando dei sistemi isolati, il rischio a cui si può andare incontro è di
avere dell’inefficienze ed anomalie, come ad esempio l’eccessiva ridondanza dei dati
replicati sui database delle varie applicazioni e l’impossibilità di creare delle semplici
automazioni di processo per mezzo di regole di business comuni. Non a caso alle
singole applicazioni che non prevedono un’integrazione con l’architettura generale
di un’organizzazione viene attribuito il termine di “isola di automazione”, vista la
loro chiusura rispetto all’architettura informativa complessiva.
Una possibile modalità per realizzare l’integrazione tra i sistemi è di adottare
un’architettura orientata alle EAI. Dunque è facile capire il ruolo importante che
può svolgere e le responsabilità che deve assumersi un’architettura EAI, la quale
può “mettere in comunicazione” queste applicazioni così differenti, con l’obiettivo
12
1.2 – I livelli di integrazione
principale di semplificare ed automatizzare i processi di business. Ovviamente per
essere considerata una buona soluzione EAI questa, se implementata, dovrà rispettare le caratteristiche di flessibilità e di apertura a possibili future estensioni. In
caso contrario, si potrebbe incorrere in un fallimento dell’architettura stessa, con
l’inutile spreco di tempo e denaro.
Negli ultimi decenni l’interesse nel ricorrere alle architetture di tipo EAI è stato
sempre più forte e guidato da diversi fattori, come ad esempio la forte pressione
dell’ambiente competitivo del mercato che ha obbligato di fatto ad accorciare sempre di più i tempi di sviluppo dell’applicazioni e la prudenza del settore finanziario
che costringe ad utilizzare le applicazioni esistenti piuttosto che crearne di nuove,
evitando perciò i rischi di investimenti di lungo periodo. È evidente che la possibilità di continuare ad utilizzare le applicazioni già esistenti e funzionanti può portare
ad un importante risparmio di denaro, un fattore questo che viene tenuto molto in
considerazione dai manager dell’aziende.
Uno dei compiti che sicuramente dovrà svolgere un gruppo di lavoro sulle EAI
è la definizione e le modalità di implementazione di questi collegamenti tra tutti i
sistemi che necessitano lo scambio di informazioni, prevedendo, in alcune situazioni,
analisi e sviluppi di integrazione dei dati stessi.
La parte seguente intende descrivere a quali livelli è possibile realizzare un’integrazione e quali sono le caratteristiche distintive per ogni categoria.
1.2
I livelli di integrazione
La scelta di dove è possibile e necessario effettuare l’integrazione dipende molto dalle specificità e criticità della singola organizzazione. È importante effettuare
un’analisi precisa per scegliere quali sono i processi ed i dati che richiedono l’integrazione, perché la scelta di questi elementi implicherà in modo sensibile e determinante
il livello di dove intervenire per realizzare la soluzione EAI.
È possibile definire quattro grandi categorie differenti di integrazione:
• il livello dato
• il livello applicazione
13
1 – EAI - Enterprise Application Integration
• il livello metodo
• il livello interfaccia utente
1.2.1
Il livello dato
Si tratta dell’implementazione dei processi, tecniche e tecnologie per spostare
direttamente i dati tra i differenti database presenti, così come indicato nell’esempio di figura 1.1. L’integrazione dei dati può essere definita come un’operazione di
estrazione di un’informazione da un database, la modifica e aggiornamento se necessari, e la copia di questa su di un altro database. Operando a questo livello la
logica delle applicazioni rimarrà invariata. È probabile che durante il processo di
trasporto dell’informazione da un database ad un altro siano presenti delle attività
di trasformazione e di applicazione di logiche di business sul dato stesso.
Uno dei vantaggi più significativi nell’adottare una soluzione EAI a livello di dato è
sicuramente il costo. Infatti, le applicazioni, visto la loro situazione di isolamento,
non necessitano di modifiche del loro codice sorgente. Si risparmiano così tutti i
costi di modifiche, testing e messa in produzione di un’applicazione da aggiornare.
Inoltre, le tecnologie che consentono di spostare i dati tra i diversi database sono
relativamente più economiche rispetto alle tecnologie necessarie per implementare
architetture EAI agli altri livelli.
Per contro, il fatto che le applicazioni siano indipendenti rappresenta allo stesso
tempo uno svantaggio. Per realizzare l’integrazione a livello di dato vengono escluse
tutte le logiche delle applicazioni e si effettuano estrazioni e caricamenti dei dati
utilizzando l’interfaccia nativa del database. Quest’ultimo aspetto implica diverse
problematiche e richiede di ottenere le autorizzazioni necessarie di accesso ai dati
dalle persone che li gestiscono. È importante anche considerare come sono strettamente accoppiati i dati con la logica dell’applicazioni. Spostare i dati tra i diversi
database senza comprendere la logica di funzionamento dell’intera architettura potrebbe risultare un manovra pericolosa, portando a inserire informazioni errate e
causando disallineamenti tra i sistemi.
14
1.2 – I livelli di integrazione
Interfaccia
utente
Interfaccia
utente
Logica applicativa
Logica applicativa
Database
Processi di
trasformazione
formattazione
dati
Database
Figura 1.1. EAI: esempio di architettura per il livello dato
Esempio di EAI livello dato
Un’azienda manifatturiera ha la necessità di integrare il suo sistema di controllo
della produzione con il proprio applicativo ERP utilizzato per gestire la parte amministrativa. In una situazione del genere è presente la necessità di comunicare i dati
degli ordini registrati sull’applicativo ERP all’applicazione di gestione della produzione, in modo che possa essere presa in carico e gestita con strumenti meccanizzati
la lavorazione del nuovo ordine. A seguito della conferma di un ordine sul sistema
ERP questo dovrà essere inviato, tramite un’applicazione EAI di aggiornamento dati, al sistema di produzione. Per realizzare questa esigenza, tramite un’applicazione
EAI che funziona da connettore tra i sistemi, potranno essere prelevati i dati dal
database del sistema ERP ed inviati sul database dell’applicazione di controllo di
15
1 – EAI - Enterprise Application Integration
produzione, effettuando eventuali variazioni sul contenuto dei dati per rispettare
i vincoli del sistema ricevente. L’applicazione di controllo produzione si ritroverà
nei propri archivi, in maniera automatizzata, le informazioni del nuovo ordine e di
conseguenza potrà essere gestito, senza doverlo ricaricare in maniera manuale.
1.2.2
Il livello applicazione
Applicazioni
Interfacce
Database
Logica applicativa
Middleware
Figura 1.2. EAI: esempio di architettura per il livello applicazione
L’integrazione EAI a livello applicazione ha lo scopo di attivare delle interfacce
comuni disponibili e richiamabili. Tramite l’utilizzo di queste interfacce sarà possibile mettere insieme più applicazioni, con l’opportunità di condividere la logica
di business e le informazioni. Il problema più grande che bisogna affrontare nelle
situazioni reali è proprio la definizione di queste interfacce comuni. Nella figura 1.2
16
1.2 – I livelli di integrazione
è riportato un possibile schema di integrazione EAI a livello applicazione.
Questa tipologia di EAI è molto spesso implementata in situazioni in cui sono presenti applicazioni come SAP e similari, dove tali sistemi espongono interfacce per i
loro processi ed i loro dati. Quindi, per integrare questi sistemi con gli altri, che fanno parte dell’infrastruttura informativa dell’organizzazione, è necessario utilizzare e
richiamare queste interfacce. Così facendo sarà possibile accedere ai processi ed ai
dati, estrarre le informazioni di cui si ha bisogno, trasformarle in formato comprensibile al sistema destinatario ed infine inviargliele.
Abbiamo parlato di interfacce a livello di applicazione, ma a cosa servono? Sono
interfacce che gli sviluppatori espongono da un’applicazione per fornire l’accesso ai
dati oppure per l’utilizzo di certi servizi presenti sull’applicazione stessa. Alcune
serviranno per accedere ai processi di business, altre per accedere direttamente ai
dati, altre ancora che permetteranno di fare entrambe le cose.
Perché utilizzarle? Un motivo importante è dato dal fatto che in questo modo viene
fornito un accesso ai processi di business ed ai dati utilizzando delle funzionalità
presenti ed incapsulate all’interno dell’applicazione che le detiene, evitando in questo modo l’accesso diretto al database per ottenere l’informazione necessaria, come
accade in una soluzione di integrazione a livello dato.
Per concludere, è possibile dire che questo approccio rappresenta il miglior modo di
integrare le applicazioni consentendo di invocare facilmente logiche di business, con
l’intenzione di preservare l’integrità dei dati. Ovviamente questi metodi richiamabili
dovranno offrire garanzie di qualità di funzionamento. In alcuni casi, data l’elevata
complessità nella creazione e manutenzione di queste procedure, la verifica di correttezza dati effettuata tramite un’applicazione di Data Integrity permetterebbe di
rilevare eventuali errori di implementazione e di apportare le opportune modifiche
correttive.
Esempio di EAI livello applicazione
Una compagnia assicurativa ha la necessità di integrare due sistemi: un sistema
ERP che è stato adottato recentemente per la gestione delle polizze assicurative ed
un sistema mainframe, presente da più tempo, che permette la gestione delle stesse
17
1 – EAI - Enterprise Application Integration
polizze. Il sistema mainframe invece di essere sostituito dal nuovo applicativo ERP
viene mantenuto in parallelo. Questo perché si è deciso che certe funzionalità per
la gestione della polizza assicurativa verranno richiamate dal sistema ERP ed altre
dal sistema mainframe. È evidente che a questo punto sarà necessario mantenere
allineate le informazioni condivise tra i due sistemi per non incorrere in errori e
problemi sulle applicazioni.
In questo contesto possiamo assumere che una possibile soluzione EAI a livello dato potrebbe non essere di facile implementazione per via della complessità dei vari
database coinvolti nel processo di integrazione. Di conseguenza, il punto più naturale di integrazione è a livello di interfaccia di applicazione, in modo da utilizzare
dei metodi richiamabili esternamente per eseguire l’aggiornamento dei dati. Visto
che di solito i fornitori di soluzioni ERP fornisco delle API specifiche per accedere
ai metodi ed ai dati dell’applicazione, sarà possibile creare delle applicazioni EAI,
che utilizzando tali metodi, magari esposti come Web Services, richiameranno delle
funzionalità di business o permetteranno l’aggiornamento dei dati. In modo analogo
sarà possibile progettare delle interfacce particolari da esporre alle applicazioni EAI
che permetteranno l’accesso ai sistemi mainframe. In questo caso appena descritto,
utilizzando l’integrazione a livello di interfaccia di applicazione, si potranno mantenere allineati i dati tra i sistemi senza dovere conoscere gli aspetti tecnologici delle
basi dati coinvolte.
1.2.3
Il livello metodo
In questo livello lo scopo principale è la condivisione delle logiche di business
presenti all’interno di un’organizzazione, così come illustrato nella figura 1.3. L’esempio classico per descrivere una situazione del genere è l’aggiornamento di un
record memorizzato negli archivi di un’anagrafica cliente. Quest’operazione potrebbe essere richiesta da più applicazioni le quali potrebbero utilizzare lo stesso metodo
senza doversi riscrivere una procedura specifica all’interno di ogni applicazione che
intende effettuare questa operazione.
Esistono meccanismi differenti per condividere i metodi: gli oggetti distribuiti, gli
application servers oppure attraverso la creazione di una nuova applicazione la quale
18
1.2 – I livelli di integrazione
Applicazione 1
(es. Gestione contabilità)
Oggetto 1
(es. Anagrafiche)
Applicazione 2
(es. Marketing)
Oggetto 2
(es. Magazzino)
…..
…..
Oggetto n
Applicazione n
Frameworks
Figura 1.3. EAI: esempio di architettura per il livello metodo
metta insieme le funzionalità presenti sulle applicazioni già esistenti.
Lavorando a questo livello, però, si riscontrano difficoltà maggiori rispetto al livello
applicazione. Questo fattore rappresenta una forte limitazione la quale ne riduce
l’impiego nelle situazioni reali di produzione.
Esempio di EAI livello metodo
Un esempio di EAI a livello metodo può essere rappresentato dall’unione di due
o più applicazioni per integrare funzionalità di business e dati. Supponendo che in
un’azienda siano presenti due applicazioni, una che funziona su piattaforma Linux
ed un’altra sviluppata per ambiente Windows, per effettuare un intervento EAI a
livello di metodo:
19
1 – EAI - Enterprise Application Integration
• è possibile creare una nuova applicazione che comprenda le funzionalità delle
vecchie che saranno sostituite;
• utilizzare meccanismi come gli oggetti distribuiti per consentire un facile accesso ai metodi ed a dati presenti nelle applicazioni.
1.2.4
Il livello interfaccia utente
Un approccio di questo genere intende utilizzare come punto di integrazione l’interfaccia utente delle applicazioni. Nonostante questa non sia la soluzione migliore
in termini di stabilità, si è lavorato molto sull’integrazione dell’interfacce utente,
risolvendo diversi problemi di performance, stabilità e scalabilità.
In questa tesi l’integrazione a livello di interfaccia risulta essere poco attinente
alla problematica del Data Integrity, questa tipologia è stata riportata solo per
completezza della descrizione dei livelli di integrazione.
1.3
Tecnologie middleware
Dopo avere descritto i possibili vari livelli di integrazione è importante dare una
collocazione dell’EAI all’interno del contesto architetturale di un sistema informativo. La domanda che ci si può porre potrebbe essere la seguente: “ma quali sono le
tecnologie che possono essere adottate per realizzare un’architettura EAI?”
La risposta è semplice, ma non lo è assolutamente la sua realizzazione pratica.
Un’architettura EAI, ponendosi in mezzo ai sistemi informativi che necessitano di
comunicazione, deve lavorare come uno strato middleware. Questa caratteristica
rappresenta un punto di forza e di debolezza allo stesso tempo. Infatti, se da un
lato tutto ciò che viene integrato passa all’interno dell’architettura EAI, tutto il
meccanismo è centralizzato e si ha la possibilità di semplificarne il monitoraggio.
Per contro, se qualcosa non funziona il rischio è di bloccare tutta la comunicazione
instaurata tra i sistemi. È importante prevedere meccanismi di recupero e ripristino
di situazioni in caso di errore o blocco.
Dato che lo strato software di riferimento è di tipo middleware, a questo livello
20
1.3 – Tecnologie middleware
avremo dei meccanismi che consentiranno ad entità, come un’applicazione o un database, di comunicare con un’altra o un gruppo di entità. Realizzare applicazioni
EAI significherà analizzare ed implementare soluzioni middleware, che, come abbiamo detto, rappresentano il modo migliore per muovere informazioni tra applicazioni
e database.
È necessario, però, fare molta attenzione all’implementazione visto che risultano essere presenti diverse tecnologie di tipo middleware. Alcune di esse potrebbero non
essere le migliori a risolvere in modo efficace specifiche problematiche delle EAI. Ad
esempio, i middleware di tipo punto-punto, come possono essere le RPC (remote
procedure call) possono certamente fornire punti di connessione tra le applicazioni
ed essere impiegate in un’architettura EAI. Attraverso l’utilizzo di questa tecnologia,
però, potrebbe diventare ingestibile l’architettura EAI, soprattutto nel caso in cui
si avesse un numero di collegamenti tra i sistemi elevato, perché diventerebbe più
difficile effettuare il monitoraggio e la manutenzione delle procedure di integrazione.
A differenza della tecnologia appena descritta, un’altra tipologia è basata sul concetto di gestore dei messaggi, denominato message broker. L’idea alla base è di
ridurre il numero di interfacce, posizionando il gestore dei messaggi in mezzo e di
conseguenza facilitando il controllo del suo funzionamento. Se un’applicazione dovrà
cambiare il formato, andrà modificata solo una connessione e questa all’interno del
message broker. Allo stesso modo, se una nuova applicazione dovrà essere aggiunta
al sistema di integrazione, sarà necessario solo aggiungere questa nuova connessione,
senza dovere stravolgere altri sistemi.
Da quanto appena descritto è possibile affermare che non esiste un’unica tipologia
di middleware per risolvere un problema specifico, ma risulta comunque difficile definire delle categorie ben distinte. Sicuramente ogni tipologia avrà caratteristiche
adatte a risolvere meglio determinati problemi.
Nel seguito verranno illustrate, senza scendere nei particolari, alcune tra le principali
categorie di middleware utilizzabili per un’architettura EAI:
• RPC
• Message Oriented Middleware
21
1 – EAI - Enterprise Application Integration
• Oggetti distribuiti
• Database oriented
1.3.1
RPC
Le RPC sono le remote procedure call, le quali rappresentano una possibile modalità di comunicazione con un computer remoto. La parte client ha la facoltà di
richiamare una procedura presente sul server utilizzando una semplice chiamata a
funzione. Il client si mette in attesa della risposta dal server per avere i risultati.
L’idea alla base è abbastanza semplice e la tecnologia generalmente riesce a nascondere bene le problematiche di rete. Gli svantaggi nell’optare per le RPC consistono
nel ritrovarsi in una configurazione di tipo punto-punto e nel richiedere una comunicazione sincrona che potrebbe degradare in modo significativo le performance
dell’infrastruttura EAI implementata.
1.3.2
Message Oriented Middleware
Una caratteristica importante di questa categoria è data dalla presenza di una
coda di messaggi.
I messaggi sono inviati da un’applicazione e messi in una struttura di memorizzazione di tipo coda (struttura FIFO, first input - first output). Da qui, i messaggi
potranno essere prelevati o spediti all’applicazione destinataria in un tempo successivo senza dovere bloccare necessariamente la prima che si è occupata semplicemente
di mettere a disposizione i dati sulla coda. Di conseguenza, si capisce che si tratta di
una soluzione di tipo asincrono, ben diversa dall’utilizzo delle RPC che rappresentano una modalità sincrona. Questa tipologia di soluzione, chiamata anche MOM
(Message Oriented Middleware), è utilizzata, ad esempio, quando i computer su cui
sono installate le applicazioni non sono sempre accesi. Saranno presenti dei sistemi
mittenti che invieranno i dati sulla coda e poi un’applicazione EAI, che potremmo
chiamare “integratore”, si occuperà di convertirli, se necessario, e di trasferirli al
sistema destinatario. Il trasferimento potrà essere realizzato con un invio di dati
22
1.3 – Tecnologie middleware
su un’altra coda oppure attraverso la scrittura su file system, ad esempio, con la
creazione di un file o la memorizzazione di dati in un database.
1.3.3
Gli oggetti distribuiti
Per quanto riguarda l’integrazione a livello di metodo le applicazioni sono integrate tramite la condivisione di metodi comuni.
Questi metodi possono esistere all’interno di oggetti distribuiti raggiungibili attraverso la rete. Adottando questo tipo di approccio sarà molto probabile utilizzare una
specifica tecnologia basata su ORB, basandosi su specifiche come CORBA o DCOM,
attenendosi, quindi, a degli standard ben definiti. Una caratteristica importante degli oggetti distribuiti è data dal fatto che questo approccio supporta e valorizza gli
sforzi per il riuso degli oggetti. Uno dei principali svantaggi, invece, è attribuibile
al seguente problema: l’utilizzo di queste tecnologie, ovvero degli oggetti distribuiti,
richiede forti modifiche alle applicazioni esistenti. In generale, la soluzione offre di
spostare i metodi dalle applicazioni agli oggetti distribuiti. Si tratta di un approccio
di impatto sull’architettura esistente e, per questo motivo, di difficile utilizzo in un
contesto operativo reale.
1.3.4
Database oriented
Il middleware orientato ai database è una parte necessaria in tutte le applicazioni di integrazione, specialmente per quelle che devono lavorare a livello dato. Non
fornisce solo un’accesso ai dati contenuti nel database, ma si occupa anche di mappare eventuali differenze di formato. Il middleware in questo contesto può prendere
forma di chiamata a livello di interfaccia. Infatti, può tradurre una chiamata nello
specifico dialetto del database di interesse e ritornare la risposta in un formato unico. Degli esempi per questa tipologia di middleware sono l’ODBC e JDBC. Il primo
rappresenta un livello di traduzione per i database relazionali su piattaforme Windows, mentre il secondo, JDBC, è anch’esso un livello di traduzione per i database,
ma legato al mondo Java.
23
1 – EAI - Enterprise Application Integration
1.4
Metodologie per l’implementazione
Dopo avere brevemente descritto quali sono alcune delle possibili tecnologie per
l’implementazione dell’architettura EAI, in questa sezione si discuterà sull’esistenza
o meno di una metodologia da seguire per la realizzazione di tali architetture di
integrazione.
Possiamo subito dire che una metodologia comune per realizzare architetture EAI
non esiste, nonostante da diversi anni si parli di EAI e molti professionisti vengano
utilizzati nel loro sviluppo. I processi di integrazione tramite l’EAI si trovano ancora
in una situazione poco matura e consolidata. Quanto detto è riconducile alla storia
dei modelli e delle architetture dei computer. Infatti, molti software per l’EAI sono
proprietari, ciascun produttore ha creato una particolare metodologia per implementare il proprio prodotto. In più, ogni prodotto non consiste in un’architettura
vera e propria di integrazione, ma piuttosto rappresenta solo una parte di essa. Le
implementazioni EAI sono partite con l’intento di arrivare a degli standard, ma i
metodi con cui sono stati implementati per ora sono molto lontani da diventarlo.
In aggiunta a tutto ciò bisogna considerare questo aspetto: la definizione di tutto il
processo di integrazione e dell’architettura è più vicina all’arte che ad una scienza
esatta. Quindi, molto viene demandato alle capacità ed esperienza delle persone
che analizzano ed implementano le procedure di integrazione. Infatti, ci sono diversi
metodi che sono utilizzabili per analizzare i dati e flussi dei processi. In base al problema si potrebbero scegliere semplici processi di sincronizzazione dei dati oppure
implementare paradigmi di tipo SOA. Per fare questo, però, non sono presenti delle
regole ben definite, dipende da cosa si vuole ottenere come risultato dell’integrazione
e da quanto l’azienda è disposta ad investire su questa tematica.
Quanto appena detto mette in luce le difficoltà nella scelta di un determinato modello di implementazione delle procedure di integrazione EAI. È molto importante
comprendere le reali esigenze e valutare per le possibili soluzioni i pro ed i contro.
Visto l’assenza di precise regole per poter scegliere un modello specifico di architettura di integrazione è possibile fornire al lettore le linee guida formulate da
uno dei massimi esperti di EAI, David S. Linthicum1 , il quale ha definito 12 punti
1
Autore di un libro tra i più conosciuti sulla tematica EAI.
24
1.4 – Metodologie per l’implementazione
chiave da seguire durante la realizzazione di un’architettura EAI.
I punti chiave da lui definiti sono i seguenti:
1. conoscere l’azienda e capire quali sono le esigenze;
2. dare un significato ai dati;
3. dare un significato ai processi;
4. identificare le interfacce di applicazione;
5. identificare gli eventi di business;
6. identificare gli scenari di trasformazione dei dati;
7. fornire una mappatura degli spostamenti delle informazioni;
8. utilizzare le tecnologie presenti;
9. fare più test possibili;
10. valutare le performance;
11. definire il valore aggiunto;
12. creare delle procedure mantenibili nel tempo.
Conoscere l’azienda e capire quali sono le esigenze
Questo primo punto potrebbe sembrare banale e scontato, ma in realtà non è
così. Molto spesso questo rappresenta il momento più complicato e può occupare
anche una lunga parte del periodo necessario all’adozione di un’architettura EAI.
Sicuramente è un momento fondamentale ed irrinunciabile. È molto importante
comprendere quali sono i problemi e le esigenze dell’azienda per trovare la soluzione
più idonea. Sarà necessario collaborare con i responsabili dei vari sistemi informativi
presenti per conoscere e comprendere la struttura informativa e ciò che è in essa
contenuta. L’interazione con le persone ed i sistemi porterà a determinare quali
sono le informazioni che dovrà gestire la soluzione EAI. Inoltre, è fondamentale
25
1 – EAI - Enterprise Application Integration
ricordare che le informazioni ottenute in questo passo influenzeranno direttamente
le due operazioni seguenti, ovvero dare un significato sia ai dati che ai processi.
Dare un significato ai dati
È importante questo passaggio per diversi motivi. Il primo è dovuto al fatto
che molti progetti EAI sono presenti a livello dato e di conseguenza si deve definire il significato delle informazioni ed avere una comprensione chiara di come sono
strutturate e memorizzate. Il secondo motivo è legato al fatto che anche i progetti
sviluppati sugli altri livelli di EAI necessitano molto spesso di comprendere l’organizzazione dei dati sui differenti database.
Per implementare un’architettura EAI a livello dato sono presenti tre operazioni
operazioni che possiamo definire di “base” e che nel dettaglio sono:
1. l’identificazione dei dati;
2. la catalogazione dei dati;
3. la costruzione del modello dei meta dati aziendale, quest’ultimo utilizzato
come guida principale per integrare i diversi database che esistono all’interno
dell’organizzazione.
Dare un significato ai processi
Una volta che si sono compresi i dati è possibile decidere come approcciarsi al
modello di business dell’azienda. Tale decisione dipenderà sicuramente dal particolare dominio di EAI che si intende raggiungere.
In questa attività l’obiettivo è di ottenere una vista dell’azienda a livello di processo. Il lavoro principale sarà la comprensione e documentazione di tutti i processi di
business presenti all’interno dell’organizzazione.
Identificare le interfacce dell’applicazioni
Una fase da affrontare corrisponde alla raccolta delle informazioni sulle interfacce delle applicazioni. Si tratta di un lavoro molto utile per supportare l’integrazione
26
1.4 – Metodologie per l’implementazione
EAI a livello d’interfaccia oppure per implementare l’integrazione dell’interfaccia
delle applicazioni con gli altri livelli di EAI.
Le interfacce, di solito, non vengono prodotte secondo in modo standard, esse generalmente sono differenti da applicazione ad applicazione, di conseguenza è utile
avere un elenco di queste memorizzandole in uno specifico repository facilmente
accessibile.
Identificare gli eventi di business
L’operazione consiste nell’identificazione di tutti gli eventi di business rilevanti
che sono presenti all’interno dell’organizzazione. Ciò significa che quando avverrà
un evento si avrà la conoscenza degli attori in gioco presenti e sarà più facile capire
l’esito della azione risultante.
Infatti, è fondamentale comprendere chi ha invocato un evento di business, chi ha
partecipato all’evento e quali sono stati gli altri eventi che possono essere stati
invocati come conseguenza dell’avvio di uno iniziale.
In un’architettura EAI un obiettivo possibile è di automatizzare gli eventi su tutti i
sistemi eliminando i processi manuali.
Identificare gli scenari di trasformazione dei dati
L’obiettivo di questo punto è di ottenere la conoscenza delle trasformazioni che
avvengono tra i dati scambiati tra i diversi sistemi. È importante realizzare questo
lavoro perché i dati che esistono in un sistema potrebbero non avere significato
su di un altro senza opportune modifiche al dato stesso. Effettuando le opportune
trasformazioni sul dato è possibile mantenere la corretta semantica sulle applicazioni.
Fornire una mappatura degli spostamenti delle informazioni
Arrivati in questa fase è necessario creare una mappatura degli spostamenti delle
informazioni da sistema a sistema memorizzando le informazioni che vengono spostate e memorizzate. Si dovranno memorizzare gli eventi che limitano gli spostamenti
delle informazioni, oppure gli eventi richiesti o le condizioni necessarie per attivare
lo spostamento dell’informazione dal sistema sorgente verso il relativo destinatario.
27
1 – EAI - Enterprise Application Integration
Applicare la tecnologia
Una volta terminate tutte le operazioni di catalogazione delle informazioni, si
arriva al punto in cui è necessario selezionare e decidere quale tecnologia adottare
per risolvere il problema di integrazione EAI. In questo contesto sono presenti molte
tecnologie, che abbiamo già descritto in precedenza, come gli oggetti distribuiti, le
rpc ed i message brokers. In generale, la scelta della tecnologia da adottare è un mix
di prodotti di fornitori differenti i quali insieme riescono a soddisfare le esigenze di
un’architettura EAI. È molto raro che un singolo fornitore sia in grado di risolvere
tutti i problemi che la soluzione di solito richiede. È evidente che la scelta della tecnologia sia un processo molto difficile che può richiedere un grande sforzo di tempo
e di risorse.
In questa fase vengono definiti dei requisiti che una tecnologia e suoi prodotti devono
raggiungere e soddisfare. Con questa attività è possibile comprendere le soluzioni
disponibili e scegliere quelle che rispondono meglio alle proprie necessità. Per capire
se un requisito potrà essere raggiunto o meno da un prodotto a volte sarà necessario provare con un “progetto pilota”. In questo modo si arriverà a conoscere come
tale tecnologia funziona e come questa potrà essere utilizzata nell’architettura EAI.
Il tempo per scegliere la giusta tecnologia potrebbe, a volte, essere lungo quanto lo sviluppo dell’intera soluzione EAI. Un’eventuale scelta errata causerà quasi
sicuramente il fallimento del progetto EAI.
Fare più test possibili
La parte di test è sempre molto costosa e di solito tende ad occupare molto
tempo e molte risorse. Per contro se un’architettura EAI non viene testata in modo sufficiente è possibile avere degli effetti collaterali devastanti dal punto di vista
dell’integrità di tutto il sistema. Ad esempio, potrebbero essere sovrascritti dei dati
importanti, oppure informazioni errate potrebbero essere inserite all’interno delle
applicazioni. La fase di test è fondamentale per verificare che la soluzione implementata sia scalabile, possa funzionare in modo adeguato ed accettabile nell’uso
quotidiano, prevedendo anche carichi di lavoro normalmente non presenti.
28
1.4 – Metodologie per l’implementazione
Utilizzare delle applicazioni di controllo dati può essere uno degli strumenti per
verificare determinate funzionalità dell’architettura EAI.
Valutare le performance
Le performance sono un punto che solitamente viene considerato troppo tardi,
quindi, bisogna fare attenzione a considerare questo aspetto con la giusta attenzione. Generalmente i sistemi su cui non si valutano correttamente le performance sono
destinati a fallire.
Con le tecnologie attuali sono presenti molte architetture EAI che non forniscono
una latenza bassa nel rispondere alle operazioni richieste. Gli spostamenti tra sistemi, l’invocazione di comuni processi di business dovrebbero rispondere con un
tempo inferiore al secondo. Lo stesso tempo di risposta dovrebbe essere mantenuto
a prescindere dall’aumentare del numero di utenti e processi caricati.
Come è possibile valutare le performance di un sistema? Innanzitutto possiamo
affermare che le performance non rappresentano un requisito definito all’inizio dello
sviluppo e poi, in seguito, ignorato. Le performance sono valutate dall’inizio alla
fine di tutto il periodo di utilizzo di un’architettura EAI. Quanto appena affermato implica che una soluzione EAI deve necessariamente fornire degli strumenti per
le verifiche delle performance. Queste verifiche devono essere fatte sotto differenti
condizioni. Ad esempio verificando con 100 utenti oppure 1000 utenti, controllando
l’affidabilità ed i tempi di risposta del sistema.
Definizione del valore
A questo punto è arrivato il momento di definire il valore di un’architettura EAI,
per capire il valore di business legata all’integrazione dei sistemi. Un modo per fare
ciò è di valutare i soldi che si sono risparmiati utilizzando con successo l’architettura
EAI.
Per raggiungere questo obiettivo si devono considerare due fattori:
• il valore dell’architettura EAI intesa come la capacità di eliminare i processi
costosi, come i processi manuali, ottenendo di conseguenza una riduzione degli
errori;
29
1 – EAI - Enterprise Application Integration
• il valore fornito dall’incremento della produttività.
Creare delle procedure mantenibili nel tempo
Ultimo punto da considerare, ma non meno importante, è la definizione di come
mantenere nel modo migliore un’architettura EAI. In questo caso ci si deve porre
delle domande del tipo:
• chi gestirà la sicurezza?
• chi controllerà le performance e risolverà i problemi?
Per raggiungere anche quest’ultimo obiettivo è utile documentare tutte le attività in
modo da poterle assegnare a persone diverse in caso di necessità. Bisogna ricordarsi
che un’architettura EAI rappresenta il cuore di un’azienda perché muove informazioni vitali tra i sistemi e quindi un’operazione errata potrebbe compromettere la
stabilità e la coerenza tra i sistemi.
1.5
Potenziali criticità
Un’architettura di integrazione EAI deve essere vista come la realizzazione di
un obiettivo che porta a migliorare i processi aziendali, necessaria per migliorare
il lavoro dell’azienda. Ma ovviamente, come in tutte le scelte, bisogna considerare
anche i potenziali aspetti negativi che possono comportare anche delle criticità non
indifferenti.
In certe situazioni, nei casi peggiori, si può arrivare addirittura ad un fallimento vero
e proprio della architettura EAI. Questo evento porterà con sé tutte le conseguenze
legate all’insuccesso dell’investimento di persone e risorse impiegate per l’implementazione dell’infrastruttura EAI. Per evitare che questo accada, è necessario, prima
di procedere a realizzare un’architettura EAI, analizzare i possibili problemi a cui si
potrà andare incontro, valutando le probabilità di incorrere in queste casistiche.
La parte che segue vuole illustrare alcuni dei possibili problemi che si possono
incontrare nella realizzazione di un’architettura EAI.
30
1.5 – Potenziali criticità
1.5.1
Problemi nel processo di integrazione
Quando si lavora con lo sviluppo di processi di integrazione si possono verificare
delle situazioni che creano forti problemi e rallentamenti e che possiamo riassumere
nei punti seguenti.
• La reale implementazione risulta essere più complessa e costosa di quella attesa
e preventivata. A volte capita perché si commettono errori nell’analisi progettuale ed in fase di realizzazione si rilevano delle difficoltà tecniche che non si
riescono a superare facilmente se non stravolgendo alcune parti del progetto
o, nei casi peggiori, ricominciando di nuovo dalla fase di analisi, aumentando di conseguenza i costi. Ma i costi possono aumentare anche perché molti
fornitori per realizzare architetture EAI tentano di convincere gli sviluppatori
che utilizzando il loro prodotto questo li aiuterà a creare in breve tempo la
soluzione di integrazione. Magari alla fine si scoprirà che avrà solo aumentato
i costi senza portare effettivi miglioramenti.
• Può capitare che le singole business unit2 associate ai sistemi informativi non
vogliano comunicare e cooperare. Prima dell’avvento di un’architettura EAI
ogni business unit considerava la sola propria applicazione, senza avere necessariamente una visione dell’infrastruttura informativa globale. Invece, realizzando un’architettura EAI sarà richiesta una collaborazione molto forte tra le
unità che si occupano dei vari sistemi ed il gruppo centrale a supporto dell’EAI. Questo perché i singoli sistemi dovranno condividere con le persone che
lavoreranno sulle EAI procedure per richiamare le operazioni sui propri sistemi
e dovranno comunicare eventuali modifiche e manutenzioni. In caso contrario,
il gruppo EAI potrebbe rimanere con informazioni non aggiornate, con tutti i
rischi di fare operazioni non più coerenti.
• In grosse organizzazioni il gruppo che si occupa di EAI ed i responsabili dei vari sistemi possono fare riferimento a capi diversi i quali non voglio incentivare
questo dialogo tra i gruppi; in situazioni del genere eventuali problemi legati
2
Parte di un’azienda che rappresenta una specifica funzione di business, chiamata anche area
funzionale o dipartimento.
31
1 – EAI - Enterprise Application Integration
agli eccessivi costi del progetto di integrazione potrebbero diventare cause scatenanti di scontro tra il gruppo EAI e gli altri attori dei vari sistemi, rendendo
la situazione ancora più difficile.
1.5.2
Dati non allineati
Un sistema di memorizzazione di dati per garantire la qualità delle informazioni
dovrebbe lavorare utilizzando un paradigma di tipo transazionale, modalità questa
che permetterebbe di essere affidabile. L’utilizzo di un paradigma di questo tipo,
ovvero quello transazionale, darebbe la possibilità di semplificare le problematiche di
consistenza, di recupero dati e gestione errori in un sistema di integrazione. Il problema che solitamente si riscontra in un’architettura EAI è di trovare molto spesso
processi di natura asincrona. Questi processi potenzialmente possono durare anche
molto tempo all’interno di ciascun sistema, quindi difficilmente potrà essere realizzato un sistema transazionale come quello che riscontriamo su una singola base dati.
Quanto appena detto evidenzia il pericolo di trovare incoerenze nelle basi dati perché
le operazioni eseguite dai processi EAI a volte potrebbero incorrere in degli errori e
quindi bloccarsi. In caso di errore di una procedura EAI, difficilmente sarà possibile
richiamare una funzione di rollback per annullare le operazioni eseguite, in modo
analogo a quello che avviene su una base dati transazionale. Si potranno ritrovare,
perciò, delle informazioni disallineate tra i sistemi, ovvero non ci sarà più garanzia
di Data Integrity tra le basi dati delle diverse applicazioni. Questa situazione è illustrata nell’esempio della figura 1.4, dove sul sistema di partenza viene modificata
l’informazione relativa ad un contratto e questa, per problemi sull’architettura EAI,
non sarà propagata agli altri sistemi, che di conseguenza avranno dei dati non più
allineati.
Per ovviare a questo grosso inconveniente si potrebbe pensare di mettere a disposizione dell’architettura EAI dei meccanismi per accorgersi di queste situazioni
di disallineamento dei dati. Questa criticità, ovvero il rischio di avere dei dati non
allineati tra i vari sistemi, è proprio quella che ci porta a giustificare la realizzazione di un sistema di controllo di allineamento effettuando direttamente le verifiche
sui dati. A questo controllo di coerenza delle informazioni memorizzate nelle basi
32
1.5 – Potenziali criticità
Applicazione 1
Sull’applicazione 1 viene modificato il contratto 1234
1
Database
1
Tramite
un’applicazione
presente
nell’architettura EAI
viene prelevato il dato
modificato e questo
dovrà essere
comunicato agli altri
sistemi che
possiedono la stessa
entità
Applicazione 2
Tabella
Contratti
2
Database
2
Architettura EAI
Tabella
Contratti
3
Si verifica un errore nelle operazioni EAI per
aggiornare i dati sull’entità contratto degli altri
sistemi
Tabella
Contratti
Database
3
Si hanno dei dati disallineati sulle tabelle dei contratti!
Applicazione 3
Utilizzare dei controlli di
Data Integrity per riscontrare
questi disallineamenti
Figura 1.4. EAI: possibile problema di Data Integrity nell’architettura EAI
33
1 – EAI - Enterprise Application Integration
dati possiamo assegnare il nome di Data Integrity. Quindi, un sistema di controllo
di Data Integrity potrà aiutare a rispettare uno dei requisiti più importanti nello
sviluppo di processi di integrazione, ovvero il mantenimento della coerenza dei dati
scambiati. La correttezza delle informazioni condivise sarà un buon indicatore per
capire se l’architettura EAI starà operando in modo corretto o meno.
Il prossimo capitolo si occuperà proprio della problematica dell’integrità dei dati
distribuiti in un sistema informativo complesso. Sarà illustrato come sia possibile
definire ed implementare un’applicazione che si occupa di Data Integrity all’interno
di un’architettura di integrazione come le EAI.
34
Capitolo 2
Il Data Integrity in un’architettura
EAI
2.1
Introduzione
Il Data Integrity, inteso come strumento di verifica e controllo dei dati in un’architettura complessa all’interno della quale sono presenti sistemi diversi, è fondamentale per garantire la correttezza e la validità delle informazioni scambiate. La
figura 2.1 riporta un possibile schema di controllo dati tra tre sistemi differenti che
condividono l’entità contratti. L’applicazione si occuperà di prelevare i dati da controllare ed eseguirà delle procedure di controllo per verificare l’allineamento delle
informazioni.
La presenza di dati disallineati nei back-end potrebbe compromettere le funzionalità delle varie applicazioni del sistema informativo o causare malfunzionamenti
nel richiamare le procedure che usufruiscono di quelle informazioni. Quindi è importante avere degli strumenti di controllo di allineamento dati.
Ad esempio, un’azienda che si occupa di pubblicità e servizi, come quella che sarà
descritta nel seguito di questa tesi, potrebbe decidere di gestire i dati di un contratto
di un’inserzione pubblicitaria dal punto di vista sia amministrativo che editoriale.
Questa suddivisione potrebbe fare decidere ai responsabili dei sistemi informativi di
definire l’entità del contratto su entrambi i sistemi. L’entità, intesa come tabella
35
2 – Il Data Integrity in un’architettura EAI
Applicazione 1
Database
1
Applicazione 2
Tabella
Contratti
Data Integrity
Database
2
Preleva le informazioni delle
entità condivise sui vari
sistemi e verifica se i dati
sono allineati
Tabella
Contratti
Tabella
Contratti
Fornisce strumenti per calcolare e visualizzare i
disallineamenti riscontrati tra le entità distribuite
sui vari sistemi
Database
3
Applicazione 3
Figura 2.1. Data Integrity: esempio di applicazione di controllo dati in
un’architettura EAI
36
2.1 – Introduzione
o insieme di tabelle costituite da specifici campi, sarebbe presente in due database
distinti, i quali dovranno richiedere un processo di integrazione che prevederà dei
flussi di allineamento dati per avere gli aggiornamenti delle informazioni in caso di
modifica effettuata in uno dei due sistemi. Se nel processo di aggiornamento tra i
due sistemi si verificasse un errore, ancora più grave se non segnalato o monitorato,
questo porterebbe a creare disallineamenti tra le due basi dati. Il compito di un’applicazione di Data Integrity, in questo caso, sarà di evidenziare le anomalie tra le
due entità, effettuando i controlli con una cadenza temporale da definire in base alla
periodicità dei flussi che sono presenti nel processo di integrazione. Sarà possibile,
in questo modo, predisporre uno strumento con cui fornire delle interfacce utente e
dei report di dettaglio o aggregati dove riportare le anomalie riscontrate sui dati.
Questi strumenti saranno utili per pianificare dei recuperi delle informazioni con la
possibilità di integrare le procedure di riallineamento all’interno dello strumento di
controllo allineamento dati.
Uno dei primi compiti per la realizzazione di una soluzione di Data Integrity è l’identificazione delle entità critiche presenti sui sistemi informativi, definendo cosa
esattamente è necessario controllare. L’attività appena citata può essere realizzata
definendo quali tabelle sono da monitorare e di queste, quali campi è necessario
mantenere allineati. Questa considerazione ne fa derivare subito un’altra molto importante: bisogna tenere presente che una gestione di Data Integrity ha un costo di
analisi ed implementazione da non sottovalutare e deve essere implementata quando la mole di informazioni scambiate è molto grande e di conseguenza il controllo
manuale sarebbe impensabile. Generalmente la necessità di utilizzare procedure di
Data Integrity può essere effettivamente richiesta nei casi in cui sono presenti sistemi
informativi medio grandi, dove i flussi di integrazione sono molteplici e si trovano
tante procedure automatizzate. Come già detto, le procedure, anche se automatizzate, molto spesso hanno un sistema di monitoraggio che deve essere verificato da un
gruppo di utenti il quale ne controllerà il corretto funzionamento. Uno strumento
di segnalazione e monitoraggio aggiuntivo per l’architettura EAI potrebbe arrivare
da un’applicazione di Data Integrity, la quale riscontrando o meno disallineamenti,
permetterà di capire se qualcosa non sta funzionando nei processi di integrazione.
37
2 – Il Data Integrity in un’architettura EAI
Inoltre, la scelta di ricorrere ad applicazioni di Data Integrity può avvenire anche
per verificare l’allineamento dei dati nel caso in cui un’azienda decida di effettuare
operazioni di migrazioni di alcuni sistemi informativi. Ad esempio, considerando
l’azienda su cui ho realizzato il progetto di Data Integrity, all’interno della quale si
stanno spostando dati e procedure delle applicazioni CRM e amministrative verso
SAP, la fase di migrazione di questi sistemi costituisce un momento molto delicato
per il dato. Risulterà utile verificare, oltre al corretto funzionamento delle nuove
applicazioni, anche il corretto trasferimento delle informazioni dal sistema vecchio
a quello nuovo, controllando eventuali assenze e differenze sui dati. Questo aspetto
è importante perché generalmente in casi di spostamento di grosse quantità di dati
ci si affiderà di solito a flussi di integrazione, i quali ovviamente se non saranno
impostati correttamente genereranno malfunzionamenti che potranno fare perdere
informazioni importanti. Anche per questi motivi implementare una soluzione di
Data Integrity può essere una strategia vincente per certificare e validare il successo
della migrazione dei dati tra i sistemi (vecchio e nuovo).
Nello scenario di un’architettura EAI, vista la complessità dello sviluppo e la difficoltà di effettuare operazioni di debug in tempo reale, la presenza di uno strumento
di controllo di Data Integrity può rappresentare un ausilio per il successo dell’implementazione dell’architettura stessa. Se le informazioni movimentate dai flussi di
EAI saranno allineate, questa situazione rappresenterà un segnale positivo di funzionamento dell’architettura, giustificando di fatto l’investimento e gli sforzi effettuati
nella scelta di adottare tale architettura di integrazione. Inoltre, nella fase di nuove implementazioni di procedure di integrazione, il rilevamento di disallineamenti
nei dati potrà essere utilizzato per comprendere i motivi di queste anomalie. Con
uno strumento di controllo dati si avrà la possibilità di definire casistiche di errore
e di conseguenza apportare le correzioni sui flussi di integrazione. Quanto appena
detto permette di considerare il Data Integrity come un’attività che collabora con
l’architettura EAI, garantendone il funzionamento a livello di dato.
38
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
2.2
Fasi per la realizzazione di un’applicazione di
Data Integrity
Un’applicazione di Data Integrity per essere implementata in modo corretto dovrà prevedere delle fasi di analisi puntuali sui dati e sull’architettura in cui si andrà
ad operare, per arrivare a progettare un sistema funzionante ed utilizzabile. Bisogna ricordare che l’obiettivo di un’applicazione di Data Integrity, in questa tesi, è
di fornire garanzie di qualità dei dati in un contesto di integrazione su architetture
complesse. Trattandosi di un ambito in cui sono presenti molti attori sarà necessario
puntare alla collaborazione con i diversi gestori dei sistemi per avere tutti i dettagli
possibili, in modo del tutto analogo alle problematiche EAI già discusse. In caso di
modifiche nelle logiche applicative o di dati sarà importante avere subito le informazioni per evitare di effettuare dei controlli con logiche non più coerenti. Un progetto
di Data Integrity per essere valido dovrà essere mantenuto nel tempo allineato con
le logiche presenti sui sistemi in modo analogo alle altre procedure di integrazione di
EAI. Altrimenti, in caso contrario, si correrà il rischio di generare delle segnalazioni
definibili come “falsi positivi”, nel senso che verranno indicati come errori situazioni
corrette, oppure non si riscontreranno gli errori quando questi saranno presenti.
Le fasi che fanno parte del processo di implementazione di una soluzione di Data
Integrity sono in parte riconducibili alle linee guida per l’implementazione di un’architettura EAI definite nel primo capitolo, nello specifico possono essere condensate
nei punti seguenti:
• analizzare le entità di business dell’azienda;
• analizzare il contesto operativo e dei sistemi informativi;
• analizzare gli aspetti fisici di memorizzazione;
• effettuare transcodifiche sui campi;
• implementare le politiche di confronto sui dati;
• valutare le performance;
39
2 – Il Data Integrity in un’architettura EAI
• visualizzare i risultati;
• analizzare possibili processi di riallineamento;
• monitoraggio e test continui.
2.2.1
Analizzare le entità di business dell’azienda
In primo luogo è molto importante avere una minima conoscenza del “core business” dell’azienda su cui si deve costruire un’applicazione di Data Integrity. Questo
passaggio è fondamentale perché l’analisi a questo livello determinerà le scelte delle fasi successive. Si tratta di un attività molto critica che deve essere fatta con i
responsabili interni dell’azienda per capire e comprendere gli oggetti di business fondamentali. Ad esempio, oggetti critici di business potrebbero essere i dati dei clienti
per un sistema CRM, il documento di vendita per un programma gestionale ecc..
L’individuazione a livello logico delle entità da controllare è il passaggio obbligatorio
prima di intraprendere qualsiasi altra attività di implementazione. Sarà possibile
decidere, in seguito, di controllare anche altri oggetti di business mentre si starà già
lavorando alle fasi successive, ma queste aggiunte non dovranno comunque stravolgere il percorso fino a quel momento intrapreso, per evitare di dovere annullare il
lavoro già svolto.
2.2.2
Analizzare il contesto operativo ed i sistemi informativi
Dopo avere selezionato e deciso le entità che si intendono mettere sotto controllo
tramite un’applicazione di Data Integrity, sarà molto importante effettuare un’analisi abbastanza specifica dell’architettura dei sistemi presenti. L’attività permetterà
di definire un primo insieme di potenziali strumenti che potranno essere adottati.
Conoscendo la tecnologia utilizzata per la memorizzazione dei dati, ad esempio su
di un database, si potrà optare per l’utilizzo di uno strumento compatibile con la
tecnologia riscontrata ed eventualmente già a disposizione dell’azienda. Si potranno
anche valutare eventuali acquisti di strumenti specifici che permetterebbero migliori
performance e stabilità.
40
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
In questa fase di analisi si verrà a conoscenza delle specifiche piattaforme e dei sistemi informativi presenti. Sarà molto importante ottenere le informazioni di accesso
alle basi dati associate ai sistemi. Ad esempio, per un database sarà necessario conoscere la stringa di connessione e le utenze per accedervi. Se i dati fossero invece
salvati su file, come ad esempio avviene con dei backup, sarà necessario conoscere
la cartella dove saranno memorizzati, richiedendo eventualmente i diritti di accesso
almeno in sola lettura.
Effettuando l’analisi dell’entità di business e del contesto operativo sarà possibile
fare una valutazione di quanti e quali sono i sistemi che richiedono questo monitoraggio da parte della soluzione di Data Integrity. A questo punto sarà possibile
iniziare anche a valutare i modi ed i tempi di realizzazione della soluzione.
2.2.3
Analizzare gli aspetti fisici di memorizzazione
Determinare i campi
Una volta che si è riusciti ad individuare le piattaforme ed i sistemi che contengono le entità da monitorare, si dovrà scendere di livello andando a verificare
ed ottenere le informazioni sulle modalità di memorizzazione dei dati. Come già
detto precedentemente, molto probabilmente, si dovrà accedere ad un database e di
questo sarà necessario ottenere le informazioni circa la modalità di memorizzazione
dei dati dell’entità all’interno dei campi della tabella. Infatti, una volta definite
l’entità e le informazioni da controllare sarà necessario effettuare un mapping tra
i dati dell’entità logica e di come questi siano effettivamente presenti all’interno di
una o più tabelle.
Questa operazione che può sembrare banale, molto spesso non lo è, perché i campi possono anche essere poco autodescrittivi, ovvero il loro nome non ci fornisce
un’informazione esplicita di quale attributo dell’entità si riferisce. Si tratta di una
situazione abbastanza frequente nei casi in cui vengono utilizzate applicazioni complesse tipo SAP, nella quale sono presenti migliaia di tabelle e ciascuna di essa è
costituita da una moltitudine di attributi. Inoltre, molto spesso si trovano delle
tabelle con tanti campi perché l’entità che viene memorizzata su queste strutture
41
2 – Il Data Integrity in un’architettura EAI
deve essere caratterizzata da molte informazioni perché è costituita da tanti attributi. Di conseguenza il passaggio dal modello logico dell’entità a quello fisico su una
tabella di un database prevederà la creazione di tanti attributi per poter al meglio
descrivere l’entità stessa.
È importante sottolineare che difficilmente un’applicazione di Data Integrity dovrà
controllare tutti i campi delle tabelle di un sistema. Questo perché sarebbe molto
oneroso dal punto di vista di controllo e di realizzazione, e poi c’è da considerare il
fatto che generalmente quando ci sono tanti attributi non è detto che questi contengano valori significativi in tutti i record e soprattutto per tutti i sistemi. Sarà
fondamentale circoscrivere le informazioni condivise tra i sistemi che necessitano di
controllo e lavorare solo su quelle. Per raggiungere quest’obiettivo si dovranno contattare le persone responsabili dei vari sistemi informativi i quali dovranno fornire
le informazioni necessarie per estrapolare questi dati.
Il data dictionary del database
Come ausilio alla fase di riconoscimento dei campi all’interno delle tabelle sarà
possibile accedere anche al dizionario dei dati, ovvero il Data Dictionary, il quale, se
presente, mantiene le informazioni associate alla struttura di un database e da cui
possono essere prelevate indicazioni tra le quali:
• il proprietario dell’oggetto;
• la tabella di appartenenza;
• il formato del campo ovvero se si tratta di un intero, di una stringa (con quanti
caratteri), ecc.
Il data dictionary può essere utile per ricercare, con delle interrogazioni SQL specifiche, i nomi e gli attributi di campi particolari all’interno della struttura. Generalmente si tratta di uno strumento abbastanza comune tra i database. Tuttavia, questi
dizionari sono stati implementati dai produttori in maniera diversa sia per quanto
riguarda la forma che per i contenuti. Per questo motivo, a volte, le informazioni
da ricercare non sempre si riescono ad ottenere facilmente.
42
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
Comprendere i vincoli di integrità
Quando si analizza un singolo database, si presentano costantemente problematiche di integrità sui dati. Per gestire bene queste situazioni è importante comprendere
le regole applicate per la costruzione del database. Ad esempio, quando abbiamo una
tabella contenente i dati di testata di una fattura ed un’altra contenente i dettagli
di riga collegati alla testata tramite una chiave esterna, l’operazione di inserimento
dati corretta prevederà prima il caricamento della testata del documento fattura poi
l’inserimento di tutte le righe ad essa associata. In caso contrario, se l’integrità non
fosse stata impostata, sarebbe possibile avere delle righe di fattura senza i relativi
dati di testata e quelle informazioni, molto probabilmente, non sarebbero più raggiungibili dall’applicazione. Ovviamente per mantenere questi vincoli, le tabelle dei
diversi database prevederanno delle chiavi primarie che permetteranno di distinguere i record in modo univoco.
Conoscere questi vincoli di integrità, analizzando chiavi primarie ed indici, sarà di
ausilio alle politiche di confronto di un’applicazione di Data Integrity per riconoscere
la stessa entità presente su database diversi.
Considerare il Data Latency
È una caratteristica associata al dato che definisce quando e come l’informazione
da verificare risulta essere presente e valida. Il Data Latency deve essere conosciuto
per determinare il momento in cui l’informazione potrà essere presa in considerazione
da una procedura di controllo allineamento dati come il Data Integrity.
Per quanto concerne la parte di controllo delle informazioni possiamo avere tre
categorie di data latency:
1. real time
2. near time
3. batch time
Real-time
Significa che il dato è presente nel database in ogni momento con una piccola o
43
2 – Il Data Integrity in un’architettura EAI
addirittura latenza nulla rispetto ad una possibile modifica su un altro sistema. In
sistemi real time i dati sono aggiornati immediatamente all’interno del database e
le informazioni sono subito disponibili a qualsiasi persona o applicazione che ne farà
richiesta. Per un’applicazione di Data Integrity il fatto di avere dati aggiornati in
real time non dovrebbe creare problemi per quanto riguarda il momento in cui prelevare l’informazione. Nonostante questo converrà accedere ai dati per effettuare i
confronti in momenti in cui ci saranno meno utenti che lavoreranno sui sistemi, in
modo da essere il più possibile sicuro di prendere i dati aggiornati.
Near-time
Con il termine near-time si intende che il dato relativo ad un certa informazione è aggiornato a determinati intervalli rispetto agli aggiornamenti istantanei come avviene
invece in real-time. Un esempio può essere il valore all’interno di una tabella che
per essere aggiornato deve aspettare la terminazione di un’operazione molto lunga
e fino a quando questa non sarà terminata le due basi dati risulteranno differenti.
Batch-time
Con il termine batch-time si intende che il dato relativo ad un certa informazione è
aggiornato a distanza di diverse ore, generalmente con il ritardo di un giorno, rispetto agli aggiornamenti in real-time e near-time. Un tipo esempio di operazione batch
time l’abbiamo quando l’operazione di allineamento tra sistemi avviene con dei job
notturni, schedulati appositamente per trasportare le informazioni da un sistema
all’altro. Questo significa che durante tutto il giorno si potrà avere un’informazione
diversa sulla stessa entità tra i due i sistemi, ma questo non sarà un errore. La situazione non sarà risolta finché non arriverà il processo notturno, ovvero un processo
batch, ad occuparsi dell’aggiornamento delle informazioni.
Per quanto riguarda l’applicazione di Data Integrity sarà necessario conoscere
queste situazioni per sapere quando prendere i dati su cui effettuare il confronto.
44
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
2.2.4
Effettuare transcodifiche sui campi
Una volta recuperato tutte le informazioni circa i nomi dei campi e delle tabelle
che contengono le entità il processo di analisi dei dati non è ancora terminato.
Infatti, quando si integrano applicazioni differenti è facile che queste abbiano nei
loro database valori diversi per rappresentare la stessa semantica per un certo dato.
Sarà importante definire le corrispondenze di codifica tra gli attributi di un’entità
memorizzata su i diversi sistemi.
In altri casi, una specifica informazione può essere memorizzata in un solo campo in
un sistema, mentre per recuperarla dall’altro sarà necessario concatenare due o più
campi. Sarà anche possibile trovarsi in situazioni dove il dato per essere confrontato
dovrà essere estratto dal valore di un campo, quindi si dovranno utilizzare operazioni
di manipolazione di stringhe oppure di conversione da stringa a numero e viceversa
Per rappresentare meglio queste casistiche è possibile riportare gli esempi seguenti:
Sulla tabella del sistema A lo stato del contratto può assumere diversi valori tra i quali:
“Confermato” ed “Annullato”, mentre sul sistema B i corrispettivi stati citati per il sistema A
corrispondono ai valori “C” e “A”.
In fase di confronto dei record di questi due sistemi sarà necessario rendere uguale la
semantica trasformando:
•sul sistema B il valore “C” con “Confermato”, ed in modo analogo anche gli altri valori;
•oppure sul sistema A il valore “Confermato” sarà sostituito con “C”, anche in questo caso si
dovranno effettuare le opportune variazioni per gli altri stati.
“Confermato” = “C”
Codice
Data
Cliente
Stato contatto
Codice
Data
Cliente
Stato contatto
1234
24/06/2009
ROSSI
Confermato
1234
24/06/2009
ROSSI
C
Contratto
Contratto
Sistema A
Sistema B
Figura 2.2. Data Integrity: esempi di transcodifiche sui dati (1)
45
2 – Il Data Integrity in un’architettura EAI
Sulla tabella del sistema A il codice di un contratto è memorizzato in un solo campo (Codice),
mentre nella tabella del sistema B per ottenere in modo congruente la stessa informazione è
necessario concatenare due campi (Codice + Sottocodice)
Codice
Cliente
Stato contatto
Codice
Sottocodice
Cliente
Stato contatto
1234
ROSSI
Confermato
123
4
ROSSI
Confermato
Tabella contratto
Tabella contratto
Sistema A
Sistema B
Sulla tabella del sistema A il codice è memorizzato in formato numerico, mentre sulla tabella del
sistema B è memorizzato in formato carattere. Quando è presente un codice costituito da degli
zeri iniziali questi verranno persi nella memorizzazione sul campo numerico, mentre su quello in
formato carattere ciò non avverrà. Nel momento in cui sarà necessario confrontare il dato
numerico con quello carattere si dovrà ricostruire correttamente l'informazione prima di
procedere con il controllo: si dovranno aggiungere gli zeri a sinistra persi sul campo numerico
oppure questi zeri saranno da eliminare sul campo di tipo carattere.
Codice
Data
Cliente
Stato contatto
Codice
Data
Cliente
Stato contatto
1234
24/06/2009
ROSSI
Confermato
001234
24/06/2009
ROSSI
Confermato
Contratto
Contratto
Sistema A
Sistema B
Figura 2.3. Data Integrity: esempi di transcodifiche sui dati (2)
46
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
2.2.5
Implementare le politiche di confronto sui dati
Questa è la fase in cui avviene il passaggio dall’analisi alla realizzazione vera e
propria. A questo punto sarà necessario definire e realizzare gli algoritmi di caricamento, aggiornamento e confronto dei dati. Sarà importante considerare il numero
di righe presenti nella diverse tabelle da cui estrapolare i dati su cui effettuare il
confronto. In particolare, dato che nei grossi sistemi generalmente le entità di business avranno una cardinalità molto grande, è ragionevole pensare di utilizzare delle
strutture dati di ausilio dove caricare temporaneamente i dati dei sistemi da controllare. In queste strutture sarà possibile applicare le logiche di transcodifiche sui
determinati campi analizzati nello step precedente in modo da ottenere dei dati confrontabili. Ovviamente per realizzare queste politiche di confronto sarà necessario
riconoscere ed utilizzare quei campi che rappresentano in modo univoco una determinata entità. Sarà necessario definire delle chiavi primarie sulle tabelle temporanee
dove saranno memorizzati i dati ed utilizzare queste come chiave di confronto per
riconoscere l’assenza o meno del record tra i sistemi. A parità di chiave di confronto
invece si potranno valutare le differenze sugli altri campi.
Aiutandoci con un esempio per rappresentare meglio la situazione, possiamo immaginare che una volta prelevato i dati dell’entità contratti dai due sistemi da controllare
si utilizzerà come chiave di confronto il campo che conterrà il codice identificativo.
Questo potrà essere un id numerico, oppure potrà essere costituito da una serie di
campi che renderanno univoco il record all’interno della tabella. Adottando questo metodo per entrambe le tabelle sarà possibile ricercare un record dell’entità del
primo sistema all’interno della tabella del secondo sistema, evidenziando di conseguenza eventuali anomalie.
Le possibili anomalie che possiamo riscontrare sono:
• l’assenza del dato
• la differenza su uno o più campi
47
2 – Il Data Integrity in un’architettura EAI
Assenza del dato
Con assenza del dato possiamo intendere un record od un insieme di record
che sono presenti su un sistema, che possiamo chiamare A, e non presenti sull’altro
sistema che rinominiamo B, così come indicato negli schemi presenti nella figura 2.4.
Con il termine “record assente” intendiamo due tipologie:
• le informazioni si trovano sul sistema A e non su B;
• le informazioni si trovano sul sistema B e non su A.
Codice
Data
Cliente
Stato contatto
Codice
Data
Cliente
Stato contatto
1234
24/06/2009
ROSSI
Confermato
9999
24/06/2009
NERI
Sospeso
9999
24/06/2009
NERI
Sospeso
Il dato manca sul sistema B
Contratto
Contratto
Sistema A
Sistema B
Codice
Data
Cliente
Stato contatto
Codice
Data
Cliente
Stato contatto
1234
24/06/2009
ROSSI
Confermato
1234
24/06/2009
ROSSI
Confermato
9999
24/06/2009
NERI
Sospeso
Il dato manca sul sistema A
Contratto
Contratto
Sistema A
Sistema B
Figura 2.4. Data Integrity: esempi di dati assenti
La scelta delle tipologie di assenze da ricercare dipendono in senso stretto dalle
applicazioni di integrazione, quindi, sarà importante conoscere quali sono i dati che
vengono aggiornati. In particolare, bisognerà conoscere qual è il sistema che detiene
la versione del dato corretta, perché tale informazione verrà propagata alle altre
48
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
applicazioni. In questo modo saremo in grado di valutare se lo stesso dato presente
sugli altri sistemi sarà da considerarsi corretto oppure no al fine del nostro controllo.
Inoltre, sarà necessario sapere se determinate categorie di record e di campi saranno
presenti su entrambi i sistemi. Tale caratteristica è importante perché il calcolo delle
assenze potrà essere fatto partendo dall’analisi dei dati presenti sul sistema A e non
su B o viceversa se necessario, oppure in entrambe le direzioni.
Da quanto appena descritto possiamo affermare che quando effettuiamo il controllo
di assenza sarà importante verificare l’introduzione o meno di filtri di selezione dei
dati da confrontare, altrimenti potremmo avere delle segnalazioni di assenza inesatte.
Questo serve per giustificare il fatto che non tutti i record presenti nelle tabelle
associate alle entità dovranno essere presi in considerazione. Si tratta di un aspetto
fondamentale nel processo di realizzazione di una soluzione di Data Integrity, in
quanto si dovranno selezionare e mettere a confronto solo i dati che per logiche di
business e per impostazioni dell’architettura EAI dovranno trovarsi su entrambi i
sistemi, eventualmente focalizzandosi solo su quelli assenti su un determinato sistema
oppure considerando le assenze su entrambi i sistemi.
Differenza su uno o più campi
Una differenza, o più differenze, sui campi di una entità le possiamo riscontrare
quando troviamo lo stesso record sui sistemi coinvolti nel confronto e troviamo dei
valori diversi sui campi che invece dovrebbero essere uguali. Nella figura figura 2.5
è riportato un esempio. In questo caso partendo da un sistema A troviamo, tramite
la sua chiave primaria univoca, il record sul sistema B ma andando a confrontare
i singoli valori riscontriamo delle informazioni diverse per almeno un campo, tra
quelli che rientrano nelle politiche di confronto. Siamo in una situazione in cui, per
qualche motivo da accertare, i dati non sono stati aggiornati correttamente sui vari
sistemi. Le cause che possono concorrere a questa tipologia di anomalia potrebbero
essere le seguenti:
• l’applicazione di integrazione che si occupa di aggiornamento dei dati non
funziona correttamente, potrebbe essere presente un errore nel mapping tra i
campi che deve aggiornare oppure si potrebbe riscontrare un baco nel codice
49
2 – Il Data Integrity in un’architettura EAI
Codice
Cliente
Stato contatto
Codice
Cliente
Stato contatto
1234
ROSSI
Confermato
123
ROSSI
Confermato
9999
BIANCHI
Confermato
9999
NERI
Confermato
Tabella contratto
Tabella contratto
Sistema A
Sistema B
In questo caso il record relativo al contratto con il codice 9999 è presente su entrambi i sistemi,
ma il campo cliente risulta essere diverso. Questa situazione rappresenta un disallineamento
dovuto a differenza di dati tra i sistemi.
Codice
Cliente
Stato contatto
Codice
Cliente
Stato contatto
1234
ROSSI
Confermato
123
ROSSI
Confermato
9999
BIANCHI
Confermato
9999
Confermato
Tabella contratto
Tabella contratto
Sistema A
Sistema B
Anche la non presenza di un valore in un campo (valore blank o null), oggetto di controllo nella
procedura di Data Integrity, rappresenta un disallineamento dovuto a differenza sui dati tra i due
sistemi.
Figura 2.5. Data Integrity: esempi di dati differenti
50
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
e l’applicazione di integrazione termina senza effettuare tutte le operazioni
previste;
• si è verificato un errore occasionale sull’applicazione di integrazione e per un
certo periodo il dato rimarrà disallineato; in questo caso si potrebbe essere
verificato un problema di funzionamento dell’applicazione EAI dovuto ad errori
nella comunicazione. Potrebbero capitare problematiche di rete, ad esempio
la rete non funziona oppure una risorsa remota per un po’ di tempo non è
raggiungibile. In alternativa, potrebbe capitare di inviare delle informazioni
generate dal sistema mittente contenente dati “sporchi” e di conseguenza questi
dati sbagliati causeranno un disallineamento sul sistema che li riceverà;
• è intervenuta la modifica sul dato da parte di un operatore tramite l’utilizzo
dell’applicazione front-end e tale aggiornamento non è stato propagato agli altri sistemi. In questa situazione è necessario capire se un’operazione del genere
può avere un senso oppure è presente un problema nella logica applicativa che
permette di fatto la modifica di un dato su cui non avrebbe i diritti di farlo. Gli utenti, tramite l’applicazione che presenta bug, possono diventare altri
fonti di disallineamento sui dati. Inoltre, con un’applicazione che possiede dei
bug, possono essere cancellati dei dati senza la reale intenzione di farlo.
Memorizzare le anomalie
Nel processo di verifica di assenze e differenze queste anomalie dovranno essere
memorizzate in qualche struttura per essere facilmente interrogabili da eventuali
applicazioni per essere esposte a degli utenti. Per questo è ragionevole pensare
che tutte le anomalie che vengono riscontrate, passo dopo passo dagli algoritmi di
confronto, vengano memorizzate in tabelle opportunamente create. In questo modo
sarà possibile creare delle applicazioni le quali espongano in forma aggregata o di
dettaglio gli esiti dei confronti effettuati sui sistemi.
Per tenere traccia delle varie anomalie che si sono succedute sarà possibile prevedere
anche delle tabelle di storico degli esiti dei confronti. Queste tabelle potrebbero
ritornare utili anche per verificare eventuali correlazioni sulle anomalie riscontrate
51
2 – Il Data Integrity in un’architettura EAI
nell’ultima operazione di confronto e quindi capire se, ad esempio, un determinato
errore si presenta con una cadenza temporale specifica.
2.2.6
Valutare le performance
Le performance, intendendo i tempi per calcolare le anomalie, rappresentano
un aspetto molto delicato, in quanto i caricamenti dei dati e i relativi algoritmi di
confronto devono essere il più possibile veloci in proporzione alle dimensioni delle
tabelle che contengono gli attributi associati alle entità.
Non avrebbe senso che un controllo su una entità contratti ci mettesse qualche giorno per restituire dei risultati, in quanto coprirebbe un arco temporale troppo lungo
e le basi dati non sarebbero le stesse rispetto al momento di partenza del controllo.
Questi algoritmi di caricamento devono essere il più possibile veloci prediligendo
eventuali funzionalità di caricamento e confronto da svolgere in parallelo per massimizzare le performance e ridurre i tempi di attesa.
Prima di implementare tutte le politiche di confronto per tutti i sistemi risulta utile
scegliere una coppia di sistemi abbastanza significativi come dimensioni per progettare gli algoritmi di confronto e verificarne i tempi di risposta. In questo modo si
partirebbe con un confronto su un sotto insieme di entità al fine di utilizzarlo come
“progetto pilota” e coglierne eventuali criticità, pensando a come ottenere prestazioni migliori e come sarebbe possibile rivedere l’algoritmo in termini di velocità di
esecuzione.
La fase di valutazione di performance è un momento molto importante per il reale
utilizzo di una procedura di Data Integrity in un sistema di integrazione. Se l’applicazione fosse troppo lenta per fornire i risultati sarebbe ragionevole pensare che
alla fine tale procedura non verrebbe utilizzata proprio a causa di questo difetto. È
buona norma, quindi, testare se l’approccio implementativo di un singolo algoritmo fornisce risultati accettabili in termini di prestazioni. Ovviamente è importante
considerare anche l’affidabilità in quanto l’algoritmo deve produrre segnalazioni di
anomalie corrette.
In definitiva un’applicazione di Data Integrity deve essere costituita da un sistema di
52
2.2 – Fasi per la realizzazione di un’applicazione di Data Integrity
controllo veloce ed affidabile, altrimenti tutti gli sforzi fatti per la sua realizzazione
potrebbero risultare vani.
2.2.7
Visualizzare i risultati
Tutte le anomalie riscontrate nei processi di controllo devono essere memorizzate in qualche struttura. Le anomalie rilevate devono essere organizzate in modo
tale da essere semplici da consultare. L’obiettivo è di potere creare dell’applicazioni
per l’esposizione dei risultati, in forma di riepilogo e di dettaglio, ed eventualmente
integrare degli strumenti che permettano funzionalità di riallineamento a partire da
un elenco di anomalie.
Nella fase di studio per la visualizzazione dei risultati sarà possibile pensare di creare
dei report per visualizzare delle informazioni di riepilogo. Questi report potranno
essere utili per capire eventuali errori cronici.
Inoltre, sarà possibile creare delle applicazioni specifiche le quali permetteranno l’interrogazione dell’elenco dei disallineamenti sui dati e si potranno creare delle interfacce grafiche per esporre questi risultati agli utenti. Si potrà pensare di visualizzare
i dettagli delle sole assenze, differenze oppure tutte insieme. Si potranno inserire
delle funzioni di ricerca per verificare se un determinato record risulta disallineato
su qualche sistema, ecc.
Sulle applicazioni di visualizzazione degli esiti sarà possibile sviluppare delle procedure che consentano il recupero e l’allineamento dei dati per integrare, quindi, la
funzionalità di Data Integrity con l’infrastruttura delle applicazioni EAI già presenti.
2.2.8
Analizzare possibili processi di riallineamento
La possibilità anticipata nell’ultimo passo appena descritto viene ripresa in questa fase. In particolare con l’ausilio dell’elenco dei risultati delle anomalie sui dati
sarà necessario effettuare delle operazioni di recupero, in quanto quei dati risultati
disallineati potrebbero compromettere la stabilità delle applicazioni.
Per effettuare queste operazioni di riallineamento si potrebbero creare delle estrazioni dei dati disallineati e utilizzando questi elenchi si potrebbero richiamare le
53
2 – Il Data Integrity in un’architettura EAI
opportune applicazioni di integrazione EAI per effettuarne l’aggiornamento. Una
volta eseguite questi aggiornamenti rieseguendo il controllo con la procedura di Data Integrity si andrebbe a verificare il successo o meno dell’operazione eseguita.
È possibile pensare di includere dei processi di allineamento all’interno delle funzionalità di visualizzazione delle assenze e differenze sui dati. Ad esempio si potrebbe
creare un’applicazione che interrogando la base dati, contenente gli esiti dei confronti, permetta un’interazione con l’utente, tramite la quale sarà possibile decidere
quali sono i dati da riallineare e qual è il sistema che possiede il dato corretto. Dalle
varie impostazioni effettuate dall’utente sarà possibile fare partire delle operazioni
di recupero dati in real-time.
2.2.9
Monitoraggio e test continui
L’applicazione analizzata e creata a supporto del Data Integrity, molto probabilmente, dovrà essere avviata con strumenti di schedulazione automatici. Questi
strumenti consentiranno l’avvio e l’esecuzione in modo tale da impostare i controlli
di coerenza dati in periodi e momenti prestabiliti. Questo perché è molto probabile
che i controlli debbano essere eseguiti in orari notturni, che, di solito, sono i momenti in cui i sistemi hanno già fatto eseguire i loro processi EAI per passaggio dati
e quindi potenzialmente dovrebbero essere allineati. In più, il vantaggio di operare
di notte è dato dal fatto che ci sarà meno carico applicativo per via del presumibile
minor numero di utenti che saranno collegati ai sistemi.
Visto la necessità di un’automazione nell’esecuzione, le procedure di Data Integrity
devono essere costantemente tenute sotto controllo da sistemi di monitoraggio che
dovranno avvisare in caso di errore nell’esecuzione degli algoritmi di caricamento e
controllo dati. Questo è importante per essere certi del successo delle operazioni
compiute e quindi poter elaborare i dati prodotti dai confronti e visionarli insieme
ai responsabili dei vari sistemi, senza fornire informazioni errate.
La parte di monitoraggio servirà anche per il continuo test degli algoritmi di confronto. I test rappresentano un’attività che si muoverà di pari passo con l’esecuzione
delle procedure di Data Integrity. Infatti, le basi dati saranno in continuo aggiornamento, di conseguenza bisogna prevedere operazioni di modifica alle procedure di
54
2.3 – Vantaggi e svantaggi
confronto in caso di variazione delle logiche di business e di introduzioni di nuovi
dati che non verranno scambiati tra i sistemi. Si tratta di operazioni necessarie per
apportare eventuali correzioni sui filtri impostati nei controlli, aggiungendo o eliminando delle condizioni sui campi per considerare oppure no determinati record nelle
politiche di confronto. Il Data Integrity deve cercare di non fornire segnalazioni di
falsi positivi, in quanto un errore non presente ma segnalato dalla procedura sarebbe
un errore dell’algoritmo di confronto.
In definitiva, possiamo affermare che l’attività di monitoraggio e l’operazioni di test
saranno necessarie fino a quando il progetto di Data Integrity sarà mantenuto in
vita ed utilizzato.
2.3
Vantaggi e svantaggi
Progettare una soluzione che certifichi la qualità dei dati possiede dei pro e
contro che necessitano di essere analizzati prima di procedere nella realizzazione
vera e propria. L’obiettivo di questa sezione è di riassumere i possibili vantaggi e
svantaggi nell’utilizzo di un’applicazione di Data Integrity.
2.3.1
Vantaggi
Sicuramente uno dei vantaggi più importanti è di avere un controllo di qualità
del dato distribuito sui sistemi informativi. Questo aspetto rappresenta un requisito
fondamentale per fare funzionare le applicazioni correttamente. L’applicazione di
Data Integrity permetterà di avere il monitoraggio ed il controllo di congruenza dei
dati sui sistemi che continuamente si scambiano informazioni attraverso procedure
di integrazione. Potremmo ricevere in modo automatico degli avvisi, ad esempio
tramite mail, in caso di un’eccessiva presenza di anomalie nei sistemi. Così facendo
sarà possibile intervenire il più prontamente possibile su problematiche di integrazione EAI. Il Data Integrity potrà essere utilizzato come supporto alle applicazioni
di EAI in quanto fornirà degli strumenti per verificare il corretto passaggio dei dati
tra un sistema ed un altro.
55
2 – Il Data Integrity in un’architettura EAI
Inoltre, un’applicazione di Data Integrity potrà essere molto utile in caso di migrazioni di grosse quantità di dati da un sistema ad un altro nei casi in cui l’azienda
scelga di cambiare alcune sue applicazioni. In questi casi, i dati è probabile che
vengano spostati un po’ per volta. Saranno presenti le applicazioni, quelle vecchie
e quelle nuove, che dovranno convivere per un certo periodo. In una situazione
così delicata avere uno strumento per verificare la congruenza dei dati permetterà
un passaggio più facile da un sistema all’altro. Durante la fase di migrazione si
potrà verificare che il processo di spostamento dati avvenga correttamente, con la
possibilità di riscontrare eventuali errori.
2.3.2
Svantaggi
L’utilizzo di una procedura di Data Integrity può portare con sé alcuni svantaggi:
1. l’analisi ed implementazione di una soluzione di Data Integrity costituisce di
fatto un costo aggiuntivo oltre a quelli preventivati per la gestione dell’architettura EAI;
2. prevede una manutenzione costante delle procedure, dovuta alle situazioni in
cui è necessario rivedere le procedure di confronto quando cambiano regole
di business, transcodifica sui campi e vengono introdotti nuovi dati che non
dovranno essere propagati sugli altri sistemi;
3. in modo analogo a quanto può capitare per realizzare l’architettura EAI, nella
fase di analisi ed interazione con i diversi referenti dei sistemi informativi si
potrebbe avere lo stesso ostruzionismo ad ottenere le informazioni sulle regole
di business e su come reperire le informazioni direttamente dai database.
56
2.4 – Un caso reale: introduzione ad un progetto di Data Integrity
2.4
Un caso reale: introduzione ad un progetto di
Data Integrity
Dopo la descrizione della problematica dell’integrità dei dati (Data Integrity) in
un ambiente di integrazione, nel seguito dell’elaborato sarà illustrata un’implementazione reale di un progetto di Data Integrity, realizzato per effettuare il controllo
di specifici database di un’azienda del settore pubblicitario.
Questa azienda rappresenta uno dei principali operatori a livello mondiale nel settore della pubblicità multimediale. Uno dei suoi punti di forza è rappresentato dal
disporre di un patrimonio informativo e di una struttura informatica estremamente
sofisticata. L’insieme dei database e delle applicazioni sono strutturati per gestire
una quantità di dati estremamente significativa. Il raggiungimento di un sistema
informativo così sofisticato è stato reso possibile anche grazie all’implementazione
di un’infrastruttura EAI che, mediante un reengineering dei sistemi informatici, ha
consentito di realizzare un’architettura in grado di supportare e rispecchiare i processi di business. Per questo tipo di soluzioni è stato adottato il paradigma SOA
(Service Oriented Architecture) dove la logica di business è stata realizzata mediante
l’implementazione di servizi atomici, indipendenti dalla piattaforma e riutilizzabili
nell’intera azienda. Questo tipo di servizi ha consentito di riorganizzare in maniera efficiente sia le funzionalità legacy, sia i nuovi sviluppi, secondo una visione per
processi.
La fase che sta attraversando ora l’azienda è molto critica per quanto riguarda l’integrità del dato. È in atto da diversi mesi una migrazione, a passi successivi, verso
l’applicazione SAP per quanto concerne il sistema informativo CRM e amministrativo. Questo ha portato e sta portando a conseguenti modifiche su tutte le applicazioni
che si interfacciavano precedentemente al vecchio sistema. Il passaggio che durerà
ancora diversi mesi potrebbe introdurre un pericoloso rischio di disallineamento sui
dati che dovrà essere monitorato per evitare malfunzionamenti e disagi sulle applicazioni coinvolte. L’operazione di migrazione che sta avvenendo è complessa per via
dell’eterogeneità dei sistemi presenti. Tale complessità potrebbe portare al fallimento della nuova integrazione nel caso in cui l’interoperabilità non sia garantita dalla
57
2 – Il Data Integrity in un’architettura EAI
consistenza dei dati scambiati. In quest’ottica un sistema di Data Integrity ha la
possibilità di assumere un ruolo fondamentale, il quale potrà consentire di verificare
costantemente l’allineamento sui dati dei sistemi coinvolti nelle modifiche.
Per realizzare la soluzione di Data Integrity sono stati considerati due importanti fattori: l’ambiente complesso in cui è stato implementato e la grossa mole di dati
che i sistemi possiedono nei loro back-end. Per l’effettiva implementazione è stato
necessario adottare uno strumento di ETL (Execute, Transform, Load) adatto per
progetti che implicano una comunicazione tra database eterogenei e che riguardano
una notevole quantità di informazioni. Questo strumento è stato utilizzato per poter
accedere ai diversi database che dovevano essere monitorati e sono state utilizzate
delle procedure, scritte nel linguaggio PL/SQL1 di Oracle, per implementare gli algoritmi di aggiornamento e confronto dati. Utilizzando queste procedure PL/SQL
si è sfruttato il vantaggio di eseguire direttamente il codice sul server ed ottenere
buoni tempi di esecuzione.
I prossimi capitoli saranno dedicati a descrivere il software IBM Datastage ed ad
illustrare l’implementazione del progetto di Data Integrity in questa azienda di
pubblicità.
1
Nell’allegato A è riportato una breve introduzione al linguaggio PL/SQL di Oracle.
58
Capitolo 3
IBM Datastage: uno strumento di
elaborazione dati
3.1
Introduzione
IBM Datastage è uno strumento molto potente che permette il caricamento, la
trasformazione ed il trasferimento dei dati da un sistema sorgente ad uno destinatario, quindi si tratta di un software orientato all’ETL (Extraction, Trasformation,
Load). I dati che possono fare parte dei sistemi sorgenti e destinatari rientrano nelle
categorie dei file indicizzati, file sequenziali, code di messaggi e soprattutto, per il
nostro caso di studio, database relazionali.
Con Datastage è possibile creare differenti progetti e per ognuno di essi si potranno creare tante applicazioni che in questo contesto di lavoro vengono chiamate job.
Ciascun job avrà il compito di eseguire determinate funzioni di estrazioni di informazioni da un sistema sorgente, esempio da file Ascii o tabella Oracle, eseguire
eventuali trasformazioni sui dati estratti per poi scrivere i risultati su un sistema
destinatario. Ovviamente anche il sistema destinatario potrà essere un file, una tabella o comunque una struttura per ricevere dati. Le applicazioni Datastage, ovvero
i job, possono essere avviate in modalità real-time su richiesta specifica dell’utente,
oppure utilizzando dei particolari processi batch i quali permetteranno di attivarne
l’esecuzione in orari e giorni prestabiliti.
59
3 – IBM Datastage: uno strumento di elaborazione dati
La caratteristica importante e principale di Datastage è di riuscire a gestire spostamenti e modifiche dei valori di grosse quantità di dati in tempi molto rapidi. Per
essere il più possibile efficiente supporta le piattaforme hardware multiprocessore
che permettono di parallelizzare le operazioni di caricamento e trasformazione. Le
peculiarità appena descritte sono risultate fondamentali nella scelta di Datastage
come strumento da adottare nel nostro progetto di controllo dati.
Nel seguito saranno illustrati i componenti principali di Datastage. Ci focalizzeremo
maggiormente sugli strumenti specifici riguardanti le parti utilizzate nello sviluppo
del progetto Data Integrity che sarà descritto nel prossimo capitolo.
3.2
I componenti principali
Datastage è costituito da diversi componenti software le cui funzionalità operano
a livello differente: sono presenti applicazioni per la parte server ed altri per la parte
client.
La parte server include tutte le applicazioni di gestione dei servizi, dei repository e
delle area di lavoro per lo sviluppo dei progetti di Datastage. In questa categoria
abbiamo tre componenti specifici che svolgono i compiti appena descritti:
• il repository, che rappresenta l’area di memorizzazione contenente le informazioni di tutti i progetti Datastage presenti su uno specifico server;
• il server, che costituisce il “motore” di Datastage, di conseguenza è il componente che si occupa eseguire ed interpretare i job definiti nei vari progetti;
• il package installer, si tratta di un’interfaccia utente per installare package e
plug-in aggiuntivi.
Tra i componenti client troviamo tutte le applicazioni più operative, ovvero quelle
necessarie per la progettazione e la creazione delle applicazioni Datastage, includendo gli strumenti per la loro esecuzione e schedulazione.
L’obiettivo che si pone questo capitolo su Datastage è di introdurre brevemente i
componenti principali della parte client di Datastage nella quale sono inclusi tutti
60
3.2 – I componenti principali
gli strumenti che ho utilizzato per l’implementazione dell’applicazione di Data Integrity, necessaria per il controllo delle basi dati dell’azienda descritta nel caso di
studio.
Innanzitutto è necessario effettuare una distinzione tra i componenti client, dove
possiamo definire due categorie importanti:
• client per gli amministratori;
• client per gli sviluppatori.
Entrambe le tipologie di client sono dotate di un’interfaccia Desktop, quindi accessibile in modo semplice ed intuitivo.
Client per gli amministratori
Il client per gli amministratori è lo strumento che permette di gestire le aree
legate alle tematiche di sicurezza, alla gestione delle licenze, alla gestione delle operazioni di log e di scheduling di un singolo progetto di Datastage.
In questa categoria è presente un solo applicativo client: si tratta dell’applicazione
chiamata Datastage Administrator. Tramite l’Administrator si gestiscono e si mantengono i progetti sul server di Datastage. Questo client viene anche utilizzato per
impostare le proprietà dei progetti, per impostarne le variabili di sistema e per la
risoluzione di alcuni tipi di problemi. Per eseguire questi compiti lo strumento Administrator, attraverso la sua interfaccia grafica, permette di accedere al repository
dei progetti, su cui è possibile impostare i parametri dei diversi job, i privilegi dei
vari utenti che vi accedono e modificare particolari opzioni di schedulazione.
Client per gli sviluppatori
In questa tipologia di client sono presenti gli strumenti per creare, gestire e
progettare i job. Questi client includono anche tutte le procedure che vengono
utilizzate per le funzionalità di validazione, esecuzione, schedulazione e monitoring
dei job stessi.
I compiti svolti da questa categoria di client vengono ricoperti sostanzialmente da
tre applicazioni:
61
3 – IBM Datastage: uno strumento di elaborazione dati
1. il Designer, strumento che permette la progettazione e l’implementazione delle
applicazioni che abbiamo già chiamato job. Il Designer rappresenta il modulo
principale per gli sviluppatori, infatti al suo interno i job creati potranno
essere disegnati e poi compilati, diventando di fatto dei programmi eseguibili
e quindi avviabili. Questo client si presenta con un’interfaccia grafica che
permette di visualizzare in modo intuitivo gli oggetti inseribili in un job. Tali
oggetti rappresentano le operazioni da eseguire sui dati per le funzionalità di
estrazione, pulizia, trasformazione ed integrazione delle informazioni;
2. il Manager, che rappresenta un’interfaccia per accedere al repository di un
progetto Datastage consentendone l’esplorazione e la modifica degli oggetti
contenuti.
3. il Director, che è lo strumento che permette l’esecuzione in real-time e la
schedulazione dei job creati e compilati attraverso il Designer.
3.3
L’applicazione Designer
L’applicazione Designer consente, in modo intuitivo tramite un apposito pulsante, di creare un nuovo job. In alternativa alla creazione di uno nuovo job sarà
possibile sceglierne uno tra quelli già definiti per il progetto corrente, presente nella
finestra repository (riportata nella figura 3.1). Esistono differenti tipologie di job che
possiamo creare a seconda della versione di Datastage installata. Per quanto riguarda l’ambito del nostro progetto di Data Integrity è sufficiente illustrare le seguenti
categorie:
• i server job, sono le applicazioni che vengono eseguite sul server di Datastage e
consentono di eseguire connessioni, estrazioni e caricamento da e verso le basi
dati nei formati che abbiamo già definito in precedenza;
• le job sequence, sono le applicazioni che permettono di specificare una sequenza
di server job da eseguire e consentono di definire delle azioni da intraprendere
in base a risultati delle elaborazioni dei vari passi precedenti che compongono
una job sequence.
62
3.3 – L’applicazione Designer
Dopo la scelta di creazione di un job o il richiamo di uno già esistente, l’applicazione
Designer generalmente presenterà nella parte centrale la finestra di progettazione,
chiamata Diagram Window (visibile nella figura 3.1), dove sarà possibile inserire gli
oggetti all’interno dei server job o delle job sequence. In generale, oltre alla Diagram Window, saranno visualizzate altre due finestre molto importanti contenenti
rispettivamente l’elenco degli oggetti presenti nel repository del progetto e l’elenco
degli oggetti inseribili nei differenti job (anche queste due finestre sono presenti nella
figura 3.1). Attraverso la visualizzazione del contenuto del repository del progetto
corrente sarà possibile richiamare gli altri job già definiti, mentre con la finestra di
elenco oggetti saremo in grado di selezionare e trascinare nella Diagram Window gli
elementi da aggiungere nel job corrente.
Un’applicazione di Datastage, nell’esempio specifico un server job, consiste sostanzialmente in una serie di oggetti uniti tra loro attraverso degli elementi di collegamento chiamati link. L’insieme risultante descriverà il flusso di spostamento delle
informazioni da una base dati di input ad una di output. In generale, gli oggetti
inseribili in un server job possiedono un link di input e/o un link di output. Ciò non
esclude di avere anche degli oggetti specifici che possono ricevere più link di input
ed inviare informazioni su più link di output.
È importante ricordare che in base alla categoria del job correntemente visualizzato,
la finestra contenente l’elenco degli oggetti cambierà dinamicamente il suo contenuto,
visualizzando volta per volta solo gli oggetti che potranno essere inseriti nell’applicazione. Nello specifico possiamo inserire, per i server job, gli oggetti stage e link,
mentre per le job sequence avremo a disposizione le activity collegabili mediante i
link su cui sarà possibile definire dei trigger per attivare o meno tali activity.
63
3 – IBM Datastage: uno strumento di elaborazione dati
Repository
Diagram Window
Contiene la lista delle applicazioni
memorizzate in un progetto Datastage
E’ la finestra di progetto dove poter inserire
gli oggetti per comporre un’applicazione
Datastage
Lista oggetti
Contiene la lista degli oggetti che possono essere
inseriti in un’applicazione di Datastage
Figura 3.1. Datastage: screenshot Designer
64
3.4 – Server job
3.4
3.4.1
Server job
Stage
L’applicazione Designer offre differenti tipi di stage precostruiti da adoperare nei
server job. Questi elementi vengono di solito utilizzati per rappresentare basi di dati
sorgenti e destinatari. Sono presenti anche degli oggetti dedicati per le operazioni
specifiche di conversione di formato e contenuto sui dati.
Gli stage possono essere suddivisi in due tipologie: attivi o passivi. Quelli attivi
modellano il flusso delle informazioni fornendo dei meccanismi per operazioni di
passaggio, aggregazione, e conversione tra formati dei dati. Al contrario la tipologia passiva consente di accedere ai database o ai file per realizzare le operazioni di
estrazione o di scrittura dei dati. Da quanto detto ne consegue che sono gli stage
di tipo passivo che si occupano dell’effettiva lettura o scrittura di informazioni da o
verso una base dati. I riferimenti sui dettagli di connessione alla base dati e sulle effettive informazioni da prelevare od inserire sono definibili all’interno delle proprietà
del singolo stage specifico, il quale presenta una serie di opzioni configurabili dallo
sviluppatore.
Gli oggetti inseribili in un server job sono organizzati in differenti gruppi a seconda
delle funzioni che possiedono, in particolare abbiamo le seguenti categorie:
• Database
• File
• Plug-in
• Processing
• Real Time
Per concludere la breve descrizione dell’oggetto stage dei server job riporto questo dettaglio: nel progetto Data Integrity realizzato si è sempre utilizzato lo stage
appartenente al gruppo di Database, in particolare quello chiamato Oracle OCI (riferimento figura 3.2). Questa tipologia di stage ci ha permesso di collegarci ai diversi
65
3 – IBM Datastage: uno strumento di elaborazione dati
back-end di tipo Oracle presenti nell’azienda su cui abbiamo impostato le operazioni
di estrazione dati. Nello specifico per ogni entità da monitorare di ciascun sistema
abbiamo creato dei server job per poter implementare le operazioni di selezione,
estrazione e caricamento dati in opportune tabelle di appoggio.
Figura 3.2. Datastage: tipologie di stage Database
3.4.2
Link
I link rappresentano i collegamenti che permettono di unire i differenti stage
presenti in un server job. Servono, quindi, per specificare come i dati si dovranno
muovere nel momento in cui il server job sarà mandato in esecuzione. Un collegamento è rappresentato da un oggetto di tipo freccia che è costituito da un verso di
partenza ed uno di arrivo. Il verso di partenza rappresenta la parte chiamata output
link, mentre il verso di arrivo, ovvero la punta della freccia, rappresenta l’input link.
66
3.4 – Server job
Un link di input collegato ad uno stage di scrittura consentirà a quest’ultimo di
ricevere i dati prelevati da uno stage di lettura. Lo stage di scrittura ricevendo
questi dati, tramite il link di input, si occuperà di scriverli in determinate strutture
destinatarie. Al contrario, un output link si occuperà di inviare i dati letti tramite
un opportuno stage di selezione ed estrazione di informazioni, ovvero uno stage di
lettura. I dati selezionati da uno stage di lettura saranno inviati sullo specifico link
di output e tali informazioni prelevate saranno ricevute da uno stage di scrittura
attraverso un link di input, come precedentemente descritto.
Per gli stage di lettura e scrittura è importante realizzare la seguente operazione:
definire quali sono le colonne dei campi da considerare e decidere come questi devono essere mappati tra i due stage. In particolare, la definizione delle colonne sullo
stage di scrittura collegato all’input link permetterà di definire i campi che dovranno
essere scritti sulla base dati ricevente. Mentre la definizione delle colonne dello stage
di lettura collegato all’output link servirà per definire i campi che dovranno essere
letti dalla base dati mittente (riferimento figura 3.3).
I server job supportano due tipologie di input link:
• stream, si tratta di un link che rappresenta un flusso di dati, questo è il
principale tipo di link e viene utilizzato per gli stage sia di tipo attivo che
passivo;
• reference, si tratta di un link che viene utilizzato solo per gli stage di tipo attivo
per fornire informazioni su come i dati devono essere cambiati nel passaggio
da una base dati mittente ad una destinataria, hanno una funzione similare
alle tabelle di lookup.
Le due tipologie di link sono rappresentate nell’applicazione Designer in modo differente: gli stream link sono rappresentati da frecce continue, mentre i link di tipo
reference si riconoscono perché sono costituiti da delle frecce tratteggiate.
Riporto nella figura 3.3 un esempio di server job, in cui sono presenti due stage di
tipo Database (uno di lettura ed uno di scrittura) per estrazione ed inserimento dati
su database Oracle, collegati mediante uno stream link per definire la direzione degli
spostamenti dei dati.
67
3 – IBM Datastage: uno strumento di elaborazione dati
Stage di lettura
Stage di scrittura
con cui estrarre i dati dal
sistema sorgente
con cui scrivere i dati sul
sistema ricevente
Link (parte di output)
Link (parte di input)
dove transitano i dati
prelevati dallo stage di lettura
dove arrivano i dati letti dallo
stage di lettura e vengono
scritti sullo stage di scrittura
Figura 3.3. Datastage: screenshot server job
68
3.5 – Job sequence
3.5
Job sequence
Servono per specificare una sequenza di server job / job sequence da mandare in
esecuzione. Una sequenza può contenere informazioni di controllo, in particolare è
possibile prendere determinate decisioni se un job all’interno della sequenza è stato
eseguito con successo oppure no. Le decisioni che si possono prendere possono essere,
ad esempio, la continuazione nell’esecuzione del prossimo server job, l’invio di una
e-mail di segnalazione, il lancio di un’eccezione, ecc.
La progettazione di una sequence è molto simile alla creazione di un server job. La
differenza principale che si riscontra è la seguente: al posto degli stage abbiamo le
activity le quali sono collegate una con l’altra attraverso dei link. Sui link è possibile
definire delle condizioni di trigger, necessarie per attivare o meno una determinata
activity. Ogni activity possiede delle proprietà che possono essere testate come
espressioni in trigger per decidere se andare avanti nella sequenza o meno. Alle
activity possono essere passate, se necessario, dei parametri.
3.5.1
Activity
Le job sequence supportano le seguenti tipologie di activity:
• job, per specificare un server job od un’altra job sequence;
• routine, per specificare una routine;
• execCommand, per specificare un comando di sistema da eseguire;
• emailNotification, per inviare una mail con il protocollo SMTP;
• waitForFile, per attendere la presenza oppure l’assenza di un file in una cartella
(funziona da semaforo);
• run-activity-on-exception, da eseguire quando la sequence genera un’eccezione.
69
3 – IBM Datastage: uno strumento di elaborazione dati
3.5.2
Trigger
Il flusso di controllo della job sequence dipende da come sono interconnesse le
activity dai vari link e come sono state impostate le condizioni sui trigger. Sono
presenti tre tipologie di trigger:
• conditional, una condizione di trigger viene attivata per passare alla prossima
activity collegata se le condizioni impostate per il trigger sono state soddisfatte;
• unconditional, non viene controllata alcuna condizione e si passa alla prossima
activity, ovvero quella destinataria, appena termina l’activity precedente;
• otherwise, quest’ultima viene utilizzata come default quando una activity
sorgente possiede più output trigger, ma nessuno dei trigger condizionali è
scattato.
Nella figura figura 3.4 viene riportato un esempio di job sequence dove sono state evidenziate alcune activity e per una di queste, nello specifico l’activity
Controllo_Caricamenti, sono visibili le condizioni di trigger.
70
3.5 – Job sequence
Activity
Condizioni di trigger
Figura 3.4. Datastage: screenshot job sequence
71
3 – IBM Datastage: uno strumento di elaborazione dati
3.6
L’applicazione Manager
Nell’applicazione Manager abbiamo la visibilità di tutti gli oggetti facenti parte
del progetto a cui siamo collegati. In particolare sono visibili i job, le sequence, la
definizione delle tabelle di input / output e le eventuali routine create.
Questa applicazione permetterà di effettuare le classiche operazioni di gestione degli
oggetti all’interno dei progetti Datastage, come le operazioni di copia, di rinomina,
di eliminazione degli oggetti, ecc. Facendo riferimento al progetto di Data Integrity
implementato, l’applicativo Manager è stato utilizzato soprattutto per le operazioni
di backup di tutti gli oggetti del progetto su file in modo da salvaguardare il lavoro
fino a quel momento realizzato.
Il Manager, oltre alla gestione degli oggetti di un progetto, può ritornare utile per
specificare le proprietà sui server job e le job sequence. Tali proprietà possono essere definite anche all’interno dell’applicazione Designer ma attraverso l’utilizzo nel
Manager è possibile accedere in modo più rapido su queste proprietà per tutti gli
oggetti del progetto.
Per concludere, è utile ricordare che in questo specifico client è presente una procedura chiamata Usage Analysis con cui è possibile verificare le relazioni di un oggetto
con tutti gli altri presenti nel progetto. In particolare, tale strumento è risultato
molto comodo per capire, in modo rapido, se un determinato server job è stato
incluso o meno in una job sequence.
3.7
L’applicazione Director
Questa applicazione permette di avviare, manualmente o tramite l’utilizzo di
funzioni di schedulazione, i job e le sequence di un progetto di Datastage. Con il
client Director è possibile anche accedere e visionare le informazioni di tutti i log
registrati sulle diverse applicazioni.
La finestra del client Director consente di visualizzare l’elenco dei server job e delle
job sequence di uno specifico progetto Datastage. In particolare è possibile scegliere
tra tre tipologie di viste differenti:
72
3.7 – L’applicazione Director
• job status, che rappresenta la vista di default in cui vengono visualizzati gli
stati di tutti i job;
• job schedule, per visualizzare un riepilogo dei job su cui è stata impostata una
schedulazione automatica;
• job log, che rappresenta la visualizzazione del dettaglio del log di uno specifico
job selezionato.
Attraverso la vista job status è possibile, come abbiamo detto, visualizzare gli stati
dei vari job, in particolare quelli di nostro interesse sono i seguenti:
• compiled, il job è stato compilato ma non è stato più eseguito dopo la compilazione;
• not compiled, il job è ancora in fase di sviluppo e non è stato ancora compilato;
• running, il job è correntemente in esecuzione;
• finished, il job è terminato;
• finished (see log), il job è terminato ma ci sono dei messaggi di warning che
converebbe controllare;
• stopped, il job è stato fermato dall’utente;
• aborted, il job è andato in errore;
• has been reset, il job è stato reinizializzato, operazione da fare necessariamente
dopo una situazione di aborted.
Quindi, per concludere, attraverso l’utilizzo dell’applicazione Director abbiamo la
possibilità:
• di mandare in esecuzione un job che si trova in una stato avviabile come
compiled, finished o has been reset;
• di interrompere un job che si trova in stato di running;
73
3 – IBM Datastage: uno strumento di elaborazione dati
• di effettuare un’operazione di reset su un job che si trova in stato di stopped
o aborted.
Tutte le operazioni appena citate sono facilmente eseguibili attraverso dei pulsanti
intuitivi presenti nella barra degli strumenti del Director e visibili nella figura 3.5.
74
3.7 – L’applicazione Director
Pulsante di avvio
Pulsante di stop
Pulsante di reset
Stato del job
Figura 3.5. Datastage: screenshot Director
75
Capitolo 4
Realizzazione di un progetto di Data
Integrity per un’azienda pubblicitaria
Il progetto di Data Integrity è stato realizzato con l’obiettivo di mettere a disposizione dei meccanismi di verifica di allineamento sui dati presenti nei sistemi
informativi, ed in parte coinvolti nella migrazione verso SAP, all’interno dell’azienda pubblicitaria oggetto di questo caso di studio. Il progetto è stato realizzato
all’interno del gruppo di Reply che si occupa delle problematiche di integrazione
EAI per tale azienda. La collaborazione con il gruppo EAI è stata di fondamentale
importanza sia per la fase di analisi che di sviluppo. Infatti, lavorando a stretto contatto con chi si occupa direttamente dell’integrazione dei sistemi è stato possibile
definire in modo puntuale le entità da monitorare, risolvendo in modo rapido anche
le problematiche di accesso ai vari sistemi back-end.
La finalità principale di questa soluzione di Data Integrity è di fornire un supporto
per mantenere la congruenza dei dati distribuiti sui vari back-end, in modo tale che
le applicazioni front-end eroghino i servizi e le funzionalità previste senza errori o
disfunzioni. La segnalazione degli errori presenti sui dati distribuiti sui vari sistemi
deve essere utilizzata come ausilio per intervenire e prevedere delle opere di correzione sui diversi back-end, cercando di anticipare i possibili problemi che potrebbero
essere evidenziati dagli utenti delle applicazioni in caso di disallineamenti. Quindi, se
l’applicazione di Data Integrity sarà in grado di fornire, in modo tempestivo, queste
77
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
informazioni di anomalie sui dati sarà possibile evitare di dovere eseguire i recuperi
e le operazioni di riallineamento solo dopo le segnalazioni di malfunzionamento da
parte degli utenti, migliorando di conseguenza il servizio offerto dall’intera struttura
informativa. Inoltre, gli utenti avranno la sensazione di una migliore affidabilità dei
sistemi dovuta alla probabile diminuzione degli errori applicativi.
Un’applicazione di Data Integrity in una grossa azienda, dove generalmente sono presenti molti sistemi informativi, permette di salvaguardare, con strumenti di controllo
e segnalazione, la qualità e validità delle informazioni possedute. Più i dati sotto
monitoraggio risulteranno corretti maggiore sarà la funzionalità delle applicazioni.
4.1
I sistemi controllati
In questa sezione sono riportati i sistemi su cui vengono eseguite le operazioni di
verifica allineamento dei dati, giustificandone la presenza all’interno del complesso
sistema informativo aziendale:
• SAP è il sistema amministrativo preposto alla gestione del ciclo attivo/passivo (emissione richieste di acquisto, ordini, contratti), della contabilità, del
magazzino, dei dipendenti e delle strutture organizzative;
• SEM è il sistema che permette una produzione editoriale multimediale integrata e flessibile per tutte le esigenze pubblicitarie del cliente, indipendentemente
dal media utilizzato;
• TCC serve per la gestione particolare dei contratti cartacei: si tratta di un
sistema per garantire che oltre al contratto in formato digitale, sia inviata
dagli agenti all’azienda, anche la copia cartacea dello stesso;
• CLIC è il vecchio sistema amministrativo che sarà sostituito da SAP;
• CDB si tratta di un sistema CRM analitico che serve all’azienda per il suo
business particolare: contiene informazioni di dettaglio sui clienti per fornire
più valore a chi cerca le informazioni;
• DBLocal è un sistema utilizzato per la parte relativa ai call center.
78
4.1 – I sistemi controllati
Tutti i sistemi sopra riportati condividono specifiche entità, come contratti, annunci, anagrafiche, ecc., che devono essere mantenute allineate per garantire il funzionamento dell’architettura informativa. Ad esempio, l’entità relativa ai contratti è
presente sia sul sistema SAP che su SEM: sarà molto importante mantenerla correttamente allineata per non incorrere in errori delle applicazioni front-end che faranno
richiesta dei dati di un contratto presente su entrambi i sistemi.
Riporto nella Tabella 4.1 tutti i controlli sulle entità che sono stati implementati tra
i differenti back-end. È importante sottolineare che le verifiche eseguite sono state
realizzate tra coppie di sistemi, ovvero confrontando i dati, a livello di record, di un
back-end con un altro sulle entità condivise.
Coppia di sistemi
Entità condivise / controllate
SAP-SEM
Contratti, Annunci, Sigle
CLIC-SAP
Contratti, Annunci, Campagne pubblicitarie
SAP-TCC
Contratti, Annunci
SAP-DBLocal
Contratti, Annunci, Campagne pubblicitarie
CDB-SAP
Anagrafiche, Sedi
CLIC-SEM
Contratti, Annunci, Sigle
Tabella 4.1. Progetto Data Integrity: controlli suddivisi per coppia di sistemi / entità
La scelta dei sistemi da monitorare è stata presa in accordo tra i tecnici di
Reply che si occupano dell’architettura EAI di quest’azienda e le figure responsabili
dei vari sistemi informativi coinvolti in questo progetto di Data Integrity. Nell’elenco
riportato nella tabella 4.1 il sistema citato per primo, in generale, è quello detentore
del dato mentre il secondo è quello ricevente. Con la coppia SAP-SEM si intende
che SAP possiede i dati aggiornati dei contratti, degli annunci e delle sigle, mentre
SEM, tramite flussi di integrazione EAI, riceve gli aggiornamenti da SAP.
79
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
Nel seguito riporto, per ciascuna coppia di sistemi, le tipologie di controlli effettuati
sulle entità condivise. In particolare, il controllo di assenza è associato alla mancanza
del record su uno dei due sistemi, mentre per ricerca di disallineamenti dovuti a
differenza è inteso la presenza di valori diversi (considerando le opportune variazioni
per le transcodifiche) di almeno un campo di un record oggetto di controllo.
Entità
Contratti
Annunci
Sigle
Controllo assenza
Sì
Sì
No
Controllo differenza
Sì
Sì
Sì
Tabella 4.2. Tipologia di controlli entità per la coppia di sistemi SAP-SEM
Entità
Contratti
Annunci
Campagne pubblicitarie
Controllo assenza
Sì
Sì
Sì
Controllo differenza
Sì
Sì
No
Tabella 4.3. Tipologia di controlli entità per la coppia di sistemi CLIC-SAP
Entità
Contratti
Annunci
Controllo assenza
Sì
Sì
Controllo differenza
Sì
Sì
Tabella 4.4. Tipologia di controlli entità per la coppia di sistemi SAP-TCC
80
4.1 – I sistemi controllati
Entità
Contratti
Annunci
Campagne pubblicitarie
Controllo assenza
Sì
Sì
Sì
Controllo differenza
Sì
Sì
No
Tabella 4.5. Tipologia di controlli entità per la coppia di sistemi SAP-DBLocal
Entità
Anagrafiche
Sedi
Controllo assenza
Sì
Sì
Controllo differenza
Sì
Sì
Tabella 4.6. Tipologia di controlli entità per la coppia di sistemi CDB-SAP
Entità
Contratti
Annunci
Sigle
Controllo assenza
Sì
Sì
No
Controllo differenza
Sì
Sì
Sì
Tabella 4.7. Tipologia di controlli entità per la coppia di sistemi CLIC-SEM
81
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
4.2
Descrizione del progetto
Per la realizzazione del progetto è stato scelto di caricare periodicamente, in
modo massivo, tutte le basi dati, che si è deciso di tenere sotto controllo e di cui
abbiamo già parlato, su una struttura di appoggio, così come è mostrato nella figura
4.1. I dati estratti dai vari sistemi vengono memorizzati in un database Oracle,
che per standard aziendali è stato chiamato DBADI1DATAINT. Questo archivio
conterrà, in apposite tabelle di replica, le entità dei vari sistemi sui cui dovremo
controllare la coerenza delle informazioni. Infatti, proprio su queste tabelle, caricate
con applicazioni Datastage e script specifici, che avverranno tutte le operazioni di
aggiornamento e confronto di congruenza dei dati, così come è illustrato nella figura
4.2.
Per la realizzazione della parte che abbiamo appena descritto, ovvero il caricamento
e controllo dati, sono stati utilizzati i seguenti componenti:
• una base dati grande e affidabile per memorizzare le informazioni associate
a determinate entità prelevate dai sistemi, in particolare, come abbiamo già
detto, si utilizza un database Oracle su cui vengono effettuate quotidianamente
le operazioni di caricamento. Questo database, chiamato DBADI1DATAINT,
oltre a contenere le repliche delle tabelle dei diversi sistemi, conterrà le tabelle
degli esiti relativi ai vari confronti effettuati, includendo anche delle tabelle di
storico esiti per mantenere traccia dei disallineamenti risolti;
• stored procedure e funzioni create nel linguaggio PL/SQL. Queste procedure e
funzioni, tramite l’utilizzo dei cursori, sono state utilizzate per la realizzazione
degli algoritmi di aggiornamento dati sulle tabelle di replica e per l’implementazione degli algoritmi di confronto; tali stored procedure e funzioni sono
memorizzate in opportuni package presenti sul database DBADI1DATAINT;
• job sequence e server job di Datastage. Mediante il loro utilizzo sono stati
realizzati la maggiore parte dei connettori specifici per l’estrapolazione dei
dati dai vari sistemi da controllare. I job di Datastage permettono l’accesso al
back-end specifico di un sistema e tramite la definizione di opportune query di
82
4.2 – Descrizione del progetto
SAP
LOAD_TABELLE_SAP
LOAD_TABELLE_SEM
SEM
TCC
DB
di replica dei
sistemi esiti sui controlli
di allineamento
LOAD_TABELLE_CLC
LOAD_TABELLE_TCC
DBADI1DATAINT
CLIC
CDB
LOAD_TABELLE_CDB
LOAD_TABELLE_DBL
DBL
Job sequence Datastage per attivare le operazioni di caricamento delle varie
entità per ciascun sistema
SCRIPT SQL*Loader per effettuare il caricamento a partire da file di testo
Figura 4.1. Progetto Data Integrity: caricamento sistemi sul database centralizzato
83
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
Aggiornamento dati sulle
entità da controllare
(aggiornamento transcodifiche calcolo codice hash)
Procedure PL/SQL
2
1
AGGIORNA_DATI
Evento
esterno
DB
di replica dei
sistemi esiti sui controlli
di allineamento
CHECK_SYSA_SYSB
DBADI1DATAINT
3
Calcolo disallineamenti
ricerca record assenti e
differenti tra le entità controllate archiviazione delle anomalie
non più presenti
4
Procedure PL/SQL
ESEGUI_CONTROLLI
Job sequence Datastage per coordinare le operazioni di aggiornamento e
controllo allineamento dati su una coppia di sistemi (SYSA - SYSB)
Server job Datastage per attivazione delle procedure PL/SQL utilizzate per
l’aggiornamento dati ed il calcolo disallineamenti
Figura 4.2. Progetto Data Integrity: esecuzione degli algoritmi di aggiornamento - controllo dati
84
4.2 – Descrizione del progetto
selezione permettono di prelevare i soli dati di interesse che saranno caricati
giornalmente sulle tabelle di replica del database Oracle DBADI1DATAINT
(riferimento figura 4.1). I job di Datastage sono stati impiegati anche per
richiamare le procedure e funzioni PL/SQL utilizzate per l’aggiornamento ed
il confronto dei dati prelevati dai vari sistemi e memorizzati sulle tabelle di
replica del database DBADI1DATAINT (riferimento figura 4.2).
È necessario sottolineare che non tutti i dati, prelevati dai sistemi da controllare,
sono stati estratti tramite l’utilizzo dei server job di Datastage. Sono presenti delle
eccezioni, in particolare per due basi dati non Oracle (CLIC e DBLocal), per cui
sono state realizzate delle procedure di estrazione ad hoc. Sono state create delle
funzioni che consentono di effettuate degli scarichi massivi dei valori di interesse
dalle tabelle su file. Da questi file, tramite opportune procedure SQL*Loader1 , sono
state realizzate le operazioni di caricamento sul database DBADI1DATAINT.
È stato scelto di prelevare i dati dalle tabelle dei sistemi da monitorare, replicandoli su di un database centralizzato (DBADI1DATAINT), perché si è cercato
di minimizzare il più possibile il carico elaborativo sui sistemi possessori dei dati,
i quali sono già sollecitati dalle diverse applicazioni front-end e dalle operazioni di
integrazione. Per impattare il meno possibile su questi back-end è stato deciso di
impostare i caricamenti massivi sul database DBADI1DATAINT, sia tramite Datastage che con le procedure ad hoc, in orari notturni. Infatti, in quella fascia oraria
i back-end sono meno sollecitati dalle applicazioni front-end e non prevedono particolari applicazioni di integrazione. In tale periodo abbiamo il momento migliore
per prelevare delle “fotografie” dai sistemi su cui andare ad effettuare i controlli di
allineamento dati.
Lo scopo della fase di controllo dati è di generare dei risultati contenenti le anomalie
riscontrate, considerando i casi di assenza dei record di un’entità e di differenza su
uno o più campi dell’entità stessa. Visto che i caricamenti avvengono negli orari
notturni, le anomalie riscontrate potranno essere disponibili in tarda mattinata o al
1
Utilità per caricare velocemente dati memorizzati in file di testo su database Oracle.
85
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
più nel primo pomeriggio del giorno in cui è stato avviato il controllo di coerenza. In
questo modo, appena terminato il confronto ed ottenute le anomalie, sarà possibile
prendere eventuali contromisure in caso di presenza di particolari errori e differenze
sui dati. L’utilizzo di questi risultati servirà per effettuare le opportune segnalazioni
ai diretti responsabili dei sistemi informativi e decidere le possibili mosse correttive.
Per realizzare la parte di monitoraggio delle anomalie riscontrate, dagli algoritmi di
controllo, vengono utilizzati i seguenti strumenti:
1. dei report di riepilogo, dove i dati delle anomalie vengono estratti dalle tabelle
degli esiti ed aggregati in questi specifici report, creati in modo automatico,
tramite il richiamo di un servizio custom aziendale2 , dopo la fase di controllo
di allineamento per una coppia di sistemi;
2. un’applicazione WEB, che rappresenta l’interfaccia con cui sono sempre fruibili i disallineamenti sui dati dei sistemi controllati, memorizzati nel database
DBADI1DATAINT. Le informazioni visualizzabili tramite l’interfaccia WEB
sono dei riepiloghi aggregati e delle informazioni di dettaglio sui disallineamenti. Lo scopo dell’applicazione WEB è, quindi, di fornire una visualizzazione degli esiti dei controlli sui disallineamenti in modo sia riepilogativo che
dettagliato.
La figura 4.3 riporta i due strumenti appena descritti, ovvero un esempio di report
e l’applicazione WEB, utilizzati per il controllo dei risultati prodotti dalle verifiche
di allineamento dei dati.
2
Servizio a cui è possibile passare un template di report e genererà in output un documento
Excel.
86
4.2 – Descrizione del progetto
Generazione report sui
disallineamenti
memorizzati sul database
degli esiti
(DBADI1DATAINT)
WEB application per:
• esporre i risultati ottenuti dagli algoritmi di
confronto esiti per ogni coppia di sistemi
• scaricare i report sui disallineamenti
DB
di replica dei
sistemi esiti dei controlli
di allineamento
DBADI1DATAINT
Figura 4.3. Progetto Data Integrity: strumenti di monitoraggio
87
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
4.3
Il database delle repliche e degli esiti
Tabelle di replica
Per memorizzare le informazioni relative alle
entità dei sistemi da controllare. Ogni entità di
ciascun sistema è memorizzata in una tabella
apposita, in cui sono presenti i soli campi oggetto
di controllo allineamento.
Tabelle degli esiti
DB
di replica dei
sistemi esiti sui controlli
di allineamento
DBADI1DATAINT
Per memorizzare i disallineamenti riscontrati sulle
varie entità dei sistemi controllati. Per ogni coppia di
sistemi / entità è presente una tabella di esiti per
memorizzare i disallineamenti riscontrati
dall’algoritmo di confronto. In queste tabelle è
presente un campo specifico per riconoscere il tipo
anomalia (A=Assenza del record, D=Differenza in
almeno un campo)
Tabelle di storico
Per memorizzare i disallineamenti non più presenti.
Sono tabelle che tengono traccia delle anomalie che
sono state risolte e di conseguenza non più
riscontrate dall’algoritmo di controllo.
Package
Contiene le stored procedure e funzioni da
richiamare per svolgere le funzioni di aggiornamento
dati e calcolo disallineamenti
3 tipologie principali di stored procedure / funzioni:
-Aggiornamento dati per transcodifiche, prima di
calcolare il codice hash ed eseguire gli algoritmi di
confronto
-Calcolo hash utilizzato per il controllo differenze
-Calcolo disallineamenti
Figura 4.4. Progetto Data Integrity: database delle repliche e degli esiti
88
4.3 – Il database delle repliche e degli esiti
Come è illustrato nella figura 4.4 il database Oracle DBADI1DATAINT, utilizzato come parte di repository dell’applicazione di Data Integrity, è stato realizzato
con lo scopo di:
• ospitare le tabelle di replica delle entità presenti sui sistemi che sono oggetto
di controllo;
• ospitare le tabelle contenenti i risultati dei controlli di allineamento dati, ovvero quelle contenenti gli esiti relativi alle verifiche effettuate sui dati prelevati
dai diversi sistemi;
• ospitare le tabelle di storico esiti per memorizzare le anomalie che risultano
essere state risolte e che possiamo definire chiuse.
In aggiunta alle tabelle appena descritte, questo database contiene anche i package
Oracle dove sono presenti le stored procedure e le funzioni PL/SQL utilizzate per
le operazioni di aggiornamento e controllo allineamento dei dati prelevati dai vari
sistemi.
Le tabelle di replica possiedono tutti i campi necessari per memorizzare i record
prelevati dalle basi dati sorgenti che saranno oggetto di confronto. Per questo motivo
i campi all’interno delle tabelle di replica sono stati creati seguendo, in linea generale,
la stessa struttura, per quanto riguarda il tipo e la dimensione del campo, del dato
originale presente sul sistema di partenza.
Per quanto riguarda le tabelle predisposte alla memorizzazione degli esiti queste
sono state progettate per memorizzare le anomalie rilevate di un’entità tra due
sistemi. Ad esempio, il controllo di coerenza delle informazioni dei contratti tra il
sistema SAP e SEM ha una tabella specifica per memorizzare le anomalie riscontrate.
Nella tabella verranno memorizzati i dati assenti e differenti risultanti dal confronto
SAP-SEM. È presente anche una tabella, molto simile nelle caratteristiche a quella
degli esiti dei contratti tra SAP e SEM, che viene utilizzata per memorizzare le
informazioni di storico dove si manterranno le anomalie risolte.
In ogni tabella contenente gli esiti, considerando anche quelle di storico, sono presenti
89
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
dei campi che ci forniscono informazioni sull’anomalia riscontrata. In particolare
abbiamo:
• un campo specifico (chiamato [prefisso_tabella]3 _tipo_anom_cod) per determinare il tipo di anomalia rilevata; in particolare tale campo assumerà i
seguenti valori: ’A’ per un’anomalia dovuta all’assenza del dato e ’D’ per
l’anomalia dovuta alla differenza su uno o più campi oggetto di controllo;
• un campo per specificare il sistema possessore del dato (chiamato [prefisso_tabella]_SYS_A) da cui si prelevano i valori e si controllano con l’altro
sistema, quello che dovrebbe possedere l’informazione congruente;
• un campo per specificare il sistema (chiamato [prefisso_tabella]_SYS_B) che
dovrebbe avere lo stesso dato del sistema possessore;
• un campo (chiamato [prefisso_tabella]_stat_cod) per specificare se l’anomalia
è aperta, quindi ancora presente, o chiusa, ovvero non più presente;
I due campi relativi ai sistemi, SYS_A e SYS_B (omettendo la parte di prefisso
tabella), sono importanti perché consentono di capire dove si è riscontrata l’anomalia. Ad esempio, se sull’entità contratti tra SAP-SEM sono presenti le seguenti
informazioni:
• tipo_anom_cod=’A’, SYS_A =’SAP’, SYS_B =’SEM’, si tratta di un’anomalia assenza che rappresenta la mancanza di un contratto su SEM;
• tipo_anom_cod=’D’, SYS_A =’SAP’, SYS_B =’SEM’, si tratta di un’anomalia differenza che rappresenta la differenza su uno o più campi del contratto
memorizzato su SEM;
3
Tutti i campi delle tabelle del database DBADI1DATAINT devono iniziare con 4 caratteri fissi
associati al nome della tabella di appartenenza. È lo standard aziendale.
90
4.4 – Le procedure e funzioni PL/SQL
4.4
4.4.1
Le procedure e funzioni PL/SQL
Introduzione
Nel linguaggio PL/SQL è presente un meccanismo per elaborare i risultati delle
query orientato alle tuple. Per realizzare questo meccanismo vengono utilizzati i
cursori. Nello specifico, un cursore è una sorta di puntatore al risultato di una query
e questo viene impiegato per scorrere e leggere i valori dei campi associate alle righe
selezionate.
La presenza dei cursori all’interno del linguaggio PL/SQL mi ha permesso, in modo
agevole, di creare le procedure di aggiornamento e di controllo dei dati associate
alle entità da monitorare con l’applicazione di Data Integrity. Ad esempio, per
quanto riguarda l’aggiornamento dei dati, per la problematica delle transcodifiche,
viene utilizzato un cursore sulla tabella associata all’entità prelevata dal sistema di
partenza. Questo cursore permette di scorrere in modo rapido tutto l’insieme dei
dati memorizzati e per tutti i campi che necessitano di essere aggiornati è possibile
richiamare delle funzioni di transcodifica specifiche a seconda del tipo confronto.
Inoltre, utilizzando sempre i cursori, ho implementato con opportune procedure
gli algoritmi di confronto necessari per la ricerca di anomalie dovute all’assenza e
differenza sui dati. Questi algoritmi, creati nel linguaggio PL/SQL, sono richiamati
dai server job progettati e definiti nella parte di progetto di Datastage, che sarà
descritta più avanti.
4.4.2
Aggiornamento dati
I dati prelevati dai vari sistemi, come abbiamo già anticipato, non possono essere
controllati non appena terminata l’operazione di caricamento. Sui dati memorizzati
nelle tabelle di replica devono essere prima eseguite delle funzioni/procedure di aggiornamento che hanno compiti ben specifici: aggiornare le transcodifiche sui campi
e calcolare un codice hash per la rilevazione delle differenze.
91
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
Aggiornamento transcodifiche
Si tratta delle funzioni che si occupano di aggiornare i dati per quanto riguarda
le transcodifiche sui campi in modo che la semantica presente sulle informazioni
da confrontare sia congruente. L’obiettivo di questo tipo di funzioni è di fare in
modo che il valore di uno specifico campo tra i due sistemi da controllare sia lo
stesso, a meno ovviamente di errori in uno dei due. Le funzioni di transcodifica
dei campi sono state realizzate in base ai confronti sulle coppie dei sistemi. Ad
esempio, sul sistema SAP le entità contratti ed annunci devono essere confrontate
con i sistemi SEM, TCC, DBLocal e CLIC. Di conseguenza, sono presenti delle
funzioni di aggiornamento transcodifiche per i campi delle entità contratti ed annunci
di SAP per il confronto con SEM, altre funzioni per il confronto SAP-TCC, altre
ancora per il confronto SAP-DBLocal e così via.
Calcolo codice hash
Questa categoria di procedure, invece, si occupa di calcolare un codice hash
([prefisso_tabella]_hash_val_cod) relativo a i campi che rientrano nelle politiche
di confronto tra i sistemi. Attraverso l’utilizzo di questo accorgimento è stato possibile semplificare gli algoritmi di confronto, controllando nella fase di ricerca differenze
solo il codice hash calcolato anziché implementare un controllo campo per campo;
soluzione quest’ultima che avrebbe comportato la scrittura di un codice molto più
lungo ed avrebbe aumentato il rischio di introdurre bachi.
Il controllo delle anomalie sulle differenze avviene, quindi, sul codice hash calcolato,
la differenza di tale codice sulla stessa entità, per i due sistemi oggetto di controllo,
comporterà la memorizzazione di un record di disallineamento. Nella tabella degli
esiti per evidenziare la presenza di una differenza di due valori diversi sullo stesso
campo questi saranno concatenati e memorizzati all’interno della tabella degli esiti
separandoli con il carattere ’|’. Dalla scelta effettuata ne consegue che la presenza del carattere ’|’ all’interno dei campi delle tabelle degli esiti rappresenterà, in
modo immediato ed anche di facile ricerca, tramite l’utilizzo dell’operatore SQL LIKE(’%|%’), l’esistenza di una differenza tra i valori dei due sistemi confrontati.
Il funzionamento della procedura è abbastanza semplice: tramite l’utilizzo di un
92
4.4 – Le procedure e funzioni PL/SQL
cursore associato alla tabella contenente l’entità di un sistema, si leggeranno i vari
record e per ciascuno sarà effettuato il calcolo del codice hash, utilizzando come base
di input della funzione hash i campi da controllare. Inoltre sarà possibile chiamare
contestualmente alla funzione di hash anche le funzioni di transcodifica, descritte in
precedenza, sui campi coinvolti. Il vantaggio di operare in questo modo sta nel fatto
di condensare in un’unica procedura le operazioni di aggiornamento dati e calcolo
codice hash, risparmiando di fatto il tempo di elaborazione.
4.4.3
Controllo coerenza dati
I confronti vengono fatti a partire dal sistema possessore del dato verso quello
che dovrebbe avere la stessa informazione, ovvero verso il ricevente, il quale viene
aggiornato tramite applicazioni di integrazione EAI. Di conseguenza, si controllerà se
l’informazione, sotto forma di record, contenuta sul sistema possessore è presente o
meno sul ricevente. Nel caso in cui l’informazione venga trovata sul sistema ricevente
si verificherà se i campi, oggetto di controllo, saranno uguali oppure no. Nella tabella
degli esiti si memorizzeranno le assenze dei dati dati del sistema ricevente rispetto
a quello possessore e le differenze riscontrate sui dati presenti in entrambi.
Per fare quanto appena descritto, superata la fase di aggiornamento transcodifiche e
valorizzazioni dei codici hash sulle varie entità, sarà necessario avviare gli algoritmi
che hanno il compito di svolgere le funzioni di quadratura dei dati, inteso come
allineamento dati. Questi algoritmi si occupano di rilevare i disallineamenti di una
specifica entità (contratti, annunci, ecc) tra due sistemi per volta. In base alle regole
di business e di integrazione è stato definito il sistema possessore e ricevente dei dati
per ciascuna entità. Quindi, saranno effettuati i confronti tra i sistemi possessori
con i diversi riceventi, come abbiamo già illustrato in precedenza.
È importante precisare che non tutti i dati devono essere presenti su entrambi i
sistemi per una specifica entità, in quanto per regole di business esistenti certe
informazioni non devono arrivare o per via delle tempistiche di adozione di un sistema
rispetto ad un altro è possibile che certi dati non siano stati mai inviati. Ad esempio,
esistono contratti, aventi determinate caratteristiche, presenti sul sistema SAP che
non vengono passati a SEM per logiche di business. Quanto detto ha il seguente
93
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
effetto: nella fase di controllo di ricerca assenze si dovranno escludere dal confronto
tali record, altrimenti si forniranno dei falsi disallineamenti, che possiamo chiamare
falsi positivi. È importante definire in modo accurato quali sono i filtri da adottare
nella selezione dei record da confrontare per la ricerca delle assenze.
Una volta che si sono sistemate correttamente le logiche di confronto, i disallineamenti individuati vengono registrati periodicamente in queste tabelle di esiti,
create in modo specifico per coppia di sistemi ed entità. Contestualmente all’operazione di controllo, vengono eseguiti dei movimenti di storicizzazione delle anomalie
non più presenti rispetto alla verifica in corso.
Descrizione dell’algoritmo di confronto dati
In questo paragrafo si intende descrivere per passi le operazioni svolte dall’algoritmo di confronto. Per ogni entità controllata sulla coppia di sistemi è stata creata
una procedura apposita che implementa lo schema logico che sarà a breve illustrato.
L’algoritmo di confronto realizzato è costituito dai seguenti passi.
1. Spostamento dei dati degli esiti di un’entità nella relativa tabella di storico.
In questa fase sono previste le seguenti operazioni:
• un inserimento nella tabella di storico dei dati presenti in quella degli esiti
dell’entità da controllare;
• una cancellazione dei dati presenti nella tabella degli esiti dell’entità da controllare;
2. Selezione ed inserimento nella tabella degli esiti dei disallineamenti dovuti ad
assenza di record sull’entità, riscontrati nel confronto tra due sistemi.
94
4.4 – Le procedure e funzioni PL/SQL
In questa fase sono previste le seguenti operazioni:
• una selezione dei dati, con gli opportuni filtri, presenti sul sistema possessore
ed assenti sul sistema ricevente;
• i dati selezionati al passo precedente sono caricati in un cursore;
• si effettua lo scorrimento del cursore caricato e per ogni record recuperato
questo sarà inserito nella tabella degli esiti opportuna, indicando, oltre ai
dati dell’entità specifica, il sistema possessore, quello ricevente, stato esito
’APERTO’ e come tipo anomalia il valore ’A’;
3. Selezione ed inserimento nella tabella degli esiti dei disallineamenti dovuti a differenza sui campi di un record di un’entità, riscontrati nel confronto tra due sistemi.
In questa fase sono previste le seguenti operazioni:
• una selezione dei dati, con gli opportuni filtri, presenti sia sul sistema possessore che quello ricevente, dove però viene riscontrato un codice hash differente;
nella selezione dei campi si utilizza una funzione particolare che si aspetta
in input i due campi relativi alla stessa informazione prelevata dai sistemi e
ritorna un unico valore se i due di input sono uguali oppure li concatenata,
separandoli con il carattere ’|’, quando sono diversi;
• i dati selezionati al passo precedente sono caricati in un cursore;
• si effettua lo scorrimento del cursore caricato e per ogni record recuperato
questo sarà inserito nella tabella degli esiti opportuna, indicando, oltre ai dati
dell’entità, il sistema possessore, quello ricevente, stato esito ’APERTO’ e
come tipo anomalia il valore ’D’;
95
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
4. Eliminazione dalla tabella di storico dei disallineamenti ancora presenti nella
tabella degli esiti appena ripopolata con il nuovo confronto.
In questa fase è prevista la seguente operazione:
• una cancellazione dalla tabella dello storico dei disallineamenti che sono ancora
presenti all’interno della corrispondente tabella degli esiti, in modo tale da
lasciare nello storico solo i disallineamenti non più presenti per poterli definire
chiusi.
5. Aggiornamento del campo stato esito sullo storico.
In questa fase è prevista la seguente operazione:
• un aggiornamento del campo stato esito sulla tabella dello storico. Tutti i
record che sono rimasti nello storico con l’indicazione di disallineamento ’APERTO’, dopo l’operazione di cancellazione, saranno da considerare come disallineamenti chiusi, ovvero non più esistenti, perché non aventi più riscontro
nella tabella degli esiti.
Tutti gli algoritmi di confronto implementati nel progetto Data Integrity seguono,
in linea di massima, lo schema logico appena illustrato.
96
4.5 – Server job e job sequence Datastage
4.5
Server job e job sequence Datastage
SERVER
DATASTAGE
Progetto
DATA_INTEGRITY
LOAD
CHECK
CDB
CDB
SAP
SAP
SEM
SEM
TCC
TCC
CDB-SAP
CDB-SAP
CLC-SAP
CLC-SAP
CLC-SEM
CLC-SEM
SAP-DBL
SAP-DBL
SAP-SEM
SAP-SEM
SAP-TCC
SAP-TCC
SERVER JOB
SERVER JOB
JOB SEQUENCE
JOB SEQUENCE
Contiene tutti i server job e le
job sequence necessari per il
caricamento dei dati dei
sistemi sul database
DBADI1DATAINT
Contiene tutti i server job e le
job sequence necessari per
l’esecuzione delle procedure di
aggiornamento e controllo dati
sulle tabelle di replica presenti
nel database DBADI1DATAINT
Figura 4.5. Progetto Data Integrity: la parte di progetto sviluppata su Datastage
97
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
Per quanto riguarda la parte di caricamento e di avvio delle procedure in PL/SQL si utilizzano i server job di Datastage, i quali sono stati composti attraverso
strutture di controllo più complesse in differenti job sequence. I server job e le job
sequence sono state memorizzate all’interno del progetto di Datastage secondo la
struttura riportata nella figura 4.5.
In questo progetto Datastage possiamo definire tre tipologie differenti di server job,
come evidenziato nella figura 4.6. In particolare abbiamo:
1. i job di caricamento dei dati dai sistemi di partenza nelle tabelle di replica;
2. i job, che richiamando le stored procedure e le funzioni PL/SQL, avviano le
procedure di aggiornamento dati e calcolo hash sulle tabelle di replica prima
del confronto di allineamento;
3. i job, che richiamando le stored procedure e le funzioni PL/SQL, avviano le
procedure di confronto di allineamento dati, dopo l’operazione di aggiornamento.
98
4.5 – Server job e job sequence Datastage
Lettura dati dal
sistema sorgente
Link di input
Link di ouput
Stage Oracle
1. Scrittura sulla tabella
di replica dei dati letti
2. Memorizzazione log
Stage Oracle
Job di caricamento dei dati dai sistemi da monitorare
Link di input
Preparazione log
Link di ouput
Stage Oracle
1. Avvio stored procedure
per aggiornamento dati
2. Memorizzazione log
Stage Oracle
Job per l’esecuzione degli aggiornamenti sui dati
Link di input
Preparazione log
Link di ouput
Stage Oracle
1. Avvio stored procedure
per il confronto dati
2. Memorizzazione log
Stage Oracle
Job per l’avvio degli algoritmi di confronto
Figura 4.6. Progetto Data Integrity: tipologie job Datastage
99
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
Come già anticipato, i server job che appartengono ad una specifica operazione
sono stati collegati uno con l’altro attraverso l’utilizzo delle job sequence. Quest’ultime, ovvero le job sequence, hanno consentito di indicare l’ordine con cui
attivare i singoli server job in funzione del compito svolto. Procedendo in questo modo è più semplice richiamare le operazioni di caricamento, aggiornamento
e confronto. Ad esempio, per il caricamento dei dati delle tabelle appartenenti al
sistema SAP è sufficiente richiamare solo una job sequence, nello specifico chiamata
LOAD_TABELLE_SAP, che a sua volta richiamerà tutte le job sequence ed i server job che si occupano di effettuare il caricamento di una singola entità (contratti,
annunci, sigle ecc), come riportato nella figura 4.7.
4.5.1
I job di caricamento
I server job di caricamento sono costituiti da due stage Oracle collegati da uno
specifico link, come è possibile osservare nella parte 1 della figura 4.7. Uno stage
viene utilizzato per la selezione dei dati, mentre l’altro per la memorizzazione delle
informazioni estratte nelle tabelle di replica del database DBADI1DATAINT. Tramite lo stage di caricamento Oracle si effettua la selezione ed il prelievo dei dati dal
database di un sistema da controllare. I dati risultanti dalla selezione sul sistema
di partenza vengono trasferiti sul link. Sulla relativa parte di input di questo link
è collegato lo stage di scrittura dati per la memorizzazione delle informazioni nella
tabella di replica presente nel database DBADI1DATAINT. La tabella di replica
riceverà tutti i record prelevati dalla selezione del primo stage.
Terminata l’operazione di caricamento sarà scritto un record di “successo” in una
struttura di log. Questa struttura è sostanzialmente una tabella utilizzata per tenere
traccia delle varie operazioni eseguite nel processo di controllo. Anche la tabella di
log è memorizzata sul database DBADI1DATAINT.
I nomi dei server job che ricoprono il compito di caricamento sono stati definiti secondo lo standard seguente:
LOAD_[nome entità abbreviata]_[sistema]
ad esempio, LOAD_ANN_SAP è il nome del server job di caricamento degli annunci di SAP, come è anche riportato nella parte 1 della figura 4.7.
100
4.5 – Server job e job sequence Datastage
1
SERVER JOB LOAD_ANN_SAP
Stage che permette l’estrazione dei
dati degli annunci da SAP
Stage che permette la scrittura dei dati
estratti da SAP sulla tabella specifica
del database DBADI1DATAINT
2 JOB SEQUENCE
LOAD_CON_ANN_SIGLE_SAP
3 JOB SEQUENCE LOAD_TABELLE_SAP
Job sequence per il
caricamento delle entità
contratti – annunci – sigle di
SAP sul database
DBADI1DATAINT
Job sequence per il
caricamento dell’entità
campagne pubblicitarie
Job sequence per il
caricamento dell’entità
anagrafica
Figura 4.7. Progetto Data Integrity: server job / job sequence per il caricamento dati
101
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
I diversi server job di caricamento sono stati collegati e sono richiamabili utilizzando
delle job sequence che permettono di avviare i singoli server job in parallelo. Un
esempio di questa tipologia di job è riportata nella parte 2 della figura 4.7 che consente di caricare le entità dei contratti, annunci e sigle del sistema SAP.
Inoltre, sono state create delle job sequence particolari che ne richiamano altre. Il
loro compito è di richiamare tutti job (sia job sequence che server job) per attivare
le funzionalità di caricamento di uno specifico sistema. Queste job sequence sono
state chiamate secondo il seguente standard:
LOAD_TABELLE_[nome sistema]
La job sequence LOAD_TABELLE_SAP richiama tutti i job utilizzati per il caricamento del sistema SAP, come è mostrato nella parte 3 della figura 4.7. Tramite
una sola chiamata ad una job sequence siamo in grado di attivare i caricamenti di
tutte le entità da monitorare del sistema SAP.
4.5.2
I job per richiamare l’aggiornamento dei dati
In questa categoria sono presenti i job incaricati di richiamare le stored procedure e funzioni per eseguire l’aggiornamento dei dati per le transcodifiche ed per il
calcolo del codice hash, prima dell’esecuzione degli algoritmi di confronto. In questa
fase si renderanno uguali le codifiche di campi e contestualmente saranno calcolati
i codici hash utilizzati come campi di confronto nella fase di verifica dei disallineamenti dovuti a differenze sui dati.
I server job di questa categoria sono costituiti da due stage Oracle in modo analogo
a quelli utilizzati per il caricamento. Nella figura 4.8 è riportato il server job per
il richiamo della stored procedure utilizzata per l’aggiornamento dati dell’entità annunci di SAP, prima di effettuare il confronto tra i sistemi SAP-SEM.
A differenza dei job di caricamento dati, lo stage che genera flussi dati sull’output
link metterà solo un record di log che sarà memorizzato dallo stage ricevente l’input
link. Lo stage Oracle ricevente scriverà il record nella opportuna tabella di log solo
se la specifica procedura PL/SQL di aggiornamento dati, configurata sullo stage
ricevente, avrà eseguito il suo compito correttamente senza restituire errori. In definitiva, tutte le stored procedure PL/SQL di aggiornamento dati sono richiamate
102
4.5 – Server job e job sequence Datastage
SERVER JOB AGGIORNA_ANN_SAP_PER_SAP_SEM_1
Carica log
Scrivi log
Definizione della stored procedure da richiamare all’interno delle proprietà dello stage
WRITE_TDI07_LOG (la stored procedure è memorizzata all’interno del database DBADI1DATAINT)
Figura 4.8. Progetto Data Integrity: server job per richiamare l’aggiornamento dei dati
dai relativi stage Oracle di scrittura log (come nell’esempio riportato in figura 4.8).
I server job per eseguire l’aggiornamento dei dati sono stati chiamati secondo il seguente standard:
AGGIORNA_[Entita]_[Sistema]_PER_[SYS_A]_[SYS_B]_1,
ad esempio il server job:
AGGIORNA_ANN_SAP_PER_SAP_SEM_1 serve per richiamare la stored procedure PL/SQL che si occupa di aggiornare i dati sulle transcodifiche e sul codice
hash per i campi dell’entità annunci di SAP relativi al confronto tra i sistemi SAP SEM. Dato che si tratta del confronto SAP-SEM è per questo motivo che è presente
nel nome del server job il suffisso “PER_SAP_SEM”.
103
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
4.5.3
I job per richiamare gli algoritmi di confronto
SERVER JOB CONTROLLA_ANN_SAP_SEM_2
Carica log
Scrivi log
Definizione della stored procedure da richiamare all’interno delle proprietà dello stage
WRITE_TDI07_LOG (la stored procedure è memorizzata all’interno del database DBADI1DATAINT)
Figura 4.9. Progetto Data Integrity: server job per richiamare il confronto
di un’entità tra due sistemi
In questa categoria appartengono i server job che richiamano le stored procedure PL/SQL incaricate di effettuare il calcolo delle anomalie sulle entità oggetto
di confronto. I job sono strutturati in maniera simile a quelli utilizzati per il caricamento e l’aggiornamento dei dati nelle tabelle di replica, come è possibile vedere
nella figura 4.9. Anche questi server job consentono la memorizzazione di un log per
tenere traccia dei risultati delle diverse operazioni.
I job appartenenti a questa categoria sono stati chiamati secondo il seguente standard:
CONTROLLA_[Entita]_[SYS_A]_[SYS_B]_2
ad esempio il server job:
104
4.6 – Interfaccia utente
CONTROLLA_ANN_SAP_SEM_2 serve per richiamare la stored procedure PL/SQL che si occupa di calcolare le anomalie sull’entità annunci tra il sistema SAP e
SEM (come riportato in figura 4.9).
Per richiamare in modo coordinato tutti i server job necessari per realizzare l’intera procedura di confronto tra due sistemi sono state impiegate delle job sequence
che permettono di sincronizzare prima tutte le rispettive operazioni di aggiornamento dei dati e poi, in seguito, di avviare quelle di confronto. Tali job sequence sono
predisposte a richiamare, in parallelo per ottimizzare i tempi, prima tutti i server
job di aggiornamento dei dati e poi, previa verifica di successo delle operazioni precedenti, di avviare tutti i server job che hanno il compito di attivare le procedure
di confronto su tutte le entità di una coppia di sistemi. Una volta terminate le
operazioni appena descritte, le job sequence permetteranno di inviare delle e-mail di
notifica del successo o dell’insuccesso delle operazioni di aggiornamento e controllo
dati.
Le job sequence appartenenti alla categoria appena descritta sono state chiamate
secondo il seguente standard:
CHECK_[SYS_A]_[SYS_B]
ad esempio la job sequence:
CHECK_SAP_SEM permette di avviare i controlli sulle entità contratti, annunci,
sigle tra i sistemi SAP e SEM.
4.6
Interfaccia utente
L’interfaccia utente è stata realizzata con lo scopo di fornire delle viste specifiche
sulle tabelle del database DBADI1DATAINT contenenti i risultati dei controlli di
disallineamento sui vari sistemi/entità. Per rendere l’applicazione facilmente fruibile
è stata realizzata come una interfaccia WEB con cui è possibile interrogare le basi
dati degli esiti e visualizzare rapidamente l’elenco dei disallineamenti suddivisi per
sistema / entità. Tale interfaccia è costituita da un menù con cui selezionare il
sistema di cui richiedere gli esiti (parte 1 della figura 4.10). Per il sistema selezionato
sarà visualizzato l’insieme delle entità che vengono monitorate e di cui disponiamo
105
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
gli esiti (parte 2 della figura 4.10). Nella pagina di visualizzazione delle entità per
sistema sarà possibile scaricare dei report contenenti i dati aggregati e di dettaglio
sull’ultimo controllo effettuato (parte 2 della figura 4.10 - pulsante “download”). Per
ogni entità controllata saranno riportate anche le informazioni relative al numero
di disallineamenti, suddividendo per assenze e differenze (parte 2 della figura 4.10).
Sempre dalla pagina di visualizzazione entità per sistema, sarà possibile accedere ad
una pagina di dettaglio (riportate nella parte 3 della figura 4.10) per vedere tutte
le anomalie visualizzando un determinato numero di esiti per ogni pagina risultato,
evitando liste dati troppo lunghe, che potrebbero influenzare i tempi di risposta
della pagina WEB stessa.
106
4.6 – Interfaccia utente
1
2
3
Figura 4.10. Progetto Data Integrity: applicazione WEB per la visualizzazione degli esiti
107
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
4.7
Generazione report
I report sono creati nel formato XML contenente i tag di un file XLS, quindi
sono stati realizzati per essere aperti con un programma di elaborazione di fogli di
calcolo come Microsoft Excel. I report contengono delle informazioni di riepilogo
sui dati degli esiti associate a tutte le entità di una coppia di sistemi confrontati:
vengono creati i report per i confronti SAP-SEM, SAP-TCC, CDB-SAP, ecc. In
ognuno di essi saranno presenti i riepiloghi di tutte le entità confrontate (contratti,
annunci, ecc). Per ogni riepilogo saranno indicate le informazioni numeriche sui disallineamenti dovute alle assenze e alle differenze. Per i disallineamenti dovuti alle
differenze verranno riportate i dati numerici relativi ai campi che hanno prodotto
queste anomalie durante la fase di confronto.
Nella figura 4.11 è riportato un esempio di report contenente i dati numerici dei
disallineamenti riscontrati dai controlli sui sistemi SAP-SEM. In questa visualizzazione avremo un riscontro numerico immediato sulle quantità dei disallineamenti
rilevati dall’ultima esecuzione dell’algoritmo. Tramite questi report si potrà decidere se operare o meno con interventi di urgenza per il riallineamento dei dati. In
alternativa, si potranno utilizzare tali informazioni per effettuare delle analisi più
precise per capire le cause di questi disallineamenti. In questi report, oltre ai dati
di riepilogo, sono riportati anche degli elenchi con i primi 10.000 record disallineati
per ciascuna entità controllata, suddividendo per disallineamenti dovuti ad assenza
e differenza.
108
4.7 – Generazione report
Figura 4.11. Progetto Data Integrity: esempio di report contenente gli esiti dei controlli
109
4 – Realizzazione di un progetto di Data Integrity per un’azienda pubblicitaria
4.8
Interazione con l’ambiente di schedulazione
Tutti i job di Datastage precedentemente descritti devono essere richiamati in
modo automatico per evitare di lasciare il compito di attivazione delle applicazione
all’utente. Per questo è stato necessario valutare come poter attivare in maniera
automatica questi job, sia di caricamento che di richiamo delle procedure PL/SQL.
Come abbiamo visto nel capitolo di introduzione a Datastage è presente il programma Director che permette di impostare l’avvio dei server job e delle job sequence in
orari prestabiliti. L’utilizzo di tale strumento poteva essere una soluzione, ma dato
che in questa azienda è presente un altro strumento di schedulazione automatica,
chiamato CA dSeries, si è preferito optare verso questa soluzione.
CA dSeries permette tramite una semplice interfaccia grafica, di impostare in modo
avanzato e flessibile la schedulazione, in date e orari precisi e configurabili, per avviare processi e programmi presenti su diverse macchine della rete, creando di fatto
una piattaforma di automatizzazione di processo. In più, questo schedulatore può
lavorare, senza problemi, su piattaforme diverse. In particolare può essere installato
su ambienti Unix/Linux, Windows, ecc. Quindi, i programmi e processi che necessitano di operazioni di schedulazione possono essere realizzati su piattaforme anche
molto differenti tra loro.
Ritornando al contesto del progetto descritto, per avviare i job di Datastage abbiamo utilizzato degli script Unix da far richiamare da questo schedulatore dSeries.
Gli script Unix hanno il compito di invocare gli specifici job direttamente sulla
macchina su cui è stato installato il server di Datastage. Inoltre, attraverso lo schedulatore dSeries è stato possibile prevedere l’attivazione di un programma custom
per la creazione dei report di riepilogo una volta terminate le operazioni di controllo
allineamento dati. Attraverso l’infrastruttura creata l’applicazione WEB avrà accesso sempre ai dati degli esiti aggiornati e permetterà di scaricare gli ultimi report
generati.
110
Capitolo 5
Valutazioni del progetto di Data
Integrity realizzato in azienda
5.1
Risultati ottenuti
Il progetto di Data Integrity che è stato realizzato permette, come ho illustrato
nel precedente capitolo, di effettuare il caricamento dei dati, prelevati dai vari sistemi, in tabelle di replica su cui vengono eseguiti i controlli di allineamento dati.
Una volta constatato le cardinalità relative alle tabelle da controllare presenti sui
sistemi, che risultano essere dell’ordine di milioni di record per ciascuna entità, sono
riuscito, con l’ausilio del gruppo EAI, ad impostare dei controlli quotidiani fino a tre
coppie di sistemi differenti. Per ogni coppia di sistemi vengono controllate le entità
condivise che abbiamo definito precedentemente. Nella tabella 5.1 sono riportati
i giorni in cui vengono eseguiti i controlli su queste coppie di sistemi. È possibile
osservare che in alcuni casi le operazioni di controllo allineamento vengono eseguite
ogni giorno, nello specifico questo è vero per i controlli SAP-SEM e CDB-SAP. Il
motivo è dovuto al fatto questi sistemi condividono dati critici per le finalità di produzione ed è molto importante avere un riscontro sulla quantità di disallineamenti
presenti e, di conseguenza, avere delle situazioni giornaliere sulla qualità dei dati
condivisi. Per gli altri sistemi, invece, è sufficiente avere una situazione settimanale
sui disallineamenti, perché meno critici dal punto di vista della produzione.
111
5 – Valutazioni del progetto di Data Integrity realizzato in azienda
SAP - SEM
Lunedì
X
Martedì
X
Mercoledì
X
Giovedì
X
Venerdì
X
CLIC - SEM
SAP - TCC
SAP - DBL
CLC - SAP
CDB - SAP
X
X
X
X
X
X
X
X
X
Figura 5.1. Progetto Data Integrity: calendario controlli
Per ricevere in modo immediato un riscontro sui controlli eseguiti, al termine delle
procedure di verifica allineamento sono richiamate delle funzioni di creazione report,
di cui abbiamo già parlato nel capitolo precedente, in cui vengono riportati i dati
numerici relativi all’assenze ed alle differenze rilevate sui dati. Questi report vengono mandati, in modo automatico, al gruppo EAI ed ai vari responsabili dei sistemi
coinvolti nelle operazioni di controllo. In questo modo è stato impostato un sistema
di avviso immediato: le persone che riceveranno questi report potranno verificare i
dati numerici relativi ai disallineamenti riscontrati ed in base ai confronti precedenti
potrà valutare l’aumento o la diminuzione di questi, decidendo eventualmente di
ricorrere ad operazioni correttive sui dati.
5.2
Riscontri numerici
I dati numerici relativi alle quantità di disallineamenti rilevati nei vari confronti
effettuati, come riportati negli esempi delle figure 5.1 e 5.2, hanno consentito di
112
5.2 – Riscontri numerici
prendere delle decisioni sia dal punto di vista di processo, modificando di fatto delle modalità di migrazione ed operando correttive sulle applicazioni di integrazione,
che dal punto di vista dei singoli dati, operando con delle procedure di riallineamento specifiche. I report generati dopo ogni confronto offrono costantemente una
visualizzazione dei disallineamenti:
• dal punto di vista aggregato, visualizzando numeriche relative alle quantità di
dati disallineati per assenza del dato e per differenza;
• dal punto di vista dettagliato, riportando i primi 10000 record disallineati per
problemi di assenza e differenza.
Le visualizzazioni aggregate sui disallineamenti permettono di avere una situazione
rapida di quali campi risultano essere maggiormente interessati dal problema delle
differenze. Allo stesso tempo, la visualizzazione dei dati di dettaglio permette di
avere il riferimento puntuale su un singolo record disallineato.
I dati dei confronti che vengono maggiormente utilizzati sono quelli relativi alle
verifiche di allineamento tra i sistemi SAP-SEM, CLIC-SEM, SAP-TCC e CDBSAP. I report contenenti questi dati disallineati hanno permesso di individuare delle
criticità e, in seguito, di rimuoverle nei flussi di integrazione.
Per quanto riguarda le procedure di riallineamento sono state adottate tre tipologie
di operazioni:
1. l’utilizzo di applicazioni, già esistenti, di integrazione, opportunamente mandate in esecuzione con parametri specifici, con l’intento di riprovare ad inviare
al sistema l’informazione che doveva essere già aggiornata, ma che per problemi
di integrazione non lo è stata.
2. interventi diretti sulla base dati per effettuare dei riallineamenti puntuali;
3. la creazione di applicazioni ad-hoc per le operazioni di ripristino; per alcuni
dati disallineati tra i sistemi SAP-TCC si è ricorso a questa tipologia, ovvero
sono stati creati dei nuovi flussi di integrazione per correggere i dati.
Nel seguito riporto le informazioni riguardanti alle anomalie più evidenti che sono
state corrette:
113
5 – Valutazioni del progetto di Data Integrity realizzato in azienda
• tramite i risultati dei confronti SAP-TCC e SAP-SEM sono stati recuperati
circa 20 mila record di dati assenti nei sistemi TCC e SEM;
• il confronto SAP-SEM sull’entità annunci ha permesso di scoprire un bug su
un’applicazione di integrazione esistente tra SAP e SEM. Questa applicazione
inviava un’informazione errata: nello specifico veniva passata la località in
cui era pubblicato l’annuncio, mentre il sistema ricevente aveva bisogno della
località in cui era stato venduto l’annuncio, di conseguenza una volta scoperta
l’anomalia si è operato un bug fixing sul processo di integrazione;
• sono stati riallineati migliaia di codici contratto presenti sul sistema SEM che
per problemi di integrazione non erano stati aggiornati;
• sono stati riallineati migliaia di codici categoria sugli annunci che risultavano
essere differenti tra i sistemi SAP-SEM;
• è stato scoperto un errore sull’applicazione front-end di SEM che, dopo un’operazione particolare di modifica dell’annuncio, perdeva il valore di un campo
relativo alla prenotazione annuncio, risultando, di conseguenza, disallineato
con il sistema SAP.
Allo stato attuale i controlli continuano ad essere eseguiti secondo il calendario
riportato nella tabella 5.1. Contestualmente a queste operazioni di controllo i report vengono generati di pari passo, creando di conseguenza un archivio storico dei
disallineamenti riscontrati nei vari giorni.
Inoltre, c’è un ultimo aspetto da considerare nella fase di analisi dei dati prodotti
dagli algoritmi: è ancora presente buon un numero di anomalie che l’azienda ha
deciso di non voler ripristinare per due motivi:
• sono relativi a dati troppo vecchi e non servono più per la parte di produzione;
• il costo di ripristino risulta essere troppo altro rispetto ai benefici che può
portare un’operazione di riallineamento.
114
5.2 – Riscontri numerici
Controllo SAP-SEM effettuato in data 18/06/2009
Entità contratti
# record
SAP
# record
SEM
4.181.433
4.217.407
Disallineamenti totali
74.373
Record assenti su SEM
Record differenti su SEM
70.771
3.602
Campi su cui è stata riscontrata la differenza
Codice interno SAP
Codice offerta
Entità annunci
# record
SAP
# record
SEM
3.106
497
9.911.643
9.636.913
Disallineamenti totali
329.708
Record assenti su SEM
Record differenti su SEM
189.935
139.773
Campi su cui è stata riscontrata la differenza
Prodotto
Tipo pubblicazione
Volume
Edizione
Localita
Categoria
Flag prenotazione
1
440
2.256
1.589
29.141
128.893
4.958
Figura 5.2. Progetto Data Integrity: riepiloghi controlli contratti - annunci SAP-SEM
115
5 – Valutazioni del progetto di Data Integrity realizzato in azienda
Controllo SAP-TCC effettuato in data 17/06/2009
Entità contratti
# record
SAP
# record
TCC
4.181.433
5.406.511
Disallineamenti totali
201.582
Record assenti su TCC
Record differenti su TCC
133.946
67.636
Campi su cui è stata riscontrata la differenza
Stato contratto
Entità annunci
# record
SAP
# record
TCC
67.636
9.911.643
13.151.216
Disallineamenti totali
207.383
Record assenti su TCC
Record differenti su TCC
207.333
50
Campi su cui è stata riscontrata la differenza
Prodotto
Tipo pubblicazione
36
28
Figura 5.3. Progetto Data Integrity: riepiloghi controlli contratti - annunci SAP-TCC
116
5.3 – Considerazioni finali
Le anomalie, che si è deciso di non ripristinare, sono rimaste negli archivi degli esiti
perché l’azienda vuole tenere traccia di tali disallineamenti. Di conseguenza, si dovranno modificare i report contenenti le informazioni numeriche sui disallineamenti,
evidenziando diversamente questa categoria di anomalie.
5.3
Considerazioni finali
Lo sviluppo dell’applicazione di Data Integrity, che è stata descritta in questo
caso di studio, ha richiesto molti sforzi di analisi ed il coinvolgimento di diverse persone responsabili dei sistemi informativi. È stato speso diverso tempo per decidere le
entità ed i suoi attributi da sottoporre al controllo di allineamento. Questo aspetto
è stato amplificato dal fatto che l’azienda sta effettuando una migrazione di uno dei
suoi sistemi più importanti, da un’applicazione custom (CLIC) verso una di tipo
package (ovvero SAP). Il passaggio verso SAP sta coinvolgendo tutte le applicazioni
che precedentemente si interfacciavano con il sistema vecchio, ovvero CLIC. In aggiunta ai problemi di controllo delle funzionalità EAI, si è creata l’esigenza di avere
la verifica di allineamento dei dati migrati tra i sistemi CLIC - SAP, considerando
tutti i problemi di conversione alle strutture del nuovo sistema adottato.
Un fattore, che ho dovuto tenere molto in considerazione nell’implementazione delle
procedure di caricamento e controllo, è relativo alle performance dell’applicazione
di Data Integrity. Questo strumento di controllo allineamento dati per essere effettivamente utilizzato deve produrre i risultati dei confronti in tempi ragionevoli. Se
così non fosse non sarebbe possibile prendere le opportune contromisure in caso di
un numero elevato di disallineamenti.
È stato compiuto uno sforzo importante per realizzare delle procedure di caricamento, aggiornamento e calcolo disallineamenti il più veloci possibili. Quanto detto è
fondamentale per via delle cardinalità notevoli presenti nelle tabelle dei sistemi da
controllare. Per rendere l’applicazione Data Integrity più efficiente sono state predisposte in parallelo, dove è stato possibile e compatibilmente con le potenzialità delle
macchine a disposizione, tutte le funzionalità di caricamento e controllo dei vari sistemi da monitorare. È stato scelto come momento di esecuzione delle operazioni di
117
5 – Valutazioni del progetto di Data Integrity realizzato in azienda
caricamento e confronto dati l’orario notturno. Infatti, nelle ore notturne abbiamo
il momento migliore per questo tipo di operazioni: i sistemi sono più scarichi dal
punto di vista computazionale e di conseguenza anche le macchine su cui verranno
eseguite le diverse operazioni saranno più veloci.
Nel capitolo precedente ho descritto che il caricamento dei dati, prelevati dai vari
sistemi da monitorare, avviene in modo massivo sul database centralizzato Oracle.
Questa scelta si è resa necessaria perché:
• non sono presenti su tutte le tabelle, dei sistemi da controllare, dei riferimenti espliciti alla data di ultima modifica del record, di conseguenza, senza
tale informazione non abbiamo un discriminante agevole per effettuare delle operazioni aggiornamento sulla tabella di replica, presente sul database
DBADI1DATAINT, associata ad un entità di un sistema da controllare;
• risulta essere un’operazione molto lunga individuare i record cancellati sul
sistema di produzione, per aggiornare in modo congruente le informazioni sulla
tabella di replica; sarebbe necessario scorrere tutto l’insieme dei record della
tabella di replica e verificare o meno la presenza sul sistema di produzione e
questo costituisce un’operazione molto lenta.
Considerati questi due aspetti, si è scelto di svuotare e caricare di continuo le tabelle di replica presenti sul database Oracle DBADI1DATAINT. Sono riuscito, come
già affermato in precedenza, a velocizzare le fasi di caricamento dei dati tramite
l’utilizzo di procedure eseguite, il più possibile, in parallelo. Tutte le entità dei sistemi coinvolti nel controllo di Data Integrity sono replicate sulle tabelle del database
DBADI1DATAINT in quattro ore al massimo. Considerato il caricamento massivo
dei dati ne consegue che le procedure di aggiornamento e confronto disallineamenti
effettueranno le loro operazioni sulla maggior parte dei dati presenti nelle tabelle di
replica: non possiamo limitarci ad un sottoinsieme, perché caricando i dati ogni volta
questi devono essere aggiornati, sia per le operazioni di transcodifica che per quelle relative al calcolo del codice hash. Ovviamente anche gli algoritmi di confronto
utilizzeranno come base di input tutti i dati caricati nelle tabelle di replica.
In una fase così concitata che sta attraversando questa azienda di pubblicità,
118
5.4 – Sviluppi futuri
avere uno strumento di controllo dati ha permesso ed attualmente permette ancora
di monitorare l’allineamento dei dati condivisi tra i sistemi. Posso affermare che lo
strumento di controllo viene utilizzato dal gruppo EAI a tutti gli effetti e, quindi,
sta raggiungendo lo scopo per cui è stato realizzato.
5.4
Sviluppi futuri
Considerato il periodo di tempo, nello specifico di sei mesi, che mi è stato concesso per l’analisi e lo sviluppo dell’applicazione Data Integrity, abbiamo deciso, con
l’ausilio del gruppo EAI di Reply, di focalizzarci sui sistemi che presentavano le criticità più urgenti, ovvero quelli coinvolti maggiormente dalla migrazione verso SAP.
Quanto detto non esclude il fatto di potere aggiungere altre procedure di controllo
su entità e sistemi differenti. Una volta deciso ed impostato un modello di procedimento questo è possibile ripeterlo anche per gli altri. In particolare, le operazioni
che sicuramente sono da svolgere in questo contesto di Data Integrity sono:
• il caricamento dei dati su una struttura di appoggio;
• l’aggiornamento per le rispettive transcodifiche in base al tipo di confronto;
• l’esecuzione degli algoritmi di confronto;
• l’esposizione dei risultati sui controlli di allineamento dati.
Per concludere il discorso sul progetto di Data Integrity, posso illustrare quali sono
i possibili sviluppi futuri, in particolare è possibile pensare di:
• aggiungere nuovi attributi da controllare sull’entità già monitorate;
• aggiungere nuove entità/sistemi da monitorare;
• aggiungere nuovi report sugli esiti, creando delle viste specifiche sulle tabelle
degli esiti, aggregando i dati diversamente;
• visualizzare, in modo differente, sui report e sull’applicazione WEB i dati che
l’azienda ha deciso di non correggere;
119
5 – Valutazioni del progetto di Data Integrity realizzato in azienda
• velocizzare maggiormente le funzionalità di caricamento, aggiornamento e controllo dati, aumentando la parallelizzazione delle procedure;
• per una questione di scalabilità, con l’aumentare del numero di sistemi / entità
da controllare, ed ottenere un miglioramento delle performance è possibile
suddividere l’archivio centralizzato in più sottoarchivi dove caricare le tabelle
di replica e degli esiti; in modo opportuno saranno da spostare anche le stored
procedure e funzioni PL/SQL che faranno riferimento a tali tabelle;
• integrare le funzionalità di ripristino dati e di riallineamento all’interno dell’interfaccia WEB già presente.
Quest’ultimo punto, ovvero le funzionalità di ripristino da inserire nell’interfaccia
WEB, permetterebbe di velocizzare il riallineamento dei dati sulle anomalie riscontrate. Con questa funzionalità aggiuntiva sarebbe possibile sistemare in tempo reale
i dati differenti, anziché ricorrere a flussi batch che di solito vengono lanciati la notte e sono time consuming, ovvero ci mettono molto tempo per completare la loro
esecuzione. Intervenendo in tempo reale, invece, sarebbe possibile risolvere alcune
segnalazioni di errore, dovute a problemi sui dati, provenienti dagli utenti dell’applicazioni. Si fornirebbe in questo modo un servizio di assistenza migliore e gli utenti
percepirebbero un incremento di affidabilità dei sistemi utilizzati, migliorando di fatto la qualità del sistema. Maggiore sarà la qualità dei dati condivisi, di conseguenza
ci saranno meno errori e potrà aumentare la produttività complessiva dell’azienda.
120
Conclusioni
Il problema dell’integrità dei dati distribuiti è un aspetto molto importante nelle
architetture di integrazione EAI ed un’applicazione di Data Integrity deve essere
considerata come un supporto per gestire questo problema. Un’applicazione di Data
Integrity permette, come ampiamente illustrato, di verificare il funzionamento del
sistema di integrazione partendo dal punto di vista dei dati, ovvero si occupa di
verificare l’allineamento delle informazioni distribuite e condivise tra i vari sistemi
della struttura informativa di un’azienda, fornendo degli strumenti per visualizzare
i disallineamenti riscontrati. In questo modo si potrà decidere tempestivamente le
eventuali contromisure in caso di disallineamenti che potrebbero rendere instabili le
funzionalità presenti nei sistemi e creare dei disservizi.
Il lavoro per mantenere il più possibile allineati i dati distribuiti rappresenta un
requisito fondamentale nello sviluppo di applicazioni di integrazione di sistemi. Infatti, se i dati condivisi fossero continuamente disallineati, il patrimonio informativo
legato alle informazioni memorizzate rischierebbe di essere compromesso seriamente.
In un contesto del genere, molto probabilmente, l’integrazione realizzata ricadrebbe
in un fallimento, causando danni economici a tutti gli attori coinvolti nel processo
di integrazione: dall’azienda su cui è stata realizzata l’integrazione a quelle di consulenza che hanno partecipato alla sua messa in funzione.
Quanto appena detto ci porta a dire che è molto importante tenere sotto controllo i
dati relativi alle entità di business condivise e che rappresentano gli “oggetti critici”
per un’azienda. L’obiettivo è di realizzare delle soluzioni di integrazione che possano
essere il più facilmente gestibili, mantenendo allineate tali informazioni distribuite
sui vari back-end di ciascun sistema. In questo contesto dobbiamo considerare i
121
Conclusioni
seguenti fattori:
• più sono complessi i sistemi informativi che condividono informazioni maggiore
è il rischio di avere dei disallineamenti sui dati;
• più i dati sono disallineati maggiore è la probabilità di avere errori o malfunzionamenti sulle applicazioni che vi accedono.
Per prevenire queste situazioni si potrebbe pensare di intervenire in due modi:
• rivedere le funzionalità di certi sistemi informativi, cercando di semplificare le
operazioni più critiche; in questo caso l’obiettivo da perseguire è di avere meno
sistemi da integrare, accorpando basi dati ed applicazioni;
• altrimenti, oltre allo sviluppo dell’integrazione sui sistemi presenti, prevedere
dei meccanismi automatici per valutare la qualità dei dati condivisi, ovvero
realizzare un’applicazione di Data Integrity.
La prima casistica, relativa ad una semplificazione delle procedure, è difficile da realizzare perché in molte situazioni reali rivedere le funzionalità delle applicazioni già
esistenti, riscrivendo dall’inizio o riutilizzando in parte codice esistente, rappresenta
di solito “l’ultima scelta” che i vari responsabili IT vogliono perseguire. Cambiare le
applicazioni, che funzionano e danno garanzia di affidabilità, generalmente è una responsabilità che nessuno vuole prendersi e costituisce un investimento a medio lungo
termine che non da certezza di successo, visto tutti i rischi legati all’implementazione
e test. Anche se in prospettiva si potrebbe optare per l’adozione di nuove soluzioni
e applicazioni, che sulla carta potrebbero dare maggiore vantaggi in termini di integrazione, il rischio di intraprendere a volte è troppo grande e ci si accontenta di
mettere in comunicazione, con strumenti di integrazione come le EAI, i sistemi che si
hanno a disposizione. Quindi, pochi investimenti nel cambiare le applicazioni, anche
quando obsolete, ma molti nel creare infrastrutture di comunicazione, cercando di
condividere informazioni tra sistemi anche molto diversi tra loro, come ad esempio
applicazioni mainframe con architettura .Net o Java.
Da quanto detto, la seconda ipotesi, ovvero utilizzare degli strumenti di controllo dati, potrebbe essere la strada da perseguire per verificare se le architetture di
122
Conclusioni
integrazione realizzate stanno funzionando o meno. Realizzare strumenti di controllo sui dati, di solito, non prevedono la modifica delle applicazioni già esistenti e
generalmente hanno un costo inferiore rispetto alle modifiche delle applicazioni dell’infrastruttura informativa. È possibile affermare che la verifica della correttezza
dei dati distribuiti sui sistemi rappresenta un fattore di successo per la soluzione di
integrazione adottata in un’azienda.
Una volta che si è deciso di implementare un’applicazione di Data Integrity è
necessario scegliere in che modo realizzarla. Una possibile domanda che ci si potrebbe porre è la seguente: ma quali sono le metodologie da utilizzare per realizzare
un’applicazione di Data Integrity? La risposta purtroppo non è immediata per via
dei seguenti problemi:
• dalle ricerche che ho effettuato per svolgere questa tesi ho constatato che non
esiste una bibliografia importante sull’argomento Data Integrity in un contesto di integrazione software e, quindi, non esistono standard specifici. Per
giustificare questo aspetto c’è da considerare che è difficile avere dei paradigmi
ben definiti per implementare dell’applicazioni di Data Integrity considerata
la varietà dei sistemi tra di loro molto differenti presenti nell’architettura informativa di un’azienda. Molto spesso è necessario una valutazione caso per
caso e risulta difficile proporre degli standard;
• le difficoltà, non indifferenti, nella creazione del processo di controllo considerate le notevoli cardinalità delle tabelle e la corretta definizione degli output
che deve restituirci un’applicazione di Data Integrity. Questo secondo aspetto
è molto importante e se viene analizzato bene può permetterci di sopperire
alla mancanza di standard.
Quindi, l’aspetto fondamentale nella realizzazione di applicazioni di Data Integrity
è di effettuare delle buone analisi coinvolgendo le figure responsabili dei vari sistemi
per avere più informazioni possibili. In questo modo si avranno dei riscontri immediati sulle ipotesi di implementazione e si potrà discutere costruttivamente per
decidere i controlli da fare, selezionando le entità e gli attributi più critici.
123
Conclusioni
Dalla esperienza personale che ho fatto posso affermare che il problema del Data
Integrity deve essere inteso come l’utilizzo di una serie di contromisure e di segnalazioni per avere delle garanzie di qualità dei dati in contesti eterogenei e complessi
dal punto di vista informativo. In queste realtà abbiamo di solito la presenza di
molti attori che da una parte rappresentano un punto di forza perché ci sono più
persone che collaborano e lavorano per un fine comune, ma dall’altro canto possono
rappresentare una situazione critica perché con l’aumentare del numero di persone
è probabile che aumentino anche le possibilità di avere errori nelle procedure. Infatti, quando ci sono tanti gruppi di persone che lavorano su un’architettura comune,
uno degli aspetti più difficili da affrontare è legato al corretto coordinamento degli
sviluppi e messa in produzione delle modifiche. Infatti, se un gruppo, che lavora
su una specifica applicazione, sviluppa delle modifiche che impattano sul sistema di
integrazione e queste non vengono comunicate per tempo agli altri gruppi, si correrà il rischio, portando in produzione tali modifiche, di creare malfunzionamenti
nelle applicazioni di integrazione. I sistemi potrebbero non funzionare, creando un
disservizio, ed i dati potrebbero non essere più allineati. Nel caso appena descritto
un’applicazione di Data Integrity fornirebbe una modalità per rilevare questi disallineamenti e ricorrere il prima possibile ad operazioni correttive.
Una soluzione di Data Integrity, implementata come applicazione di verifica sulla
qualità di integrazione, si pone l’obiettivo di aiutare ad individuare i disallineamenti
analizzando i dati. Se quest’ultimi saranno allineati tale situazione potrà rappresentare un sintomo di buon funzionamento complessivo dell’architettura di integrazione.
Al contrario, riscontrare degli errori sui dati farà pensare subito ad un possibile problema di integrazione o comunque evidenzierà una situazione non allineata che dovrà
essere presa in considerazione.
È importante sottolineare che un’applicazione di Data Integrity presumibilmente
potrà essere gestita dalle persone del gruppo di integrazione, le quali possiederanno già le conoscenze e competenze necessarie per sapere come intervenire e come
attivarsi in caso di problemi. In generale, riscontrando errori nei dati, dopo aver
effettuato le opportune analisi, si potrà pensare di attivare i meccanismi specifici di
aggiornamento per effettuare le cosiddette “operazioni di allineamento”. In seguito
124
Conclusioni
a queste operazioni di allineamento, sarà ragionevole verificarne il successo avviando nuovamente lo strumento di controllo di Data Integrity per aver evidenza della
buona riuscita dei meccanismi di ripristino.
125
Allegato A
Linguaggio PL/SQL
Introduzione
Lo scopo di questa sezione è di illustrare i principali costrutti specifici del linguaggio
PL/SQL utilizzati per la realizzazione delle procedure di aggiornamento dati e controllo presenti nel progetto di Data Integrity descritto nel caso di studio del quarto
capitolo. Non saranno trattate, in dettaglio, le istruzioni del linguaggio SQL base di
cui fanno parte le operazioni di SELECT, INSERT, UPDATE, DELETE, CREATE,
ecc, considerando che il lettore abbia già questa conoscenza. La mia intenzione, in
questa breve descrizione, è di focalizzarmi sulle peculiarità del PL/SQL rispetto alle
caratteristiche del linguaggio SQL base.
Il PL/SQL è un linguaggio procedurale, strutturato e a blocchi. Questo tipo di
linguaggio permette l’interrogazione delle basi dati Oracle con la possibilità di effettuare operazioni di manipolazione ed estrazione dei dati memorizzati.
L’unità minima che rappresenta il costrutto di base in PL/SQL è il block (blocco).
Il concetto di blocco può essere utilizzato dal programma per combinare secondo sequenze logiche i comandi SQL in unità. In un blocco si possono dichiarare
costanti e variabili e quest’ultime possono essere utilizzate per memorizzare i risultati di una query. Le istruzioni che possiamo ritrovare in un blocco PL/SQL sono
istruzioni SQL, strutture di controllo (loop), istruzioni di condizione (if-then-else),
manipolazione delle eccezioni (controllo errori) e chiamate ad altri blocchi PL/SQL.
127
Allegato A
I blocchi PL/SQL con cui è possibile creare procedure e funzioni possono, per
una questione di organizzazione, essere raggruppati in pacchetti denominati packages. Ciascuno di essi è costituito da una parte di interfaccia ed una parte di
implementazione.
Costrutti fondamentali
Declare-Begin-End
La scrittura del codice PL/SQL deve rispettare uno schema ben definito. Infatti
una procedura o una funzione deve seguire questa struttura:
• DECLARE, è opzionale, permette di indicare una sezione dove dichiarare e
definire le variabili, i cursori e le eccezioni dell’utente che saranno usate nel
blocco di codice.
• BEGIN serve per indicare l’inizio di un blocco di codice, da lì in poi seguiranno tutte le istruzioni PL/SQL della procedura o funzione, fino ad arrivare
all’istruzione END.
• EXCEPTION, è opzionale, specifica l’azione da intraprendere quando occorre
una particolare eccezione, ovvero cattura l’errore e ne permette la sua gestione.
• END; è l’istruzione per determinare la fine del blocco, bisogna notare che il
punto e virgola è obbligatorio.
Riassumendo una procedura o una funzione è costituita dal seguente schema:
1
declare
−− Blocco di dichiarazione (opzionale)
3
begin
−− Codice da eseguire
5
exception
−− Gestione eccezioni(opzionale)
7
end;
128
Allegato A
Riportiamo a titolo di esempio il codice PL/SQL per la parte dichiarativa di
alcune variabili e costanti.
1
declare
variabileIntera number(3);
3
variabileString varchar2(80) := ’STRINGA’;
costanteIntera constant number(3) := 1;
5
begin
...
7
end
Osservazioni sulle variabili:
• le variabili devono essere necessariamente dichiarate prima del loro utilizzo;
• alle variabili di tipo BOOLEAN possono essere assegnati solo i valori TRUE
e FALSE;
• %TYPE è un attributo particolare che può essere utilizzato per definire variabili il cui tipo è associato allo stesso di una colonna di una tabella presente
nel database;
• %ROWTYPE specifica un record adatto a memorizzare tutti i valori degli attributi di una riga di una tabella o risultato di una query. Ad esempio se nel database fosse presente la tabella PIPPO la dichiarazione PIPPO%ROWTYPE
servirebbe per specificare un record formattato per contenere tutti i campi di
tale tabella.
Dichiarazioni cursore
La dichiarazione di un cursore serve per specificare un insieme di righe che possono
appartenere ad una tabella oppure ad un risultato di una query attraverso un’operazione di select. In questo modo le righe estratte possono essere processate una ad
129
Allegato A
una, attraverso l’utilizzo dell’istruzione fetch.
Per dichiarare un cursore si può adoperare la seguente sintassi:
1
cursor <nome cursore> [(<lista parametri>)]
is
3
<istruzione di selezione>;
Il nome del cursore è associato al valore indicato nella posizione <nome cursore>.
Ad un cursore può essere passata una lista di parametri, questi saranno separati dal
carattere ’,’. Ciascun parametro dovrà essere passato secondo la sintassi:
1
<nome parametro> <tipo parametro>
I parametri che possono essere inviati al cursore sono di tipo char, varchar2,
number, date, boolean e tutti i corrispondenti sotto-tipi come integer, ecc. Questi
parametri servono per assegnare valori alle variabili che sono indicate nell’istruzione
select.
Elaborazioni cursore
Il cursore una volta dichiarato dovrà essere aperto prima di essere utilizzato. Quindi
è presente un’istruzione chiamata open, dove contestualmente al nome del cursore
da aprire sarà necessario specificare anche l’eventuale lista dei parametri da passare
in input.
1
open <nome cursore> [(<lista di parametri>)];
Una volta richiamata l’istruzione open l’operazione di select associata al cursore
sarà processata e il cursore stesso punterà alla prima riga selezionata. Per poter scorrere le righe seguenti si utilizzerà il comando fetch, il quale permetterà di proseguire
nell’operazione di estrazione delle singole righe restituite dall’istruzione select.
1
fetch <nome cursore> [(<lista di variabili>)];
Il comando fetch si occuperà di assegnare i valori degli attributi selezionati
dalla riga corrente alla lista di variabili definita dopo il nome del cursore (<nome
130
Allegato A
cursore>). Utilizzando il comando fetch il cursore avanzerà alla prima riga presente
nell’insieme del risultato dell’istruzione select dopo aver eseguito il comando open.
Bisogna prestare attenzione che le variabili definite nella lista (<lista di variabili>)
devono avere lo stesso tipo di dati rispetto ai valori delle righe selezionate. Una
volta che tutte le righe saranno state processate sarà necessario chiudere il cursore.
Per quest’operazione si adopererà il comando close, così il cursore sarà chiuso e
disabilitato:
1
close <nome cursore>;
Riportiamo un esempio per riepilogare le operazioni da eseguire per l’utilizzo di
un cursore:
1
declare
cursor cursore_di_esempio is select ∗ from TABELLA;
3
record_tabella TABELLA%ROWTYPE;
begin
5
open cursore_di_esempio ;
loop
7
fetch cursore_di_esempio into record_tabella;
exit when record_tabella%NOTFOUND;
9
...
<sequenza di istruzioni>
11
...
end loop;
13
close cursore_di_esempio;
...
15
end;
Il loop viene interrotto utilizzando la clausola exit:
1
exit when <condizione>
La condizione può essere un semplice paragone di valori oppure far riferimento
alla proprietà del cursore. Nel caso dell’esempio sopra riportato il ciclo continuerà
finché ci saranno righe da leggere attraverso il cursore.
131
Allegato A
Loop for
L’istruzione loop for viene utilizzata per semplificare l’utilizzo di un cursore:
1
for <nome record> in
<nome cursore> [(lista di parametri>)]
3
loop
...
5
<sequenza di istruzioni>
...
7
end loop;
In questo modo viene dichiarato implicitamente un record per memorizzare una
riga recuperata da un cursore e questa sarà accessibile utilizzando l’oggetto <nome
record>.
Attraverso l’istruzione loop for saranno eseguite:
• un’operazione di fetch per estrarre la riga ad ogni iterazione;
• un’operazione di open prima dell’ingresso nel ciclo;
• ed infine una close dopo la terminazione del ciclo.
Quando su un’iterazione non sarà recuperata alcuna riga il ciclo verrà terminato in
modo automatico senza utilizzare l’istruzione exit.
In alternativa al nome del cursore è possibile specificare una query di selezione direttamente, sostituendo il nome del cursore con l’istruzione SQL, perciò sarà possibile
scrivere:
1
for <nome record> in
(<istruzione select>)
3
loop
...
5
<sequenza di istruzioni>
...
7
end loop;
132
Allegato A
Nella situazione appena descritta il cursore non dovrà essere specificato prima
dell’ingresso del ciclo ma sarà definito nell’istruzione select.
Ad esempio, per definire velocemente un cursore che punti ad una tabella possiamo
scrivere:
1
for record_tabella in
(select ∗ from tabella)
3
loop
...
5
end loop;
Inoltre, sull’istruzione loop possiamo specificare il numero di iterazioni facendo uso
di due interi, uno per il limite inferiore ed uno per quello superiore. Quanto appena
descritto non è possibile ottenerlo con l’istruzione loop while perché il numero di
iterazioni è sconosciuto.
Quindi con il costrutto loop for possiamo scrivere:
1
for <nome record> in
<estremo inferiore>..<estremo superiore>
3
loop
...
5
<sequenza di istruzioni>
...
7
end loop;
While
Un costrutto loop while ha la seguente forma:
1
while <condizione> loop
...
3
<sequenza di istruzioni>;
...
5
end loop;
133
Allegato A
If-then-else
Per il controllo condizionale, PL/SQL offre il classico costrutto if-then-else nella
forma:
1
if <condizione> then
...
<sequenza di istruzioni>
3
...
5
[elsif] <condizione> then
...
<sequenza di istruzioni>
7
...
9
[else]
...
<sequenza di istruzioni>
11
...
13
end if;
Il comportamento è analogo alle istruzioni if-then-else dei linguaggi di programmazione classici.
Procedure e funzioni
Il linguaggio PL/SQL fornisce sofisticati costrutti di linguaggio per programmare
procedure e funzioni come blocchi PL/SQL separati. Questi possono essere richiamati da altri blocchi PL/SQL, altre funzioni e procedure, anche in questo caso in
modo del tutto analogo ai linguaggi di programmazione.
La sintassi per la definizione di una procedura è
134
Allegato A
1
create [or replace] procedure <nome procedura>
[(<lista di parametri>)]
3
is
[<dichiarazione di variabili>]
5
begin
<sequenza di istruzioni>
7
[exception <routine di gestione dell’eccezione>]
end [<nome procedura>];
La sintassi di una funzione è molto simile:
create [or replace] function <nome funzione>
2
[(<lista di parametri>)]
return <tipo di dati> is
4
...
La clausola opzionale “or replace” serve per ricreare la procedura o funzione.
Una procedura, o funzione, può essere cancellata utilizzando il comando:
drop procedure <nome procedura>
2
drop function <nome funzione>
Contrariamente ai blocchi PL/SQL anonimi1 , la clausola declare non può essere
usata nella definizione di procedure/funzioni.
Alle procedure e funzioni è possibile passare dei parametri. Ciascuno è specificato
come segue:
<nome parametro> [IN | OUT | IN OUT] <tipo di dato>
2
[{:= | DEFAULT} <espressione>]
La clausola opzionale IN, OUT, e IN OUT serve per specificare il modo con cui
utilizzare il parametro. Se non viene specificato nulla il default è IN.
• IN significa che al parametro si può fare riferimento all’interno del corpo della
procedura o funzione, ma non può essere modificato;
1
Blocchi di codice PL/SQL non inclusi in procedure e funzioni.
135
Allegato A
• OUT significa che un valore può essere assegnato al parametro nel corpo della
procedura o funzione, ma non si può fare riferimento al valore del parametro;
• IN OUT permette sia di far riferimento al parametro che l’assegnazione di
valori.
Come abbiamo visto le funzioni hanno la stessa struttura delle procedure, l’unica differenza sta nel fatto che le funzioni restituiscono un valore il cui tipo di dato
deve essere specificato.
Packages
Un package è costituito da una dichiarazione di package e da un corpo di package.
La dichiarazione del package definisce l’interfaccia che è visibile ai programmatori
di applicazione, e il corpo del package implementa la dichiarazione del package.
Gestione eccezioni
Un blocco PL/SQL può contenere istruzioni che specificano routines di gestione delle
eccezioni. Ogni errore o avviso durante l’esecuzione di un blocco PL/SQL causa una
eccezione. Si può distinguere tra due tipi di eccezioni: eccezioni definite dal sistema
ed eccezioni definite dall’utente (che devono essere dichiarate dall’utente nella parte
di dichiarazione di un blocco dove l’eccezione è utilizzata/implementata).
Il sistema definisce eccezioni che vengono automaticamente attivate quando i corrispondenti errori o avvisi vengono incontrati. Le eccezioni definite dall’utente, contrariamente, devono essere attivate esplicitamente in una sequenza di istruzioni utilizzando l’istruzione raise <nome eccezione>.
Alla fine di un blocco, dopo la parola chiave exception, le routines di gestione delle
eccezioni definite dall’utente vengono implementate. Un’implementazione di una
gestione eccezioni ha la forma seguente:
136
Allegato A
when <nome eccezione>
2
then <sequenza di istruzioni>;
I più comuni errori che possono avvenire durante l’esecuzione di programmi PL/SQL
sono gestiti dalle eccezioni di sistema.
Dopo una parola chiave when può essere specificata una lista di nomi di eccezioni
(implicitamente connesse attraverso l’operatore or). L’ultima clausola when presente
nella gestione dell’eccezioni può contenere il nome others, la quale rappresenterà la
routine di gestione delle eccezioni di default.
137
Glossario
Nell’elaborato sono stati utilizzati i seguenti acronimi.
API: Application Programming Interface, insieme di procedure disponibili al programmatore, raggruppate per formare degli strumenti specifici necessari alla risoluzione di un determinato compito.
CORBA: Common Object Request Broker Architecture, meccanismo software per
la gestione delle chiamate a procedura con oggetti di invocazione che risiedono in
uno stesso spazio degli indirizzi (applicazione) o in uno spazio degli indirizzi remoto
(stesso host o host remoti collegati in rete).
CRM: Customer Relationship Management, in ambito informatico, un’applicazione
CRM serve a tenersi in contatto con la clientela, memorizzando le informazioni in
appositi database e fornendo delle modalità per analizzare le interazioni con il cliente.
DCOM: Distributed Component Object Model, tecnologia informatica di Microsoft
che usa gli stessi paradigmi di CORBA.
ERP: Enterprise Resource Planning, sistema di gestione che integra i vari aspetti del
business e che comprende la pianificazione e realizzazione del prodotto, le vendite,
139
Glossario
gli acquisti, la gestione magazzino, ecc.
ETL: Extraction Trasformation Load, operazioni di estrazione (Extraction), trasformazione (Trasformation) e caricamento (Load) dei dati in un sistema di sintesi come
un Data Warehouse.
JDBC: Java DataBase Connectivity, si tratta di un connettore per database che
permette ad un programma scritto in Java di accedere a qualsiasi base dati.
ODBC: Open Database Connectivity, si tratta una API standard utilizzata per la
connessione ai database; si tratta di un’interfaccia indipendente dai linguaggi di
programmazione, dai sistemi di database e dai sistemi operativi.
ORB: Object Request Broker, parte di software middleware che permette ai programmatori di effettuare chiamate di programma tra computer differenti in una rete.
SAP: insieme di applicazioni ERP per integrare tutti gli aspetti del business, inclusa
la pianificazione, la realizzazione del prodotto, la logistica di magazzino, le gestione
delle vendite e degli acquisti.
SOA: Service Oriented Architecture, fornisce dei metodi per i sistemi di sviluppo e
di integrazione dove le funzionalità sono esposte come servizi richiamabili in modo
indipendente dal sistema operativo e linguaggio di programmazione utilizzato.
140
Bibliografia
[1] David Cronin Alan Cooper, Robert Reimann. About Face 3: The Essentials of
Interaction Design. John Wiley & Sons, 2007.
[2] Charles Dye. Oracle Distributed Systems. O’Reilly Media, Inc., 1999.
[3] David S. Linthicum.
Enterprise Application Integration.
Addison Wesley
Professional, 1999.
[4] Beth Gold-Bernstein; William Ruh. Enterprise Integration: The Essential Guide
to Integration Solutions. Addison Wesley Professional, 2004.
[5] Bill Pribyl Steven Feuerstein.
Oracle PL/SQL Programming, 4th Edition.
O’Reilly Media, Inc., 2005.
[6] AA. VV. IBM InfoSphere DataStage Data Flow and Job Design. IBM Redbooks,
2008.
141
Bibliografia
142
Sitografia
[1] Datastage portal. http://www.datastage.org/.
[2] Datastage tutorial and training.
http://etl-tools.info/en/datastage/
datastage_tutorial.htm.
[3] Pl/sql tutorial. http://plsql-tutorial.com/.
[4] Michael Farrell Jr Boris Lublinsky.
cembre 2002.
Top10 reasons why eai fails, Di-
http://www.sysedv.tu-berlin.de/intranet/kc-kb.nsf/
26e1753f5497bb0cc12569a50048ee1a/E5FD9F87ADB81A07C1256CA700515758/
$File/Top+10+Reasons+Why+EAI+Fails.pdf?OpenElement.
[5] Michael Crouch.
Enterprise application integration shaping the reality to-
day, Gennaio 2003.
http://www.mbconsulting-inc.com/Downloads/EAI%
20-%20Shaping%20the%20Reality%20Today.pdf.
[6] Julie Gable. Enterprise application integration, 2002. http://findarticles.
com/p/articles/mi_qa3937/is_200203/ai_n9019202.
[7] Florence Lin.
Enterprise application integration (eai) techniques, Mar-
zo 2005. http://www.cs.ucl.ac.uk/staff/ucacwxe/lectures/3C05-04-05/
EAI-Essay.pdf.
[8] David Lindqvist. Enterprise application integration – how & why?, Giugno 2005.
http://www.vxu.se/msi/forskn/exarb/2005/05088.pdf.
[9] Kedarinath Pulaparthi.
Eai best practices,
Gennaio 2007.
http:
//w3.miraclesoft.com/msws/msoft/downloads/Miracle%20EAI%
20BestPractices.doc.
[10] Gian Trotta. Dancing around eai ‘bear traps’, 2003. http://www.ebizq.net/
topics/int_sbp/features/3463.html.
143
Sitografia
[11] AA. VV.
Ittoolbox eai knowledge base.
http://it.toolbox.com/wiki/
index.php/EAI.
[12] AA. VV. Designer guide, Settembre 2002. http://www.scribd.com/doc/
209137/Data-Stage-Designer.
[13] AA. VV. Manager guide, Settembre 2002. http://www.scribd.com/doc/
209134/DataStage-Manager.
[14] Wikipedia. Enterprise application integration, 2008. http://en.wikipedia.
org/wiki/Enterprise_application_integration.
[15] Wikipedia. Customer relationship management, 2009. http://en.wikipedia.
org/wiki/Customer_relationship_management.
[16] Wikipedia. Enterprise resource planning, 2009. http://en.wikipedia.org/
wiki/Enterprise_resource_planning.
[17] Wikipedia. Object request broker, 2009. http://en.wikipedia.org/wiki/
Object_request_broker.
[18] Wikipedia. Service-oriented architecture, 2009. http://en.wikipedia.org/
wiki/Service-oriented_architecture.
144
Ringraziamenti
Un grazie a tutte le persone che sono state al mio fianco durante il percorso
universitario, in particolar modo ringrazio Stefania per il supporto nei momenti più
difficili.
Ovviamente ringrazio il relatore, prof. Fulvio Corno, per tutti i consigli forniti
durante la stesura della tesi.
Ringrazio l’azienda Blue Reply S.r.l., ed in particolar modo, Alessandro Ponte e
Federico Stentella per il supporto durante l’attività svolta.
145