Con questo articolo si conclude la serie su JSF. Dopo aver parlato dei principali aspetti della tecnologia JSF, cerchiamo di capire quale siano lo stato dell‘arte e le possibili evoluzioni del framework.
Introduzione
Nei precedenti articoli abbiamo introdotto i principali concetti riguardanti Java Server Faces. Lo scopo non era quello di fornire un manuale di programmazione ma piuttosto di esporre le caratteristiche di base e gli elementi caratterizzanti di questa tecnologia.
Sicuramente JSF ha significato una grande novità nel mondo dello sviluppo web Java EE introducendo dei concetti (lo sviluppo per componenti e lo sviluppo ad eventi) già noti e sperimentati in altri ambiti, quali lo sviluppo di applicazioni desktop, e in altre piattaforme concorrenti.
È chiaro che un qualsiasi framework può avere successo e futuro se e solo se rende il lavoro dello sviluppatore più agevole e più ricco di possibilità. È altrettanto importante soprattutto dal punto di vista della gestione di un progetto di sviluppo software avere a disposizione tecnologie affidabili che consentano una riduzione dei tempi di sviluppo e anche tempi di apprendimento rapidi.
Nessuna società infatti modificherebbe abitudini consolidate e soprattutto affidabili per un cambiamento tecnologico fine a se stesso, ma anzi ogni cambiamento tecnologico deve essere percepito come fonte di vantaggio e di maggiori opportunità.
La domanda da porsi è se al momento JSF rappresenta tutto ciò.
Navigando in internet e frequentando i forum di sviluppatori di tutto il mondo è facile imbattersi in accese discussioni tra chi ritiene JSF la strada del futuro e chi invece lo considera un’inutile novità.
Quando si tratta di questo genere di argomenti è bene non formarsi un giudizio in maniera per così dire “ideologica” ma cercare di individuare razionalmente quali possano essere i punti a favore e a sfavore, e quali siano le cose incomplete e da migliorare.
Una cosa sicuramente positiva è che essendo JSF parte dello standard Java EE è sicuramente un tentativo di razionalizzare e standardizzare lo sviluppo del web layer nel mondo Java EE.
Fino ad oggi sono stati sviluppati numerosissimi web framework, alcuni ottimi altri meno, che hanno proliferato e si sono diffusi nella comunità degli sviluppatori. Se avere a disposizione molti strumenti per svolgere un determinato compito è una cosa positiva perche‘ consente di avere possibilità di scelta, è anche vero che può condurre a una incertezza nel momento in cui si sceglie una tecnologia all’inizio di un progetto, soprattutto per chi non ha esperienza o risorse per poter sperimentare le diverse tecnologie a disposizione.
JSF inoltre introduce nel mondo dello sviluppo web Java EE alcuni paradigmi, come la programmazione per eventi, che nei framework più diffusi erano assenti. Basti pensare a Struts che rimaneva nella gestione del ciclo richiesta/risposta molto più vicino a quanto tradizionalmente fatto con una servlet.
Come si era già detto, JSF è a un livello di astrazione maggiore rispetto agli altri framework e questo può costituire un vantaggio da un lato e uno svantaggio dall’altro.
Il vantaggio a mio parere è la maggiore rapidità nello sviluppo, lo svantaggio è il minore controllo che si ha su cosa accade dietro le proprie spalle. Ciò è sempre vero quando l’astrazione diventa maggiore, e quindi viene richiesta una più approfondita conoscenza del funzionamento del framework che si sta usando.
Sviluppare con JSF oggi, con gli IDE a disposizione, è molto simile a quanto si può fare in ambiente .NET; l’architettura a componenti consente di costruire un’interfaccia con un semplice drag&drop di un componente da una palette. Ma senza una conoscenza approfondita dei meccanismi che gestiscono il ciclo di vita delle richieste di JSF si andrebbe incontro molto presto a seri problemi in caso di misteriose eccezioni apparentemente fuori dal nostro controllo.
I componenti sono appunto una delle grandi promesse di JSF. Poter sviluppare avendo a disposizione librerie molto ricche di componenti è una delle chiavi per il successo di JSF.
Le critiche a JSF vengono mosse da molti proprio perche‘ il set di componenti della implementazione standard, arrivata alla versione 1.2, è piuttosto risicato. Introdurre un nuovo framework di sviluppo per avere come componenti una list-box o una text-area non è una grande innovazione !
C’è da dire che le cose in questo senso si stanno però muovendo e sono già presenti nel modo open-source numerosi progetti molto interessanti.
Apache MyFaces Project
Apache Myfaces è un progetto della nota Apache Software Foundation che comprende una serie di sottoprogetti tutti dedicati alla tecnologia JSF, ciò anche a conferma dell’interesse che vi è attorno ad essa. Come indicato nella home page del progetto
MyFaces fornisce principalmente una implementazione della specifica standard JSF, librerie di componenti, moduli di integrazione con altre tecnologie.
Per quanto si diceva nel paragrafo precedente è molto importante notare quindi come siano già presenti delle librerie di componenti molto ricche che possono risolvere tante esigenze.
MyFaces Tomahawk è una libreria di componenti compatibile con l’implementazione JSF di MyFaces e con l’implementazione JSF RI (Reference Implementation). È sempre bene verificare la compatibilità dei componenti con l’implementazione di JSF utilizzata nel proprio progetto controllando le specifiche tecniche della release di componenti da utilizzare per non incorrere in spiacevoli sorprese.
Ciò che è importante sottolineare è che Tomahawk è una libreria piuttosto ricca comprendente molti dei componenti che costituiscono gran parte delle interfacce delle nostre applicazioni web.
Si va dai classici Tree ai Tabbed Pane, dai componenti per effettuare upload di file a tabelle di vario tipo, scrollabili, con colonne sortabili, e a componenti davvero ricchi come ad esempio il Calendario.
Oltre a componenti nuovi di zecca, Tomahawk fornisce anche componenti standard rivisti ed arricchiti di proprietà, convertitori ed un supporto per l’utilizzo di Tiles con JSF.
My Faces Trinidad è una libreria di componenti nata dalla donazione fatta da Oracle dei propri componenti ADF Faces. I componenti della libreria Trinidad sono veramente molti e introducono una serie di interessanti peculiarità come il supporto al partial-rendering, la validazione client-side, il supporto all’accessibilità, per citarne alcune.
Il modo migliore per farsi un’idea delle potenzialità di questi componenti è sicuramente visitare la demo presente all’indirizzo
http://www.irian.at/trinidad-demo/faces/index.jspx
e farsi un giro per i vari componenti e per le applicazioni demo.
Molto interessante tra i componenti del MyFaces Project è anche il Portlet Bridge che costituisce un ponte tra la tecnologia delle portlet e JSF e quindi ha lo scopo di consentire l’integrazione di applicazioni JSF nei portali. Visto il successo e l’evoluzione che i portali stanno sempre più avendo nel mondo Java EE è sicuramente una ottima possibilità quella di poter riutilizzare come portlet il proprio codice JSF.
JSF e AJAX
Uno degli obiettivi che JSF sicuramente si propone di raggiungere è quello di dare la possibilità di realizzare interfacce web accattivanti e ricche di funzionalità, più simili a una applicazione desktop che ad una classica applicazione web. Parlare di applicazioni web simili ad applicazioni desktop fa sicuramente venire alla mente AJAX, l’acronimo con il quale si individua quell’insieme di tecnologie che oggi consentono di realizzare interfacce web ricche, rapide e piene di potenzialità fino a poco tempo fa quasi ritenute impossibili per la classica scarna interfaccia web.
Non approfondiremo AJAX in questa sede ma rimandiamo il lettore interessato all’argomento ai riferimenti bibliografici.
Sarebbe però molto bello se l’architettura a componenti di JSF che facilita lo sviluppo dell’interfaccia si unisse alle potenzialità di AJAX, e quindi se avessimo a disposizione librerie di componenti Ajax-enabled che consentano con un semplice drag&drop di un componete di arricchire la nostra applicazione web delle caratteristiche di un’interfaccia scritta con Ajax.
Ebbene, oggi ciò è già possibile ed è forse la strada più promettente per JSF, quella di costruire la base per lo sviluppo di quelle che oggi vanno il nome di Rich Enterprise Application.
Un esempio di quanto stiamo dicendo è ICEFaces che, come dichiarato dai suoi realizzatori, non è solo una libreria di componenti quanto un vero e proprio framework Ajax-enabled per lo sviluppo di Rich Enterprise Application.
ICEFaces fornisce una ricca libreria di componenti JSF Ajax-enabled compatibili e utilizzabili nella gran parte degli IDE più diffusi e deployabili sulla maggior parte degli application server.
Anche qui, più che molte parole, è molto più utile andare direttamente alla pagina demo della libreria
http://component-showcase.icefaces.org/component-showcase/
per dare un’occhiata ai vari componenti e apprezzare le meraviglie aggiunte dalle tecnologie Ajax ai componenti JSF. Refresh parziale dell’interfaccia, aggiornamenti asincroni dell’interfaccia server-initiated, interazione nell’immissione di dati nei form e molto altro. Rendere la propria applicazione Ajax-enabled con il semplice utilizzo di questi componenti JSF non è più un miraggio!
Altro interessante tentativo di realizzazione di librerie di componenti JSF volte allo sviluppo di Rich Application è quella fatta da Oracle con la sua Oracle ADF Faces Rich Client disponibile al momento in versione Technology Preview. La libreria è una estensione della libreria di componenti Tomahawk, di cui abbiamo già parlato, nell’ottica della realizzazione di componenti JSF Ajax-enabled. Scaricando JDeveloper 11g TP è possibile ammirare questi componenti all’opera.
La lista dei componenti consultabile all’indirizzo
è davvero impressionante. Ci sono componenti di ogni tipo che possono veramente soddisfare i bisogni degli sviluppatori e soprattutto dei clienti più esigenti.
Conclusioni
Con questo articolo abbiamo provato a fare una panoramica su quello che è lo stato dell’arte di JSF e sulle sue possibili evoluzioni soprattutto nell’ottica dello sviluppo delle Rich Enterprise Application. Essendo JSF una tecnologia piuttosto nuova, non è facile al momenti prevederne gli sviluppi ma ciò che è possibile affermare con certezza è che è sicuramente uno dei web framework con i quali ogni sviluppatore web Java EE avrà a che fare nel breve periodo. Le potenzialità sono molte e molte sono le cose di cui non abbiamo parlato nella serie riguardo a JSF vista la vastità dell’argomento. Speriamo però di aver raggiunto l’obiettivo di evidenziarne gli elementi di base e di stimolare il lettore ad approfondire questa interessante tecnologia.
Riferimenti
[1] David Geary – Cay Horstmann, “Core Java Server Faces”, Sun Microsystems Press, 2004
[2] Bill Dudney – Jonathan Lehr – Bill Willis – LeRoy Mattingly, “Mastering Java Server Faces”, Wiley Publishing Inc., 2004
[3] Kito D. Mann, “Java Server Faces In Action”, Manning Publications Co., 2005
[4] Autori Vari, “The Java EE 5 Tutorial”, Sun Microsystems, febbraio 2007
Alfredo Larotonda, laureato in Ingegneria Elettronica, lavora da diversi anni nel settore IT. Dal 1999 si occupa di Java ed in particolare dello sviluppo di applicazioni web J2EE. Dopo diverse esperienze di disegno e sviluppo di applicazioni web per il mercato finanziario e industriale, si occupa ora in particolare di aspetti architetturali per progetti rivolti al mercato della pubblica amministrazione. È Sun Certified Enterprise Architect (SCEA) e ha inoltre conseguito le certificazioni SCJP, SCWCD 1.3, SCWCD 1.4, SCBCD.