Ejercicio 1.4: Comparar diferencias del descriptor de despliegue

Antes de empezar, debe realizar el Ejercicio 1.3: Comparar las diferencias de clases Java.

En este ejercicio se mostrarán las diferencias entre los descriptores de despliegue para las dos API de portlet. Examine las dos versiones del descriptor de despliegue de portlet (portlet.xml). Las diferencias básicas ilustradas en los ejemplos se muestran a continuación. Para editar el descriptor de despliegue de portlet, utilice el editor de descriptores de despliegue de portlet.

Reglas de codificación para portlet.xml

Las reglas de codificación para la API de portlet de IBM se definen mediante una DTD; la API de portlet de JSR 168 se define mediante un esquema XML. Esto supone distintas sentencias de definición XML en la parte superior del descriptor de despliegue de portlet.

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

El atributo id en el elemento <portlet-app>

Ambas API utilizan nombres distintos para el atributo id en el elemento <portlet-app>. La API de portlet de IBM utiliza uid, mientras que la API de portlet de JSR 168 utiliza 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">

El atributo href en el elemento <portlet>

Cuando se utiliza la API de portlet de IBM, el atributo href del elemento <portlet> debe señalar al id correspondiente del elemento <servlet> en el descriptor de despliegue Web (web.xml); cuando se utiliza la API de portlet de JSR 168, el atributo id del elemento <portlet-app> identifica exclusivamente el portlet en el servidor. Los portlets JSR 168 no son servlets y no se necesita la referencia a 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">

Versiones de portlet

Para la API de portlet de IBM, utilice los atributos major-version y minor-version de los elementos <portlet-app> y <portlet>; para la API de portlet de JSR 168, utilice el atributo de version del elemento <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">

Tipos de códigos soportados

En el descriptor de despliegue de portlet, la API de portlet de IBM declara los tipos de codificación soportados mientras que la API de portlet de JSR 168 declara los tipos MIME soportados. IBM proporciona una extensión, el parámetro de inicialización de wps.markup que permite definir los tipos de codificación soportados para los portlets de JSR 168. Esto se utiliza para distinguir entre los tipos de códigos, como por ejemplo HTML y cHTML que utilizan el mismo tipo 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>

Modalidades soportadas

Las modalidades soportadas deben definirse en el descriptor de despliegue para ambas API aunque la sintaxis es ligeramente distinta. Ambas API soportan las modalidades de edición, vista y ayuda (edit, view y help). La API de portlet de IBM soporta también una modalidad de configuración (config). La API de portlet de JSR 168 soporta modalidades personalizadas como acerca de, vista previa, impresión, edición, valores predeterminados y configuración (about, preview, print, edit defaults y config.) Para ambas API, la modalidad de vista (view) es necesaria, el resto de modalidades son opcionales.

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>

Estados de ventana permisibles

El estado normal se proporciona automáticamente para ambas API. Con la API de portlet de IBM, otros estados como por ejemplo solo, deben declararse explícitamente. Con la API de portlet de JSR 168, los estados maximizado y minimizado (maximized y minimized) se proporcionan automáticamente; los estados personalizados deben declararse explícitamente.

API de portlet IBM
<allows>
   <maximized/>
   <minimized/>
</allows>
API de portlet JSR 168
en el ejemplo no se muestran estados personalizados, pero se utilizaría el elemento <custom-window-state>

Traducción

Algunas series traducidas que definen un portlet se definen en el descriptor de despliegue del portlet. El archivo portlet.xml de la API de portlet de IBM define valores traducidos para el título, el título abreviado, la descripción y las palabras clave. La API de IBM también tiene un valor para el entorno local por omisión. La API de portlet de JSR 168 define valores traducidos para la descripción del portlet y el nombre de visualización en el archivo portlet.xml. Los valores para el título, el título abreviado y las palabras clave están en un paquete compuesto de recursos del portlet. Tal como se muestra a continuación, el paquete compuesto de recursos del portlet Portlet.properties está ubicado en el directorio nls del ejemplo. La API de JSR 168 tiene valores para definir el paquete compuesto de recursos y los entornos locales soportados.
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="de">
   <title>Lesezeichen Portlet (IBM)</title>
   <title-short>Lesezeichen</title-short>
   <keywords>Lesezeichen, Bookmark</keywords>
</language>
API de portlet JSR 168
<resource-bundle>nls.Portlet</resource-bundle>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<description xml:lang="EN">Descripción en inglés</description>
<display-name xml:lang="EN">Nombre de visualización en inglés</display>-name>
<description xml:lang="DE">Descripción en alemán</description>
<display-name xml:lang="DE">Nombre de visualización en alemán</display>-name>

Paquete compuesto de recursos de portlet de ejemplo, Portlet.properties:
javax.portlet.title = Bookmark Portlet
javax.portlet.short-title = Bookmark
javax.portlet.keywords = Bookmark

Caducidad de antememoria

En la API de portlet de IBM, los portlets pueden invalidar explícitamente la antememoria (invalidation-based caching) utilizando el método invalidateCache() del objeto PortletRequest. El ámbito y la caducidad de antememoria predeterminados se establecen en el descriptor de despliegue del portlet. El valor del elemento <expires> puede ser 0 (siempre caduca), -1 (nunca caduca) o el número de segundos antes de la caducidad. Para el elemento <shared>, el valor no significa que la antememoria no se comparte entre instancias de portlet.

La API de portlet de JSR utiliza expiration-based caching, donde el tiempo de caducidad se define en el descriptor de despliegue pero el portlet puede restablecer el valor utilizando el valor EXPIRATION_CACHE con el método setAttribute() del objeto RenderResponse. El elemento <expiration-cache> utiliza los mismos valores que la API de portlet de IBM utiliza para el elemento <expires>.

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

Ahora está listo para iniciar el Ejercicio 1.5: Comparar las diferencias de codificación del archivo JSP.

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.