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.
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.
<!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">
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.
<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">
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.
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">
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>.
<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">
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.
<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>
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.
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
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.
<allows>
<maximized/>
<minimized/>
</allows>
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.
<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">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
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>.
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<expiration-cache>0</expiration-cache>
Ahora está listo para iniciar el Ejercicio 1.5: Comparar las diferencias de codificación del archivo JSP.