Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l'ambiente SQL...
-
Upload
donato-clun -
Category
Technology
-
view
588 -
download
0
description
Transcript of Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l'ambiente SQL...
Migrazione dei meccanismi di
workflow di un sistema informativo
assicurativo verso l’ambiente
SQL Server e .NET
Relatore:
Prof. Leonardo Felician
UNIVERSITÀ DEGLI STUDI DI TRIESTEFACOLTÀ DI INGEGNERIA
Corso di laurea triennale in ingegneria informatica
Laureando:
Donato Clun
Contesto:
Migrare e migliorare la componente software del
sistema informativo che esegue ed automatizza
parte del workflow aziendale.
Finalità:
Onlife è una assicurazione vita venduta su internet,
proposta da L.A. Vita S.p.A., società controllata al
100% da Allianz S.p.A.
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)
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
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
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
Problema: garantire alta disponibilità.
Disponibilità media =
Tempo
Stato del
servizio
Funzionamento
Riparazione
Istante in cui il servizio
viene ripristinato
Istante in cui il servizio
cessa di funzionare
Tempo tra due
malfunzionamenti
Tempo di
riparazione
MTBF
MTBF + MTTR
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)
Alta disponibilità: fattori chiave
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.
Garantire alta disponibilità: soluzione
Soluzione: lista concatenata di eccezioni.
Eccezione 6
InnerException
Messaggio: “. . . . . . . . .”
Eccezione 5
InnerException
Messaggio: “. . . . . . . . .”
Eccezione 4
InnerException
Messaggio: “. . . . . . . . .”
Eccezione 3
InnerException
Messaggio: “. . . . . . . . .”
Eccezione 2
InnerException
Messaggio: “. . . . . . . . .”
Eccezione 1
InnerException = NULL
Messaggio: “. . . . . . . . .”
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.
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
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.
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
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)
Esempio: “Utilizzare stored
procedure e stored functions”.
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
L’eliminazione dei dati sensibili è completamente a
carico dalla stored procedure EliminaDatiSensibili:
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
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.
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
Il software sviluppato ha soddisfatto i requisiti
imposti dall’azienda, e l’entrata in produzione delle
prime funzionalità è prevista a breve.