MokaByte 95 - Aprle 2005 
Un nuovo volto per le applicazioni Web
di
Massimiliano
Bigatti
A metà marzo Apache Software Foundation ha deciso. Il progetto MyFaces, implementazione delle specifiche SUN JavaServer Faces ha raggiunto un livello di qualità tale da renderlo meritevole di apparire nell'elenco dei progetti di primo livello della fondazione

Introduzione
Per intenderci, ora MyFaces appare al fianco di progetti blasonati e probabilmente molto più noti, come l'HTTP server, Geronimo, Jakarta, Struts, Web Services o XML. Questa mossa sicuramente porterà più luce sul progetto, con una conseguente promozione verso gli sviluppatori.
MyFaces è una implementazione delle specifiche JavaServer Faces (JSF), ma cosa trattan questo standard di SUN Microsystems?
JSF è in sostanza un framework di sviluppo che ha lo scopo di fornire al programmatore degli elementi visuali utili a costruire interfacce utente Web. Come Swing ed AWT per le applicazioni standalone, le applet ed i JavaBean, allo stesso modo i componenti JSF implementano una separazione tra dati e rappresentazione, secondo un modello MVC.
Sentendo parlare di modello MVC in un contesto di applicazioni Web si potrebbe pensare che JSF abbia una certa somiglianza, o sovrapposizione con altre tecnologie, come Struts della stessa Apache Software Foundation, oppure Spring, Barracuda, o lo stesso MokaPackages di Mokabyte.
A chi è nato questo sospetto non è in errore: JSF si può per certi versi considerare un "figlio" di Struts, una tecnologia che si sovrappone di molto a quelle citate, senza però essere completamente sostituitiva.

 

Caratteristiche
Anche in JSF (il sito relativo [2] è in figura 1) lo sviluppo avviene per componenti che possono essere utilizzati nelle pagine Web, implementate da pagine JSP. Ogni elemento visuale è realizzato in una pagina JSP attraverso un tag specifico, e ne esiste uno per ciascun elemento base di HTML. Ovviamente il sistema è estensibile, in quanto lo sviluppatore può integrare più componenti HTML per realizzarne uno più complesso. Ad esempio è possibile realizzare un controllo "Calendario": un campo di input con collegato un pulsante che apre una vista sul calendario e permette di scegliere una data. Ci si può aspettare che gli strumenti di sviluppo proprietari, come hanno fatto per Swing od AWT, offriranno controlli più evoluti di quelli classici presenti in HTML ed è un peccato che JSF includa solo questi e non elementi più avanzati. In questo modo l'offerta equivale sostanzialmente a quella presente in Struts.
Altre fondamentali caratteristiche dei componenti di JSF è che sono stateful e gestiscono la validazione lato server, la separazione MVC, la navigazione, la conversione dei tipi, la gestione degli eventi.
Lo stato dell'applicazione ed il suo comportamento, sono pilotati da Javabean applicativi ed il controllo della navigazione e la configurazione dell'applicazione avvengono tramite documenti XML.
Tutte le funzionalità di JSF, come la navigazione od il lookup di Javabean sono "pluggable".
Ma la caratteristica più interessante di JSF è la semplicità. Le specifiche, di dimensioni mastodontiche, sono destinate ai produttori di strumenti di sviluppo e software lato server e l'obiettivo è quello di fornire un ambiente di programmazione semplice allo sviluppatore. Più semplice di Struts anche senza utilizzare strumenti di disegno visuale.

 


Figura 1 - Il sito di Apache MyFaces

 

Una evoluzione in corso
Si dice che JSF diventerà parte di J2EE 1.6. Ed è molto probabile che questa ipotesi diventerà realtà, visto che nella piattaforma J2EE manca quel tipo di tecnologia e che presto o tardi tutto quello che viene studiato dal JCP diventa parte dell'una o dell'altra piattaforma Java. Questo aspetto concorrerà sicuramente a diffondere maggiormente la tecnologia, anche se questa dovrà fare i conti con un notevole installato di Struts, Spring ed altri framework. Un "buco" di specifiche prima coperto da progetti open source, e che ora si vuole riempire con una specifica standard e calata dall'alto. Può funzionare, ma si ricordi cosa è successo con Hibernate/EJB: la tecnologia per i componenti enterprise di SUN ed IBM ha avuto sicuramente successo, è divenuto uno standard di fatto dopo essere stato uno standard su carta, ma poi ha dovuto rintuzzare gli attacchi di alternative più leggere, come il framework relazionale Hibernate. Ed alla fine si può dire che EJB abbia perso. Come dire, se non li puoi battere, alleati a loro. E così EJB si è tolto di dosso l'armatura che lo rendeva così pesante, ha chiesto aiuto al nuovo J2SE 1.5 per le annotazioni ed ha vestito la più leggera casacca di Hibernate, trasformandosi in quest'ultimo. Una mossa sicuramente furba per poter continuare ad asserire che EJB è una tecnologia di successo.
Cosa accadrà per JSF? Le specifiche SUN, ispirate a Struts ma con un più ampio grado di flessibilità, potrebbero comunque mostrare i propri limiti, specie se confrontati con framework applicativi più omogenei, come Spring. È vero, Struts è il prodotto più noto e probabilmente utilizzato, e SUN ha fatto bene ad utilizzarlo come base, ma negli ultimi tempi sembrava in fase un po' calante, rispetto a concorrenti che implementano l'inversion of control in modo più pulito.
C'è comunque da dire che l'ampia configurabilità di JSF, maggiore di quella di Struts, permette anche di integrare il noto framework Spring, almeno per quanto riguarda il lookup dei componenti.
Insomma, come molti hanno detto nella dicussione su TheServerSide [1], sarà il mercato a decidere del futuro di JSF, Struts, Spring od altri framework; e come ha decretato il successo di Hibernate, potrbbe anche essere che la vittoria finale non andrà allo standard ufficiale, ma al framework open source più utile, intelligente od opportuno.

 

Bibliografia
[1] Joseph Ottinger - "JSF implementation MyFaces leaves Jakarta Incubator", http://www.theserverside.com/news/thread.tss?thread_id=32650
[2] aa.vv. - "Apache MyFaces" - http://myfaces.apache.org
[3] Rick Hightower - "JSF for nonbelivers: clearing the FUD about JSF", http://www-106.ibm.com/developerworks/library/j-jsf1/
[4] James Holmes - "Java Server Faces Resources", http://www.jamesholmes.com/JavaServerFaces/
[5] aa.vv. - "JSF Central", http://www.jsfcentral.com/
[6] Kito D.Mann - "JavaServer Faces in Action: introducing JavaServer Faces", http://www.webreference.com/programming/java_server/
[7] Roland Barcia - "JavaServer Faces (JSF) vs Struts", http://www.sys-con.com/story/?storyid=46516&DE=1


Massimiliano Bigatti é autore di diversi libri su Java, tra cui "Java ed Open Source" (Tecniche Nuove 2005). È certificato, tra le altre, come SUN Certified Enterprise Architect for Java Platform, Enterprise Edition Technology. E' content editor del portale dedicato ai Web Services http://javawebservices.it.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it