連合ポータル ガイド

     前  次    目次     
ここから内容

リモート ポートレットでのポートレット間の通信

WebLogic Portal は、プロデューサとコンシューマ間のポートレット間通信 (IPC) に対応します。たとえば、プロデューサ アプリケーション内でデプロイされるリモート ポートレットは、コンシューマ内のローカル ポートレットにより開始される最小化イベントを処理できます。この章では、リモート ポートレットを使ったポートレット間通信の使用方法を説明する詳しい例を取り上げます。

この章には次の節があります。

 


はじめに

WebLogic Portal は WSRP プロトコルに拡張を提供し、リモート ポートレットがライフサイクルの対話段階の間にイベントを開始できるようにします。連合ポートレットに対する WebLogic Portal IPC アーキテクチャの詳細については、「イベントによるポートレット間の通信」を参照してください。

コンシューマおよびプロデューサ アプリケーションでデプロイされるポートレット間の通信は双方向です。ローカル ポートレットにより開始されるイベントは、プロデューサにデプロイされているポートレットで処理でき、その逆も可能です。

この章の例は、連合ポータルでイベント処理を実装する 1 つの方法を示しています。この例では、イベント ハンドラがプロデューサのポートレットに追加されます。コンシューマ上のローカル ポートレットがイベントを開始するとき、プロデューサ上のリモート ポートレットはイベントを受信してそれを処理します (ポートレットに表示されるテキストを変更します)。

注意 : 連合環境でイベント処理を実行するときは、コンシューマ側でプロキシ ポートレットを作成する前に、プロデューサ アプリケーションでポートレットにイベント ハンドラを追加する必要があります。イベント ハンドラの追加のように、プロデューサ ポートレットのメタデータを変更する場合、コンシューマはその変更について通知されません。適切な手順としては、コンシューマのリモート ポートレットを作成する前に、プロデューサのポートレットにイベント ハンドラを追加します。

WebLogic Portal における IPC の詳細については、『ポートレット開発ガイド』を参照してください。

 


最小化イベントの開始と処理

この節では、リモート ポートレットでイベント処理を使用する方法を説明する詳しい例を取り上げます。この例では、コンシューマ側のリモート ポートレットが onMinimize イベントを開始します。onMinimize イベントは、ポートレットが最小化されるときに開始されます。イベントがコンシューマ側のローカル ポートレットから開始されるとき、イベントはプロデューサ側で処理されます。onMinimize イベントは WebLogic Portal フレームワークによりサポートされる標準イベントの 1 つです。標準イベントの詳細リストについては、『ポートレット開発ガイド』を参照してください。

この例では、ユーザがコンシューマ側のリモート ポートレットを最小化するとき、プロデューサがイベントを処理し、ポートレット内の一部のテキストを変更します。

ヒント : リモート ポートレットはカスタム イベントも処理できます。リモート ポートレットでのカスタム イベントの使用の詳細については、「カスタム イベントによるデータ転送」を参照してください。

この例には次の手順があります。

  1. 環境の設定
  2. プロデューサでのポートレットの作成
  3. コンシューマ ポートレットの作成
  4. アプリケーションのテスト

環境の設定

この節で取り上げている例を試すには、Workshop for WebLogic を実行し、前提条件のタスクを実行して、その例の環境を設定する必要があります。

その例の環境を設定するには、表 7-1 に説明されている前提条件のタスクを実行します。このようなタスクの特定の手順に精通していない場合、WebLogic Portal チュートリアルの「ポータル開発環境の設定」にその詳細が説明されています。

表 7-1 前提条件タスク
タスク
推奨される名前
1. WebLogic Portal ドメインを作成する。
ipcWsrpDomain
2. ポータル EAR プロジェクトを作成する。
ipcWsrpPortalEAR
3. BEA WebLogic v10.0 Server を作成する。
なし
3. サーバに EAR プロジェクトを関連付けます。
なし
4. ポータル Web プロジェクトを作成する。
consumerWeb
5. 2 番目のポータル Web プロジェクトを作成する。
producerWeb

図 7-1 は、前提条件タスクが完了した後のパッケージ エクスプローラを示しています。

図 7-1 前提条件タスクが完了した後のパッケージ エクスプローラ

前提条件タスクが完了した後のパッケージ エクスプローラ

プロデューサでのポートレットの作成

このタスクでは、プロデューサ側に 2 つの JSP ファイルと、それぞれのファイルを表示するための JSP ポートレットを作成します。2 つのポートレット間の通信を完了するのに必要な指示を含むバッキング ファイルも作成し、ポートレットの 1 つにイベント ハンドラを追加します。ポートレットを作成して、バッキング ファイルを追加した後で、アプリケーションをブラウザでテストします。

JSP ファイルとポートレットの作成

プロデューサにデプロイされるポートレットが表示する JSP ファイルを作成するには、次の手順に従います。

  1. 環境の設定」で示されているように、環境を設定していることを確認します。
  2. パッケージ エクスプローラで、producerWeb/WebContent/index.jsp ファイルをダブルクリックします。エディタに JSP ファイルが開きます。
  3. 図 7-2 に示されているように、本文のテキストを Minimize Me! という文字列で置き換えます。
  4. 図 7-2 エディタ内の aPortlet.jsp
    前提条件タスクが完了した後のパッケージ エクスプローラ
  5. ファイルに aPortlet.jsp という名前を付けて保存します。
  6. パッケージ エクスプローラで aPortlet.jsp を右クリックし、[ポートレットの生成] を選択します。
  7. [ポートレットの詳細] ダイアログ ボックス (図 7-3) が表示されます。/aPortlet.jsp が [コンテンツ URI] フィールドに表示されていることを確認します。

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


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

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

  10. 同じディレクトリに、aPortlet.jsp のコピーを作成して、そのコピーである bPortlet.jsp を呼び出します。
  11. エディタで bPortlet.jsp を開いて、コード リスト 7-1 から JSP にコードをコピーし、<netui:html> から </netui:html> まですべてを置き換えます。このコードは単に、後の手順で作成してポートレットに追加するバッキング ファイルにより要求内に配置されるテキストを表示します。
  12. コード リスト 7-1 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-4 は、エディタ内の完了した JSP ソースファイルを示しています。

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


    更新された JSP ソース

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

チェックポイント : この時点で、producerWeb/WebContent フォルダに次のファイルが作成されています。

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

この例では、プロデューサ内のポートレットに追加されたバッキング ファイルを使用して、コンシューマ側で開始された onMinimize イベントを処理します。

ヒント : バッキング ファイルの詳細については、『ポートレット開発ガイド』を参照してください。

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

  1. producerWeb で、src フォルダを右クリックし、メニューから [新規|フォルダ] を選択します。新しいフォルダの作成ダイアログ ボックスが表示されます。
  2. ヒント : または、フォルダの代わりに Java パッケージを作成することもできます。
  3. backing というフォルダを作成します。
  4. 図 7-5 に示すように、backing フォルダが producerWeb/src の下に表示されます。

    図 7-5 新しいバッキング ファイル フォルダ


    新しいバッキング ファイル フォルダ

  5. backing フォルダを右クリックし、[新規|クラス] を選択します。[新規 Java クラス] ダイアログが表示されます。
  6. [名前] フィールドに「Listening」と入力し、[終了] をクリックします。新しい Java クラスがエディタに表示されます。
  7. Listening.java のデフォルトのコンテンツを削除し、コード リスト 7-2 のコードを Listening.java にコピーします。
  8. Listening.java を保存します。
  9. コード リスト 7-2 listening.java のバッキング ファイル コード
    package backing;
    import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
    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;
         private static boolean minimizeEventHandled = false;
         public void handlePortalEvent(HttpServletRequest request,
    HttpServletResponse response, Event event)
        
    minimizeEventHandled = true;
    }
        public boolean preRender(HttpServletRequest request, HttpServletResponse
    response)
    {
    if (minimizeEventHandled){
                    request.setAttribute("minimizeEvent","minimize event handled");
    }else{
    request.setAttribute("minimizeEvent",null);
    }
            // reset
    minimizeEventHandled = false;
             return true;
    }
    }


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

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

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

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

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

  1. パッケージ エクスプローラで、bPortlet.portlet をダブルクリックして開きます。
  2. エディタでポートレットをクリックして、ポートレットのプロパティを表示します。すべてのプロパティを確認するには、図 7-7 に示すように、ポートレットの境界線をクリックします。
  3. 図 7-7 クリックしてすべてのポートレット プロパティを表示する


    クリックしてすべてのポートレット プロパティを表示する

    ヒント : プロパティ ビューが表示されない場合は、[ウィンドウ|ビューの表示|プロパティー] を選択します。ポートレット プロパティの編集の詳細については、『ポートレット開発ガイド』を参照してください。
  4. プロパティ ビューで、図 7-8 に示すように、[バックアップ可能プロパティ|ポートレット バッキング ファイル] フィールドに「backing.Listening」と入力して、〔Enter〕を押します。
  5. ヒント : 場合によっては、値の列を広げて、[ポートレット バッキング ファイル] フィールドにテキストを入力する必要があります。
    図 7-8 プロパティ ビューでのバッキング ファイルの追加


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

  6. ファイルを保存します。

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

ここでは、イベント ハンドラを bPortlet.portlet に追加します。ハンドラは別のポートレットにより開始されたイベントをリスンして、そのイベントに対応するアクションを実行するようにコンフィグレーションされます。イベント ハンドラを追加するには、次の手順に従います。

  1. bPortlet.portlet ファイルが開いていることを確認します。開いていない場合は、パッケージ エクスプローラでダブルクリックします。
  2. 図 7-7 で示したように、エディタ内のポートレットをクリックして、ポートレットのプロパティを表示します。
  3. プロパティ ビューで、[イベント ハンドラ|値] フィールドをクリックします。図 7-9 に示すように [...] ボタンが表示されます。
  4. 図 7-9 イベント ハンドラ ボタン


    イベント ハンドラ ボタン

  5. 図 7-10 に示すように、イベント ハンドラ ボタン ([...]) をクリックして、[ポートレット イベント ハンドラ] ダイアログを表示します。
  6. 図 7-10 [ポートレット イベント ハンドラ] ダイアログ ボックス


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

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

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


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

  9. [ポートレット] を除くすべてのフィールドでデフォルトを受け入れます。
  10. [ポートレット] フィールドで、[...] ボタンをクリックします。[ファイルを選択してください] ダイアログ ボックスが表示されます。
  11. aPortlet.portlet を選択して [OK] をクリックします。
  12. ダイアログ ボックスが閉じて、図 7-12 に示すように、aPortlet_1 が [リスン先] リストと [ポートレット] フィールドに表示されます。ラベル aPortlet_1 は、イベント ハンドラがリスンするポートレットの定義ラベルです。

    ヒント : 定義ラベルはポートレットに対するユニークな識別子です。デフォルト値が自動的に入力されますが、その値を変更できます。各ポートレットはユニークな値である必要があります。詳細については、『ポートレット開発ガイド』を参照してください。
    図 7-12 portlet_1 の追加


    portlet_1 の追加

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


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

  15. [アクションを追加...] をクリックして、[アクション] ドロップダウン メニューを開き、[BackingFile メソッドの呼び出し] を選択します。
  16. [メソッド] ドロップダウン メニューを開き、図 7-14 に示すように、「handlePortalEvent」と入力します。このメソッドは、bPortlet に追加されるバッキング ファイルで定義されます。バッキング ファイルに対するソース コードは、コード リスト 7-2 に示したとおりです。
  17. 図 7-14 バッキング ファイル メソッドの追加


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

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

注意 : WebLogic Portal は、イベント ハンドラ ダイアログの設定の検証を試行します。問題が検出された場合は、エラー メッセージが表示されます。WebLogic Portal 検証フレームワークの詳細については、『WebLogic Portal 開発ガイド』を参照してください。

チェックポイント : バッキング ファイルとイベント ハンドラを bPortlet に追加しました。ポートレットが aPortlet により開始された onMinimize イベントを受信するとき、イベント ハンドラはバッキング ファイルで handlePortalEvent() メソッドを起動するようにコンフィグレーションされます。次のタスクで、アプリケーションをテストして、ローカル環境で正しくポートレットが機能していることを確認します。次に、コンシューマ アプリケーションでリモート ポートレットを作成して、連合ポータル環境でポートレット間通信をテストします。

アプリケーションのテスト

次の手順に従って、ipcLocal.portal というプロデューサ アプリケーションでポータルを作成します

  1. パッケージ エクスプローラで、producerWeb/WebContent を右クリックして、[新規|ポータル] を選択します。[新しいポータル] ダイアログが表示されます。
  2. [ファイル名] フィールドに、「ipcLocal.portal」と入力し、[終了] をクリックします。ポータルが作成され、エディタに表示されます。
  3. 図 7-15 に示すように aPortlet.portlet および bPortlet.portlet の両方をパッケージ エクスプローラからポータル レイアウト上へドラッグします。
  4. 図 7-15 ポートレットが追加されたポータル レイアウト


    ポートレットが追加されたポータル レイアウト

  5. ポータルを保存します。
  6. ポータルを実行します。そのためには、パッケージ エクスプローラで ipcLocal.portal を右クリックし、[実行|サーバーで実行] を選択します。
  7. [サーバーで実行 - 新規サーバーの定義] ダイアログで、[終了] をクリックします。
  8. 図 7-16 に示すように、デフォルトのブラウザでポータルが表示されます。

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


    ブラウザでの ipcLocal ポータル

  9. aPortlet を最小化します。
  10. bPortlet のコンテンツが変化します。

    図 7-17 aPortlet を最小化したときの ipcLocal ポータル


    aPortlet を最小化したときの ipcLocal ポータル

まとめ

2 つのローカル ポートレットを含むポータルを作成しました。bPortlet というポートレットをコンフィグレーションして、aPortlet というポートレットから開始された onMinimize イベントに応答しました。onMinimize イベントは、すべての WebLogic Portal ポートレットが開始できる標準イベントです。bPortlet が onMinimize イベントを受信すると、ポートレットにより表示されるテキストを変更するバッキング ファイル メソッドが呼び出されます。

次の手順で、ポートレット間通信を使用する連合ポータルを作成します。

コンシューマ ポートレットの作成

この節では、コンシューマ アプリケーションに JSP ポートレットとリモート ポートレットの 2 つのポートレットを作成します。リモート ポートレットは、プロデューサで作成したポートレットの bPortlet.portlet を使用します。

実習の設定

この実習を続ける前に、次の手順を実行します。

  1. パッケージ エクスプローラで、producerWeb/WebContent フォルダから aPortlet.jsp をコピーして、それを consumerWeb/WebContent フォルダに貼り付けます。便宜上、プロデューサ アプリケーションからのこのポートレットを再利用します。コンシューマ ポータル内のそのポートレットの機能は、単に最小化できるポートレットを提供することです。
  2. producerWeb/WebContent/aPortlet.jsp を右クリックし、[ポートレットの生成] を選択します。
  3. [ポートレットの詳細] ダイアログで、[最小化]、[最大化] を選択し、[作成] をクリックします。新しいポートレット レイアウトがエディタに表示されます。

リモート ポートレットの作成

リモート ポートレットを作成するには、次の手順に従います。

  1. パッケージ エクスプローラでポータル consumerWeb フォルダを開き、WebContent フォルダを右クリックして、[新規|ポートレット] を選択します。
  2. [新しいポートレット] ダイアログで、[ファイル名] フィールドに「bPrime.portlet」と入力し、[終了] をクリックします。
  3. ポートレット ウィザードの [ポートレット タイプの選択] ダイアログで、[リモート ポートレット] を選択し、[次へ] をクリックします。
  4. [プロデューサ] ダイアログで [プロデューサの検索] を選択します。
  5. 図 7-18 に示すように、プロデューサの WSDL URL をテキスト フィールドに入力します。この例の WSDL URL は次のとおりです。
注意 : http://host:port/producerWeb/producer?wsdl
注意 : 次に例を示します。
注意 : http://localhost:7001/producerWeb/producer?wsdl
ヒント : WSDL は Web Services Description Language の略で、プロデューサが提供するサービスを記述するために使用されます。詳細については、「連合ポータルのアーキテクチャ」を参照してください。
  1. [検索] をクリックします。
  2. 数秒後、ダイアログ ボックスが更新されて、図 7-18 に示すように、[プロデューサの詳細] を表示します。

    図 7-18 プロデューサの検索ダイアログ


    プロデューサの検索ダイアログ

  3. [登録] をクリックします。
  4. [登録] ダイアログで、[プロデューサ ハンドル] フィールドにプロデューサに対する名前を入力し、[登録] をクリックします。[プロデューサ] ダイアログに戻ります。
  5. [プロデューサ] ダイアログで [次へ] をクリックします。[リストからポートレットを選択] ダイアログが表示されます。
  6. [リストからポートレットを選択] ダイアログで、図 7-19 に示すように、[bPortlet] を選択します。
  7. 図 7-19 [リストからポートレットを選択] ダイアログ ボックス


    [リストからポートレットを選択] ダイアログ ボックス

  8. [次へ] をクリックします。[プロキシ ポートレット詳細] ダイアログ ボックスが表示されます。
  9. [作成] をクリックします。
  10. パッケージ エクスプローラ内の consumerWeb/WebContent フォルダに bPrime.portlet としてリモート ポートレットが表示されます。

  11. ポートレットのタイトルを bPrime に変更します。そのためには、図 7-20 に示すように、ポートレットのプロパティ ビューの [タイトル] フィールドを編集します。
  12. 図 7-20 ポートレット タイトルの変更


    ポートレット タイトルの変更

  13. ポートレットを保存します。
  14. ヒント : (producerWeb/WebContent フォルダ内の) bPortlet に対するプロパティ ビューで、[表示キャッシュ可能] プロパティは false に設定されます。

まとめ

2 つのコンシューマ ポートレットが完成し、リモート ポートレットとローカル ポートレットのポートレット間の通信を実行するために必要なすべてのコンポーネントを作成したことになります。次の手順では、コンシューマのポートレットをコンシューマのポータルに追加し、1 つのポートレットでイベントを発生させることで、もう 1 つのポートレットで反応を引き起こします。

アプリケーションのテスト

この手順では、コンシューマ アプリケーションをテストして、aPortlet の最小化により bPrime (リモート ポートレット) のコンテンツが変化することを確認します。ポータルを作成し、「コンシューマ ポートレットの作成」で作成した 2 つのポートレットを追加します。アプリケーションを構築し、ブラウザにポータルを表示します。

ポータルの構築

次の手順に従って、ipcConsumer.portal というプロデューサ アプリケーションでポータルを作成します。

  1. パッケージ エクスプローラで、consumerWeb/WebContent を右クリックして、[新規|ポータル] を選択します。[新しいポータル] ダイアログが表示されます。
  2. [ファイル名] フィールドに、「ipcConsumer.portal」と入力し、[終了] をクリックします。ポータルが作成され、エディタに表示されます。
  3. aPortlet.portletbPrime.portlet の両方を consumerWeb/WebContent フォルダからポータル レイアウト上にドラッグします。その結果は図 7-21 に表示されています。
  4. 図 7-21 コンシューマ ポータル レイアウト


    コンシューマ ポータル レイアウト

  5. ポータルを保存します。

ポータルのテスト

ユーザ側から見ると、コンシューマ ポータルは、すべてのポートレットがローカルであるかのように機能します。ユーザは、bPrime が、プロデューサ アプリケーションにホストされているリモート ポートレットであることに気付きません。コンシューマ ポートレットをテストするには、aPortlet を最小化します。リモート ポートレットの bPrime は、それに応じて、表示するテキストを変更します。

  1. ポータルを実行します。そのためには、パッケージ エクスプローラで ipcConsumer.portal を右クリックし、[実行|サーバーで実行] を選択します。
  2. [サーバーで実行 - 新規サーバーの定義] ダイアログで、[終了] をクリックします。図 7-22 に示すように、ipcConsumer ポータルを表示するブラウザが開きます。
  3. 図 7-22 ブラウザでのコンシューマ ポータル


    ブラウザでのコンシューマ ポータル

  4. aPortlet で、[最小化] ボタンをクリックします。図 7-23 に示すように、ポートレットの aPortlet が最小化し、bPortlet のコンテンツが変化します。
  5. 図 7-23 最小化イベント後のブラウザ内のコンシューマ ポータル


    最小化イベント後のブラウザ内のコンシューマ ポータル

 


リモート ポートレット ファイルの内部

コード リスト 7-3 は、この章で既述のように、リモート ポートレットに対する .portlet ファイルの XML コンテンツからの引用の bPrime.portlet を表示します。要素の dispatchToRemotePortlet が、handleEvent 定義の一部として追加されます。この要素は、コンシューマがこのイベントをプロデューサにディスパッチする必要があることを示します。

コード リスト 7-3 bPrime.portlet ファイルからの引用

<netuix:handleEvent event="onMinimize" eventLabel="handlePortalEvent1"
    fromSelfInstanceOnly="false" onlyIfDisplayed="true"
    sourceDefinitionLabels="aPortlet_1"> <netuix:dispatchToRemotePortlet/>
</netuix:handleEvent>
...

 


カスタム イベントによるデータ転送

カスタム イベントは、コンシューマ アプリケーションでデプロイされるポートレットと、リモート プロデューサ アプリケーション内のポートレット間でデータを転送するための推奨されている方法です。この節では、カスタム イベントを使用して、コンシューマからプロデューサへデータを転送するのに利用可能な技術について概説します。

ヒント : カスタム イベントを使用して、連合ポートレット間で、シリアライズ可能な Java オブジェクトまたは、com.bea.wsrp.ext.holders.XmlPayload を拡張するオブジェクトを転送できます。XmlPayload は、コンシューマとプロデューサ間で XML データを転送できるようにする WebLogic Portal クラスです。詳細については、「XML データの転送」を参照してください。XmlPayload インタフェースの詳細については、「Javadoc」の説明を参照してください。

図 7-24 は、この節で説明されている例のコンフィグレーションを示しています。

図 7-24 コンフィグレーションの例

コンフィグレーションの例

プロデューサ側のイベントの検索

この節では、プロデューサ側のポートレットが、ペイロードを含むカスタム イベントを処理するようにコンフィグレーションする方法を説明します。この場合、ポートレットは、コード リスト 7-4 に示されるクラスに関連する Java ポートレットです。

コード リスト 7-4 サンプル Java ポートレット クラス
import java.io.IOException;
import javax.portlet.PortletException;
import javax.portlet.GenericPortlet;
import javax.portlet.RenderResponse;
import javax.portlet.RenderRequest;
import javax.portlet.ActionResponse;
import javax.portlet.ActionRequest;
import com.bea.netuix.events.Event;
import com.bea.netuix.events.CustomEvent;

public class JavaPortlet extends GenericPortlet {

     public void getMessage(ActionRequest request, ActionResponse response,
                             Event event) {
           CustomEvent customEvent = (CustomEvent) event;
           String message = (String) customEvent.getPayload();
           response.setRenderParameter("message0", message);
     }

     public void doView(RenderRequest request, RenderResponse response)
           throws PortletException, IOException {

           String message = request.getParameter("message0");
           if (message == null) message = "";
           response.setContentType("text/html");
           response.getWriter().write("<p><b>Message From Consumer: </b>" +
            message + "</p>");
     }
}

getMessage() メソッドはカスタム イベント オブジェクトを取得します。このオブジェクトには、コンシューマからプロデューサへ送信されるペイロードが含まれています。次の手順で、カスタム イベントをリスンし、このイベントが受信されるときに getMessage() メソッドを呼び出すイベント ハンドラを作成します。この場合、カスタム イベントがカスタム アプリケーションにデプロイされるポートレットにより開始されます。

プロデューサ ポートレットにイベント ハンドラをコンフィグレーションするには、次の手順に従います。

  1. Workshop for WebLogic で、コード リスト 7-4 に示されるクラスを使用して Java ポートレットを作成します。
  2. パッケージ エクスプローラで、図 7-25 に示されているように、Java ポートレット ファイルをダブルクリックして、エディタでポートレットを開きます。
  3. 図 7-25 エディタ内の Java ポートレット


    エディタ内の Java ポートレット

  4. ポートレットの外側の境界をクリックして、プロパティ ビューでポートレットのプロパティを表示します。
  5. プロパティ ビューで、図 7-26 に示すように、イベント ハンドラ ボタンをクリックして、[イベント ハンドラ] ダイアログ ボックスを開きます。[ポートレット イベント ハンドラ] ダイアログ ボックスが表示されます。
  6. ヒント : [ポートレット イベント ハンドラ] ダイアログ ボックスにより、ポートレットに対するイベント ハンドラを作成し、コンフィグレーションできます。イベント ハンドラはイベントをリスンして、イベントを受信したときに特定のアクションを実行します。
    図 7-26 イベント ハンドラ ボタン


    イベント ハンドラ ボタン

  7. [ポートレット イベント ハンドラ] ダイアログで、[ハンドラを追加] をクリックして、ポップアップ メニューから [カスタム イベントの処理] を選択します。
  8. [リスン先 (ワイルドカード)] ドロップダウン リストから [任意] を選択します。
  9. [イベント] フィールド (ダイアログの右下隅) に、messageCustomEvent などの名前を入力します。
  10. 図 7-27 は、入力が完了したダイアログを示しています。

    図 7-27 [ポートレット イベント ハンドラ] ダイアログ : ハンドラの追加


    [ポートレット イベント ハンドラ] ダイアログ : ハンドラの追加

  11. [ポートレット イベント ハンドラ] ダイアログで、[アクションを追加] を選択し、ポップアップ メニューから、[Java ポートレット メソッドの呼び出し] を選択します。
  12. [メソッド] フィールドで、図 7-28 に示すように、「getMessage」と入力して [OK] をクリックします。
  13. 図 7-28 [ポートレット イベント ハンドラ] ダイアログ : アクションの追加


    [ポートレット イベント ハンドラ] ダイアログ : アクションの追加

Java ポートレットは messageCustomEvent というカスタム イベントを処理するようにコンフィグレーションされています。このイベントを受信すると、ハンドラは JavaPortlet クラスで getMessage() メソッドを呼び出します。このイベント ハンドラは、プロデューサ上のこのポートレットと、リモート コンシューマ上のポートレットなどのその他のポートレットとの、ポートレット間通信のメカニズムを提供します。

コンシューマでのイベントの開始

コンシューマ ポートレットは、カスタム イベントを開始し、次にプロデューサで処理されるようにコンフィグレーションできます。コード リスト 7-5 は、コンシューマ側のローカル ポートレットで、カスタム イベントを開始し、ぺイロードをイベントに追加するために使用できるコードを示しています。

コード リスト 7-5 サンプル イベント開始コード
       PortletBackingContext context =
       PortletBackingContext.getPortletBackingContext(getRequest());
 context.fireCustomEvent("messageCustomEvent", form.getMessage());
       return new Forward("success");

fireCustomEvent() メソッドの詳細については、「Javadoc」を参照してください。ポートレット開発とイベント処理の詳細については、『ポートレット開発ガイド』を参照してください。


ページの先頭       前  次