Cosa si intende per Web 2.0? Semplicemente, l‘utilizzo organico di tecnologie e applicazioni allo scopo di offrire all‘utente un‘esperienza d‘uso migliore di quella fruibile con applicazioni basate su continui caricamenti di pagina.
Il nuovo framework di jBoss è completamente orientato agli standard della piattaforma Java Enterprise Edition, oltre che fortemente indirizzato alla testabilità e alla completa integrazione di AJAX.
Cosa si intende per Web 2.0? Semplicemente, l‘utilizzo organico di tecnologie e applicazioni allo scopo di offrire all‘utente un‘esperienza d‘uso migliore di quella fruibile con applicazioni basate su continui caricamenti di pagina.
La chiave e il collante di questi elementi è JavaScript, e l‘oggetto XMLHttpRequest, che consente di eseguire chiamate HTTP al server da svariati linguaggi di scripting, primo tra tutti JavaScript. Questo è il cuore di AJAX.
Evoluzione costante
Se tutto il comparto dell‘informatica è in costante evoluzione, si possono individuare argomenti più o meno caldi. Le basi del linguaggio Java oggi sono abbastanza consolidate, mentre la rivoluzione imposta da Hibernate e dagli altri motori di persistenza è in fase di assorbimento da parte di Java Enterprise Edition con il rilascio di EJB3.0.
La parte che sta vivendo l‘evoluzione pià marcata è quindi forse lo strato di presentazione Web, che dalle Servlet ha compiuto un tragitto di crescita notevole, passando rapidamente da JSP ai motori di presentazione come Struts e Spring. Ora il nuovo è rappresentato da Java Server Faces. E da AJAX.
In questo contesto si inserisce Seam, un nuovo framework di JBoss per la realizzazione di applicazioni Web 2.0, basate su AJAX e in generale su un modello di programmazione che è l‘evoluzione degli standard che eravamo abituati a utilizzare fino a pochi anni (mesi) fa.
L‘esigenza di una crescita e standardizzazione in ambito dello strato di presentazione è probabilmente un‘esigenza sentita, se si confronta la difficoltà di realizzazione di soluzioni basate su Web 1.0 rispetto a framework tradizionali, anche pre-Java.
Insomma: programmare per il Web è da qualche anno la nuova moda, ma gli strumenti a disposizione dello sviluppatore non hanno ancora raggiunto quel livello di semplicità accettabile per il livello di applicazioni che si deve realizzare.
Congiungere
Il framework Seam riunisce in un modello di programmazione unificato (e semplificato) diverse tecnologie risultato delle ultime evoluzioni. In primis, Seam si basa sul modello EJB3, eliminando quindi gli oggetti pesanti EJB2, ma tornando ai cari vecchi oggetti Java (POJO). Su questi viene implementato il supporto ad AJAX, il supporto alle architetture orientate ai servizi SOA (e perché no?), a JSF, Portlets e Business Process Management.
In particolare, il fatto di basarsi sul EJB3.0 porta alcuni elementi interessanti:
- L‘utilizzo di EJB3 riporta tutto lo sviluppo verso POJO, eliminando componenti EJB2 a grana grossa e pesanti, elimina descrittori XML e riduce il numero di classi necessarie. Ok, questo è un vantaggio di EJB3, non di Seam. Si può dire che Seam, come aggregato, beneficia dei vantaggi dei singoli componenti. Il risultato è che Seam appare un framework leggero.
- In Seam, tutto è un EJB. Le entità sono Entity Bean; i processi sono modellati come Session Bean. Anche qui si sfrutta EJB3, ma l‘importante è che Seam non aggiunge nulla di suo. Ma la cosa più interessante è che Seam elimina la distinzione tra strato di presentazione e componenti della logica di business.
Quest‘ultimo aspetto è particolarmente interessante e potrebbe far dubitare i puristi della piattaforma JavaEE, e quelli a cui piace scrivere molto codice.
In realtà , in questo modo si eliminano oggetti quali Business Faà§ade, Value Object e altri pattern di supporto che aiutano la comunicazione dei dati da un livello all‘altro, ma che non hanno alcuna utilità pratica.
Un esempio: in Seam anche i Session Bean possono essere utilizzati in JSF come listener di azioni.
L‘approccio proposto da Seam sembra quindi più pragmatico: meno complessità e ottenimento più immediato delle funzionalità necessarie.
L‘eliminazione della distinzione tra i due strati consente anche al browser di invocare direttamente Session Bean attraverso Ajax. Questi appaiono come semplici oggetti JavaScript, nascondendo la complessità della serializzazione/deserializzazione XML e la necessità di accedere alle API XMLHttpRequest. Addirittura, i client Web si possono iscrivere a topic JMS e ricevere messaggi pubblicati sul topic come notifiche asincrone.
Praticamente, invece che programmare Java EE utilizzando Java, possibile programmarlo utilizzando JavaScript sul client.
Stato, processo e testabilità
Altre tre caratteristiche fondamentali di Seam sono la gestione avanzata dello stato applicativo, la possibilità di gestire il processo di business e la testabilità dell‘applicazione.
In merito al contesto applicativo, Seam offre la gestione di contesti multipli, con granularità differenti, superando i limiti delle sessioni HTTP. In altre parole, è possibile simulare il funzionamento di applicazioni desktop creando applicazioni Web a più finestre, senza dover creare a mano accrocchi complicati per simulare questa funzionalità . Tante volte si preferisce limitare l‘operatività a una singola finestra, di fatto limitando l‘esperienza d‘uso dell‘utente, per poter mantenere più semplice l‘applicazione. Anche il supporto di finestre pop-up è difficoltoso.
Per quando riguarda la gestione del flusso operativo, Seam integra jBoss jBPM, semplificando l‘implementazione di workflow complessi e del flusso delle pagine. Questo aspetto probabilmente si sovrappone, come ambito, a framework di presentazione come Struts, WebWork o Spring. Seam dunque traccia la propria strada personale, basata sul software jBoss.
La testabilità è un altro elemento fondamentale in Seam. Come sottolinea jBoss nella documentazione, i componenti Seam, essendo EJB3/POJO sono testabili per natura. A questo però si aggiunge la possibilità di collaudare il funzionamento di complete applicazioni. È infatti possibile scrivere test Junit o TestNG per riprodurre una intera interazione dell‘utente, invocando tutti i componenti del sistema, che vengono eseguiti all‘interno dell‘IDE.
A proposito di IDE, JBoss IDE offre uno strumento di reverse engineering che permette di produrre, a partire dal database, e sulla base di template, intere applicazioni Seam. Inoltre, dispone dell‘editor jPDL per creare pageflow e definizioni di workflow.
Conclusioni
Seam è il framework di presentazione di jBoss che svolge alcune delle funzionalità di Struts, WebWork o Spring, ma ha un approccio più moderno, basato su EJB3, JSF e AJAX. La forte integrazione tra queste tecnologie, unita alle altre caratteristiche, di tutto rispetto, rendono l‘iniziativa molto interessante.
Per prima cosa il forte utilizzo di EJB3, con l‘ampio uso delle annotazioni, che costituisce un po‘ l‘uovo di Colombo che permette di ridurre l‘XML necessario alle applicazioni Enterprise, sicuramente fornisce un‘impostazione all‘applicazione che non è solamente robusta, ma anche conforme agli standard SUN. L‘accesso diretto dei Bean da AJAX è poi una funzionalità molto interessante, che permette di ridurre notevolmente il codice necessario a implementare una soluzione. Non ultime, le caratteristiche di testabilità di tutta l‘applicazione e l‘utilizzo di jBPM per il workflow, che permette di sfruttare applicazioni standard di supporto.