 |
DISI
- Scuola di Ingegneria - Alma Mater Studiorum - Università di Bologna
Sistemi Distribuiti M |
 |
CdS Laurea Magistrale
in Ing. Informatica - A.A. 2021-2022
|
Obiettivi
e programma
Generalità e Obiettivi
Propedeuticità: nessuna (ma i contenuti dei corsi di Reti di Calcolatori T, Sistemi Operativi T e Tecnologie Web T possono essere utili in talune parti del corso)
Modalità d’esame: LUNGA :-) prova orale, con eventuale discussione di attività progettuale da 4 crediti formativi universitari se scelta in piano di studi (anche per gli studenti senza attività progettuale è possibile la scelta di un piccolo progetto, di dimensioni molto minori :-) rispetto al caso di attività progettuale, da cui partire con la discussione durante l'esame orale)
Oggetto del corso (in estrema sintesi):
conoscenze metodologiche, modellistiche e implementative avanzate per la progettazione, la realizzazione e la valutazione runtime di applicazioni di livello enterprise su sistemi distribuiti di larga scala
Competenze in uscita:
- modellazione architetturale di applicazioni distribuite di livello enterprise: requisiti e principi di progettazione
- progettazione e implementazione di applicazioni distribuite basate su Application Server (ad esempio, JBoss) e componenti (ad esempio, Enterprise Java Beans)
- gestione di sistemi distribuiti complessi container-based tramite modelli leggeri (ad esempio, tramite tecnologia Spring) e di persistenza (ad esempio, tramite tecnologia Hibernate)
- progettazione e implementazione di sistemi di supporto distribuiti per il monitoraggio e il controllo runtime (proprietà di scalabilità, fault-tolerance, affidabilità, ...; ad esempio, tecnologia JMX)
Il corso includerà inoltre:
- alcune esercitazioni guidate di laboratorio sulle principali tecnologie affrontate a lezione (EJB, Spring, Hibernate, JMX, …). Le esercitazioni saranno a svolgimento autonomo da parte dello studente; testi e soluzioni delle esercitazioni saranno rese disponibili sul sito Web del corso
- la discussione di casi di studio concreti, specialmente nei domini applicativi dei servizi multimodali verso dispositivi wireless differenziati, del clustering con/senza caching di applicazioni Web-based e dei servizi location/context-aware (vedi sito Web docente)
- seminari addizionali di presentazione di significativi casi aziendali
Programma
- metodologie e modelli architetturali per la progettazione di applicazioni distribuite di livello enterprise
- evoluzione di modelli a componenti e loro integrazione con architetture distribuite (tipicamente 3-tier e integrate Web)
- Application Server (ad esempio JBoss) e middleware/framework di supporto runtime ad applicazioni distribuite di livello enterprise
- dal modello Enterprise Java Beans iniziale (EJB1.0-EJB2.x) all'attuale ampio utilizzo di EJB 3.x (motivazioni e linee evolutive)
- Persistenza
- Interazione con dati
- Componenti orientati alla sessione e ai messaggi , interceptor
- Transazioni e sicurezza
- (Interazione con Web Services)
- Esempi ed esercizi integrati con JBoss
- verso modelli enterprise leggeri con lightweight container: l’esempio di Spring
- Spring e inversion of control
- Spring e aspect-oriented programming
- gestione delle transazioni
- persistenza: evoluzione dei modelli di supporto alla persistenza nello sviluppo di applicazioni enterprise. L’esempio di Hibernate
- persistenza trasparente
- supporto a mapping e query
- supporto a metadata
- performance
- monitoraggio, controllo e gestione runtime di application server e di framework di supporto distribuito in generale: l’esempio di JMX
- Valutazione dell'efficienza e delle prestazioni
- Scalabilità
- Fault-tolerance
- Affidabilità
- modello a scambio di messaggi in sistemi interoperabili ad altissima scalabilità. Gli esempi di Java Messaging Service (JMS) e le architetture Enterprise Service Bus (ESB)
- Comunicazione disaccoppiata e asincrona
- Affidabilità, transazionalità, ack e ottimizzazione prestazioni
- SOA and message-oriented middleware
- Java Business Integration (JBI)
- gestione di risorse per applicazioni clustered, tipicamente basate su tecnologie a componente/container (ad esempio, con riferimento a tecnologia JBoss clustering e facility correlate)
- direzioni di evoluzione verso modelli e tecnologie non-thread-oriented per alta scalabilità di server enterprise
- framework node.js e gestione eventi asincroni
- piattaforme di supporto e progettazione di applicazioni per big data, con focus specifico su on-line stream processing (ad esempio, con riferimento a tecnologia IBM Infosphere Streams, Storm e meccanismi/facility correlati)
- Numerosi casi di studio (anche tramite seminari aziendali in aggiunta all’orario di lezione)
Il corso sarà affiancato da un set di esercitazioni pratiche di laboratorio, in cui gli studenti saranno stimolati a compiere attività a svolgimento guidato in forma di lavoro personale e autonomo. Tali attività saranno necessarie per il completamento della preparazione e il raggiungimento delle abilità desiderate; testi e soluzioni delle esercitazioni saranno rese disponibili su questo sito di settimana in settimana.
Probabilmente:
- 1 esercitazione su EJB in WildFly
- 1 esercitazione su ESB/JBI
- 1 esercitazione su Spring
- 1 esercitazione su JMX
- 1 esercitazione su clustering in WildFly
Prerequisiti
- Algoritmi e skill di
programmazione
- Elementi di reti di calcolatori e di sistemi operativi (da percorso di laurea triennale)
- Linguaggio Java