In una web application, in ambito Java EE, molto spesso avremo a che fare con CMP Entity Bean. Come abbiamo visto, lo sviluppo di questi componenti si avvale della possibilità di gestire in maniera rapida le operazioni di persistenza. Per l'esempio che segue ci avvarremo del bean CMP sviluppato nelle due lezioni precedenti. Se il test della lezione precedente è andato a buon fine, possiamo concentrarci sullo sviluppo di una semplicissima web application, il cui compito è quello di predisporre delle maschere di inserimento, modifica ed eliminazione dei dati dal database.
In un qualsiasi sistema informativo questo tipo di operazioni saranno quelle che più di altre sono presenti, ed avere a disposizione strumenti che ne consentono il rapido sviluppo è qualcosa di veramente importante.
Partiamo dal diagramma delle classi in figura, che illustra in maniera visuale i componenti che dovremo sviluppare e come sono legati fra di loro.
La servlet Controller definisce le operazioni messe a disposizione della web application. Incapsuliamo ogni singola operazione in un metodo, il cui nome è significativo del tipo di operazione che svolge. Anche in questo caso, la servlet, ha una Local Home, con cui accede all'ejb, nella sua forma locale (UserLocal).
Come si può vedere dal listato (controller.java), le operazioni sono molto semplici: recupero dei parametri, ricerca dell'ejb associato ed inoltro dell'ejb alla jsp attesa.
In particolare vediamo che dalla home page (index.html) si può accedere alle funzioni di inserimento (insert.jsp) e ricerca (result.jsp). Nel secondo caso la pagina viene raggiunta tramite la servlet che, durante l'operazione di ricerca, salverà il risultato in una variabile della pagina stessa (metodo doSearch
).
Dalla pagina dei risultati, a sua volta, è possibile accedere alla maschera di dettaglio, tramite i link che rimandano all'operazione doLoad()
sulla servlet (passando come parametro il login). La funzione doLoad()
si occuperà di effettuare la ricerca del bean (mediante il metodo findByPrimaryKey()
sulla home interface) e di inoltrare il bean alla pagina detail.jsp.
In generale, come si può vedere, il principio progettuale applicato è quello del Model View Controller. Accedendo direttamente ai metodi accessori è peraltro possibile utilizzare la forma compatta dei javabean sulle pagine jsp (jsp:usebean...).
Una buona pratica, come più volte detto, è prevedere la logica di business incapsulata da bean di sessione (stateless o stateful dipende dal tipo di funzione desiderata). Quindi, se ad esempio prevediamo un metodo per l'invio delle mail a tutti gli utenti sarebbe bene creare un session bean che si occupa di questa funzione, appoggiandosi all'entity bean per recuperare le informazioni sugli indirizzi mail degli utenti.