Bevor Sie anfangen, müssen Sie die Übung 1.3: Unterschiede zwischen den Java-Klassen vergleichen ausführen.
In dieser Übung lernen Sie die Unterschiede zwischen den Implementierungsdeskriptoren für die beiden Portlet-APIs kennen. Untersuchen Sie die beiden Versionen des Portletimplementierungsdeskriptors (portlet.xml). Nachstehend werden die in den Beispielen veranschaulichten Hauptunterschiede gezeigt. Verwenden Sie zum Bearbeiten einen speziellen Editor für Portletimplementierungsdeskriptoren.
Die Kennzeichnungsregeln werden bei der IBM Portlet-API in einer DTD definiert. Bei der JSR 168-Portlet-API erfolgt die Definition über ein XML-Schema. Daher sind am Anfang des Portletimplementierungsdeskriptors unterschiedliche XML-Definitionsanweisungen erforderlich.
<!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">
Die beiden APIs verwenden unterschiedliche Namen für das Attribut id im Element <portlet-app>. Die IBM Portlet-API verwendet uid, die JSR 168-Portlet-API dagegen 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">
Bei der IBM Portlet-API muss das Attribut href des Elements <portlet> auf die entsprechende id des Elements <servlet> im Webimplementierungsdeskriptor (web.xml) zeigen. Bei Verwendung der JSR 168-Portlet-API kennzeichnet das Attribut id im Element <portlet-app> das Portlet eindeutig für den Server. JSR 168-Portlets sind keine Servlets und benötigen die Referenz auf web.xml nicht.
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">
Verwenden Sie bei der IBM Portlet-API die Attribute für die übergeordnete und untergeordnete Version der Elemente <portlet-app> und <portlet>. Verwenden Sie bei der JSR 168-Portlet-API das Versionsattribut des Elements <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">
Im Portletimplementierungsdeskriptor werden bei der IBM Portlet-API unterstützte Markup-Typen deklariert, bei der JSR 168 Portlet-API dagegen unterstützte MIME-Typen.
IBM stellt den Initialisierungsparameter wps.markup
bereit, eine Erweiterung, mit der Sie die unterstützten Markup-Typen für JSR 168-Portlets definieren können. Dies dient zur Differenzierung zwischen Markup-Typen wie HTML und cHTML, die denselben MIME-Typ verwenden.
<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>
Unterstützte Modi müssen bei beiden APIs im Portletimplementierungsdeskriptor definiert werden, auch wenn die jeweilige Syntax kleine Unterschiede aufweist. Beide APIs unterstützen einen Bearbeitungs-, Anzeige- und Hilfemodus. Darüber hinaus unterstützt die IBM Portlet-API einen Konfigurationsmodus. Die JSR 168-Portlet-API unterstützt angepasste Modi für die Produktinfo, Voranzeige, Konfiguration, für das Drucken sowie für Bearbeitungsstandards. Bei beiden APIs ist der Anzeigemodus obligatorisch, während alle übrigen Modi optional sind.
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
Der Status Normal wird bei beiden APIs automatisch bereitgestellt. Bei der IBM Portlet-API müssen andere Statusarten wie Solo explizit deklariert werden. Bei der JSR 168-Portlet-API werden auch die Statusarten Maximiert und Minimiert automatisch bereitgestellt. Angepasste Statusarten müssen explizit deklariert werden.
<allows>
<maximized/>
<minimized/>
</allows>
Portlet.properties
im Verzeichnis nls
des Beispiels.
Die JSR 168-API besitzt Einstellungen zur Definition des Ressourcenpakets und der unterstützten Ländereinstellungen.
<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">Englische Beschreibung</description>
<display-name xml:lang="EN">Englischer Anzeigename</display>-name>
<description xml:lang="DE">Deutsche Beschreibung</description>
<display-name xml:lang="DE">Deutscher Anzeigename</display>-name>
Beispiel für Portletressourcenpaket, Portlet.properties:
javax.portlet.title = Bookmark Portlet
javax.portlet.short-title = Bookmark
javax.portlet.keywords = Bookmark
Bei der IBM Portlet-API können Portlets mit Hilfe der Methode invalidateCache() des Objekts PortletRequest den Cache explizit ungültig machen (Caching auf Invalidierungsbasis). Der Portletimplementierungsdeskriptor definiert die Standardverfallszeit und den Standardumfang des Cache.
Das Element <expires> kann den Wert 0 (Verfällt immer), -1 (Verfällt nie) oder die Anzahl der Sekunden vor dem Verfall annehmen. Der Wert no
des Elements <shared> bedeutet, dass der Cache von Portletexemplaren nicht gemeinsam genutzt wird.
Die JSR-Portlet-API verwendet Caching auf Verfallszeitbasis. Dabei wird die Verfallszeit des Cache im Implementierungsdeskriptor definiert. Portlets können den Wert jedoch mit der Methode setAttribute() des Objekts RenderResponse den Wert für EXPIRATION_CACHE zurücksetzen. Das Element <expiration-cache> verwendet dieselben Werte wie das Element <expires> bei der IBM Portlet-API.
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<expiration-cache>0</expiration-cache>
Nun sind Sie bereit für die Übung 1.5: Unterschiede in der Codierung der JSP-Dateien vergleichen.