Introduzione
Il progetto Jakarta-Jetspeed consente la costruzione di portali enterprise attraverso le portlet.
Le portlet sono componenti web utilizzabili come plug-in e gestite da un container (Jetspeed, appunto). Le pagine vengono costruite assemblando le portlet, che visivamente sono porzioni di pagina e funzionalmente sono dei canali informativi. L'applicazione di questa modularità permette agli utenti di costruirsi un portale personalizzato, semplicemente scegliendo dove come e in quale pagina disporre le portlet con diversi contenuti.
Le portlet possono essere applicazioni java di qualsiasi tipo, basate ad esempio su delle "action" (di Turbine, Velocity oppure Struts), contenuti di altri siti tramite RSS [1], trasformazioni xsl, oppure pubblicazioni operate con Cocoon [2].
Una applicazione alternativa consentita dalle portlet è il collegamento con sistemi di content management, grazie alla "grana fine" offerta dalle portlet.
Jetspeed mostra i contenuti in maniera consona alla lingua e al browser; questo può essere un client http o un cellulare wap o un palmare. Per consentire la portabilità tra i vari portlet container commerciali, è stata fatta richiesta al java community process per formalizzare uno standard apposito per le portlet (jsr 168*). Fanno parte della commissione per lo standard oltre alla ASF, Oracle, IBM, Sun, SAP, Borland, Novell, e molte altre.
Framework e componenti usati in Jetspeed
Iniziamo a vedere in maniera logico-funzionale come vengono assemblate le pagine.
L'assemblaggio delle varie portlet in una pagina è compito di Turbine. Turbine è un framework Jakarta per la costruzione di applicazioni web secondo il paradigma MVC[3].
Turbine fornisce servizi e funzionalità, in particolare attraverso le action, servizi in background e template. Per quanto riguarda i template esso usa Velocity[4] oppure le Jsp.
Velocity è un template engine Jakarta, è possibile attraverso i suoi template (.vm Velocity macro) avere accesso agli oggetti java presenti nel suo contesto. Velocity rappresenta la view di Turbine.
Costruzione delle pagine
Le chiamate alle pagine di jetspeed sono del tipo:
http://www…/portal/user/nomeUtente/page/default.psml?parametriEventuali
L'url contiene il nome dell'utente che sta richiedendo una pagina (page) e fa riferimento ad un file psml, seguito anche da eventuali parametri. Il file psml (Portal structure markup language) è un file xml che contiene la struttura del sito con le entry delle portlet per le varie pagine (ma è anche possibile anche avere file separati, per ogni pagina, che si referenziano per comporre un unico file psml). Nel file psml è anche indicato quali controller del layout devono essere usati per la disposizione dei componenti costituenti la pagina es.tab-controller, card-controller.
A questo punto Jetspeed ha tutte le informazioni che sono necessarie per far comporre la pagina. Turbine partendo dal file default.vm di Velocity che contiene il layout generale delle pagine assembla le portlet secondo lo schema imposto dal controller indicato nel psml.
I file Velocity macro (vm)
Sono i template di velocity, sono dei file html con delle variabili che vengono sostituite da Velocity.
Un esempio di file vm è il seguente default.vm:
<html>
<head>
…$jnavigation.setTemplate("top.vm")</td>
…..
$jnavigation.setTemplate("left.vm")
…
$screen_placeholder
….
$jnavigation.setTemplate("bottom.vm")
…
</body>
</html>
In esso viene detto a Velocity di comporre il layout della pagina con un top, un left un bottom e una parte che viene referenziata come screen e che vedremo in seguito. Il risultato sarà una pagina formata come in figura 2.
Ora vediamo a cosa corrisponde $screen placeholder.
Abbiamo detto in precedenza che il file psml conteneva le portlet da visualizzare per le pagine corrispondenti ed esse vengono inserite per quella pagina nella parte indicata con screen, secondo le modalità indicate dal controller. Perciò avremo la struttura della pagina corrispondente alla figura 3 e 4, che è la struttura delle pagine costruite da Turbine usando i template di Velocity.
Funzionalità ulteriori
Dopo la spiegazione del funzionamento più comune, usando cioè i template Velocity e chiamate http, andiamo a vedere la struttura di jetspeed e di descrivere le altre funzionalità. Dentro la cartella WEB-INF\templates troviamo due sottodirectory, Jsp e Velocity, in quanto Turbine può usare entrambi i tipi di template. Dentro una delle due sottodirectory troveremo le cartelle html e wml, in esse sono contenuti i template per i browser http e in quella wml quelli per i cellulari e i palmari.
Attraverso questi template viene gestita la fruizione dei contenuti su più canali, per quanto riguarda la localizzazione, viene gestita sia attraverso un servizio di Turbine che viene usato da Velocity (l10n), sia attraverso i file nelle varie lingue ove disponibili. Jetspeed espone inoltre dei web-services di esempio. Configurando opportunamente i template Velocity, è possibile avere anche layout differenti per le varie pagine del portale, l'unico limite è la fantasia del grafico che sceglierà il layout del sito, che verrà poi tradotto in template Velocity.
Struttura e contenuto dei file psml (Portal structure markup language)
Esso contiene la struttura del portale del singolo utente, le portlet che comporranno le varie pagine, nonché i controller per le varie pagine e anche le skin delle portlet.
<?xml version="1.0" encoding="iso-8859-1"?> <portlets xmlns="http://xml.apache.org/jetspeed/2000/psml"> <metainfo> <title>Default Jetspeed Page</title> </metainfo> <control name="TabControl"/> <controller name="CardPortletController"> <parameter name="parameter" value="pane"/> </controller> <skin name="orange-grey"/> … <portlets> <entry parent="HelloVelocity"/> <layout> <property name="row" value="0"/> <property name="column" value="1"/> </layout> </portlets> <portlets> <entry parent="HelloJSP"/> <layout> <property name="row" value="1"/> <property name="column" value="0"/> </layout> </portlets> </portlets> </portlets>
Conclusioni
In questo primo articolo si è dato un primo sguardo a ciò che Jetspeed e le portlet forniscono:
La possibilità agli utenti di costruirsi dei portali a loro piacimento, in base alla lingua e al dispositivo su cui le informazioni vengono richieste, consentono anche il collegamento con dei Content Management System grazie alla grana fine con cui le informazioni possono essere veicolate, un esempio di Jetspeed con un cms si può trovare presso: http://www.anglonaweb.it/.
La lista completa dei siti costruiti con Jetsped sono visibili su http://jakarta.apache.org/jetspeed/site/usejetspeed.html
Dal punto di vista dello sviluppatore essendo Jetspeed un portale che espone informazioni applicazioni e servizi è possibile trovare in esso l'applicazione delle ultime novità, degli standard, delle tendenze e delle metodologie della programmazione java, nonché l'uso altri progetti che normalmente non sono di comune utilizzo da parte di chi non è frequentatore delle mailing list open-source, ma che sono utilizzati in progetti commerciali. Nel prossimo articolo vedremo in maniera più tecnica e dettagliata le gerarchie delle portlet, come funzionano effettivamente, quanti e quali sono i tipi base, e come deployarle in un portlet container.
Bibliografia e riferimenti
Jetspeed: Enterprise Information Portal: http://jakarta.apache.org/jetspeed
Turbine: Web Application framework: http://jakarta.apache.org/turbine
Velocity: Java Template Engine: http://jakarta.apache.org/velocity
Cocoon: Struttura di pubblicazione java: http://xml.apache.org/cocoon
jsr168: http://www.jcp.org/en/jsr/detail?id=168
- [1] Rss (Rich Site Summary) McLaughlin, "Java e Xml", ed. O'Reilly 2001
- [2] Cocoon McLaughlin, "Java e Xml", ed. O'Reilly 2001
- [3] http://jakarta.apache.org/turbine/turbine-2.3/model2+1.html
- [4] Velocity e WebMacro Hunter-Crawford, "Java Servlet Programming II ed.", ed. O'Reilly 2001
