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.
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.
<!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">
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.
<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">
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.
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">
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>.
<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">
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.
<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>
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.
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
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.
<allows>
<maximized/>
<minimized/>
</allows>
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 environnements locaux pris en charge.
<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>
<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
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>.
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<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.