Veniamo alla parte più importante di questa guida: la logica applicativa in ambiente Java Enterprise. Abbiamo finora detto che la tecnologia J2EE ci mette a disposizione un ambiente adatto alla produzione di software server side "per componenti". Questi componenti non sono altro che gli EJB, Enterprise Java Bean.
Un EJB è una classe Java che segue determinate regole imposte dalla specifica che, una volta programmato, viene posto in un application server e da esso verrà gestito secondo le regole definite. Si tratta dei componenti utilizzati per la logica di business di un'applicazione. In un contesto Java puro, generalmente, i client di questi oggetti sono le pagine JSP e le servlet, che si poggiano agli EJB per definire il contenuto dinamico da mostrare all'utente (una ricerca, un carrello della spesa, ecc). In realtà, l'idea di questi componenti è nata per permettere a diverse tecnologie di usare lo stesso strato di logica, residente in un contesto distribuito. Quindi, saranno client degli EJB anche altre classi Java, altri EJB, un client scritto in un altro linguaggio di programmazione, una applet, un sistema esterno, ecc.
Questo modello di sviluppo consente a chi produce il componente server side di disinteressarsi di chi e come accederà al servizio (queste operazioni saranno appannaggio dell'application server), permettendogli quindi uno sviluppo ed una manutenzione disaccoppiata da ogni logica di utilizzo esterna.
Le diverse esigenze applicative sono state divise in tre aree principali:
- Session Bean
- Entity Bean
- Message-Driven Bean
I Session Bean sono EJB dedicati alla logica di business, cioè oggetti adibiti ad effettuare operazioni logiche come, per esempio calcolare dei prezzi, insomma tutte quelle operazioni che rientrano nella definizione di logica di business.
Gli Entity Bean sono EJB dedicati alla rappresentazione dei dati. Attraverso questi oggetti è possibile leggere e scrivere dati da sorgenti persistenti: generalmente fanno uso di database, ma vedremo che sono molto usuali anche altre sorgenti dati (legacy su tutti).
I Message-Driven Bean sono EJB dedicati allo sviluppo di applicazioni asincrone, cioè tutte quelle applicazioni che non necessitano una risposta immediata da parte del sistema a cui ci si connette. Si tratta di applicazioni che fanno uso di scambio messaggi, come i sistemi di invio mail o sms, e non è inusuale trovare sistemi di billing e reporting che ne fanno uso.
La presenza di tante tecnologie ed acronimi a questo punto potrebbe risultare fuorviante, soprattutto a chi è alle prime armi, per cui vediamo un possibile caso di studio, che ci introdurrà in un ottica di progettazione basata su EJB, in modo da comprendere con un caso reale quali sono le tecnologie e in che contesto adattarle. Nelle lezioni successive ci immergeremo nei dettagli tecnici di ognuna delle tipologie di EJB citate con degli esempi concreti.
Disponiamo di un catalogo musicale con una serie di brani, divisi per genere e per artista. Il nostro obiettivo è quello di sviluppare un sistema online per gestire l'amministrazione dei brani e la vendita in modalità B2C. I clienti del sistema possono registrarsi gratuitamente ed effettuare delle ricerche dei brani musicali preferiti. Possono scegliere i brani e decidere di acquistarli attraverso l'uso della carta di credito. La musica da loro acquistata viene inviata al loro cellulare oppure al loro indirizzo di posta elettronica.
Dopo aver modellato opportunamente i dati e creato il database, utilizzeremo gli entity bean per gestire le funzioni di lettura/scrittura. Immaginiamo quindi un entity bean brano il cui uso consente il recupero di informazioni nonché la creazione di nuove voci, stessa cosa dicasi per l'entity bean cliente.
Per le funzioni di logica invece utilizzeremo i session bean. Utilizzeremo un session bean per gestire un carrello della spesa, ed uno per gestire l'operazione di acquisto. Il bean che gestisce l'operazione di acquisto farà uso degli entity bean per recuperare le informazioni sui brani. Inoltre si poggerà ad un web service per inoltrare la richiesta al gestore del credito.
Sarà progettato un session bean che prevede le operazioni di amministrazione dei brani (previa autenticazione) ed uno che prevede le operazioni sull'account cliente (previa autenticazione).
Le operazioni di delivery (consegna) verranno effettuate dal message-driven bean, che invierà il contenuto acquistato via mail o al cellulare.
Come possiamo vedere, le operazioni sui dati sono totalmente svincolate da quelle di logica applicativa, come pure le operazioni asincrone, basate sullo scambio di messaggi.