Übung 1.4: Unterschiede zwischen den Implementierungsdeskriptoren vergleichen

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.

Kennzeichnungsregeln für portlet.xml

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.

IBM Portlet-API
<!DOCTYPE portlet-app-def PUBLIC "-//IBM//DTD Portlet Application 1.1//EN"
          "portlet_1.1.dtd ">
JSR 168-Portlet-API
<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">

Attribut id im Element <portlet-app>

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.

IBM Portlet-API
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
JSR 168-Portlet-API
<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">

Attribut href im Element <portlet>

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.

IBM Portlet-API
portlet.xml: <portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
web.xml:     <servlet id="Servlet_1086938566718">
JSR 168-Portlet-API
<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">

Portletversionen

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

IBM Portlet-API
<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">
JSR 168-Portlet-API
<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">

Unterstützte Markup-Typen

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.

IBM Portlet-API
<supports>
   <markup name="html">
      <view />
      <edit />
   </markup>
   <markup name="chtml">
      <view />
   </markup>
</supports>
JSR 168-Portlet-API
<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

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.

IBM Portlet-API
<supports>
   <markup name="html">
      <view />
      <edit />
   </markup>
</supports>
JSR 168-Portlet-API
<supports>
   <portlet-mode>VIEW</portlet-mode>
   <portlet-mode>EDIT</portlet-mode>
</supports>

Zulässige Fensterstatusarten

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.

IBM Portlet-API
<allows>
   <maximized/>
   <minimized/>
</allows>
JSR 168-Portlet-API
Im Beispiel werden keine angepassten Statusarten angezeigt. Es würde jedoch das Element <custom-window-state> verwendet werden.

Lokalisierung

Bestimmte lokalisierte Zeichenfolgen, die ein Portlet definieren, werden im Portletimplementierungsdeskriptor definiert. Bei der IBM Portlet-API werden in portlet.xml lokalisierte Werte für den Titel, den Kurztitel, die Beschreibung und die Schlüsselwörter definiert. Außerdem hat die IBM API eine Einstellung für die Standardländereinstellung. Bei der JSR 168-Portlet-API werden in portlet.xml lokalisierte Werte für die Portletbeschreibung und den Anzeigenamen definiert. Die Werte für den Titel, den Kurztitel und die Schlüsselwörter befinden sich in einem Portletressourcenpaket. Wie unten gezeigt, befindet sich das Portletressourcenpaket Portlet.properties im Verzeichnis nls des Beispiels. Die JSR 168-API besitzt Einstellungen zur Definition des Ressourcenpakets und der unterstützten Ländereinstellungen.
IBM Portlet-API
<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>
JSR 168-Portlet-API
<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

Verfallszeit des Cache

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.

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

Nun sind Sie bereit für die Übung 1.5: Unterschiede in der Codierung der JSP-Dateien vergleichen.

Feedback
(C) Copyright IBM Corporation 2000, 2005. Alle Rechte vorbehalten.