Prima di iniziare, è necessario completare l'Esercizio 1.3: Confronto delle differenze delle classi Java.
In questo esercizio verranno illustrate le differenze concettuali tra le due API per portlet. Esaminare le due versioni del descrittore di distribuzione del portlet (portlet.xml). Le principali differenze illustrate nei codici di esempio sono riportate di seguito. Per modificare il descrittore di distribuzione del portlet, utilizzano l'editor del descrittore di distribuzione del portlet.
Le regole di tag per IBM portlet API vengono definite mediante un DTD; JSR 168 portlet API è definita mediante uno schema XML. Ciò richiede istruzioni di definizione XML differenti all'inizio del descrittore di distribuzione del portlet.
<!DOCTYPE portlet-app-def PUBLIC "-//IBM//DTD Portlet Application 1.1//EN"
"portlet_1.1.dtd ">
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
Le due API utilizzano nomi differenti per l'attributo id sull'elemento <portlet-app>. IBM portlet API utilizza l'uid, mentre JSR 168 portlet API utilizza l'id.
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd "
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
Utilizzando IBM portlet API, l'attributo href dell'elemento <portlet> deve puntare all'id dell'elemento <servlet> nel descrittore di distribuzione Web (web.xml); utilizzando JSR 168 portlet API, l'attributo id sull'elemento <portlet-app> identifica in maniera univoca il portlet per il server. I portlet JSR 168 non sono servlet e non occorre che facciano riferimento a web.xml.
portlet.xml: <portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
web.xml: <servlet id="Servlet_1086938566718">
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd "
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
Per IBM portlet API, utilizzare gli attributi major-version e minor-version degli elementi <portlet-app> e <portlet>; per JSR 168 portlet API, utilizzare l'attributo version dell'elemento <portlet-app>.
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
major-version="1" minor-version="0">
<portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
major-version="1" minor-version="0">
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd "
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
Nel descrittore di distribuzione del portlet, IBM portlet API dichiara i tipi di markup supportati, mentre
JSR 168 portlet API dichiara i tipi di MIME supportati.
IBM fornisce un'estensione, il parametro di inizializzazione wps.markup
, che consente di definire
i tipi di markup supportati per i portlet JSR 168. Viene utilizzata per distinguere tipi di markup differenti,
ma che utilizzano lo stesso tipo MIME: ad esempio, MHTML e cHTML.
<supports>
<markup name="html">
<view />
<edit />
</markup>
<markup name="chtml">
<view />
</markup>
</supports>
<init-param>
<name>wps.markup</name>
<value>html,chtml</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
Le modalità supportate devono essere definite nel descrittore di distribuzione del portlet per entrambe le API, anche se la sintassi è leggermente differente. Entrambe le API supportano le modalità di modifica, visualizzazione e guida. IBM portlet API supporta anche una modalità di configurazione. JSR 168 portlet API supporta modalità personalizzate, quali anteprima, stampa, modifica delle impostazioni predefinite e configurazione. Per entrambe le API, la modalità di visualizzazione è obbligatoria; tutte le altre sono opzionali.
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
Lo stato normale viene fornito automaticamente per entrambe le API. Con IBM portlet API, altri stati, come ad esempio solo, devono essere dichiarati esplicitamente. Con JSR 168 portlet API, vengono forniti automaticamente anche gli stati ingrandita e ridotta; gli stati personalizzati devono essere dichiarati esplicitamente.
<allows>
<maximized/>
<minimized/>
</allows>
Portlet.properties
, si trova nella directory nls
dell'esempio.
JSR 168 API dispone di impostazioni per definire l'insieme di risorse e le impostazioni internazionali supportate.
<default-locale>en</default-locale>
<language locale="en">
<title>Bookmark portlet (IBM)</title>
<title-short>Bookmark</title-short>
<keywords>Bookmark</keywords>
</language>
<language locale="de">
<title>Lesezeichen Portlet (IBM)</title>
<title-short>Lesezeichen</title-short>
<keywords>Lesezeichen, Bookmark</keywords>
</language>
<resource-bundle>nls.Portlet</resource-bundle>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<description xml:lang="EN">English description</description>
<display-name xml:lang="EN">English display name</display>-name>
<description xml:lang="DE">German description</description>
<display-name xml:lang="DE">German display name</display>-name>
Insieme di risorse del portlet di esempio, Portlet.properties:
javax.portlet.title = Bookmark Portlet
javax.portlet.short-title = Bookmark
javax.portlet.keywords = Bookmark
In IBM portlet API, i portlet possono invalidare esplicitamente la cache (memorizzazione nella cache basata sull'invalidazione)
utilizzando il metodo invalidateCache() dell'oggetto PortletRequest. La scadenza e
l'ambito della cache predefiniti vengono impostati nel descrittore di distribuzione del portlet.
Il valore dell'elemento <expires> può essere 0 (scade sempre), -1 (non scade mai) oppure il numero
di secondi da attendere prima della scadenza. Se il valore dell'elemento <shared> è no
significa che la cache
non viene condivisa tra le istanze del portlet.
JSR portlet API utilizza la memorizzazione nella cache basata sulla scadenza: la data di scadenza della cache viene definita nel descrittore di distribuzione, ma i portlet possono reimpostarla utilizzando il valore EXPIRATION_CACHE con il metodo setAttribute() dell'oggetto RenderResponse. L'elemento <expiration-cache> utilizza gli stessi valori che IBM portlet API utilizza per l'elemento <expires>.
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<expiration-cache>0</expiration-cache>
A questo punto, è possibile iniziare l'Esercizio 1.5: Confronto delle differenze di codifica dei file JSP.