Esercizio 1.4: Confronto delle differenze dei descrittori di distribuzione

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.

Regole di tag per il portlet.xml

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.

IBM portlet API
<!DOCTYPE portlet-app-def PUBLIC "-//IBM//DTD Portlet Application 1.1//EN"
          "portlet_1.1.dtd ">
JSR 168 portlet API
<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">

L'attributo id sull'elemento <portlet-app>

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.

IBM portlet API
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
JSR 168 portlet API
<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">

L'attributo href sull'elemento <portlet>

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.

IBM portlet API
portlet.xml: <portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
web.xml:     <servlet id="Servlet_1086938566718">
JSR 168 portlet API
<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">

Versioni dei portlet

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

IBM portlet API
<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">
JSR 168 portlet API
<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">

Tipi di markup supportati

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.

IBM portlet API
<supports>
   <markup name="html">
      <view />
      <edit />
   </markup>
   <markup name="chtml">
      <view />
   </markup>
</supports>
JSR 168 portlet API
<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>

Modalità supportate

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.

IBM portlet API
<supports>
   <markup name="html">
      <view />
      <edit />
   </markup>
</supports>
JSR 168 portlet API
<supports>
   <portlet-mode>VIEW</portlet-mode>
   <portlet-mode>EDIT</portlet-mode>
</supports>

Stati della finestra consentiti

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.

IBM portlet API
<allows>
   <maximized/>
   <minimized/>
</allows>
JSR 168 portlet API
l'esempio non riporta stati personalizzati, i quali richiedono l'elemento <custom-window-state>

Localizzazione

Alcune stringhe localizzate che definiscono un portlet vengono definite nel descrittore di distribuzione del portlet. Il file portlet.xml di IBM portlet API definisce i valori localizzati per il titolo, il titolo breve, la descrizione e le parole chiave. IBM API dispone anche di un'impostazione per le impostazioni internazionali predefinite. JSR 168 portlet API definisce i valori localizzati per la descrizione del portlet e visualizza il nome in portlet.xml. I valori per il titolo, il titolo breve e le parole chiave si trovano in un insieme di risorse del portlet. Come mostrato di seguito, l'insieme delle risorse del portlet, 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.
IBM portlet API
<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>
JSR 168 portlet API
<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

Scadenza della cache

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

IBM portlet API
<cache>
   <expires>-1</expires>
   <shared>no</shared>
</cache>
JSR 168 portlet API
<expiration-cache>0</expiration-cache>

A questo punto, è possibile iniziare l'Esercizio 1.5: Confronto delle differenze di codifica dei file JSP.

Termini di utilizzo | Feedback
(C) Copyright IBM Corporation 2000, 2005. Tutti i diritti riservati.