Web architectures

Estendere un semplice server web

L'obiettivo di questo compito è estendere un mini-server http concorrente. L'estensione mira a eseguire processi esterni e gestire le loro risposte. Inoltre, questo consente al processo esterno di rispondere con pagine web dinamiche, che saranno gestite dal server.

Codice e descrizione completa (in inglese)


Demo RMI

Questo compito è incentrato su Java RMI (Remote Method Invocation) che consente a un oggetto in esecuzione in una Java virtual machine (JVM) di richiamare metodi su un oggetto in esecuzione in un'altra JVM.

Più specificamente, questo esercizio consiste nello sviluppo di due programmi separati, un client e un server. Il server mostra un metodo remoto addTimestamp con un parametro di tipo Document. Il metodo aggiunge la stringa "Viewed on " + Timestamp nel Document. D'altra parte, il client crea un nuovo Document e chiede al server di aggiungere la stringa "Viewed on " + Timestamp. Infine, il cliente stampa il contenuto del Document.

Document è una classe personalizzata che ha il metodo addString per aggiungere una stringa alla fine del Document e un metodo toString per stampare l'intero Document.

Codice e descrizione completa (in inglese)


Accedere un enterprise bean

L'argomento di questo compito è Enterprise JavaBean (EJB), un componente software lato server che incapsula la logica di business di un'applicazione in un singolo oggetto (il bean).

La prima parte del compito consiste nell'installazione di WildFly, scrivendo un bean enterprise che espone un metodo per fornire una stringa contenente la data e l'ora del giorno e infine distribuire il bean enterprise su WildFly.

Inoltre, la seconda parte del compito consiste nella scrittura di un client (un'applicazione Java standard) che si collega al bean, chiama due volte il metodo del bean e stampa il risultato a schermo.

Codice e descrizione completa (in inglese)


Accedere un DB attraverso un EJB

L'obiettivo di questo compito è sviluppare un Enterprise JavaBean (EJB) che consenta agli utenti di eseguire alcune operazioni tipiche dei negozi online e di salvare le informazioni in un DB.

Inoltre, sono stati sviluppati due client diversi, uno per l'amministratore e uno per gli utenti regolari. Il client amministratore BookStoreAdministrator consente di aggiungere un nuovo libro al DB, specificando titolo e prezzo, e di elencare tutte le operazioni di acquisto eseguite dagli utenti.

D'altra parte, il client utente BookStoreClient richiede agli utenti di registrarsi o accedere inizialmente al DB. Successivamente il client consente loro di aggiungere libri al carrello, acquistare tutti i libri presenti nel carrello, svuotare il carrello e vedere il contenuto del carrello.

Tuttavia, lo scopo del compito è quello di identificare correttamente dove usare stateful bean, stateless bean e entità, usando almeno uno di ciascun tipo.

Codice e descrizione completa (in inglese)


Scrivere un preprocessore per annotazioni

L'obiettivo di questo compito è sviluppare un programma (chiamato BeanGenerator) che trasforma un POJO opportunamente annotato in un JavaBean.

Il programma prende come input il file Java contenente un POJO e se la classe contiene l'annotazione @bean, viene generato un file Java come output che contiene la stessa classe trasformata in un JavaBean.

Per funzionare come JavaBean, una classe deve seguire alcune convenzioni sulla denominazione, costruzione e comportamento del metodo: le variabili dell'istanza della classe devono essere private, la classe deve avere un costruttore pubblico predefinito senza argomenti, le proprietà della classe devono essere accessibili usando get, set e is (che può essere usato per le proprietà booleane al posto del get), la classe dovrebbe essere serializzabile (non è obbligatorio).

Codice e descrizione completa (in inglese)


XML, XSD e XSL

Questo compito si concentra su XML. In particolare, la prima parte del compito consiste nella scrittura di uno schema XML per il file XML denominato ACMTrento.xml.

D'altra parte, la seconda parte del compito consiste nella scrittura di un XSL Transformation (XSLT) che genera un file CSV (valori separati da virgola) dal file XML specificato ACMTrento.xml. Il file CSV dovrebbe contenere i seguenti campi: Unit Name, Type, Time.

Inoltre, è stato implementato un programma Java per eseguire la trasformazione.

Codice e descrizione completa (in inglese)


Servlet, JSP e filtri

L'obiettivo di questo compito è quello di creare un sito web che sostituisca le interfacce desktop dell'amministratore e dell'utente, sviluppato per il quarto compito. Il sito web consente agli utenti di accedere a un DB tramite un livello EJB (Enterprise JavaBean), eseguendo alcune operazioni tipiche dei negozi online.

Gli utenti devono prima registrarsi o accedere al sito web. Successivamente, il sito web mostra in homepage tutti i libri disponibili. Ora l'utente è libero di aggiungere libri al carrello, vedere il contenuto del carrello, acquistare tutti i libri presenti nel carrello e svuotare il carrello. Inoltre, l'utente può disconnettersi tramite i timeout della sessione automaticamente dopo 60 minuti.

D'altra parte, il sito web consente all'amministratore di fare la stessa cosa degli utenti regolari. Inoltre, l'amministratore può aggiungere un nuovo libro al DB, specificando titolo e prezzo ed elencare tutte le operazioni di acquisto eseguite dagli utenti.

L'implementazione del sito Web è stata eseguita tramite servlet, JSP e filtri.

Codice e descrizione completa (in inglese)


Integrare Java EE e AngularJS

L'obiettivo di questo compito è sviluppare un'applicazione semplice che mostri un'integrazione tra Java EE 7 e AngularJS.

L'applicazione consente di gestire un database molto semplice di una libreria in cui è possibile aggiungere autori, aggiungere libri con il proprio autore, consultare i libri presenti nel DB ed eliminare un libro.

AngularJS è stato utilizzato per visualizzare i dati, estendendo il codice HTML tradizionale con tag personalizzati aggiuntivi.

L'applicazione è stata scritta seguendo questo esempio .

Codice e descrizione completa (in inglese)