Ejercicio 1.3: Comparar diferencias de clase JavaTM

Antes de empezar, debe realizar el Ejercicio 1.2: Diferencias conceptuales entre las API.

En este ejercicio se mostrarán las diferencias en la codificación de clases Java entre las dos API de portlet. Examine las dos versiones de la clase Java BookmarkPortlet. Fíjese en estas diferencias básicas entre ambas API:

Importar clases de portlet básicas

Las clases de portlet que importan ambas API son diferentes.

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

Herencia de clase Java

Las dos API heredan de distintas clases. La API de portlet de IBM amplía org.apache.jetspeed.portlet.PortletAdapter que proporcionan una implementación por omisión de la interfaz org.apache.jetspeed.portlet.Portlet. Esta clase de Portlet amplía HttpServlet, de modo que los portlets de IBM son un tipo de servlet. La API de portlet de JSR 168 proporciona una clase javax.portlet.GenericPortlet que implementa la interfaz javax.portlet.Portlet.

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

Objetos de petición y respuesta

Los nombres de los objetos de petición y de respuesta en los métodos de representación (API de JSR 168) o servicio (API de IBM) como por ejemplo doView() y doEdit(), son diferentes. La API de portlet de IBM utiliza objetos PortletRequest y PortletResponse; la API de JSR 168 utiliza los objetos RenderRequest y RenderResponse. RenderRequest y RenderResponse amplían los objetos PortletRequest y PortletResponse respectivamente, proporcionando una funcionalidad común.

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

Inclusión de archivos JSP

La API de portlet de IBM utiliza el objeto PortletContext para incluir archivos JSP; la API de portlet JSR 168 utiliza el objeto PortletRequestDispatcher. La acción de inclusión invoca el archivo JSP especificado.

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);

Datos de portlet

La API de portlet de IBM almacena datos de usuario en un objeto PortletData. La API de portlet de JSR 168 almacena información parecida en un objeto PortletPreferences.

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

Proceso de acciones

En la API de portlet de IBM, la clase Java debe implementar la interfaz ActionListener proporcionando un método actionPerformed(). Con la API de portlet de JSR 168, la clase Java debe proporcionar un método processAction(); no se necesita escuchador.

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

Codificación de espacio de nombres

La codificación de espacio de nombres se utiliza para asegurarse de que las variables utilizadas en un portlet son exclusivas con el contenedor de portal. Los extractos siguientes muestran también métodos de codificación de espacio de nombres para utilizarlo en un archivo JSP.

API de portlet IBM
en una clase Java: PortletResponse.encodeNamespace()
en un archivo JSP:   <portletAPI:encodeNamespace/>
API de portlet JSR 168
en una clase Java: RenderResponse.getNamespace()
en un archivo JSP:   <portlet:namespace/>

Ahora está preparado para iniciar el Ejercicio 1.4: Comparar diferencias del descriptor de despliegue.

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.