この課題を始める前に、『課題 1.3: Java クラス相違の比較』を完了していなければなりません。
この課題では、2 つのポートレット API 用のデプロイメント記述子間の相違を学習します。ポートレット・デプロイメント記述子 (portlet.xml) の 2 つのバージョンで調べます。サンプルで説明される基本的な相違は下に示したとおりです。 ポートレット・デプロイメント記述子を編集する場合は、 ポートレット・デプロイメント記述子エディターを使用します。
IBM ポートレット API のタグ付け規則は DTD で定義します。一方、JSR 168 ポートレット API は XML スキーマで定義します。このために、ポートレット・デプロイメント記述子の先頭に異なる XML 定義ステートメントが必要になります。
<!DOCTYPE portlet-app-def PUBLIC "-//IBM//DTD Portlet Application 1.1//EN"
"portlet_1.1.dtd ">
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
2 つの API は <portlet-app> エレメントの id 属性に対して異なる名前を使用します。 IBM ポートレット API は uid を使用し、一方、JSR 168 ポートレット API は id を使用します。
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
IBM ポートレット API を使用する場合、<portlet> エレメントの href 属性は Web デプロイメント記述子 (web.xml) で <servlet> エレメントの対応する id をポイントしていなければなりません。 JSR 168 ポートレット API を使用する場合、<portlet-app> エレメントの id 属性はサーバーに対して、 ポートレットを一意的に識別します。 JSR 168 ポートレットはサーブレットではなく、web.xml への参照は必要ありません。
portlet.xml: <portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
web.xml: <servlet id="Servlet_1086938566718">
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
IBM ポートレット API の場合は、<portlet-app> および <portlet> エレメントの major-version、 および minor-version 属性を使用します。 JSR 168 ポートレット API の場合は、<portlet-app> エレメントの version 属性を使用します。
<portlet-app uid="com.ibm.etools.portal.portletexamples.bookmark.legacy"
major-version="1" minor-version="0">
<portlet id="Bookmark" href="WEB-INF/web.xml#Servlet_1086938566718"
major-version="1" minor-version="0">
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
id="bookmark_03_jsr.1">
ポートレット・デプロイメント記述子で、IBM ポートレット API はサポートされるマークアップ・タイプを宣言します。一方、JSR 168 ポートレット API はサポートされる MIME タイプを宣言します。
IBM は拡張子が wps.markup
の初期化パラメーターを提供します。これは JSR 168 ポートレットにサポートされるマークアップ・タイプを定義できるようにするためです。このタイプは HTML や cHTML のように、同じ MIME タイプを使用するマークアップ・タイプを区別するために使用されます。
<supports>
<markup name="html">
<view />
<edit />
</markup>
<markup name="chtml">
<view />
</markup>
</supports>
<init-param>
<name>wps.markup</name>
<value>html,chtml</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
両方の API は構文が僅かに異なりますが、 サポートされるモードをポートレット・デプロイメント記述子に定義する必要があります。両方の API は編集、表示、およびヘルプ・モードをサポートします。 IBM ポートレット API は構成モードもサポートします。 JSR 168 ポートレット API は、 プレビュー、印刷、デフォルトの編集、および構成のようなカスタム・モードをサポートします。 両方の API には表示モードが必須です。その他すべてのモードはオプションです。
<supports>
<markup name="html">
<view />
<edit />
</markup>
</supports>
<supports>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
両方の API には標準状態が自動的に設定されます。 IBM ポートレット API では、「単独」のようなその他の状態は明示的に宣言する必要があります。 JSR 168 ポートレット API では、「最大化」および「最小化」の状態も自動的に設定されます。カスタム状態は明示的に宣言することが必要になります。
<allows>
<maximized/>
<minimized/>
</allows>
Portlet.properties
は、
サンプルの nls
ディレクトリーに配置されています。
JSR 168 API には、リソース・バンドルとサポートされるロケールの定義が設定されています。
<default-locale>en</default-locale>
<language locale="en">
<title>Bookmark portlet (IBM)</title>
<title-short>Bookmark</title-short>
<keywords>Bookmark</keywords>
</language>
<language locale="de">
<title>Lesezeichen Portlet (IBM)</title>
<title-short>Lesezeichen</title-short>
<keywords>Lesezeichen, Bookmark</keywords>
</language>
<resource-bundle>nls.Portlet</resource-bundle>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<description xml:lang="EN">English description</description>
<display-name xml:lang="EN">English display name</display>-name>
<description xml:lang="DE">German description</description>
<display-name xml:lang="DE">German display name</display>-name>
サンプル・ポートレットのリソース・バンドル、Portlet.properties:
javax.portlet.title = Bookmark Portlet
javax.portlet.short-title = Bookmark
javax.portlet.keywords = Bookmark
IBM ポートレット API で、ポートレットは PortletRequest オブジェクトの invalidateCache() を使用して、
キャッシュ (無効化ベースのキャッシング) を明示的に無効にすることができます。デフォルトのキャッシュ有効期限およびスコープは、ポートレット・デプロイメント記述子に設定されます。
<expires> エレメントの値には、0 (常に有効期限切れ)、-1 (常に有効)、
または有効期限が切れるまでの秒数にすることができます。
<shared> エレメント値が no
である意味は、
キャッシュがポートレット・インスタンス間で共用されないことです。
JSR ポートレット API は 有効期限ベースのキャッシング を使用します。ここで、キャッシュ有効期限時間はデプロイメント記述子に定義されますが、 ポートレットは RenderResponse オブジェクトの setAttribute() メソッドで EXPIRATION_CACHE 値を使用して、 この値を再設定できます。 <expiration-cache> エレメントは、 IBM ポートレット API が <expires> エレメント用に使用する値と同じ値を使用します。
<cache>
<expires>-1</expires>
<shared>no</shared>
</cache>
<expiration-cache>0</expiration-cache>
これで、『課題 1.5: JSP ファイルのコーディング相違の比較』を開始する準備が完了しました。