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.
Les classes de portlet importées par les deux API sont différentes.
import org.apache.jetspeed.portlet.*;
import javax.portlet.*;
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.
public class BookmarkPortlet extends PortletAdapter implements ActionListener
public class BookmarkPortlet extends GenericPortlet
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
public void doEdit(PortletRequest request, PortletResponse response)
public void doEdit(RenderRequest request, RenderResponse response)
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é.
getPortletConfig().getContext().include(EDIT_JSP, request, response);
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);
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.
PortletData prefs = portletRequest.getData()
PortletPreferences prefs = renderRequest.getPreferences()
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.
public void actionPerformed(ActionEvent event) throws PortletException
public void processAction(ActionRequest request, ActionResponse response)
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.
dans une classe Java : PortletResponse.encodeNamespace()
dans un fichier JSP : <portletAPI:encodeNamespace/>
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.