![]() ![]() ![]() ![]() |
この章では、Workshop for WebLogic 内でリモート ポートレットを変更およびコンフィグレーションする方法を説明します。
ポートレットのルック アンド フィールにより、ポータル デスクトップ上でのポートレットの外観が決定します。リモート ポートレットのルック アンド フィールはプロデューサにはリンクされませんが、ユーザはコンシューマ上でポートレットの外観を任意に変更できます。この機能により、プロキシ ポートレットが存在するコンシューマ ポータルの外観を調和させることができます。
ポートレットにルック アンド フィールを適用する固有の手順については、別の場所で説明します。次のトピックの詳細については、「WebLogic のポータル開発ガイド」を参照してください。
この節では、リモート ポートレットのモードと状態を変更する方法を説明します。次のトピックが含まれます。
ポートレットのタイトル バーには最大 6 つのボタンを組み込めます。これらのボタンは、モードおよび状態という便利な機能を提供します。
図 5-1 に、すべてのモードと状態が有効になっているポートレットの例を示します。
モードと状態の詳細、動作方法、ポートレットへの追加方法、コンフィグレーション方法については、ポートレットに関するユーザーズ ガイドを参照してください。
表 5-1 は、プロデューサにデプロイされているポートレットからコンシューマ アプリケーションのリモート プロキシへの、デフォルトでの状態の転送方法を示しています。リモート ポートレットで状態が編集可能かどうかも示されています。
表 5-2 は、プロデューサにデプロイされているポートレットからコンシューマ アプリケーションのリモート プロキシへの、デフォルトでのモードの転送方法を示しています。リモート ポートレットでモードが編集可能かどうかも示されています。たとえば、プロデューサにデプロイされているポートレットでヘルプ モードが設定されている場合、リモート プロキシでもヘルプ モードが設定されます。ただし、リモート プロキシからヘルプ モードを削除することはできません。一方、プロデューサにデプロイされているポートレットでヘルプが設定されていない場合、リモート ポートレットにヘルプを任意に追加できます。
注意 : | ヘルプ モードと編集モードはどちらも、それらのアクションの適切なコンテンツを提供するファイルを参照します。たとえば、ヘルプ モードはヘルプ ファイルを参照します。プロキシ ポートレットでこれらのモードを動作させるには、これらのモードが参照するコンシューマ内のファイルの位置を、プロデューサ システム内のこれらのファイルの位置と相対的に同じにする必要があります。 |
ローカル ポートレットで使用できるモードと状態はすべてリモート プロキシで使用できます。ただし、リモート ポートレットを作成するときに、リモート ポートレットのすべてのモードと状態を編集 (追加または削除) することはできません。さらに、リモート ポートレットではフロート状態はデフォルトでは常にオフです。ただし、必要な場合は、コンシューマ アプリケーションのリモート ポートレットに任意に追加できます。
リモート ポートレットのデフォルトのモードおよび状態設定を変更する手順は、ローカル ポートレットの手順と同じです。
一部の状況下では、リモート ポートレットがプロデューサにアクセスできなくなる場合があります。この場合、コンシューマは例外を送出します。この節では、エラー ページを表示することでこの例外を処理する方法を説明します。
リモート ポートレットがプロデューサに接続できない場合に表示する、リモート ポートレットのエラー ページをコンフィグレーションする方法は 2 つあります。Workshop for WebLogic でページをコンフィグレーションする方法と、リモート ポートレットの XML ファイルでページをコンフィグレーションする方法です。
ヒント : | エラー処理を詳細にコントロールする場合は、インターセプタの使用を検討します。インターセプタ フレームワークについては、「インターセプタ フレームワーク」で説明しています。 |
Workshop for WebLogic を使用してリモート ポートレットのエラー ページをコンフィグレーションするには、次の手順に従います。
リモート ポートレットの .portlet
ファイルでもエラー URI をコンフィグレーションできます。これを行うには、.portlet
ファイルを開き、次の要素を追加します。ここで errorUri
属性の値は、表示するエラー ファイルの名前です。
<netuix:proxyPortletContent errorUri="errorFileName
.jsp"/>
errorURI
属性には、リモート ポートレットが位置するプロジェクトからの相対的なファイル パスを指定します。
コード リスト 5-1 は、リモート ポートレットの XML ファイルの全行です。<netuix:proxyPortletContent>
要素の例は太字で強調されています。
<?xml version="1.0" encoding="UTF-8"?>
<portal:root
xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0"
xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0 portal-support-1_0_0.xsd">
<netuix:proxyPortlet
cacheExpires="300" definitionLabel="portlet_5_1" description=""
doesUrlTemplateProcessing="true" forkRender="false"
forkable="false" groupId="Consumer" portletHandle="portlet_5"
producerHandle="consumerProducer" renderCacheable="true"
templatesStoredInSession="true" title="Remote Preferences">
<netuix:titlebar><netuix:maximize/><netuix:minimize/></netuix:titlebar>
<netuix:proxyPortletContent errorUri="error.jsp"/>
<netuix:proxyPortletContent/>
</netuix:proxyPortlet>
</portal:root>
ポートレットのプリファレンスは、ローカル ポートレットで機能する方法とほとんど同じ方法でリモート ポートレットでも機能します。リモート ポートレットは、ローカル ポートレットと同じく、ポートレット プリファレンスを利用することで、ユーザがポートレットのプレゼンテーションをカスタマイズできるようにします。
この節では、リモート ポートレットのポートレット プリファレンスの使用について説明します。次のトピックがあります。
注意 : | この節は、読者がポートレット プリファレンスの概念について理解していること、ポートレット プリファレンスの作成方法、コンフィグレーション方法を理解していることを前提としています。ポートレット プリファレンスについて十分に理解していない場合は、『ポートレット開発ガイド』を参照してください。 |
ポートレット プリファレンスにより、ポートレットは定義済みの文字列値を変更、保存したり、定義済みの文字列値にアクセスしたりできます。ポートレットがこれらのプリファレンス値を取得すると、プリファレンス値は、通常、所定ユーザへのポートレットの表示方法に影響します。たとえば、株価ポートレットでは、ユーザは表示する株を指定できるようになります。ユーザは、ユーザ インタフェースを介して、ポートレットに表示する株を選択または入力します。その後、株のリストがサーバに渡され、その特定のユーザ用のデータベースに保存されます。ポートレット プリファレンスが変更可能で、プリファレンス編集用のインタフェースが提供されていれば、ポートレットのすべてのユーザがポートレットの独自のビューをコンフィグレーションできます。
プリファレンスを設定および取得するための、明確に定義された API があります。開発者は Workshop for WebLogic でプリファレンスを作成できます。また管理者は WebLogic Portal Administration Console を使用してプリファレンスを作成および編集できます。
結合されたコンフィグレーションで、プロデューサはポートレット プリファレンスを保存および管理します。コンシューマでリモート ポートレットのプリファレンスを表示または変更する場合は、プロデューサのプリファレンスをフェッチし、変更内容をプロデューサの保存先に返す必要があります。
注意 : | ポートレット プリファレンスは、WebLogic Portal の WSRP プロデューサの実装に含まれています。他の WSRP プロデューサの実装では、ポートレット プリファレンスがサポートされない場合があります。 |
WebLogic Portal Administration Console を使用して、リモート ポートレットのポートレット プリファレンスを表示および変更できます。Administration Console は、WSRP のポートレット管理インタフェースを使用して、プロデューサからプリファレンスを取得し変更します。
注意 : | Workshop for WebLogic を使用してリモート ポートレットのポートレット プリファレンスを作成または変更することはできません。 |
図 5-6 は、WebLogic Portal Administration Console の、ポートレット プリファレンスを作成するためのインタフェースです。プリファレンスを編集するための、同様のインタフェースもあります。たとえば、プリファレンスのデフォルト値を変更したり、そのデフォルト値を読み込み専用にしたりできます。
ヒント : | Administration Console でポートレット プリファレンスに対して行う変更は、ライブラリ レベルの範囲かインスタンス レベルの範囲です。ライブラリでポートレット プリファレンスを変更すると、そのポートレットの以降のすべてのインスタンスに変更が反映されます。(ポータル フォルダ内の) インスタンスを変更すると、そのインスタンスにのみ変更は反映されます。したがって、複数のデスクトップで同じポートレットが使用されると、それぞれの使用に対応した、ポートレットの新しいインスタンスが生成されます。ポートレットのインスタンスを変更すると、そのインスタンスのみ変更されます。ユーザがポートレット プリファレンスを初めて更新すると、ポートレットの新しいインスタンスが作成され、更新されたプリファレンスがその新しいインスタンスに関連付けられます。WSRP 登録インタフェースが提供する方法により、新しく作成されたリモート ポートレットのポートレット インスタンスをプロデューサは追跡できます。詳細については、「登録によるポートレット インスタンスの管理」を参照してください。 |
ポートレットは、javax.portlet.PortletPreferences
オブジェクトを取得することで、プリファレンスをプログラム的に作成、取得、および変更できます。たとえば、ページ フロー ポートレットは、アクション メソッドの PortletBackingContext
オブジェクトからこのオブジェクトのインスタンスを取得できます。コード リスト 5-2 に示されているページ フロー アクション メソッドは、FormData
オブジェクトからユーザが設定したプリファレンスを取得し、そのプリファレンスを PortletPreferences
オブジェクトに設定し、さらに store()
メソッドを使用してそのプリファレンスをデータベースに格納します。
/**
* @jpf:action
* @jpf:forward name="success" path="index.jsp"
*/
protected Forward setColor(ColorForm form) {
//-- コンテキストからプリファレンス オブジェクトを取得します。
PortletBackingContext context =
PortletBackingContext.getPortletBackingContext(getRequest());
PortletPreferences prefs = context.getPreferences(getRequest());
//-- ユーザのプリファレンスを設定します。
try {
prefs.setValue("color"、(String)form.getColor()[0]);
} catch (ReadOnlyException e) {
e.printStackTrace();
}
//-- ユーザのプリファレンスを格納します。
try {
prefs.store();
} catch (ValidatorException io) {
io.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return new Forward("success");
}
先にも述べましたが、リモート ポートレットの場合、プリファレンスはプロデューサ上でホストおよび管理されます。コンシューマにはプリファレンス情報は保存されません。
この節では、リモート ポートレットのポートレット プリファレンスの使用に関する追加情報をリスト形式で提供します。
wsrp-producer-config.xml
ファイルでポータル管理が無効になっている単純なプロデューサ、またはプロデューサが提供するリモート ポートレットには、ポートレット プリファレンスを追加できない。getMarkup
操作の実行時) にポートレットが javax.portlet.PortletPreferences
の store()
メソッドを呼び出すと、store()
メソッドは IllegalStateException
を送出します。.portal
ファイルから表示される場合)、または (b) ポートレットにアクセスするユーザが匿名の場合 (認証されていない場合) に、ポートレット プリファレンスを変更できないことが含まれます。コンシューマ ポートレットは、performBlockingInteraction
要求の portletStateChange
要素で readOnly
の値を送信することで、プロデューサにこれを知らせます。portletStateChange
要素で cloneBeforeWrite
の値を送信する。この値は、プリファレンスに変更を加える前にポートレットのクローンを作成する必要があることを、プロデューサに対して示します。ポートレットが実際にプリファレンスを変更すると、プロデューサは新しい portletHandle
をコンシューマに返します。この新しい portletHandle
が、元の portletHandle
の代わりに使用されます。readWrite
の値を送信し、ポートレットによるプリファレンスの変更をプロデューサが許可できることを示す。
先にも述べましたが、ユーザがポートレット プリファレンスを変更してポートレットをカスタマイズすると、ポートレットの新しいインスタンスが必ず作成されます。リモート ポートレットの場合、プロデューサで新しいインスタンスが作成され、そのインスタンスのハンドルがコンシューマに返されます。もちろん、ユーザの数が増加すると、固有のポートレット インスタンスの数がプロデューサ空間で増加してしまいます。コンシューマでプロデューサをこれ以上使用しないことを決定する場合、プロデューサには、そのことを認識し、その後必要なくなったポートレット インスタンスを削除する方法が必要です。ポートレット登録はこの目的を達成します。
WebLogic Portal のプロデューサは、複雑なプロデューサに対する登録をデフォルトでサポートしています。登録が有効の場合、コンシューマはプロデューサのポートレットにアクセスする前に、プロデューサに登録する必要があります。登録が終了すると、プロデューサは registrationHandle
をコンシューマに返します。コンシューマは、コンシューマが登録解除されるまで、それ以降のすべての要求でこのハンドルを提供する必要があります。コンシューマがポートレットの登録を解除すると、プロデューサはそのコンシューマに対して作成されたすべてのポートレット インスタンスを削除します。
バッキング ファイルを使用すると、Java クラスを実装または拡張し、ポータル コントロールを表示する前の事前処理 (認証など) を可能にすることによって、ポートレットに対してプログラム的に機能を追加できます。バッキング ファイルをポートレットに追加するには、Workshop for WebLogic のプロパティ ビューでバッキング ファイル プロパティを使用します。
バッキング ファイルを使用すると、ポートレットのライフサイクルの特定のポイントでビジネス ロジックを実装できます。ローカル ポートレットでは、バッキング ファイル メソッドは次の順序で呼び出されます。
ただし、表 5-3 で示されているように、プロデューサはコンシューマ要求のタイプに応じた順序でバッキング ファイル メソッドを実行します。
バッキング ファイルの詳細については、『ポートレット開発ガイド』を参照してください。リモート ポートレットでのバッキング ファイルの使用例は、「カスタム データの転送」と「リモート ポートレットのライフサイク」を参照してください。
リモート ポートレットからの要求に、プロデューサが即座に応答できない場合があります。この場合、リモート ポートレットが存在するポータル アプリケーションは、リモート ポートレットの応答を受信するまで応答不能になります。この節では、リモート ポートレットのタイムアウト値の設定方法を説明します。
WebLogic Portal はリモート ポートレットのタイムアウト設定を 2 つ提供しています。
すべてのリモート ポートレットに対するデフォルトのタイムアウト制限、および個々のリモート ポートレットのタイムアウト制限を設定できます。個々のポートレットに対して設定されたタイムアウト値は、デフォルトよりも優先されます。
リモート ポートレットの接続タイムアウトは、コンシューマが継続的にプロデューサに接続している場合にのみ有効です。タイムアウトが有効となるのは、コンシューマに対するプロデューサの応答が遅い場合だけです。プロデューサが物理的に使用不可 (接続が切断された状態にある)、または新しい接続が確立された場合は、効果がありません。これらの場合は、オペレーティング システムの TCP タイムアウトが有効になります。
Web アプリケーションのすべてのリモート ポートレットに対してデフォルト タイムアウト値を設定するには、コード リスト 5-3 に示されている要素の一方または両方を編集します。これらの要素は、各ポータル Web アプリケーションの WEB-INF
ディレクトリにあるコンフィグレーション ファイル wsrp-producer-registry.xml
内にあります。
<connection-establishment-timeout-msecs>-1</connection-establishment-timeout-msecs>
<connection-timeout-msecs>120000</connection-timeout-msecs>
注意 : | タイムアウト値の単位はミリ秒です。 |
個々のリモート ポートレットに対して接続確立タイムアウト、接続タイムアウトの一方または両方を設定するには、Workshop for WebLogic でポートレットのプロパティ ビューを開き、図 5-7 に示されているように、接続確立タイムアウト プロパティと接続タイムアウト プロパティに値を設定します。タイムアウト値の単位はミリ秒です。
インターセプタ フレームワークはコンシューマ側のフレームワークです。インターセプタ フレームワークを使用すると、プロデューサに対して送受信される、マークアップおよびユーザ対話関係の WSRP メッセージをプログラム的にインターセプトおよび変更できます。このフレームワークはユーザが実装できる一連のインタフェースを公開しています。これらのインタフェースを使用して WSRP メッセージの内容を検証し、その内容に基づいて個別のアクションを実行できます。たとえば、プロデューサからコンシューマに登録エラーが返された場合に、インターセプタがそのエラーを検出して、ユーザに情報メッセージを表示したり、登録を完了するために必要な情報を自動的に返すことができます。
インターセプタの作成については、「インターセプタ フレームワーク」を参照してください。
この節では、連合ポータルの開発者が使用するプロキシ ポートレットのプロパティとその他のポートレットのプロパティをリストし、それらについて説明します。この節では、次のトピックについて説明します。
表 5-4 は、プロキシ ポートレットのプロパティのリストです。これらのプロパティは、リモート (プロキシ) ポートレットのプロパティ リストに表示されます。
その他のポートレットのプロパティのリストについては、『ポートレット開発ガイド』を参照してください。
![]() ![]() ![]() |