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:
Las clases de portlet que importan ambas API son diferentes.
import org.apache.jetspeed.portlet.*;
import javax.portlet.*;
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.
public class BookmarkPortlet extends PortletAdapter implements ActionListener
public class BookmarkPortlet extends GenericPortlet
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.
public void doEdit(PortletRequest request, PortletResponse response)
public void doEdit(RenderRequest request, RenderResponse response)
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.
getPortletConfig().getContext().include(EDIT_JSP, request, response);
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);
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.
PortletData prefs = portletRequest.getData()
PortletPreferences prefs = renderRequest.getPreferences()
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.
public void actionPerformed(ActionEvent event) throws PortletException
public void processAction(ActionRequest request, ActionResponse response)
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.
en una clase Java: PortletResponse.encodeNamespace()
en un archivo JSP: <portletAPI:encodeNamespace/>
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.