Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l'ambiente SQL Server e .NET
1. UNIVERSIT DEGLI STUDI DI TRIESTE
FACOLT DI INGEGNERIA
Corso di laurea triennale in ingegneria informatica
Migrazione dei meccanismi di
workflow di un sistema informativo
assicurativo verso lambiente
SQL Server e .NET
Relatore: Laureando:
Prof. Leonardo Felician Donato Clun
2. Contesto:
Onlife 竪 una assicurazione vita venduta su internet,
proposta da L.A. Vita S.p.A., societ controllata al
100% da Allianz S.p.A.
Finalit:
Migrare e migliorare la componente software del
sistema informativo che esegue ed automatizza
parte del workflow aziendale.
3. Alcuni esempi di automatismi:
Operazioni periodiche sui dati
Generazione di documenti PDF (estratti conto,
ordini di pagamento, ... )
Automazione delle campagne di marketing
(generazione e invio di email personalizzate)
4. Obiettivi:
Riprodurre tutte le funzionalit del
vecchio software di automazione
Rispettare gli standard aziendali
Garantire un elevato livello di
servizio (alta disponibilit)
Avere margine di crescita futura
5. Rispettare i vincoli imposti dagli standard aziendali.
Strumenti utilizzati:
C#, .NET Framework 3.5,Visual Studio 2008
SQL Server 2005
Librerire dellarchitettura Allianz
NO Microsoft Office
NO Stampanti virtuali
6. Obiettivi:
Riprodurre tutte le funzionalit del
vecchio software di automazione
Rispettare gli standard aziendali
Garantire un alto livello di servizio
(alta disponibilit)
Avere margine di crescita futura
7. Problema: garantire alta disponibilit.
Stato del Istante in cui il servizio Istante in cui il servizio
servizio viene ripristinato cessa di funzionare
Funzionamento
Tempo di
Tempo tra due riparazione
malfunzionamenti
Riparazione
Tempo
MTBF
Disponibilit media =
MTBF + MTTR
8. Alta disponibilit: fattori chiave
Comportarsi ragionevolmente in caso di
situazioni impreviste (+ MTBF, - MTTR)
Minimizzare i casi che possono bloccare il
servizio (+ MTBF)
Agevolare il lavoro di debug e riparazione
(- MTTR)
9. Garantire alta disponibilit: soluzione
Applicare una metodologia
di gestione degli errori:
Controllare sempre che i dati in input rispettino le specifiche.
Qualunque situazione di errore va segnalata tramite uneccezione.
La decisione sul come comportarsi in seguito ad un errore, e il dovere
di salvare le informazioni sul log, spetta sempre alla funzione che
gestisce leccezione.
Utilizzare un thread supervisore:
Verificare che lesecuzione di un automatismo non prosegua troppo.
Documentare ampiamente gli errori:
Ogni funzione che riceve uneccezione e non 竪 in grado di gestirla,
deve lanciare una nuova eccezione (contenente i dettagli sul contesto
che conosce) a cui 竪 concatenata leccezione ricevuta.
10. Soluzione: lista concatenata di eccezioni.
Eccezione 6 Eccezione 4 Eccezione 2
Messaggio: . . . . . . . . . Messaggio: . . . . . . . . . Messaggio: . . . . . . . . .
InnerException InnerException InnerException
Eccezione 5 Eccezione 3 Eccezione 1
Messaggio: . . . . . . . . . Messaggio: . . . . . . . . . Messaggio: . . . . . . . . .
InnerException InnerException InnerException = NULL
Ogni eccezione della catena contiene un messaggio che spiega il contesto
in cui 竪 avvenuto lerrore, dal punto di vista della funzione che lha creata.
11. Obiettivi:
Riprodurre tutte le funzionalit del
vecchio software di automazione
Rispettare gli standard aziendali
Garantire un alto livello di servizio
(alta disponibilit)
Avere margine di crescita futura
12. Problema: avere margine di crescita.
Dato di fatto: negli automatismi la
maggior parte del tempo 竪
dedicata allaccesso ai dati.
Migliorare lefficienza ha significato
migliorare laccesso ai dati.
13. Migliorare lefficienza: soluzione.
Ridurre il numero di interrogazioni
ripensando il codice
Accorpare pi湛 interrogazioni in una sola
Utilizzare stored procedure e stored
functions per spostare parte della logica
nel database
14. Esempio: Ridurre il numero di interrogazioni
ripensando il codice.
PRIMA:
SELECT [...] WHERE
CAST(NUMERO_QUOTAZIONE AS INT) = [numero quotazione]
(ripetuta N volte)
DOPO:
SELECT [...] WHERE CAST(NUMERO_QUOTAZIONE AS INT)
IN (SELECT DISTINCT IDQuotazione FROM logQuotazioni)
(eseguita una volta)
15. Esempio: Utilizzare stored
procedure e stored functions.
Leliminazione dei dati sensibili 竪 completamente a
carico dalla stored procedure EliminaDatiSensibili:
DECLARE @dataElim datetime
SET @dataElim = GETDATE()
DECLARE @eliminati int
UPDATE Contratti
SET
QuestAltezza = NULL, QuestPeso = NULL, QuestPressioneMax = NULL, QuestTrigliceridi = NULL,
QuestColesteroloTot = NULL, QuestColesteroloHdl = NULL, [QuestFlagDiabete?] = NULL,
[QuestFlagInfarti?] = NULL, DataCancellazioneDatiSensibili = NULL,
Note = Note + 'Scaduta validit proposta in data ' + CAST(GETDATE() AS nvarchar)
WHERE NOT DataCancellazioneDatiSensibili IS NULL AND
DataCancellazioneDatiSensibili < DateAdd(d, 1, @dataElim) AND
Status <> 100 AND
Status <> 200 AND
NOT ID IN (SELECT NumeroProposta FROM CarichiContabili WHERE TipoCarico = 1) AND
Contratti.ID NOT IN (SELECT Contratti.ID FROM Contratti WHERE (((Contratti.IDPartner) IN
(SELECT DISTINCT Contratti.IDPartner FROM Contratti INNER JOIN CarichiContabili ON
Contratti.ID = CarichiContabili.NumeroProposta WHERE (((CarichiContabili.TipoCarico)=1))))))
SET @eliminati = @@ROWCOUNT
UPDATE IntMaster SET DataUltimaEliminazioneDatiSensibili = GETDATE()
DECLARE @risultato as nvarchar(50)
SET @risultato = 'Eliminati i dati sensibili di ' + CAST(@eliminati as nvarchar) + ' proposte'
EXEC [dbo].[addToLog] @risultato, 'Stored procedure: eliminaDatiSensibili', 5
16. Obiettivi:
Riprodurre tutte le funzionalit del
vecchio software di automazione
Rispettare gli standard aziendali
Garantire un alto livello di servizio
(alta disponibilit)
Avere margine di crescita futura
17. Alcuni aspetti interessanti
dellimplementazione degli automatismi:
Successivamente alla definizione delle metodologie
risolutive, 竪 stata adottata una strategia di sviluppo mista
top-down e bottom-up, orientata ad un precoce debug dei
moduli software creati.
La produzione PDF avviene tramite la libreria iTextSharp (al
ritmo di 50 documenti al secondo).
La classe che si occupa di scrivere sul log i messaggi di
errore 竪 realizzata secondo il design pattern Singleton.
La mutua esclusione dellaccesso metodi della classe Logger
竪 gestita tramite Lock.
18. Il software sviluppato ha soddisfatto i requisiti
imposti dallazienda, e lentrata in produzione delle
prime funzionalit 竪 prevista a breve.
Riprodurre tutte le funzionalit del vecchio
software di automazione
Rispettare gli standard aziendali
Garantire un alto livello di servizio (alta
disponibilit)
Avere margine di crescita futura