レベル: 中級 氏本 浩介, ソフトウェア事業 Lotusテクニカル・セールス, 日本アイ・ビー・エム株式会社
2007年 9月 04日
WebSphere Application Server (WAS) 6.1 より ポートレット標準規格である
「JSR168ポートレット」の実行がサポートされました。
是非ご参照ください。
ここではこの新機能を利用して、WAS 6.1 上でポートレットを動かす為の手順および注意点についてご紹介します。
JSR168とは、標準化団体 Java Community Process(JCP) において策定された、ポートレットAPIの新しい標準規格です。現在多くのポータル・アプリケーション・サーバーがサポートを始めており、また同様に、いくつかの統合開発環境(IDE)でその開発機能が提供されています。
例えば、IBM Rational Application Developer では、ヴィザードにより簡単にJSR168ポートレット・スケルトンを作成することができます。(図1)
図1 IBM Rational Application Developer の新規プロジェクト・ヴィザード
ポートレットをWAS上で使用するに際し、コーディング・レベルでの特別な考慮は不要です。任意のJSR168ポートレットが使用できます。もちろん、弊社製品 IBM Workplace Portlet Factory で生成したGUI ポートレットも基本的には動作します。但し、Struts ポートレット・フレームワークを使用して作成されたポートレットはWASではサポートされないのでご注意下さい。
また、IBM Rational Application Developer を使用してポートレットを作成した場合、web.xmlファイル中のstd-portlet.tldへのタグライブラリ参照(下図)を除去する必要があります。
図2 web.xml 中の std-portlet.tld への参照
さて、簡単に動作を試す為に、ここではサンプル・ポートレット Jsr168_test1 を用意しました。
以下、このサンプルをベースに説明していきますので、実際に動作を確認したい方は下記のリンクよりアプリケーション・モジュールをダウンロードしてください。
Jsr168_test1.war
このJsr168_test1ポートレットは、「View」「Edit」「Help」の3つの表示モードと簡単なアクションフォームを持つ非常にシンプルなポートレットアプリケーションです。
ちなみにこのアプリケーションを通常のWPサーバー上で実行すると、下記(図3)のようになります。
図3 サンプル・ポートレット (Viewモード)
このポートレットは、起動後、ログイン状態の有無、現在の認証情報、および PortletPreference(永続的設定ストア) や SessionBean へのストアデータの内容を表示します。
また、編集モードへ移行すると、PortletPreference へストアするデータの入力フォームが現れます。(図4)
ここ(編集モード)で設定した値は、ログアウト後も永続的に保持されている事はご存知の通りです。
図4 サンプル・ポートレット (Editモード)
動作を確認できたら、 (のちほど必要になるので)このポートレットの「ポートレット名」を確認しておきます。ポートレットデプロイメント記述子 portlet.xml を参照し、<portlet-name>で指定されている文字列を確認します。
下図の例では、"Jsr168_test1" がポートレット名になります。(大文字/小文字は区別しますので、ご注意ください。)
図5 ポートレットデプロイメント記述子上の「ポートレット名」
ではいよいよ、先ほどのポートレットをWASにデプロイしてみます。
まずWASの管理コンソールに下記のURLでアクセスします。(ポート番号は省略できませんのでご注意下さい。)
http://<WAS61_Address>:9060/ibm/console
|
ログイン画面(図6)が表示されたら、管理者IDでログインします。
図6 WAS 6.1 管理コンソールへのログイン
ログイン後、画面左のナビゲーターから、「アプリケーション」→「エンタープライズ・アプリケーション」と選択し、アプリケーション一覧画面を表示します。
表示されたら、一覧上部の「インストール」ボタンを押下します。
図7 エンタープライズ・アプリケーション一覧
インストールするポートレットwarファイルへの "jsr168_test1.war" へのフルパスと、このポートレット用に適当な「コンテキストルート」を指定します。この場合「ローカル・ファイルシステム」とは、この管理コンソールを使用しているマシンを意味します。(サーバー側ではありません。)
「コンテキストルート」は任意の文字列で結構ですが、他のアプリケーションに同じものがあってはいけません。必ずサーバー全体でユニークな値を指定します。ここでは、コンテキストルートに "wps" を指定します。
設定できたら、「次へ」を押下します。
図8 アプリケーション・インストールの準備
「ステップ1:インストール・オプションの選択」の画面はそのまま「次へ」を押下します。
次の「ステップ2:モジュールをサーバーにマップ」の画面では、インストールするアプリケーションにマップするサーバーを指定します。アプリケーション・モジュール名左横のチェックボックスにチェックをして、上のフィールドの「クラスターおよびサーバー」からWASサーバー(server1)と、存在していればWebサーバー(webserver1)を選択し、右の「適用」ボタンを押下します。そして表の「サーバー」の項目に選択したサーバー名が追加されたことを確認して、「次へ」を押下します。
図9 モジュールをサーバーにマップ
次の「ステップ3」の画面では、そのまま「終了」を押下します。
図10 要約
下記のようなメッセージが表示されたら、インストールは成功です。
「保管」リンクをクリックして、設定を保管します。
図11 正常終了メッセージ
ここで、再び「アプリケーション一覧」の画面に戻ります。
先ほど追加した "jsr168_test1_war" アプリケーションの「アプリケーション状況」は [停止済み(赤バツ印のアイコン)]になっています。"jsr168_test1_war" アプリケーションを選択して、「始動」ボタンを押下します、アイコンが [開始済み(緑矢印のアイコン)]に代わり、正常メッセージが表示されることを確認します。
図12 アプリケーションの始動
このポートレットをWebサーバー経由でアクセスする為に、スクリプト
<WAS61_Install_Dir>/AppServer/bin/GenPluginCfg.bat
|
を実行してプラグイン構成ファイル
<WAS61_Install_Dir>/AppServer/profiles/AppSrv01/config/cells/plugin-cfg.xml
|
を更新します。
実行後、プラグイン構成ファイルを開き、図13のように /wps/Jsr168_test1/* が追加されている事を確認します。
図13 更新されたプラグイン構成ファイル
WASサーバー上に複数のプラグイン構成ファイルが存在する場合がありますが、Webサーバーが実際に参照しているプラグイン構成ファイルは、Webサーバーの構成ファイルで確認します。
例えばIHS(IBM HTTP Server)の場合、<IHS_Install_Dir>/conf/httpd.confのWebSpherePluginConfig値で確認できます。
例)WebSpherePluginConfig "D:\IBM\AppServer\config\cells\plugin-cfg.xml"
プラグイン構成ファイルの更新が完了したら、設定を反映させる為に、Webサーバーを再起動します。
WAS上にデプロイされたポートレットは、URLで直接呼び出すことができます。その場合URLは下記のように指定します。
http://<WAS61_Address>:port/<context-root>/<portlet-name>/<portletwindow>/<ver>/<mode>
|
ここで、各部の意味は以下のようになります。
| <context-root> | ポートレットのコンテキストルート | | <portlet-name> | ポートレット名 | | <portletwindow> | ポートレット・ウィンドウ識別
(通常 "default":但し、任意の文字列が使用できます。) | | <ver> | ポートレットAPI のバージョン識別
(通常"1.0":現時点では、これ以外は不可です。) | | <mode> | 表示モード識別 |
「コンテキストルート」および「ポートレット名」は、先ほどポートレットをWASにデプロイした際に指定した値です。例えば具体的には以下のようになります。
http://was61.ibm.com/wps/Jsr168_test1/default/ver=1.0/mode=view
|
但し、Viewモードの場合のみ、下記のように省略することができます。
http://was61.ibm.com/wps/Jsr168_test1
|
他にも幾つかの指定可能なパラメータがあります。
詳しくは、WebSphere Application Server 6.1 InfoCenter
をご覧下さい。
Viewモードを指定して呼び出した場合、以下のようになります。
図14 WAS上で実行したサンプル・ポートレット(Viewモード)
Editモードを指定した場合は以下の通りです。フィールドに値を入力し、「保存」ボタンを押下することにより、ポートレット設定値として PortletPreferences に保存することができます。
図15 WAS上で実行したサンプル・ポートレット(Editモード)
また、このように rparam ディレクティブを使用して、任意の引数を与えることもできます。
http://was61.ibm.com/wps/Jsr168_test1/default/ver=1.0/mode=view/
rparam=<PARM1>=<VAL1>/rparam=<PARM2>=<VAL2>
|
ここで指定した引数は、サーブレットの場合と同様、下記の方法で取得することができます。
図16 ポートレット側でのURLパラメータの取得
サンプル・サーブレットには、既に上記のコードが含まれていますので、下図のようにURLに指定した引数が画面に表示されます。
図17 引数を取得したサンプル・ポートレット
■永続的設定ストア(PortletPreferences)に保存したポートレット設定値の扱い
図18のように WAS上においても PortletPreferences への値のストアは可能ですが、ポートレットをWAS上で使用する場合は、この「ポートレット設定」の扱いに注意する必要があります。
図18 PortletPreferences に保存された情報
WAS上では一般に PortletPreferences にストアした各ポートレット・ウィンドウのポートレットの設定値は、DBMSではなく Cookie に保管されますので、完全な永続性はありません。
しかしWAS側の構成追加により、それらの設定を保管する場所を、セッション、.xml ファイル、またはDBMSのいずれかに変更することが可能です。その為には、Cookie を処理するメソッドをオーバーライドして、設定を他のデータストアに保管させるようにすることが必要です。具体的には、ポートレットを呼び出す前に、要求と応答をラップする新規エントリー・ポイントとして、フィルター、サーブレットまたは JavaServer Pages ファイルを新規に作成し実装することになります。
詳細は、WAS 6.1 InfoCenterの関連ページをご参照下さい。
以下に、HTTPヘッダにCookieとそて保持された、「ポートレット設定値」の例を示します。
図19 Cookieに保持されたポートレット設定値
■ポートレットの集約
ポートレット集約フレームワークを使用して、複数のポートレットを1つのページに集約することができます。(図20)
図20 複数のポートレットを集約した例
ポートレットを1つのページに集約するには、「集約タグライブラリ」を使用してJSPファイルによる記述を行います。
下記にサンプルソースをご紹介します。具体的には、HTMLのTABLEタグ等で画面の分割配置を定義し、タイトルバーやコンテンツ部を「集約タグライブラリ」で挿入することになります。
サンプルでは、下記3つのポートレットを集約しています。
-
ポートレット"Jsr168_test1"
http://lotus03.hakozaki.ibm.com/wps/Jsr168_test
- ポートレット"StdWorldClock"
http://lotus03.hakozaki.ibm.com/sample1/StdWorldClock
- ポートレット"BANK_Sample"
http://lotus03.hakozaki.ibm.com/sample2/BANK_Sample
なお、「集約タグライブラリ」は、JSP2.0から利用できるようになったEL式(EL: Expression Language)を使用するので、JSPファイル内で
<%@ page isELIgnored="false"%>
|
の宣言を忘れずに行います。
集約を記述したJSPファイルをWAS上に配置し、ブラウザからURL指定で呼び出すと、図20のような集約画面が表示されます。
図21 ポートレット集約のサンプルソース(JSPファイル)
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| PDF形式 | jsr168_test1.war | 13.5KB | HTTP |
|---|
参考文献
著者について  | |  | 日本アイ・ビー・エム株式会社 ソフトウェア事業 Lotusテクニカル・セールス 氏本 浩介 |
記事の評価
|