この課題を始める前に、『課題 1.2: API 間の概念的な相違』を完了していなければなりません。
この課題では、2 つのポートレット API 間の Java クラス・コーディングに関する相違を学習します。 BookmarkPortlet Java クラスの 2 つのバージョンを調べます。 次に示す 2 つの API 間の基本的な相違に注目してください。
2 つの API がインポートするポートレット・クラスは異なります。
import org.apache.jetspeed.portlet.*;
import javax.portlet.*;
2 つの API は異なるクラスから継承します。 IBM ポートレット API は org.apache.jetspeed.portlet.Portlet インターフェースのデフォルト実装を提供する org.apache.jetspeed.portlet.PortletAdapter を拡張したものです。 このポートレット・クラスは HttpServlet を拡張していますので、IBM ポートレットはサーブレットの 1 タイプです。 JSR 168 ポートレット API は、javax.portlet.Portlet インターフェースを実装する javax.portlet.GenericPortlet クラスを提供します。
public class BookmarkPortlet extends PortletAdapter implements ActionListener
public class BookmarkPortlet extends GenericPortlet
render (JSR 168 API) または service (IBM API) メソッド (例えば、doView() および doEdit()) における要求および応答オブジェクトの名前は異なります。 IBM ポートレット API は PortletRequest および PortletResponse オブジェクトを使用し、一方、JSR 168 API は RenderRequest および RenderResponse オブジェクトを使用します。 共通機能の場合は、RenderRequest は PortletRequest オブジェクトを、 RenderResponse は PortletResponse オブジェクトをそれぞれ拡張します。
public void doEdit(PortletRequest request, PortletResponse response)
public void doEdit(RenderRequest request, RenderResponse response)
IBM ポートレット API は JSP ファイルをインクルードする場合、PortletContext オブジェクトを使用します。 一方、JSR 168 ポートレット API は PortletRequestDispatcher オブジェクトを使用します。 インクルード・アクションにより、指定された JSP ファイルが呼び出されます。
getPortletConfig().getContext().include(EDIT_JSP, request, response);
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);
IBM ポートレット API は PortletData オブジェクトにデータを保管します。 JSR 168 ポートレット API は PortletPreferences オブジェクトに同様の情報を保管します。
PortletData prefs = portletRequest.getData()
PortletPreferences prefs = renderRequest.getPreferences()
IBM ポートレット API では、actionPerformed() メソッドを提供することで、 Java クラスが ActionListener インターフェースを実装する必要があります。 JSR 168 ポートレット API を使用する場合は、Java クラスが processAction() メソッドを提供する必要があります。 リスナーは必要ありません。
public void actionPerformed(ActionEvent event) throws PortletException
public void processAction(ActionRequest request, ActionResponse response)
ネームスペース・エンコードは、ポートレット内の変数がポータル・コンテナー内で固有であることを確認するために使用されます。 下の抜粋も JSP ファイルで使用されるネームスペース・エンコード・メソッドを表しています。
Java クラスの場合: PortletResponse.encodeNamespace()
JSP ファイルの場合: <portletAPI:encodeNamespace/>
Java クラスの場合: RenderResponse.getNamespace()
JSP ファイルの場合: <portlet:namespace/>
これで、『課題 1.4: デプロイメント記述子相違の比較』を開始する準備が完了しました。