Esercizio 1.3: Confronto delle differenze delle classi JavaTM

Prima di iniziare, è necessario completare l'Esercizio 1.2: Differenze concettuali tra le API.

In questo esercizio verranno illustrate le differenze relative alla codifica delle classi Java tra le due API per portlet. Esaminando le due versioni della classe Java BookmarkPortlet, è possibile notare le seguenti differenze di base tra le due API:

Importazione delle classi di portlet di base

Le classi di portlet importate dalle due API sono differenti.

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

Eredità delle classi Java

Le due API ereditano da classi differenti. IBM portlet API estende org.apache.jetspeed.portlet.PortletAdapter che fornisce un'implementazione predefinita dell'interfaccia org.apache.jetspeed.portlet.Portlet. Questa classe portlet estende HttpServlet, pertanto i portlet IBM sono un tipo di servlet. JSR 168 portlet API fornisce una classe javax.portlet.GenericPortlet che implementa l'interfaccia javax.portlet.Portlet.

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

Oggetti richiesta e risposta

I nomi degli oggetti richiesta e risposta per i metodi render (JSR 168 API) o service (IBM API), quali doView() e doEdit(), differiscono. IBM portlet API utilizza oggetti PortletRequest e PortletResponse; JSR 168 API utilizza oggetti RenderRequest e RenderResponse. RenderRequest e RenderResponse estendono, rispettivamente, gli oggetti PortletRequest e PortletResponse fornendo una funzionalità comune.

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

Inclusione dei file JSP

IBM portlet API utilizza l'oggetto PortletContext per includere file JSP; JSR 168 portlet API utilizza l'oggetto PortletRequestDispatcher. L'azione di inclusione richiama il file JSP specificato.

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

Dati dei portlet

IBM portlet API memorizza i dati utente in un oggetto PortletData. JSR 168 portlet API memorizza informazioni simili in un oggetto PortletPreferences.

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

Elaborazione delle azioni

In IBM portlet API, la classe Java deve implementare l'interfaccia ActionListener fornendo un metodo actionPerformed(). Utilizzando JSR 168 portlet API, la classe Java deve fornire un metodo processAction(); non è richiesto alcun listener.

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

Codifica dello spazio nomi

La codifica dello spazio nomi viene utilizzata per assicurare che le variabili utilizzate in un portlet siano univoche all'interno del contenitore del portale. Gli esempi riportati di seguito mostrano i metodi di codifica dello spazio nomi da utilizzare un file JSP.

IBM portlet API
in a Java class: PortletResponse.encodeNamespace()
in a JSP file:   <portletAPI:encodeNamespace/>
JSR 168 portlet API
in a Java class: RenderResponse.getNamespace()
in a JSP file:   <portlet:namespace/>

A questo punto, è possibile iniziare l'Esercizio 1.4: Confronto delle differenze dei descrittori di distribuzione.

Feedback
(C) Copyright IBM Corporation 2000, 2005. Tutti i diritti riservati.