課題 1.3: Java クラス相違の比較

この課題を始める前に、『課題 1.2: API 間の概念的な相違』を完了していなければなりません。

この課題では、2 つのポートレット API 間の Java クラス・コーディングに関する相違を学習します。 BookmarkPortlet Java クラスの 2 つのバージョンを調べます。 次に示す 2 つの API 間の基本的な相違に注目してください。

基本ポートレット・クラスのインポート

2 つの API がインポートするポートレット・クラスは異なります。

IBM ポートレット API
import org.apache.jetspeed.portlet.*;
JSR 168 ポートレット API
import javax.portlet.*;

Java クラスの継承

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 クラスを提供します。

IBM ポートレット API
public class BookmarkPortlet extends PortletAdapter implements ActionListener
JSR 168 ポートレット API
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 オブジェクトをそれぞれ拡張します。

IBM ポートレット API
public void doEdit(PortletRequest request, PortletResponse response)
JSR 168 ポートレット API
public void doEdit(RenderRequest request, RenderResponse response)

JSP ファイルのインクルード

IBM ポートレット API は JSP ファイルをインクルードする場合、PortletContext オブジェクトを使用します。 一方、JSR 168 ポートレット API は PortletRequestDispatcher オブジェクトを使用します。 インクルード・アクションにより、指定された JSP ファイルが呼び出されます。

IBM ポートレット API
getPortletConfig().getContext().include(EDIT_JSP, request, response);
JSR 168 ポートレット API
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);

ポートレット・データ

IBM ポートレット API は PortletData オブジェクトにデータを保管します。 JSR 168 ポートレット API は PortletPreferences オブジェクトに同様の情報を保管します。

IBM ポートレット API
PortletData prefs = portletRequest.getData()
JSR 168 ポートレット API
PortletPreferences prefs = renderRequest.getPreferences()

アクション処理

IBM ポートレット API では、actionPerformed() メソッドを提供することで、 Java クラスが ActionListener インターフェースを実装する必要があります。 JSR 168 ポートレット API を使用する場合は、Java クラスが processAction() メソッドを提供する必要があります。 リスナーは必要ありません。

IBM ポートレット API
public void actionPerformed(ActionEvent event) throws PortletException
JSR 168 ポートレット API
public void processAction(ActionRequest request, ActionResponse response)

ネームスペース・エンコード

ネームスペース・エンコードは、ポートレット内の変数がポータル・コンテナー内で固有であることを確認するために使用されます。 下の抜粋も JSP ファイルで使用されるネームスペース・エンコード・メソッドを表しています。

IBM ポートレット API
Java クラスの場合: PortletResponse.encodeNamespace()
JSP ファイルの場合:   <portletAPI:encodeNamespace/>
JSR 168 ポートレット API
Java クラスの場合: RenderResponse.getNamespace()
JSP ファイルの場合:   <portlet:namespace/>

これで、『課題 1.4: デプロイメント記述子相違の比較』を開始する準備が完了しました。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.