SeamFramework.orgCommunity Documentation
La specifica Web Beans (JSR-299) definisce un insieme di servizi per l'ambiente Java EE che rende molto più facile lo sviluppo di applicazioni. Web Beans sovrappone un più ricco modello di interazione e di gestione del ciclo di vita ai tipi di componenti java esistenti, Java Beans and Enterprise Java Beans inclusi. A complemento del tradizionale modello di programmazione Java EE, i servizi Web Beans forniscono:
una migliore gestione del ciclo di vita dei componenti stateful, associata a contesti ben definiti
un approccio typesafe alla dependency injection,
interazioni basate su una struttura per la notifica degli eventi, e
un migliore approccio nell'associazione degli interceptors ai componenti, unitamente all'introduzione di un nuovo tipo di interceptor, chiamato decoratore, più adatto ad essere utilizzato nella soluzione di problemi legati alla business logic.
La dependency injection, insieme alla gestione contestuale del ciclo di vita dei componenti, risparmia a chi utilizza un API con cui non ha familiarità la necessità di dover formulare le risposte relative alle seguenti domande:
qual è il ciclo di vita di questo oggetto?
quanti client può simultaneamente avere?
è multithreaded?
da dove posso ottenerne uno?
devo distruggerlo esplicitamente?
dove dovrei tenerne il riferimento quando non lo sto usando direttamente?
come posso aggiungere un livello di indirezione, in modo che l'implementazione di tale oggetto possa variare a deployment time?
cosa dovrei fare per condividere questo oggetto con altri oggetti?
Un Web Bean specifica soltanto il tipo e la semantica degli altri Web Beans da cui dipende. Non ha bisogno di essere a conoscenza del reale ciclo di vita, della implementazione, del modello di threading o degli altri client dei Web Bean da cui dipende. Ancor meglio, l'implementazione, il ciclo di vita e il modello di threading di un Web Bean da cui dipende possono variare a seconda dello scenario di deployment, senza avere effetti su nessun client.
Eventi, interceptor e decoratori potenziano l'accoppiamento debole (loose-coupling) inerente a questo modello:
le notifiche degli eventi disaccoppiano i produttori di eventi dai consumatori,
gli interceptor disaccoppiano i problemi tecnici dalla business logic, e
i decoratori permettono di compartimentare i problemi di business logic.
Soprattutto, Web Beans fornisce tutti questi strumenti in un modo typesafe. Web Beans non usa mai identificatori di tipo stringa per determinare come interagiscono oggetti che collaborano fra di loro. Sebbene resti un'opzione, il linguaggio XML è usato raramente. Invece Web Beans utilizza l'informazione di tipo già presente nel modello a oggetti di Java, insieme ad un nuovo pattern, chiamato binding annotations, per assemblare i Web Beans, le loro dipendenze, i loro interceptor e decoratori e i loro consumatori di eventi.
I servizi di Web Beans sono generali e applicabili ai seguenti tipi di componenti che esistono in ambiente Java EE:
tutti i JavaBeans,
tutti gli EJB, e
tutti i Servlets.
Web Beans fornisce anche i necessari punti di integrazione in modo che altri tipi di componenti definiti da future specifiche Java EE o da framework non standard possano essere integrati in modo trasparente con Web Beans, avvantaggiarsi dei suoi servizi, e interagire con qualunque altro tipo di Web Bean.
Web Beans è stata influenzata da un buon numero di framework Java esistenti, inclusi Seam, Guice and Spring. Comunque, Web Beans ha un proprio chiaro carattere distintivo: è più sicuro nell'uso dei tipi (typesafe) di Seam, è più orientato allo stato (stateful) e meno basato su XML di Spring, e più capace di Guice nelle applicazioni web ed enterprise.
Soprattutto, Web Beans è uno standard JCP che si integra in modo trasparente con Java EE, e con qualunque ambiente Java SE dove EJB Lite sia disponibile in modo embeddable.
Sommario