Exercice 1.4 : Comparaison des descripteurs de déploiement

Avant de commencer, vous devez terminer l'Exercice 1.3 : Comparaison des classes Java.

Dans cet exercice, vous allez découvrir les différences entre les descripteurs de déploiement des deux API de portlet. Comparez les deux versions du descripteur de déploiement de portlet (portlet.xml). Les différences de base illustrées dans les exemples sont décrites ci-après. Pour éditer le descripteur de déploiement de portlet, faites appel à l'éditeur de descripteur de déploiement de portlet.

Règles de balisage pour portlet.xml

Les règles de balisage de l'API de portlet IBM sont définies par un fichier DTD ; l'API de portlet JSR 168 est définie par un schéma XML. Des instructions de définition XML différentes doivent donc figurer au début du descripteur de déploiement.

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

Attribut id dans l'élément <portlet-app>

Les deux API utilisent des noms différents pour l'attribut id dans l'élément <portlet-app>. L'API de portlet IBM indique uid, alors que l'API de portlet JSR 168 emploie id.

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

Attribut href dans l'élément <portlet>

Dans le cas de l'API de portlet IBM, l'attribut href de l'élément <portlet> doit indiquer l'ID correspondant de l'élément <servlet> dans le descripteur de déploiement Web (web.xml). Dans le cas de l'API de portlet JSR 168, l'attribut id de l'élément <portlet-app> identifie de manière unique le portlet pour le serveur. Les portlets JSR 168 ne sont pas des servlets et ne nécessitent pas la référence à web.xml.

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

Versions de portlet

Dans le cas de l'API de portlet IBM, utilisez les attributs major-version et minor-version des éléments <portlet-app> et <portlet>. Dans le cas de l'API de portlet JSR 168, utilisez l'attribut version de l'élément <portlet-app>.

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

Types de marquage pris en charge

Dans le descripteur de déploiement de portlet, l'API de portlet IBM déclare les types de marquage pris en charge, alors que l'API de portlet JSR 168 déclare les types MIME pris en charge. IBM fournit une extension, le paramètre d'initialisation wps.markup, qui permet de définir les types de marquage pris en charge pour les portlets JSR 168. Cela permet de différencier les types de marquage, tels que HTML et cHTML, qui utilisent le même type MIME.

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

Modes pris en charge

Les modes pris en charge doivent être définis dans le descripteur de déploiement des deux API, même si la syntaxe est légèrement différente. Les deux API prennent en charge les modes édition, affichage et aide. L'API de portlet IBM prend également en charge un mode configuration. L'API de portlet JSR 168 prend en charge les modes personnalisés tels que la prévisualisation, l'impression, l'édition des valeurs par défaut et la configuration. Le mode affichage est obligatoire pour les deux API. Tous les autres modes sont facultatifs.

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

Etats de fenêtre admis

L'état normal est automatiquement fourni pour les deux API. Dans le cas de l'API de portlet IBM, d'autres états, tels que l'état solo, doivent être explicitement déclarés. Avec l'API de portlet JSR 168, les états agrandi et réduit sont également automatiquement fournis. Les états personnalisés doivent être explicitement déclarés.

API de portlet IBM
<allows>
   <maximized/>
   <minimized/>
</allows>
API de portlet JSR 168
Aucun état personnalisé n'est illustré dans l'exemple, mais l'élément <custom-window-state> est employé.

Localisation

Certaines chaînes localisées définissant un portlet sont définies dans le descripteur de déploiement de portlet. Le fichier portlet.xml de l'API de portlet IBM définit les valeurs localisées du titre, du titre abrégé, de la description et des mots clés. L'API IBM dispose également d'un paramètre pour l'environnement local par défaut. L'API de portlet JSR 168 définit les valeurs localisées pour la description et le nom d'affichage du portlet dans portlet.xml. Les valeurs du titre, du titre abrégé et des mots clés figurent dans un regroupement de ressources de portlet. Comme indiqué ci-après, le regroupement de ressources de portlet, Portlet.properties, se trouve dans le répertoire nls de l'exemple. L'API JSR 168 dispose de paramètres de définition du regroupement de ressources et des environnement locaux pris en charge.
API de portlet IBM
<default-locale>en</default-locale>
<language locale="en">
   <title>Bookmark portlet (IBM)</title>
   <title-short>Bookmark</title-short>
   <keywords>Bookmark</keywords>
</language>
<language locale="fr">
   <title>Portlet de signet (IBM)</title>
   <title-short>Signet</title-short>
   <keywords>Signet, Bookmark</keywords>
</language>
API de portlet JSR 168
<resource-bundle>nls.Portlet</resource-bundle>
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
<description xml:lang="EN">English description</description>
<display-name xml:lang="EN">English display name</display>-name>
<description xml:lang="FR">Description française</description>
<display-name xml:lang="FR">Nom d'affichage français</display>-name>

Regroupement de ressources du portlet exemple, Portlet.properties :
javax.portlet.title = Bookmark Portlet
javax.portlet.short-title = Bookmark
javax.portlet.keywords = Bookmark

Délai d'expiration de la mémoire cache

Dans l'API de portlet IBM, les portlets peuvent explicitement invalider la mémoire cache (mise en cache fondée sur l'invalidation) via la méthode invalidateCache() de l'objet PortletRequest. Le délai d'expiration et la portée par défaut de la mémoire cache sont définis dans le descripteur de déploiement de portlet. La valeur de l'élément <expires> peut être égale à 0 (expire toujours), à -1 (n'expire jamais) ou au nombre de secondes précédant l'expiration. Si l'élément <shared> prend la valeur no, la mémoire cache n'est pas partagée entre les instances de portlet.

L'API de portlet JSR utilise la mise en cache fondée sur l'expiration :le délai d'expiration de la mémoire cache est défini dans le descripteur de déploiement, mais les portlets peuvent le réinitialiser avec la valeur EXPIRATION_CACHE à l'aide de la méthode setAttribute() de l'objet RenderResponse. L'élément <expiration-cache> utilise les mêmes valeurs que l'API de portlet IBM pour l'élément <expires>.

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

A présent, vous êtes prêt à commencer l'Exercice 1.5 : Comparaison des modes de codage de fichier JSP.

Conditions d'utilisation | Commentaires
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.