Antes de começar, você deve concluir o Exercício 1.3: Comparando Diferenças da Classe Java.
Neste exercício, você aprenderá as diferenças entre os descritores de implementação para as duas APIs de portlet. Examine as duas versões do descritor de implementação de portlet (portlet.xml). As diferenças básicas ilustradas nas amostras são mostradas a seguir. Para editar o descritor de implementação de portlet, utilize o editor do descritor de implementação de portlet.
As regras de tags para a API de portlet IBM são definidas por um DTD; a API de portlet JSR 168 é definida por um esquema XML. Isso requer diferentes instruções de definição XML no topo do descritor de implementação 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">
As duas APIs utilizam nomes diferentes para o atributo id no elemento <portlet-app>. A API de portlet IBM utiliza uid, enquanto a API de portlet 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">
Utilizando a API de portlet IBM, o atributo href do elemento <portlet> deve apontar para o id correspondente do elemento <servlet> no descritor de implementação da Web (web.xml); utilizando a API de portlet JSR 168, o atributo id no elemento <portlet-app> identifica exclusivamente o portlet para o servidor. Portlets JSR 168 não são servlets e não precisam de referência ao 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 a API de portlet IBM, utilize os atributos major-version e minor-version dos elementos <portlet-app> e <portlet>; para a API de portlet JSR 168, utilize o atributo version do 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">
No descritor de implementação do portlet, a API de portlet IBM declara tipos de marcação suportados, enquanto
a API de portlet JSR 168 declara tipos MIME suportados.
A IBM fornece uma extensão, o parâmetro de inicialização wps.markup
, que permite definir os
tipos de marcação suportados para os portlets JSR 168. Isso é utilizado para diferenciar entre os tipos de marcação,
como HTML e cHTML, que utilizam o mesmo 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>VISUALIZAR</portlet-mode>
<portlet-mode>EDITAR</portlet-mode>
</supports>
Os modos suportados devem ser definidos no descritor de implementação de portlet para ambas as APIs, embora a sintaxe seja um pouco diferente. Ambas as APIs suportam os modos editar, visualizar e ajuda. A API de portlet IBM também suporta um modo config. A API de portlet JSR 168 suporta nós personalizados, como sobre, visualizar, imprimir, editar padrões e config. Para ambas as APIs, o modo de visualização é necessário; todos os outros modos são opcionais.
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VISUALIZAR</portlet-mode>
<portlet-mode>EDITAR</portlet-mode>
</supports>
O estado normal é automaticamente fornecido para ambas as APIs. Com a API de portlet IBM, outros estados, como sozinho, devem ser explicitamente declarados. Com a API de portlet JSR 168, os estados maximizado e minimizado também são automaticamente fornecidos; os estados personalizados devem ser explicitamente declarados.
<allows>
<maximized/>
<minimized/>
</allows>
Portlet.properties
, está localizado no diretório nls
da amostra.
A API JSR 168 possui configurações para definir o pacote de recursos e os códigos dos idiomas suportados.
<default-locale>en</default-locale>
<language locale="en">
<title>Portlet de Favoritos (IBM)</title>
<title-short>Favoritos</title-short>
<keywords>Favoritos</keywords>
</language>
<language locale="de">
<title>Portlet Lesezeichen (IBM)</title>
<title-short>Lesezeichen</title-short>
<keywords>Lesezeichen, Favoritos</keywords>
</language>
<resource-bundle>nls.Portlet</resource-bundle>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<description xml:lang="EN">Descrição em inglês</description>
<display-name xml:lang="EN">Nome de exibição em inglês</display>-name>
<description xml:lang="DE">Descrição em alemão</description>
<display-name xml:lang="DE">Nome de exibição em alemão</display>-name>
Pacote de recursos do portlet de amostra, Portlet.properties:
javax.portlet.title = Portlet de Favoritos
javax.portlet.short-title = Favoritos
javax.portlet.keywords = Favoritos
Na API de portlet IBM, os portlets podem invalidar explicitamente o cache (armazenamento em cache de invalidação)
utilizando método invalidateCache() do objeto PortletRequest. O escopo e
e a expiração de cache padrão são definidos no descritor de implementação de portlet.
O valor do elemento <expires> pode ser 0 (sempre expira), -1 (nunca expira) ou o número
de segundos antes da expiração. O valor do elemento <shared> de no
significa que o cache
não está compartilhado entre as instâncias do portlet.
A API de portlet JSR utiliza o armazenamento em cache baseado em expiração, em que o tempo de expiração de cache é definido no descritor de implementação, mas os portlets podem reconfigurar o valor utilizando o valor EXPIRATION_CACHE com o método setAttribute() do objeto RenderResponse. O elemento <expiration-cache> utiliza os mesmos valores que a API de portlet IBM utiliza para o elemento <expires>.
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<expiration-cache>0</expiration-cache>
Agora você está pronto para começar o Exercício 1.5: Comparando Diferenças da Codificação do Arquivo JSP.