MokaByte 75 - Giugno 2003 
Portlet Java
I Parte
di
Massimiliano Dessė
Portlet: mattoni per portali Enterprise. Jakarta Jetspeed portlet container e jsr168. Cosa sono e come funzionano le portlet, componenti per portali Enterprise

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 stà 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.


Figura 1 - Architettura Jetspeed


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



Figura 2 - Jetspeed layout

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 figura3 e 4, che è la struttura delle pagine costruite da Turbine usando i template di Velocity.



Figura 3 - Layout Turbine



Figura 4
- Layout Screen

 

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.

 


Figura 5 - Jetspeed su browser http://www.anglonaweb.it



Figura 6 - Jetspeed su emulatore wap


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

Massimiliano Dessì ha iniziato a lavorare presso la Sistemi Informativi S.p.A (IBM) come programmatore Java. Da due anni lavora presso Atlantis S.p.A.(http://www.gruppoatlantis.com/), dove utilizzando metodologie agili quali l'eXtreme programming (Xp), sviluppa applicazioni enterprise Web-based con tecnologia J2EE quali portali e content management system per la promozione del territorio.
Nel tempo libero contribuisce al progetto open-source jakarta -Jetspeed,
di cui ha realizzato il servizio di localizzazione e la portlet per la localizzazione nelle varie lingue, cura la versione italiana di Jetspeed.
Laureando in Ingegneria Elettronica presso l' Università di Cagliari.

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