ポートレット開発ガイド

     前  次    新しいウインドウで目次を開く     
ここから内容

ローカル ポートレット間通信

IPC (ポートレット間通信) によって、複数のポートレットがデータを使用したり、データに反応できます。たとえば、注文 ID や顧客 ID などの共通データ要素が複数のプロジェクトにわたって使用される、セルフサービスまたはセールスの実装で IPC を使用します。WebLogic Portal がサポートするすべてのポートレット タイプは IPC を実装できます。IPC の例を以下に示します。

WebLogic Portal の IPC は、イベント ハンドラの使用に基づいています。イベント ハンドラは、ポータル内の他のポートレットに対して事前定義されたイベントをリスンし、そのイベントが発生したときにアクションを開始するオブジェクトです。Workshop for WebLogic インタフェース、または WebLogic Portal API を使用してポートレット間通信を設定できます。

この章には、初期状態のポータル イベント ハンドラを使用してポートレット間通信を確立するチュートリアル ベースの例 (IPC の基本的な例) が記載されています。この例を通じて、イベント ハンドラについて理解し、一般的な使用方法を学ぶことができます。

この例は、単一のポータル Web プロジェクト内でのポートレット間通信に特化しています。WSRP (連合ポータル) を使用した IPC の確立の詳細については、『連合ポータル ガイド』を参照してください。

注意 : IPC はポートレットの非同期表示と互換性がありません。ただし、一部の状況においては双方を共存させるための解決策が存在します。詳細については、「コンテンツの非同期表示と IPC」を参照してください。

この章の内容は以下のとおりです。


定義ラベルとポートレット間通信

IPC の動作は、ポートレット定義ラベルに基づいています。つまり、同じ .portlet ファイルのすべてのポートレット インスタンスは同じイベントに応答します。イベント ハンドラ オプション Only If Displayed および From Self Instance Only を使用して、同じ .portlet ファイルのインスタンスを差別化できます。これらのオプションの詳細については、「ポートレット イベント ハンドラ ウィザード - [ハンドラを追加] フィールドの説明」を参照してください。


ポートレット イベント

ポートレット イベント (ページ フロー イベントとは異なる) を使用すると、ポートレット間の通信が可能になります。一方のポートレットでイベントを作成し、他方のポートレットでそのイベントをリスンできます。ポートレット イベントは、ペイロードと呼ばれる付随データを伝達できます。ペイロードはシリアライズ可能な Java オブジェクトです。

この節では、次のトピックについて説明します。

イベント ハンドラ

イベント ハンドラは、サブスクライブしたポートレットで発生するイベントをリスンして、特定のイベントが検出されると 1 つ以上のアクションを開始します。イベント ハンドラ タグは、<portlet> タグの子です。ポートレットは、イベントをいくつでも関連付けることができます。以下のイベント ハンドラは WebLogic Portal で利用できます。

注意 : Java Server Faces イベント ハンドラは、既存の宣言型イベント処理メカニズムを使用する初期状態の WebLogic Portal ではサポートされません。ただし、JSF コンテンツを含む <netuix:portlet/> とバッキング ファイルを関連付けできます。バッキング ファイルは、WebLogic Portal から適切な JSF Bean (「管理対象 Bean」) にイベントを変換できます。たとえばブレッドクラム スタイルのイベントの場合、JSF portlet_1 (バッキング ファイルを含む) には、一部のユーザ データが送信されるフォームがあります。JSF ポートレット 1 のバッキング ファイルは、リクエストからデータを取得して、JSF 管理対象 Bean 内のリストを更新する。次に、JSF portlet_2 は、JSF 管理対象 Bean のリストにバインドされた HTML テーブル (JSF タグを使用) データを通じて、このデータのリストを表示します。
注意 : JSF から WebLogic Portal にイベントを送信するには、アクション段階で PortletBackingContext を使用して JSF アプリケーションから WebLogic Portal にイベントを送信することができます。このプロセスの詳細は、将来的なドキュメント リリースまたは dev2dev の記事で紹介します。

汎用イベント ハンドラ

イベント属性値 myEvent の汎用イベント ハンドラは、以下の条件でトリガされます。

汎用イベント ハンドラを使用すると、ポータル設計をより効果的に分離できます。これは、アプリケーションがイベントのソースまたはタイプを把握しなくてもよいためです。イベントの処理方法に影響を与えずに、ポートレット タイプを変更できます (たとえば、ページ フロー ポートレットから JSP ポートレットに変更し、カスタム イベントを開始するバッキング ファイルを追加する)。

イベント タイプ

イベント アクションは、発生するイベントのタイプによって異なります。ポータル イベントを除くすべてのイベントは、ポートレット イベント ハンドラ ウィザードの [イベント] フィールドで指定できます。詳細については、「ポートレット イベント ハンドラ ウィザード リファレンス」を参照してください。表 7-1 に、ポータルのイベント ハンドラで使用可能なイベントを示します。

表 7-1 ポータル イベント ハンドラで処理できるイベント
イベント
アクションの実行
onActivation
ポートレットが表示されたとき。
onDeactivation
ポートレットが表示されなくなったとき。
onMinimize
ポートレットが最小化されたとき。
onMaximize
ポートレットが最大化されたとき。
onNormal
ポートレットが最大化または最小化の状態から通常の状態に戻ったとき。
onDelete
ポータルからポートレットが削除されたとき。
onHelp
ポートレットがヘルプ モードに入ったとき。
onEdit
ポートレットが編集モードに入ったとき。
onView
ポートレットが表示モードに入ったとき。
onRefresh
ポートレットがリフレッシュされたとき。
onCustomEvent
カスタム モード CustomEvent にモード変更したとき。
イベント ハンドラ」を参照。

イベント アクション

イベント ハンドラがホスト ポートレットでアクションを開始するのは、アプリケーションの別のポートレットでイベントを検出したときです (ページ フロー ポートレットの場合は同じポートレットの可能性もあります)。たとえば、ユーザが該当するポートレットを最小化すると、onMinimize というポータル イベントが発生し、イベントをリスンしているハンドラがアクションを開始して、ポートレットに追加されているバッキング ファイルを呼び出します。

表 7-2 に、ポートレットで使用可能なイベント アクションを示します。

表 7-2 イベント アクション
アクション
効果
ウィンドウのモードの変更
ウィンドウ モードを現在のモードからユーザ指定のモードに変更する。たとえば、ヘルプ モードから編集モード。
ウィンドウ状態の変更
ウィンドウ状態を現在の状態からユーザ指定の状態に変更する。たとえば、最大化状態から削除状態。
ページのアクティブ化
現在ポートレットが含まれているページを開く。
汎用イベントの開始
ユーザ指定の汎用イベントを開始する。
カスタム イベントの開始
ユーザ定義のカスタム イベントを開始する。
BackingFile メソッドの呼び出し
ポートレットに追加されているバッキング ファイル内のメソッドを実行する。バッキング ファイルの詳細については、「バッキング ファイル」を参照してください。

ポートレット イベント ハンドラ ウィザード リファレンス

Workshop for WebLogic に用意されているポートレット イベント ハンドラ ウィザードを使用すると、プログラムを記述しなくても各種のイベント ハンドラやアクションを実装できます。このウィザードを使用してイベント ハンドラを設定する手順の概要を次に示します。

  1. 作成するイベント ハンドラのタイプを選択します。
  2. そのハンドラでリスンするポートレットを決定します。
  3. そのハンドラでリスンするイベントを選択します。
  4. イベントが発生したときに起動するアクションを選択してコンフィグレーションします。

以下の節では、ウィザードのダイアログと、ダイアログの各フィールドで指定する情報について説明します。

イベント ハンドラ ウィザードを使用する際の具体的な手順の例については、「IPC の基本的な例」を参照してください。

ポートレット イベント ハンドラ ウィザードのダイアログ

Workshop for WebLogic でポートレットを開き、プロパティ ビューの [イベント ハンドラ] の隣の省略記号ボタン ポートレットを最小化したときの影響を示す ipcPortal をクリックするとウィザードが開きます。

注意 : イベント ハンドラが追加されていない場合、[イベント ハンドラ] フィールドはその旨を通知します。イベント ハンドラが追加されている場合は、このフィールドには現在存在するイベント ハンドラ数が表示されます。

図 7-1 に示すように、ウィザードが表示されます。

図 7-1 ポートレット イベント ハンドラ ウィザード

ポートレット イベント ハンドラ ウィザード

[ハンドラを追加] をクリックすると、イベント ハンドラのドロップダウン メニューでハンドラを選択できます。アクションを追加するには、[アクションを追加] をクリックして、イベント アクションのドロップダウン メニューを開きます。

選択した項目に応じてダイアログ ボックスが展開して、ハンドラまたはアクションの設定に使用できるフィールドが追加表示されます。図 7-2 に、イベント ハンドラを追加するために展開したダイアログの例を示します。

図 7-2 展開したイベント ハンドラ ダイアログ

展開したイベント ハンドラ ダイアログ

ポートレット イベント ハンドラ ウィザード - [ハンドラを追加] フィールドの説明

表 7-3 には、[ハンドラを追加] ダイアログのフィールドと、選択した項目がどのようにイベントの動作に影響を及ぼすのかが記載されています。

表 7-3 ポートレット イベント ハンドラ ウィザード - [ハンドラを追加]
フィールド
説明
[イベント ラベル]
必須。この識別子は、1 つのポートレット内の複数のイベント ハンドラを識別するためにポータル ファイルの <filterEvent> タグが使用する。
説明
省略可能。
[表示される場合のみ] チェック ボックス
省略可能。イベントを受け取るポートレットが現在のページに存在し、最小化または最大化されていないことが必要であることを示す。ポートレットのコンテンツは表示状態でなければならない (ユーザもポートレットを表示する資格を持っている必要がある)。デフォルトは、true です。

注意 : イベントが <handlePortalEvent event="onMinimize" fromSelfInstanceOnly="true"> の場合は、onlyIfDisplayed="true" の際にこのイベントを開始するのは論理的に不可能である。

[自己インスタンスの場合のみ] チェックボックス
省略可能。指定のポートレット インスタンスのハンドラを、ソース イベントがそのインスタンスから生成される場合のみ呼び出すかどうかを定義する。デフォルトは、false です。
[自己インスタンスの場合のみ] を true に設定した場合、[リスン先] の値は無視される。
[リスン先 (ワイルドカード)]
省略可能。このポートレットがリスン可能なポートレットを指定。次の値を指定できる。
  • [これ] - このポートレットの定義ラベル
  • なし。
  • [任意]

注意 : 現時点では、[なし] および [任意] は機能的に同等。

注意 : [リスン先 (ワイルドカード)] および [リスン先 (ポートレット)] を定義した場合、システムは処理時にそれらの値を「結合」する。つまり、ワイルドカードが [これ] の場合、[リスン先 (ポートレット)] には所有ポートレット定義ラベルが追加される。ワイルドカードが [任意] の場合、[リスン先 (ポートレット)] の値は無視される。

[リスン先 (ポートレット)]
省略可能。このポートレットがリスン可能なポートレットを指定できる。[...] ボタンをクリックして、ファイル システムから .portlet ファイルを選択する。.portlet ファイルを選択して [OK] をクリックすると、ポートレットがリスン先リストに追加される。
注意 : ここで入力する値は検証されない。イベント名や定義ラベルの入力ミスは、後から修正するのが非常に難しくなる場合がある。

注意 : [開く] をクリックすると、定義ラベルも [リスン先] リストに追加され、[追加] ボタンが有効になる。このため、まだポートレットが追加されていないように見えるが、実際はすでに追加されている。

ポートレット
フィールドにポートレット名を入力して、[追加] をクリックする。または、[参照] ボタンをクリックしてリスンするポートレットに移動する。
イベントまたはアクション
追加したイベント ハンドラに応じて、ポートレットがリッスンするイベントやアクションを選択する。たとえば、HandlePortalEvent ハンドラを追加した場合は、[イベント] ドロップダウン メニューを使用して、onRefresh イベントなどのポータル イベントを選択できる。アクションを公開するハンドラを選択する場合は、[アクション] フィールドにアクションの名前を入力する。たとえば、HandlePageFlowEvent を選択すると、submitReport を入力できる。これにより、ページ フローの submitReport アクションが [アクション] ドロップダウン メニューに表示される。

ポートレット イベント ハンドラ ウィザード - [アクションを追加] フィールドの説明

アクションに関して利用できるフィールドは、選択したアクションのタイプによって異なります。表 7-4 には、展開する [アクションを追加] ダイアログのフィールドと、選択した項目がどのようにアクションの動作に影響を及ぼすのかが記載されています。

表 7-4 ポートレット イベント ハンドラ ウィザード - [アクションを追加]
フィールド
説明
ウィンドウのモードの変更
新しいウィンドウ モードの値を入力する。
ウィンドウ状態の変更
新しいウィンドウ状態の値を入力する。値は [normal]、[minimized]、および [maximized] を指定可能。
ページのアクティブ化
現在ポートレット <portlet_def_id> が含まれているページをアクティブ化する。handlePostBack ライフサイクル中にトリガされた場合のみ実行される。
[表示される場合のみ] チェックボックスがオンの場合、[ページのアクティブ化] を選択しないこと。ポートレットが表示されているときのみイベントに反応する場合は、論理的にはポートレットが含まれるページもアクティブでなければならない。
[Struts アクションの呼び出し]
Struts ポートレットのみに有効。
この選択項目を使用して、Struts アクションを発生させる。
値は、組み込みコンテンツで定義した Struts アクションの非修飾名である必要がある。
汎用イベントの開始
この選択項目を使用して、汎用イベントを発生させる。
汎用イベントの名前を入力する。
カスタム イベントの開始
この選択項目を使用して、カスタム イベントを発生させる。
カスタム イベントの名前を入力する。
BackingFile メソッドの呼び出し
この選択項目を使用して、バッキング ファイル メソッドを実行する。
呼び出すメソッドの名前を入力する。
このオプションは、プロジェクトに既存のバッキング ファイルが存在する場合のみ [アクションを追加] 選択リストに表示される。
[PageFlow アクションの呼び出し]
この選択項目を使用して、ページ フロー アクションを発生させる。


IPC の例

この節では、次のトピックについて説明します。

始める前に - 環境の設定

この章で説明するポートレット間通信を実践する前に、ドメイン、ポータル EAR プロジェクト、ポータル Web プロジェクト、Datasync プロジェクト、およびポータルから構成される既存のポータル開発環境を準備する必要があります。前提条件タスクを完了させるには、表 7-5 を使用して必要な値を入力し、『WebLogic Portal 入門』チュートリアルで説明するタスクを実行します。

  1. ポータル ドメイン (サーバ) を作成します。
  2. ポータル EAR プロジェクトを作成します。
  3. サーバに EAR プロジェクトを関連付けます。
  4. ポータル Web プロジェクトを作成します。
  5. ポータルを作成します。
  6. 表 7-5 IPC の例 - 環境の設定値
    設定情報
    注意点/値
    ドメインの Configuration Wizard - [ようこそ]
    [新しい WebLogic ドメインの作成] (デフォルト)
    ドメインの Configuration Wizard -
    [ドメイン ソースの選択]
    [以下の BEA 製品をサポートするために、自動的にコンフィグレーションされたドメインを生成する] リストで、[WebLogic Portal] を選択する。
    これにより、他のコンポーネントが自動的に選択される。必ずすべてを選択したままにしておくこと。
    ドメインの Configuration Wizard -
    [管理ユーザ名とパスワードのコンフィグレーション]
    ユーザ名 : weblogic
    ユーザ パスワード : weblogic
    ユーザ パスワードの確認 : weblogic
    ドメインの Configuration Wizard -
    [サーバの起動モードおよび JDK のコンフィグレーション]
    [開発モード] (デフォルト)
    [JRockit SDK]
    ドメインの Configuration Wizard -
    [環境とサービスの設定のカスタマイズ]
    [いいえ] (デフォルト)
    ドメインの Configuration Wizard -
    [WebLogic ドメインの作成]
    ドメイン名 : ipcDomain
    ドメインの場所 : デフォルトを使用するか、またはシステム上の別のディレクトリを指定する。
    ポータル EAR プロジェクト ウィザード
    EAR プロジェクト名 : ipcEAR
    まだ使用していない場合、ポータル パースペクティブに切り替える。
    サーバ ビュー
    サーバ ビューで、目的のサーバを右クリックし、[プロジェクトの追加および除去] を選択する。
    ipcEAR プロジェクトをポータル ドメイン ipcDomain に関連付ける。
    ポータル Web プロジェクト ウィザード
    Web プロジェクト名 : ipcTestWebProject
    [Add project to an EAR] チェックボックスを選択し、ipcEAR に追加する。
    ポータル ウィザード
    [ipcWebProject/WebContent] フォルダを右クリックして、[新規|ポータル] を選択する。
    ポータル名 : ipcPortal

図 7-3 は、前提条件タスクを完了させた後のワークベンチの状態を示しています。

図 7-3 ポータル パースペクティブおよびマージ済みプロジェクト ビューのワークベンチ - IPC 事前設定が完了

ポータル パースペクティブおよびマージ済みプロジェクト ビューのワークベンチ - IPC 事前設定が完了

開発環境を設定したら、この節で説明する手順を実行できます。

この実習では、個々のページ フロー、ポートレット、JSP、およびバッキング ファイルを作成して、ポータル プロジェクト内のポートレット間通信を確立します。その後、作成したポートレットをポータルに追加し、プロジェクトをテストして、通信が正しく行われることを確認します。

IPC の基本的な例

この節では、Workshop for WebLogic のポータル イベント ハンドラ ウィザードを使用して、2 つのポートレット間にポーレット間通信を設定するプロセスについて説明します。1 つのポートレットを最小化すると、ポータルの別のポートレットでテキスト文字列が変更される単純な例を示します。

この例を実行するには、ポータル イベント ハンドラ ウィザードおよびバッキング ファイルについて理解する必要があります。ウィザードの詳細については、「ポートレット イベント ハンドラ ウィザード リファレンス」を参照してください。バッキング ファイルの詳細については、「バッキング ファイル」を参照してください。

この実習は、次の 5 つのタスクで構成されています。

  1. ポートレットの作成
  2. バッキング ファイルの作成
  3. バッキング ファイルの追加
  4. イベント ハンドラの bPortlet への追加
  5. プロジェクトのテスト

ポートレットの作成

この節では、2 つの JSP ファイルと、それぞれのファイルを表示するための JSP ポートレットを作成します。また、2 つのポートレット間の通信を実現するために必要な指示を含むバッキング ファイルも作成し、一方のポートレットにイベント ハンドラを追加します。ポートレットを作成して、バッキング ファイルを追加した後で、プロジェクトをブラウザでテストします。

注意 : この手順を進める前に、Workshop for WebLogic が実行中であることと、ipcWebProject ノードが展開していることを確認します。
JSP ファイルとポートレットの作成

ポートレットによって表示する JSP ファイルを作成するには、次の手順に従います。

  1. ipcWebProject ノードの下の index.jsp をダブルクリックします。
  2. index.jsp がワークベンチ エディタで開き、ソース コードが表示されます。

  3. 図に示すように、本文テキストを Minimize Me! に置き換えます。
  4. 図 7-4 ワークベンチ エディタで本文テキストを編集した後の index.jsp


    ワークベンチ エディタで本文テキストを編集した後の index.jsp

  5. ファイルに aPortlet.jsp という名前を付けて保存します。
  6. [パッケージ・エクスプローラ] ビューで aPortlet.jsp を右クリックし、コンテキスト メニューから [ポートレットの生成] を選択します。
  7. [ポートレットの詳細] ダイアログが表示されます (図 7-5)。[コンテンツ パス] フィールドに「aPortlet.jsp」が入力されます。

    図 7-5 ポートレットの [ポートレットの詳細] ダイアログ ボックス


    ポートレットの [ポートレットの詳細] ダイアログ ボックス

  8. [最小化可能] と [最大化可能] を選択し、[作成] をクリックします。
  9. aPortlet.portlet が [パッケージ・エクスプローラ] ビューの ipcWebProject/WebContent フォルダに表示されます。

  10. 同じディレクトリで aPortlet.jsp のコピーを作成し、コピーの名前を bPortlet.jsp に変更します。
  11. まだ開いていない場合、ワークベンチ エディタで bPortlet.jsp を開きます。
  12. JSP ファイルの XML コードが表示されます。

  13. コード リスト 7-9 のコードをコピーし、JSP の <netui:html> から </netui:html> までのコードを置換します。このコードによって、後の手順で作成して追加するバッキング ファイルのイベント処理が表示されます。
  14. コード リスト 7-9 bPortlet.jsp の新しい JSP コード
    <netui:html>
    <% String event = (String)request.getAttribute("minimizeEvent");%>
    <head>
    <title>
    Web Application Page
    </title>
    </head>
    <body>
    <p>
    Listening for portlet A minimize event:<%=event%>
    </p>
    </body>
    </netui:html>

    ソースは、図 7-6 の例のようになります。

    図 7-6 更新された bPortlet JSP ソース


    更新された bPortlet JSP ソース

  15. ファイルを保存します。
  16. 以前に使用した手順と同じ手順に従って、bPortlet.jsp ファイルからポートレットを生成します。

チェックポイント : この段階で ipcWebProject/WebContent フォルダには、aPortlet.jspaPortlet.portletbPortlet.jsp、および bPortlet.portlet ファイルが含まれます。

バッキング ファイルの作成

バッキング ファイルを作成するには、次の手順に従います。

  1. ipcWebProject で、[src] フォルダを右クリックし、メニューから [新規|ポータル] を選択する。
  2. 新しいフォルダの作成ダイアログ ボックスが表示されます。

  3. backing というフォルダを作成します。
  4. 図 7-7 のようにフォルダ backingipcWebProject/src の下に表示されます。

    図 7-7 [パッケージ・エクスプローラ] ビューの新規バッキング ファイル フォルダ

    [パッケージ・エクスプローラ] ビューの新規バッキング ファイル フォルダ

  5. [backing] フォルダを右クリックし、[新規|その他] を選択する。
  6. [新規 - ウィザードを選択] ダイアログで、[Java|クラス] を選択し、[次へ] をクリックします。
  7. 図 7-8 に示すように、[新規 Java クラス] ダイアログが表示されます。[ソース フォルダー] フィールドにデフォルト パスが自動的に入力されます。値を変更する必要はありません。[パッケージ] フィールドに backing が自動的に入力されます。値を変更する必要はありません。

    図 7-8 [新規 Java クラス] ダイアログ


    [新規 Java クラス] ダイアログ

  8. [名前] フィールドに「Listening」と入力し、[終了] をクリックします。
  9. 新しい Java クラスがエディタに表示されます。

  10. Listening.java のデフォルトの内容をすべて削除して、コード リスト 7-10 のコードをファイルにコピーします。
  11. コード リスト 7-10 Listening.java のバッキング ファイル コード

package backing;

import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
import com.bea.netuix.servlets.controls.portlet.backing.PortletBackingContext;
import com.bea.netuix.events.Event;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Listening extends AbstractJspBacking
{
   static final long serialVersionUID=1L;
   public void handlePortalEvent(HttpServletRequest request,
   HttpServletResponse response, Event event)
   {
      String attributeId= this.getPortletInstanceLabel(request) +       "_minimizeEventHandled";

   // NB: Use the HttpSession to pass data between lifecycle phases
   // (that is, to the pre-render phase). Passing data between
   //     backing file callback methods using the HttpRequest or static
   //     instance variables should be avoided.
   // The portlet instance label is used to create a unique
   //     attribute name for the session attribute.

      request.getSession().setAttribute(attributeId, "minimized!");
   }
   public boolean preRender(HttpServletRequest request, HttpServletResponse
   response)
   {
      String attributeId= this.getPortletInstanceLabel(request) +
      "_minimizeEventHandled";

         if (request.getSession().getAttribute(attributeId) != null)
         {
            // Reset the session flag
             request.getSession().removeAttribute(attributeId);

            // Pass minimize event notification to the JSP via the request.
            request.setAttribute("minimizeEvent", "Minimize event handled");
         }
         else
         {
            request.setAttribute("minimizeEvent", null);
         }

      return true;
   }

   private String getPortletInstanceLabel(HttpServletRequest request)
   {
      PortletBackingContext context=
      PortletBackingContext.getPortletBackingContext(request);
      return context.getInstanceLabel();
   }
}


図 7-9 は、コードを貼り付けた後の Listening.java ファイルの上部の状態を示しています。

図 7-9 バッキング ファイル コードが更新された Listening.java

バッキング ファイル コードが更新された Listening.java

  1. Listening.java を保存します。

バッキング ファイルの追加

ここでは、前の節で作成したバッキング ファイルを bPortlet.portlet に追加します。次の手順を実行します。

  1. パッケージ エクスプローラで、bPortlet.portlet をダブルクリックして開きます。
  2. 必要に応じてエディタでポートレットをクリックし、ポートレットのプロパティを表示します。図 7-10 に示すように、ポートレットの外側にオレンジ色の境界線が表示されます。
  3. 図 7-10 bPortlet の外側の境界線を選択してプロパティを表示


    bPortlet の外側の境界線を選択してプロパティを表示

    ヒント : プロパティ ビューはポータル パースペクティブのデフォルト ビューです。表示されていない場合、[ウィンドウ|ビューの表示|プロパティ] を選択します。
  4. 図 7-11 に示すように、プロパティ ビューで [バックアップ可能プロパティ|ポートレット バッキング ファイル] フィールドに「backing.Listening」と入力します。
  5. 図 7-11 プロパティ ビューでのバッキング ファイルの追加


    プロパティ ビューでのバッキング ファイルの追加

  6. ポートレット ファイルを保存します。

イベント ハンドラの bPortlet への追加

ここでは、イベント ハンドラを bPortlet.portlet に追加します。特定のポートレットのイベントをリスンし、イベントに反応してアクションを開始するように、このハンドラを設定します。イベント ハンドラを追加するには、次の手順に従います。

注意 : bPortlet.portlet が Workshop for WebLogic エディタに表示されている必要があります。表示されていない場合は、アプリケーション パネルで producerWeb/WebContent フォルダを見つけてダブルクリックします。
  1. 必要に応じてエディタでポートレットをクリックし、プロパティを表示します。
  2. プロパティ ビューで、[イベント ハンドラ] プロパティの [] 列をクリックします。図 7-12 に示すように、参照ボタン プロパティ ビューでバッキング ファイルを追加 が表示されます。
  3. 図 7-12 イベント ハンドラ ボタン


    イベント ハンドラ ボタン

  4. 図 7-13 に示すように、省略記号ボタン イベント ハンドラ ボタン をクリックして、[ポートレット イベント ハンドラ] ダイアログを表示します。
  5. 図 7-13 [ポートレット イベント ハンドラ] ダイアログ ボックス


    [ポートレット イベント ハンドラ] ダイアログ ボックス

  6. [ハンドラを追加] をクリックし、イベント ハンドラのドロップダウン リストを開きます。
  7. ドロップダウン リストから [ポータル イベントの処理] を選択します。
  8. 図 7-14 に示すように、[ポートレット イベント ハンドラ] ダイアログ ボックスが展開して詳細を入力できるようになります。

    図 7-14 展開した [ポートレット イベント ハンドラ] ダイアログ ボックス


    展開した [ポートレット イベント ハンドラ] ダイアログ ボックス

  9. [ポートレット] を除くすべてのフィールドでデフォルトを受け入れます。
  10. [ポートレット] フィールドで、省略記号ボタン 展開した [ポートレット イベント ハンドラ] ダイアログ ボックス をクリックします。
  11. [ファイルを選択してください] ダイアログが表示されます。

  12. aPortlet.portlet をクリックして、[OK] をクリックします。
  13. ダイアログ ボックスが閉じて、図 7-15 に示すように aPortlet_1 が [リスン先 (ポートレット):] リストおよび [ポートレット] フィールドに表示されます。ラベル aPortlet_1 は、イベント ハンドラがリスンするポートレットの定義ラベルです。

    図 7-15 portlet_1 の追加


    portlet_1 の追加

  14. [イベント] ドロップダウン コントロールをクリックして、ハンドラがリスンできるポータル イベントのリストを開き、図 7-16 に示すように [onMinimize] を選択します。
  15. 図 7-16 [イベント] ドロップダウン リスト


    [イベント] ドロップダウン リスト

  16. [アクションを追加] をクリックして [アクション] ドロップダウン リストを開き、[BackingFile メソッドの呼び出し] を選択します。
  17. [BackingFile メソッドの呼び出し] 項目は、WebLogic Portal がバッキング ファイルを検出しない場合は表示されません。

  18. 図 7-17 に示すように、[メソッド] フィールドに「handlePortalEvent」と入力します。
  19. このフィールドのドロップダウン メニューには、過去に入力した値を表示できます。

    図 7-17 バッキング ファイル メソッドの追加


    バッキング ファイル メソッドの追加

  20. [OK] をクリックします。
  21. イベント ハンドラが追加されます。これで、[イベント ハンドラ] プロパティの [] フィールドには [1 つのイベント ハンドラ] と表示されます。

プロジェクトのテスト

以下の手順に従って、ポートレット間の通信をテストします。

注意 : 開始する前に、すべてのファイルを保存したことを確認します。
  1. ipcPortal.portal を選択して、ワークベンチ エディタで表示します。
  2. 図 7-18 に示すように、aPortlet.portlet および bPortlet.portlet を [パッケージ・エクスプローラ] ビューからポータル レイアウトにドラッグします。
  3. 図 7-18 aPortlet および bPortlet が追加されたポータル レイアウト


    aPortlet および bPortlet が追加されたポータル レイアウト

  4. ポータルを保存します。
  5. ポータルを実行します。[パッケージ・エクスプローラ] ビューで ipcPortal.portal を右クリックし、[実行|サーバで実行] を選択します。
  6. [サーバで実行 - 新規サーバの定義] ダイアログで、[終了] をクリックします。
  7. サーバが起動してアプリケーションがサーバに公開されるまで待機します。ポータルがブラウザに表示されます (図 7-19)。

    図 7-19 ブラウザでの ipcLocal ポータル


    ブラウザでの ipcLocal ポータル

  8. 最小化ボタンをクリックして、aPortlet を最小化します。
  9. 図 7-20 に示すように、bPortlet のコンテンツが変わる点に注意してください。

    図 7-20 ポートレットの最小化の影響を示す ipcPortal


    ポートレットの最小化の影響を示す ipcPortal

まとめ

この例では、環境を設定し、ローカル ポータルに 2 つの JSP ポートレットを追加しました。1 つ目のポートレット aPortlet はごく単純ですが、2 つ目のポートレット bPortlet は、複雑な JSP ファイルを表示し、バッキング ファイルを利用し、ポータル イベント ハンドラを含みます。ポートレット間の通信テストでは、aPortlet でイベントが発生したときに bPortlet が変化する様子を確認しました。これは、ローカル ポートレット間通信と呼ばれます。


IPC に関する特別な考慮事項と制限事項

以下の節では、ポートレット間通信を実装する際の特別な考慮事項について説明します。

この節では、次のトピックについて説明します。

IPC とポートレットの非同期表示の使用

コンテンツの非同期表示が有効な場合は IPC はサポートされませんが、WebLogic Portal には、ポータル環境でのこれらの 2 つのメカニズムの共存を許可するいくつかの機能があります。また、「コンテンツの非同期表示と IPC」で説明するメカニズムを使用して、単一のリクエストの非同期表示を無効にできます。

WSRP 向けの汎用イベント ハンドラ

WebLogic Portal WSRP を使用する場合は、汎用イベント ハンドラを使用します。[汎用イベントの処理] を選択して [アクションを追加] を選択し、[ウィンドウ モード|状態] を選択します。次に、onMinimize など、イベント名を手動で入力します。

[リスン先] フィールドの一貫性

リスナ ポートレットを設定する際には、[リスン先] フィールドの設定に注意します。コンシューマで使用したポートレット定義は、WSRP ポートレットのポートレット定義と必ず一致させる必要があります。たとえば、「portlet_2」が「portlet_1」をリスンする場合、「portlet_1」に対応する WSRP ポートレット、つまり、コンシューマのプロキシでは、ポートレット定義ラベルを「portlet_1」に設定する必要があります。WSRP と IPC の使用の詳細については、『連合ポータル ガイド』を参照してください。


  ページの先頭       前  次