【コラム】

Java API、使ってますか?

27 Portlet Specification 2.0をもっと手軽に利用する

27/60

ポートレット開発をサポートする2つのプロダクト

第26回でJavaポートレット仕様の次期バージョンとなるJSR 286: Portlet Specification 2.0を取り上げ、その実装としてOpenPortal Portlet Container 2.0の使用方法を紹介した。このときはSubversionリポジトリより成果物をチェックアウトしたが、17日(米国時間)にSun Microsystemsよりリリースされたばかりの「Java Application Platform SDK Update 3 Beta」では、Portlet Container 2.0 Betaのバイナリが追加されている。

また、NetBeansにはポータル開発向けのプラグインとして「Portal Pack」があるが、NetBeans 6.0 Beta 1に合わせて新たに公開された「Portal Pack 2.0 Beta for NetBeans 6.0 Beta 1」においてJSR 286がサポートされている。

今回はこの2つを用いて、JSR 286の新機能を試してみたい。

Portal Pack 2.0 BetaとJava Application Platform SDK Update 3 Betaのインストール

Portal Pack 2.0 BetaはNetBeans IDE 6.0 Beta 1用なので、まずはNetBeans IDE 6.0 Beta 1(以下、NetBeans 6.0)をインストールしておく必要がある。

Portal Pack 2.0 Betaはこのページより入手することができる。「Portal-pack-plugin-2_0Beta.zip」には3つのNetBeansモジュールが含まれているので、これを次の手順でNetBeansにインストールする。

  • NetBenas 6.0を立ち上げ、[Tools]→[Plugins]でプラグインマネージャを起動
  • [Download]タブを表示(図1)
  • [Add Plugins]をクリックし、Portal Pack 2.0 Betaの3つのモジュールを追加(図2)
  • 3つのモジュールにチェックを入れて[Install]ボタンをクリック

図1 プラグインマネージャ

図2 Portal Pack 2.0 Betaの3つのモジュールを追加

続いてポートレットコンテナとして利用するJava Application Platform SDK Update 3 Betaをインストールする。これはこのサイトより入手できる。実行形式のファイルになっているので、インストーラの指示に従ってインストールする。本稿の例ではD:\Sun\SDKフォルダ以下にインストールするものとする。

NetBeans 6.0にPortal Pack 2.0がインストールされている場合、次のようにしてポートレットコンテナとして利用するアプリケーションサーバの設定ができる。

  • [Tools]→[Servers]でサーバマネージャを起動(図3)
  • [Add Servers]をクリックし、図4の画面で「Openortal Portlet Container 2.0 Beta」を選択して[Next]をクリック
  • ServerTypeは「GlassFish / Sun Java System AppServer 9」とし、Java Application Platform SDKのインストール先やパスワードなどの情報を記入(図5)
  • 図6のようにポートレットコンテナの設定を入力して[Finish]をクリック

図3 サーバマネージャ

図4 Portal Pack 2.0 Betaの3つのモジュールを追加

図5 Java Application Platform SDKのインストール情報を入力

図6 ポートレットコンテナの設定を入力

設定が完了すると、[Services]タブの[Servers]の項目に図7のようにポートレットコンテナが追加されてる。

図7 サービス一覧にポートレットコンテナが追加される

パブリックレンダーパラーメータを試す

それでは、さっそくPortal Pack 2.0を利用してPortlet 2.0仕様の新機能を使ったポートレットを作成してみよう。前回はイベントの送受信を試したので、今回はパブリックレンダーパラーメタを使ってみることにする。パブリックレンダーパラーメタとは、レンダーパラメータを異なるポートレット間で共有できるようにする仕組みだ。これによって、イベントを用いなくてもポートレット間でパラメータの受け渡しを行うことが可能になる。

Portal Pack 2.0でポートレットを作成するには、まずプロジェクトウィザードで通常のWebアプリケーションの場合と同様に[Web]→[Web Application]と選択し、次の画面で図8のようにサーバとして先程設定した「OpenPotal Portlet Container 2.0 Beta」を選択する。

続いてフレームワークの選択で「Portlet Support」にチェックを入れる。図9のようにポートレット用の設定項目が表示されるので、[Create Portlet]と[Create Jsps]にチェックを入れ、最初に作成するポートレットの設定を入力する。ここではパラメータをセットする元のポートレットとして「SetParameterPortlet」を作成しておく。このとき、ポートレットのバージョンは「2.0」にすること。設定内容は後から/WEB-INF/portlet.xmlを編集することで修正できる。

図8 プロジェクトの作成 その1

図9 プロジェクトの作成 その2

以上で、図10のようにポートレットの雛型が生成されるはずだ。ここで、共有するレンダーパラメータのための設定を/WEB-INF/portlet.xmlに追加する。自分で記述してもいいが、Portal Pack 2.0にはパブリックレンダーパラメータのためのウィザードが付属している。

まず、図11のようにプロジェクトツリーの「Public Render Parameter」を右クリックし、[Add Render Parameter]を選択する。続いて図12のようにパラメータのための設定を記入すればよい。IdentiferとName Spaceにはそれぞれパラメータの識別子とXMLの名前空間を、PrefixとLocal Partには名前空間上のパラメータ名を入力する。

図10 プロジェクトツリー

図11 プロジェクトツリー

図12 パブリックレンダーパラメータの設定

これで、/WEB-INF/portlet.xmlにはリスト1のような設定が追加されるはずだ。

リスト1 /WEB-INF/portlet.xmlのパブリックレンダーパラメータの設定

        <public-render-parameter xmlns:x='http://sun.com/params'>
                <identifier>name-id</identifier>
                <qname>x:name</qname>
        </public-render-parameter>

このパラメータをSetParameterPortletで有効にするために、/WEB-INF/portlet.xmlのSetParameterPortletの設定部分にリスト2のようにタグを追加する。

リスト2 WEB-INF/portlet.xmlのSetParameterPortletの設定

        <portlet>
                <description>SetParameterPortlet</description>
                ......省略......
                <supported-public-render-parameter>name-id</supported-public-render-parameter>
        </portlet>

apisample.portlet.SetParameterPortlet.javaはリスト3のようにした。processAction()メソッドの中でレンダーパラメーラをセットしている。従来だとこのパラメータはSetParameterPortlet内でのみ有効だったが、今回はこれを共有パラメータにしているので別のポートレットからも使えるというわけだ。

リスト3 SetParameterPortlet.java

package apisample.portlet;

import javax.portlet.GenericPortlet;
import javax.portlet.ActionRequest;
import javax.portlet.RenderRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderResponse;
import javax.portlet.PortletException;
import java.io.IOException;
import javax.portlet.PortletRequestDispatcher;

public class SetParameterPortlet extends GenericPortlet {
    @Override
    public void processAction(ActionRequest request, ActionResponse response) 
            throws PortletException,IOException {
        // レンダーパラメータをセット
        String name = request.getParameter("name");
        response.setRenderParameter("name", name);
    }

    @Override
    public void doView(RenderRequest request,RenderResponse response) 
            throws PortletException,IOException {
        response.setContentType("text/html");
        // ページの出力をJSPファイルにディスパッチ
        PortletRequestDispatcher dispatcher =
            getPortletContext().getRequestDispatcher
                    ("/WEB-INF/jsp/SetParameterPortlet_view.jsp");
        dispatcher.include(request, response);
    }
}

ページの出力は/WEB-INF/jsp/SetParameterPortlet_view.jspにディスパッチしているので、これはリスト4のようにした。

リスト4 /WEB-INF/jsp/SetParameterPortlet_view.jsp

<?xml version="1.0" encoding="UTF-8" ?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
        xmlns:portlet="http://java.sun.com/portlet">
    <jsp:directive.page language="java"
        contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" />

    <portlet:actionURL var="viewUrl" portletMode="view"/>

    <h3>名前入力</h3>
        <form action="${viewUrl}" method="post">
        <input type="text" name="name" value="${name}"/><br/>
        <input type="submit" name="send" value="Send"/>
    </form>

</jsp:root>

次に、パラメータを受け取る側のポートレットを「ReceiveParameterPortlet」として作成する。新たにポートレットを追加するには、プロジェクトツリーのプロジェクト名の上で右クリックし、[New]→[Portlet]を選択する。メニューに[Portlet]が見当たらない場合には、[Other]を選択して図13の一覧から[Portlet]を選ぶ。

図13 新規ポートレットの作成 その1

あとはウィザードの手順に従って、図14の画面でポートレットの詳細設定を記入し、JSPファイルを生成する場合には次の図15の画面で[Create Jsps]にチェックを入れればよい。

図14 新規ポートレットの作成 その2

図15 新規ポートレットの作成 その3

ReceiveParameterPortletについても、パラメータを有効にするための設定をリスト5のように追加しておく。

リスト5 /WEB-INF/portlet.xmlのReceiveParameterPortletの設定

        <portlet>
                <description>ReceiveParameterPortlet</description>
                ......省略......
                <supported-public-render-parameter>name-id</supported-public-render-parameter>
        </portlet>

apisample.portlet.ReceiveParameterPortlet.javaはリスト6のようにする。パブリックレンダーパラメータも、通常のレンダーパラメータと同様の方法で取得できる。

リスト6 ReceiveParameterPortlet.java

package apisample.portlet;

import javax.portlet.GenericPortlet;
import javax.portlet.ActionRequest;
import javax.portlet.RenderRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderResponse;
import javax.portlet.PortletException;
import java.io.IOException;
import javax.portlet.PortletRequestDispatcher;

public class ReceiveParameterPortlet extends GenericPortlet {
    @Override
    public void doView(RenderRequest request,RenderResponse response) 
            throws PortletException,IOException {
        response.setContentType("text/html");

        // レンダーパラメータを取得
        String name = request.getParameter("name");
        if (name == null) {
            name = "";
        }
        request.setAttribute("name", name);

        // ページの出力をJSPファイルにディスパッチ
        PortletRequestDispatcher dispatcher = 
            getPortletContext().getRequestDispatcher
                    ("/WEB-INF/jsp/ReceiveParameterPortlet_view.jsp");
        dispatcher.include(request, response);
    }
}

/WEB-INF/jsp/ReceiveParameterPortlet_view.jspは、取得したパラメータの値を表示するのでリスト7のようにした。

リスト7 /WEB-INF/jsp/ReceiveParameterPortlet_view.jsp

<?xml version="1.0" encoding="UTF-8" ?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
        xmlns:portlet="http://java.sun.com/portlet">
    <jsp:directive.page language="java"
        contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" />

    <portlet:actionURL var="viewUrl" portletMode="view"/>

    <h2>Hello ${name} !</h2>

</jsp:root>

完成したらプロジェクトをビルドし、ポートレットコンテナにデプロイする。Webブラウザから「http://localhost:8080/portletdriver/dt」にアクセスすれば、図16のように表示される。今回作成したのは下の2つのポートレットだ。「SetParameterPortlet」の方に名前を入力して[Send]をクリックすれば、図17のようにそれが「|Receive!|ParameterPortlet」の方に反映される。

図16 Webブラウザからポートレットドライバにアクセス

図17 パラメータがポートレットを跨いで渡されている

27/60

インデックス

連載目次
第60回 どうなる? 今後のJavaプラットフォーム(Java SE編)
第59回 どうなる? 今後のJavaプラットフォーム(Java EE編)
第58回 Java SE 7の要注目機能"クロージャ"はどうなるのか その6
第57回 Java SE 7の要注目機能"クロージャ"はどうなるのか その5
第56回 Java SE 7の要注目機能"クロージャ"はどうなるのか その4
第55回 Java SE 7の要注目機能"クロージャ"はどうなるのか その3
第54回 Java SE 7の要注目機能"クロージャ"はどうなるのか その2
第53回 Java SE 7の要注目機能"クロージャ"はどうなるのか
第52回 Early Draftが公開されたJSF 2.0
第51回 EJBから独立したJava Persistence 2.0
第50回 モバイルJavaの新しい潮流となるか - MSA 2.0のドラフト公開
第49回 やっぱり基本はServlet - Servlet 3.0のEarly Draftを読む
第48回 JOGLで3Dプログラミング その4
第47回 JOGLで3Dプログラミング その3
第46回 JOGLで3Dプログラミング その2
第45回 JOGLで3Dプログラミング
第44回 JARファイルを効率的にネットワーク転送するためのPack200形式
第43回 Early Draftで把握するEJB 3.1の新機能
第42回 次世代の携帯端末向けJava仕様"MIDP 3.0"はどうなるか その2
第41回 次世代の携帯端末向けJava仕様"MIDP 3.0"はどうなるか その1
第40回 リソースアダプタによる接続の仕組み
第39回 JCAを利用したシステム間接続
第38回 Java EEと外部システムの接続性を支えるJCAがバージョンアップ
第37回 Javaのモジュラリティ強化を担う"スーパーパッケージ"とは
第36回 JSR 308対応のコンパイラを試す
第35回 公開されたJSR 308のEarly Draftを検証する
第34回 スクリプト言語とJavaを結びつけるJSR 223
第33回 Java EE環境に統一されたコンポーネントモデルを提供するJSR 299 その2
第32回 Java EE環境に統一されたコンポーネントモデルを提供するJSR 299 その1
第31回 Javaの文法がそのまま使えるスクリプト言語"BeanShell"
第30回 Javaアプリケーションにオブジェクトのキャッシュ機構を提供するJCache API
第29回 Javaアプリケーションからのリソース管理を可能にするJSR 284
第28回 XMLデータソースへの問い合わせはJSR 225で
第27回 Portlet Specification 2.0をもっと手軽に利用する
第26回 次期Javaポートレット仕様となるJSR 286
第25回 JSFとポートレットをつなげるJSR 301
第24回 Webサービス向けのポートレット仕様「WSRP」
第23回 高い相互運用性を実現するポートレットAPI - JSR 168
第22回 Java EE環境でタスクのスケジューリングを可能にするJSR 236
第21回 Java EE環境でのスレッドプログラミングを可能にするJSR 237
第20回 音声認識/合成のためのAPI - Java Speech APIとJSR 113
第19回 JSR 291でJavaプラットフォームにダイナミックコンポーネントモデルを導入
第18回 JAX-RSで簡単RESTful - JSR 311
第17回 待望のServlet 3.0がJSRに登場 - JSR 315
第16回 アノテーションを使ってバグ退治 - JSR 305
第15回 アノテーションをさらに広い範囲で利用可能にするJSR 308
第14回 Webアプリケーション開発の要となるか - JSF 2.0がJSRに登場
第13回 Webサービス経由でのJMX Agentへの接続を可能にするJSR 262
第12回 Javaアプリケーションのモジュール化をサポートするJava Module System
第11回 "NIO.2"がやってきた - JSR 203: More New I/O APIs for the Java Platform
第10回 JSR 295: Beans Bindingの参照実装を試す
第9回 けっこう便利! 単位を扱うAPI -- JSR 275: Units Specification
第8回 アノテーションでバリデーション - JSR 303: Bean Validator
第7回 Swing開発の救世主となるか - Swing Application Framework
第6回 JavaBeansのプロパティを同期させるバインディングAPI
第5回 誰よりも早く"Java SE 7"を睨む
第4回 日時情報の取り扱いを改善する JSR 310: Date and Time API
第3回 古いAPIも進化している!? - JSR 919: JavaMail 1.4
第2回 JSR 1 リアルタイムJava仕様
第1回 JCPによって進められるJava関連技術の標準化

もっと見る

提供:マイナビ

会員登録はこちら

大学・大学院・短大・専門学生向けの就職情報サイト「マイナビ2010」「マイナビ2009」に今すぐ登録しよう!  大手企業からベンチャー企業までの約13,000社の企業情報を公開、エントリーが可能です。2010年卒予定の方は「マイナビ2010」に、2009年卒予定の方は「マイナビ2009」に登録してください。

毎日コミュニケーションズはプライバシーマークを取得しています。



人気記事

一覧

イチオシ記事

新着記事