Exercice 1.3 : Comparaison des classes Java

Avant de commencer, vous devez terminer l'Exercice 1.2 : Différences conceptuelles entre les API.

Dans cet exercice, vous allez découvrir les différences de codage de classe Java en utilisant l'une ou l'autre API de portlet. Comparez les deux versions de la classe Java BookmarkPortlet. Vous pourrez remarquer les différences de base ci-après entre les deux API.

Importation des classes de portlet de base

Les classes de portlet importées par les deux API sont différentes.

API de portlet IBM
import org.apache.jetspeed.portlet.*;
API de portlet JSR 168
import javax.portlet.*;

Héritage de classe Java

Les deux API héritent de classes différentes. L'API de portlet IBM étend org.apache.jetspeed.portlet.PortletAdapter qui fournit une implémentation par défaut de l'interface org.apache.jetspeed.portlet.Portlet. Cette classe de portlet étend HttpServlet ; les portlets IBM sont donc un type de servlet. L'API de portlet JSR 168 fournit une classe javax.portlet.GenericPortlet qui implémente l'interface javax.portlet.Portlet.

API de portlet IBM
public class BookmarkPortlet extends PortletAdapter implements ActionListener
API de portlet JSR 168
public class BookmarkPortlet extends GenericPortlet

Objets de demande et de réponse

Les noms des objets de demande et de réponse dans les méthodes d'affichage (API JSR 168) ou de service (API IBM), telles que doView() et doEdit(), sont différents. L'API de portlet IBM utilise les objets PortletRequest et PortletResponse, alors que l'API de portlet JSR 168 fait appel aux objets RenderRequest et RenderResponse. RenderRequest et RenderResponse étendent respectivement les objets PortletRequest et PortletResponse, fournissant ainsi une fonctionnalité commune

API de portlet IBM
public void doEdit(PortletRequest request, PortletResponse response)
API de portlet JSR 168
public void doEdit(RenderRequest request, RenderResponse response)

Inclusion de fichiers JSP

L'API de portlet IBM utilise l'objet PortletContext pour inclure les fichiers JSP, alors que l'API de portlet JSR 168 emploie l'objet PortletRequestDispatcher. L'action d'inclusion appelle le fichier JSP spécifié.

API de portlet IBM
getPortletConfig().getContext().include(EDIT_JSP, request, response);
API de portlet JSR 168
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);

Données de portlet

L'API de portlet IBM stocke les données utilisateur dans un objet PortletData. L'API de portlet JSR 168 stocke ces données dans un objet PortletPreferences.

API de portlet IBM
PortletData prefs = portletRequest.getData()
API de portlet JSR 168
PortletPreferences prefs = renderRequest.getPreferences()

Traitement des actions

Dans l'API de portlet IBM, la classe Java doit implémenter l'interface ActionListener en fournissant une méthode actionPerformed(). Dans le cas de l'API de portlet JSR 168, la classe Java doit fournir une méthode processAction() ; aucun programme d'écoute n'est nécessaire.

API de portlet IBM
public void actionPerformed(ActionEvent event) throws PortletException
API de portlet JSR 168
public void processAction(ActionRequest request, ActionResponse response)

Codage de l'espace de nom

Le codage de l'espace de nom permet de garantir l'unicité, au sein du conteneur de portail, des variables employées dans un portlet. Les extraits ci-après indiquent également des méthodes de codage d'espace de nom pour une utilisation dans un fichier JSP.

API de portlet IBM
dans une classe Java : PortletResponse.encodeNamespace()
dans un fichier JSP :   <portletAPI:encodeNamespace/>
API de portlet JSR 168
dans une classe Java : RenderResponse.getNamespace()
dans un fichier JSP :   <portlet:namespace/>

A présent, vous êtes prêt à commencer l'Exercice 1.4 : Comparaison des descripteurs de déploiement.

Conditions d'utilisation | Commentaires
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.