Antes de começar, você deve concluir o Exercício 1.2: Diferenças Conceituais entre as APIs.
Neste exercício, você aprenderá as diferenças na codificação da classe Java entre as duas APIs de portlet. Examine as duas versões da classe Java BookmarkPortlet. Observe estas diferenças básicas entre as duas APIs:
As classes de portlet importadas pelas duas APIs são diferentes.
import org.apache.jetspeed.portlet.*;
import javax.portlet.*;
As duas APIs herdam de classes diferentes. A API de portlet IBM estende o org.apache.jetspeed.portlet.PortletAdapter, que fornece uma implementação padrão da interface org.apache.jetspeed.portlet.Portlet. Essa classe de Portlet estende o HttpServlet, portanto, os portlets IBM são um tipo de servlet. A API de portlet JSR 168 fornece uma classe javax.portlet.GenericPortlet que implementa a interface javax.portlet.Portlet.
public class BookmarkPortlet extends PortletAdapter implements ActionListener
public class BookmarkPortlet extends GenericPortlet
Os nomes dos objetos de pedido e resposta nos métodos de processamento (JSR 168 API) ou serviço (IBM API), como doView() e doEdit(), são diferentes. A API de portlet IBM utiliza os objetos PortletRequest e PortletResponse; a API JSR 168 utiliza os objetos RenderRequest e RenderResponse. O RenderRequest e o RenderResponse estendem os objetos PortletRequest e PortletResponse, respectivamente, fornecendo funcionalidade comum.
public void doEdit(PortletRequest request, PortletResponse response)
public void doEdit(RenderRequest request, RenderResponse response)
A API de portlet IBM utiliza o objeto PortletContext para incluir arquivos JSP; a API de portlet JSR 168 utiliza o objeto PortletRequestDispatcher. A ação incluir chama o arquivo JSP especificado.
getPortletConfig().getContext().include(EDIT_JSP, request, response);
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);
A API de portlet IBM armazena dados do usuário em um objeto PortletData. A API de portlet JSR 168 armazena informações semelhantes em um objeto PortletPreferences.
PortletData prefs = portletRequest.getData()
PortletPreferences prefs = renderRequest.getPreferences()
Na API de portlet IBM, a classe Java deve implementar a interface ActionListener fornecendo um método actionPerformed(). Utilizando a API de portlet JSR 168, a classe Java deve fornecer um método processAction(); nenhum listener é necessário.
public void actionPerformed(ActionEvent event) throws PortletException
public void processAction(ActionRequest request, ActionResponse response)
A codificação de espaço de nomes é utilizada para assegurar que as variáveis utilizadas em um portlet sejam exclusivas no contêiner do portal. Os trechos a seguir também mostram os métodos de codificação de espaço de nomes para uso em um arquivo JSP.
em uma classe Java: PortletResponse.encodeNamespace()
em um arquivo JSP: <portletAPI:encodeNamespace/>
em uma classe Java: RenderResponse.getNamespace()
em um arquivo JSP: <portlet:namespace/>
Agora você está pronto para começar o Exercício 1.4: Comparando Diferenças do Descritor de Implementação.