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 l’ambiente
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 dell’architettura 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 un’eccezione.
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 l’eccezione.
Utilizzare un thread supervisore:
Verificare che l’esecuzione di un automatismo non prosegua troppo.
Documentare ampiamente gli errori:
Ogni funzione che riceve un’eccezione e non è in grado di gestirla,
deve lanciare una nuova eccezione (contenente i dettagli sul contesto
che conosce) a cui è concatenata l’eccezione 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 l’errore, dal punto di vista della funzione che l’ha 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 all’accesso ai dati.
Migliorare l’efficienza ha significato
migliorare l’accesso ai dati.
13. Migliorare l’efficienza: 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”.
L’eliminazione 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
dell’implementazione 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 dell’accesso metodi della classe Logger
è gestita tramite Lock.
18. Il software sviluppato ha soddisfatto i requisiti
imposti dall’azienda, e l’entrata 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