連合ポータル ガイド

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

カスタム データの転送

WebLogic Portal がコンシューマとプロデューサ間でカスタム データのやり取りを行う技術は、比較的簡単なものです。用意されている一連のインタフェースによって、任意のデータをリクエスト オブジェクトと応答オブジェクトに追加します。この章では、これらのインタフェースを使用してカスタム データを転送する方法について説明し、その詳細な例も紹介します。

この章では、以下のトピックについて説明します。

 


カスタム データ転送とは

カスタム データ転送によって、ポートレットの開発者はプロデューサとコンシューマの間で任意のデータを交換できます。カスタム データ転送の主な使用例は、次のとおりです。

注意 : この技術は、その他のデータ転送技術を試してみた後でのみ使用することをお勧めします。プロデューサとコンシューマ間のデータ転送では、カスタム イベントの使用が優先されます。詳細については、「カスタム イベントによるデータ転送」を参照してください。

カスタム データ転送の使用例には次のようなものがあります。

カスタム データ転送により、上記のようなケースや類似した問題を容易に解決できます。カスタム データ転送を使用する技術はわかりやすく、実行する主要なタスクは次のとおりです。

  1. 次の節「カスタム データ転送のインタフェース」に示すインタフェースを実装する「ホルダ」クラスを 1 つ以上作成します。WebLogic Portal には、SimpleStateHolder というインタフェースのシリアライズ可能なデフォルト実装が用意されています。
  2. シリアライズ可能なホルダ オブジェクトをリクエスト オブジェクトまたは応答オブジェクトに必要に応じて配置します。たとえば、コンシューマ アプリケーションでホルダ オブジェクトをリクエスト パラメータとして設定し、それをプロデューサ アプリケーションで取得できます。この技術の詳細な例については、「複雑なプロデューサによるカスタム データ転送」を参照してください。

単純なプロデューサでも複雑なプロデューサでも、この機能を活用できます。

 


カスタム データ転送のインタフェース

次のインタフェースでは、プロデューサとコンシューマ間でデータを転送できます。カスタム データ転送を実行するには、これらのインタフェースの実装をコンシューマとプロデューサでデプロイする必要があります。

カスタム データ転送の実行」には、これらのインタフェースを使用する方法を示す詳細な例が紹介されています。これらのインタフェースの詳細については、「Javadoc」を参照してください。

注意 : これらのインタフェースは、イベントおよび依存関係の表示リクエストではサポートされません。

com.bea.wsrp.ext.holders.InteractionRequestState

対話 (フォームの送信など) が発生したときに、コンシューマが任意のデータをプロデューサに送信できます。

com.bea.wsrp.ext.holders.InteractionResponseState

対話の発生後、プロデューサが任意のデータをコンシューマに返すことができます。

com.bea.wsrp.ext.holders.MarkupRequestState

ポートレットが更新されるときに、コンシューマが任意のデータをプロデューサに送信できます。

com.bea.wsrp.ext.holders.MarkupResponseState

ポートレットが表示された後、プロデューサがに任意のデータを返すことができます。

com.bea.wsrp.ext.holders.XmlPayload

コンシューマとプロデューサ間で XML データを転送します。このクラスのインスタンスは、リクエスト オブジェクトと応答オブジェクトの中に直接置くことができます。詳細については、「XML データの転送」を参照してください。
ヒント : これらのインタフェースの独自の実装を作成しない場合は、シリアライズ可能な com.bea.wsrp.ext.holders.SimpleStateHolder クラスにデフォルトの実装が用意されています。この章の例では、カスタム データの転送に SimpleStateHolder を使用します。

 


カスタム データ転送の実行

この節では、コンシューマとプロデューサ間でカスタム データ転送を使用する方法について例を挙げて説明します。いずれの例でも、シリアライズ可能な com.bea.wsrp.ext.holders.SimpleStateHolder クラスを使用しています。このクラスは、上記の「カスタム データ転送のインタフェース」に示している 5 つのインタフェースを実装します。このクラスは、上記のインタフェースのデフォルト実装を用意しており、単純な名前と値の組み合わせのデータを交換できます。

取り上げる例は次のとおりです。

複雑なプロデューサによるカスタム データ転送

この例では、コンシューマから複雑なプロデューサにデータを転送する方法について説明します。複雑なプロデューサの詳細については、「WebLogic Portal プロデューサ」を参照してください。

サンプルの概要

このサンプルでは、コンシューマ アプリケーションのバッキング ファイルが com.bea.wsrp.ext.holders.SimpleStateHolder オブジェクトに任意のデータをパッケージ化します。このオブジェクトは、setAttribute() メソッドを使用してリクエストに追加されます。プロデューサはリクエストからデータを取得してそれを JSP ページに配置します。変更されたページがコンシューマ アプリケーションによって表示されます。

このサンプルは次の手順で構成されています。

  1. サンプルの設定
  2. プロデューサ JSP とポートレットの作成
  3. zipTest.portlet のコンシューマへの結合
  4. バッキング ファイルの作成
  5. コンシューマ アプリケーションのテスト

サンプルの設定

この章で取り上げているサンプルを試すには、Workshop for WebLogic を実行し、表 13-1 に示す前提条件を実行する必要があります。これらの基本的な設定タスクを実行する方法の詳細については、WebLogic Potar チュートリアルの「ポータル開発環境の設定」を参照してください。

表 13-1 前提条件タスク
タスク
推奨される名前
Portal ドメインを作成する。
wsrpPortalDomain
ポータル EAR プロジェクトを作成する。
wsrpPortalEAR
BEA WebLogic V9.2 Server を作成する。
なし
サーバに EAR プロジェクトを関連付ける。
なし
ポータル Web プロジェクトを作成して EAR に追加する。
consumerProject
もう 1 つポータル Web プロジェクトを作成して EAR に追加する。
producerProject

図 13-1 に、前提条件タスクを完了後のパッケージ エクスプローラを示します。

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

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

プロパティ ビューでポートレットのプロパティを表示して編集する方法を理解しておく必要があります。詳細については、「WebLogic Portal のポートレット開発ガイド」を参照してください。

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

サンプル環境が準備できたら、次はプロデューサに JSP ファイルを作成し、そのファイルを表示するポートレットを作成します。JSP ファイルのコードは、リクエストから SimpleStateHolder オブジェクトを取得し、そのデータ ペイロードを取得してデータを表示します。

  1. サンプルの設定」で説明したように、サンプル環境を設定していることを確認します。
  2. パッケージ エクスプローラで producerProject を右クリックし、[新規|その他] を選択します。[新規 - ウィザードを選択] ダイアログが表示されます。
  3. [新規 - ウィザードを選択] ダイアログで、[Web] フォルダを開き、図 13-2 に示すように [JSP] を選択して [次へ] をクリックします。
  4. 図 13-2 新規 JSP ファイルの作成


    新規 JSP ファイルの作成

    図 13-3 に示すように、[新しい JSP] ページ ダイアログ ボックスが表示されます。

    図 13-3 [新しい JSP] ページ ダイアログ ボックス


    [新しい JSP] ページ ダイアログ ボックス

  5. [新しい JSP] ダイアログで、[producerProject] フォルダを展開し、[WebContent] フォルダを選択します。
  6. [ファイル名] フィールドに、「zipTest.jsp」と入力し、[終了] をクリックします。
  7. 図 13-4 に示すように、デフォルトの JSP ファイルがエディタに表示されます。

    図 13-4 エディタで表示した JSP ソース ファイル


    エディタで表示した JSP ソース ファイル

  8. JSP ソース ファイルの内容全体をコード リスト 13-1 のコードで置き換えます。
  9. コード リスト 13-1 リクエストの状態を取得するコード
    <%@ page import ="com.bea.wsrp.ext.holders.SimpleStateHolder、
    com.bea.wsrp.ext.holders.MarkupRequestState"%>
    <%
    SimpleStateHolder state = (SimpleStateHolder)
    request.getAttribute(MarkupRequestState.KEY);
    String zip = (String) state.getParameter("zipCode");
    %>
    <%=zip%>

    図 13-5 に、新しいソース コードを表示したエディタを示します。

    図 13-5 zipTest.jsp の新しい JSP ソース


    zipTest.jsp の新しい JSP ソース

  10. ファイルを保存します。
ヒント : このサンプルの後半では、コンシューマ Web アプリケーションでバッキング ファイルをプロキシ ポートレットに追加します。このバッキング ファイルは、SimpleStateHolder オブジェクトを作成してデータを追加し、コンシューマからプロデューサに送信するリクエストにそのオブジェクトを組み込みます。SimpleStateHolder の詳細については、「Javadoc」の説明を参照してください。
  1. [パッケージ・エクスプローラー] ビューで、producerProject/WebContent フォルダを開きます。WebContent フォルダで zipTest.jsp を右クリックし、[ポートレットの生成...] を選択します。
  2. [ポートレットの詳細] ダイアログ ボックスが表示されます。図 13-6 に示すように、[コンテンツ パス] フィールドに zipTest.jsp がすでに表示されています。

    図 13-6 zipTest.jsp が表示されている [ポートレットの詳細]


    zipTest.jsp が表示されている [ポートレットの詳細]

  3. [状態] チェックボックスで、[最小化可能] と [最大化可能] を選択して [作成] をクリックします。
  4. 図 13-7 に示すように、パッケージ エクスプローラにポートレット zipTest.portlet が表示されます。

    図 13-7 新しい JSP ポートレット


    新しい JSP ポートレット

zipTest.portlet のコンシューマへの結合

次に、プロデューサから zipTest.portlet に表示するリモート ポートレットをコンシューマ アプリケーションで作成します。次の手順を実行します。

  1. WebLogic Server が実行中であることを確認してください。実行中ではない場合、[サーバー] タブを選択します。[BEA WebLogic v9.2 Server] が選択されていることを確認し、図 13-8 に示すように、[起動] ボタンをクリックします。
  2. 図 13-8 [起動] ボタンをクリックしてサーバを起動


    [起動] ボタンをクリックしてサーバを起動

  3. パッケージ エクスプローラで、consumerProject フォルダを開きます。
  4. [WebContent] フォルダを右クリックし、[新規|ポートレット] を選択します。
  5. ヒント : ポータル パースペクティブを使用している場合、[新規] メニューには [ポートレット] 選択項目のみしか表示されません。[ポートレット] がメニューに表示されていない場合は、ポータル パースペクティブに切り替えます。

    図 13-9 に示すように、[新しいポートレット] ダイアログ ボックスが表示されます。

    図 13-9 [新しいポートレット] ダイアログ


    [新しいポートレット] ダイアログ

  6. [新しいポートレット] ダイアログで、親フォルダとして [WebContent] を選択し、[ファイル名] フィールドに「zipPrime.portlet」と入力して [終了] をクリックします。
  7. 図 13-10 に示すように、[ポートレット タイプの選択] ダイアログ ボックスが表示されます。

    図 13-10 [ポートレット タイプの選択] ダイアログ


    [ポートレット タイプの選択] ダイアログ

  8. [リモート ポートレット] を選択してから [次へ] をクリックします。[ポートレット ウィザード - プロデューサ] ダイアログが表示されます。
  9. [ポートレット ウィザード - プロデューサ] ダイアログで [プロデューサの検索] を選択し、図 13-11 に示すように、表示されているフィールドに次の WSDL URL を入力します。
  10. http://localhost:7001/producerProject/producer?wsdl
    ヒント : プロデューサがコンシューマと同じサーバで実行されている場合、ホスト名は localhost になります。このサンプルでは、簡単にするために、コンシューマとプロデューサは同じ場所に配置しています。通常、プロデューサとコンシューマが同じサーバで実行されることはありません。
    図 13-11 WSDL URL


    WSDL URL

  11. WSDL URL を入力した後、[検索] をクリックします。
  12. ヒント : WSDL は Web Services Description Language の略で、プロデューサが提供するサービスを記述するために使用されます。詳細については、「WebLogic Portal コンシューマ」を参照してください。

    しばらくすると、[ポートレット ウィザード - プロデューサ] ダイアログ ボックスが更新されて、図 13-12 に示すように、[プロデューサの詳細] パネルに登録情報が表示されます。

    ヒント : 登録は、WSRP の仕様でオプションの機能として記述されています。WebLogic Portal の複雑なプロデューサは、このオプションを実装しているため、コンシューマはプロデューサが提供するポートレットを検出して対話する前に、登録する必要があります。詳細については、「複雑なプロデューサ」を参照してください。
    図 13-12 プロデューサの検索結果


    プロデューサの検索結果

  13. [登録] をクリックします。[登録] ダイアログが表示されます。
  14. 図 13-13 に示すように、[登録] ダイアログの [プロデューサ ハンドル] フィールドに「myProducer」と入力して [登録] をクリックします。ハンドルがコンシューマに保存され、プロデューサの識別に使用されます。
  15. 図 13-13 [登録] ダイアログ


    [登録] ダイアログ

  16. [ポートレット ウィザード - プロデューサ] ダイアログで [次へ] をクリックします。[リストからポートレットを選択] ダイアログ ボックスが表示されます。
  17. 図 13-14 に示すように、ポートレットのリストから、[zipTest] を選択します。
  18. 図 13-14 [リストからポートレットを選択] ダイアログ ボックス


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

  19. [次へ] をクリックします。図 13-15 に示すように、[プロキシ ポートレット詳細] ダイアログ ボックスが表示されます。
  20. 図 13-15 [プロキシ ポートレット詳細] ダイアログ ボックス


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

  21. [作成] をクリックします。
  22. 図 13-16 に示すように、エディタに新しいポートレットが表示されます。

    図 13-16 エディタに表示された新しいリモート ポートレットの zipPrime.portlet


    エディタに表示された新しいリモート ポートレットの zipPrime.portlet

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

この手順では、コンシューマ アプリケーションで CustomDataBacking.java というバッキング ファイルを作成します。次に、このバッキング ファイルを先に作成したリモート ポートレット zipPrime.portlet に追加します。

ヒント : バッキング ファイルは、ポートレットに機能を追加する Java クラスです。バッキング ファイルについては、『ポートレット開発ガイド』を参照してください。
  1. [パッケージ・エクスプローラー] ツリーで consumerProject フォルダを開き、src フォルダを右クリックして backing という名前の新しいフォルダを作成します。
  2. 図 13-17 に示すように、パッケージ エクスプローラに src/backing フォルダが表示されます。

    ヒント : または、フォルダの代わりに Java パッケージを作成することもできます。
    図 13-17 backing フォルダ


    backing フォルダ

  3. backing フォルダを右クリックし、[新規|クラス] を選択します。図 13-18 に示すように、[新規 Java クラス] ダイアログ ボックスが表示されます。
  4. 図 13-18 [新規 Java クラス] ダイアログ


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

  5. [名前] フィールドに、「CustomDataBacking」と入力し、[終了] をクリックします。新しい Java ソース ファイルがエディタに表示されます。
  6. Java ソース ファイルの内容全体をコード リスト 13-2 のコードで置き換えます。
  7. コード リスト 13-2 SimpleStateHolder インスタンスの追加 
    package backing;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
    import com.bea.wsrp.ext.holders.MarkupRequestState;
    import com.bea.wsrp.ext.holders.SimpleStateHolder;

    public class CustomDataBacking extends AbstractJspBacking
    {
       private static final long serialVersionUID = 1L;
       public boolean preRender(HttpServletRequest request、 
    HttpServletResponse response)
    {
    SimpleStateHolder state = new SimpleStateHolder();
    state.addParameter("zipCode"、 "80501");
    request.setAttribute(MarkupRequestState.KEY、state);
          return true;
    }
    }
  8. ファイルを保存します。詳細なバッキング ファイルを図 13-19 に示します。
  9. 図 13-19 エディタに表示される CustomDataBacking.java


    エディタに表示される CustomDataBacking.java

    ヒント : バッキング ファイルは、AbstractJspBacking.preRender() メソッドを実装します。このメソッドは、リクエストがプロデューサに送信される前に呼び出されます。実装によって、カスタム データを含む SimpleStateHolder オブジェクトがリクエストに追加されます。このオブジェクトはプロデューサで検索されます。プロデューサでは、データを抽出してリモート ポートレットに表示します。
  10. [zipPrime.portlet] をダブルクリックして、エディタに表示します。
  11. バッキング ファイルを zipPrime.portlet に追加します。そのためには、プロパティ ビューの [バッキング ファイル] フィールドにバッキング ファイルの完全なクラス名を入力します。
  12. backing.CustomDataBacking

    図 13-20 に、追加された後のクラス名を示します。

    図 13-20 バッキング ファイルの追加


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

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

コンシューマ アプリケーションのコンポーネントの準備が整ったところで、コンフィグレーションをテストできます。テストが正常に終了すると、郵便番号 80501 (バッキング ファイルから提供される) がリモート ポートレットと同時に表示されます。

アプリケーションをテストするには、次の手順に従います。

  1. パッケージ エクスプローラで、consumerProject/WebContent を右クリックし、[新規|ポータル] を選択します。[新しいポータル] ダイアログが表示されます。
  2. [ファイル名] フィールドに、「zipTest.portal」と入力し、[終了] をクリックします。
  3. 図 13-21 に示すように、ポータルが作成されてエディタに表示されます。

    図 13-21 エディタに表示される zipTest.portal


    エディタに表示される zipTest.portal

  4. [パッケージ・エクスプローラー] ビューから zipTest.portlet をポータルにドラッグします。(左右いずれかの列に配置できます。図 13-22 では、右側の列に配置しています。)
  5. 図 13-22 zipTest.portal への zipTest.portlet の追加


    zipTest.portal への zipTest.portlet の追加

  6. ポータルを保存します。
  7. ポータルを実行します。そのためには、パッケージ エクスプローラで zipTest.portal を右クリックし、[実行|サーバーで実行] を選択します。
  8. [サーバーで実行 - 新規サーバーの定義] ダイアログで、[終了] をクリックします。
  9. ポータルが Workshop for WebLogic ブラウザに表示されます。図 13-23 に示すように、コンシューマから送信されたカスタム データがポートレットに表示されます。

    図 13-23 正常に表示された zipTest.portal


    正常に表示された zipTest.portal

単純なプロデューサでのカスタム データ転送

前の節、「複雑なプロデューサによるカスタム データ転送」では、WebLogic Portal コンシューマ アプリケーションと WebLogic Portal ドメインで実行される複雑なプロデューサ間のデータ転送方法について説明しました。さらに、WebLogic Portal コンシューマと WebLogic Server ドメインで実行される単純なプロデューサ間でもデータを転送できます。

ヒント : 複雑なプロデューサと単純なプロデューサの詳細については、「WebLogic Portal プロデューサ」を参照してください。

単純なプロデューサでカスタム データ転送を使用する基本的な手順は、次のとおりです。

  1. WebLogic Server ドメインで実行される単純なプロデューサを正しくコンフィグレーションします。この手順については、「WebLogic Server プロデューサのコンフィグレーション」で説明しています。
  2. カスタム データ転送のインタフェース」に示すカスタム データ転送インタフェースを使用し、リクエスト オブジェクトと応答オブジェクトのデータの設定と検索を行います。複雑なプロデューサについて「複雑なプロデューサによるカスタム データ転送」で説明されているのと同じ基本手順を実行します。

 


XML データの転送

com.bea.wsrp.ext.holders.XmlPayload インタフェースの実装を使用して、コンシューマとプロデューサ間で XML データ (要素タイプのオブジェクト) を転送します。このクラスのインスタンスは、リクエスト オブジェクトと応答オブジェクトの中に直接置くことができます。XmlPayload インタフェースの詳細については、「Javadoc」の説明を参照してください。

コード リスト 13-3 に、XmlPayload を使用するサンプル コードを示します。

コード リスト 13-3 XmlPayload のサンプル
//-- 送信する Element オブジェクトを作成します。
Element xml = ...

XmlPayload payload = new XmlPayload(xml);
httpRequest.setAttribute(MarkupRequestState.KEY, payload);

 


独自のインタフェース実装のデプロイ

この節では、「カスタム データ転送のインタフェース」に示すカスタム データ転送インタフェースを実装するためのガイドラインについて説明します。

一般的なガイドライン

ヒント : com.bea.wsrp.ext.holders.SimpleStateHolder クラスは、4 つのデータ転送インタフェースのデフォルト実装を提供します。このクラスを使用すると、単純な名前と値の組み合わせのデータを交換できます。このクラスのメソッドの詳細については、「Javadoc」の説明を参照してください。

実装のルール

コンシューマまたはプロデューサがカスタム データを送信できるかどうかは、リクエストのタイプによって決まります。次のルールが適用されます。


  ページの先頭       前  次