![]() ![]() ![]() ![]() |
WebLogic Portal がコンシューマとプロデューサ間でカスタム データのやり取りを行う技術は、比較的簡単なものです。用意されている一連のインタフェースによって、任意のデータをリクエスト オブジェクトと応答オブジェクトに追加します。この章では、これらのインタフェースを使用してカスタム データを転送する方法について説明し、その詳細な例も紹介します。
カスタム データ転送によって、ポートレットの開発者はプロデューサとコンシューマの間で任意のデータを交換できます。カスタム データ転送の主な使用例は、次のとおりです。
注意 : | この技術は、その他のデータ転送技術を試してみた後でのみ使用することをお勧めします。プロデューサとコンシューマ間のデータ転送では、カスタム イベントの使用が優先されます。詳細については、「カスタム イベントによるデータ転送」を参照してください。 |
カスタム データ転送により、上記のようなケースや類似した問題を容易に解決できます。カスタム データ転送を使用する技術はわかりやすく、実行する主要なタスクは次のとおりです。
単純なプロデューサでも複雑なプロデューサでも、この機能を活用できます。
次のインタフェースでは、プロデューサとコンシューマ間でデータを転送できます。カスタム データ転送を実行するには、これらのインタフェースの実装をコンシューマとプロデューサでデプロイする必要があります。
「カスタム データ転送の実行」には、これらのインタフェースを使用する方法を示す詳細な例が紹介されています。これらのインタフェースの詳細については、「Javadoc」を参照してください。
注意 : | これらのインタフェースは、イベントおよび依存関係の表示リクエストではサポートされません。 |
ヒント : | これらのインタフェースの独自の実装を作成しない場合は、シリアライズ可能な com.bea.wsrp.ext.holders.SimpleStateHolder クラスにデフォルトの実装が用意されています。この章の例では、カスタム データの転送に SimpleStateHolder を使用します。 |
この節では、コンシューマとプロデューサ間でカスタム データ転送を使用する方法について例を挙げて説明します。いずれの例でも、シリアライズ可能な com.bea.wsrp.ext.holders.SimpleStateHolder クラスを使用しています。このクラスは、上記の「カスタム データ転送のインタフェース」に示している 5 つのインタフェースを実装します。このクラスは、上記のインタフェースのデフォルト実装を用意しており、単純な名前と値の組み合わせのデータを交換できます。
コンシューマと複雑なプロデューサ間のカスタム データ転送について説明します。
この例では、コンシューマから複雑なプロデューサにデータを転送する方法について説明します。複雑なプロデューサの詳細については、「WebLogic Portal プロデューサ」を参照してください。
このサンプルでは、コンシューマ アプリケーションのバッキング ファイルが com.bea.wsrp.ext.holders.SimpleStateHolder オブジェクトに任意のデータをパッケージ化します。このオブジェクトは、setAttribute() メソッドを使用してリクエストに追加されます。プロデューサはリクエストからデータを取得してそれを JSP ページに配置します。変更されたページがコンシューマ アプリケーションによって表示されます。
この章で取り上げているサンプルを試すには、Workshop for WebLogic を実行し、表 13-1 に示す前提条件を実行する必要があります。これらの基本的な設定タスクを実行する方法の詳細については、WebLogic Potar チュートリアルの「ポータル開発環境の設定」を参照してください。
図 13-1 に、前提条件タスクを完了後のパッケージ エクスプローラを示します。
プロパティ ビューでポートレットのプロパティを表示して編集する方法を理解しておく必要があります。詳細については、「WebLogic Portal のポートレット開発ガイド」を参照してください。
サンプル環境が準備できたら、次はプロデューサに JSP ファイルを作成し、そのファイルを表示するポートレットを作成します。JSP ファイルのコードは、リクエストから SimpleStateHolder オブジェクトを取得し、そのデータ ペイロードを取得してデータを表示します。
図 13-3 に示すように、[新しい JSP] ページ ダイアログ ボックスが表示されます。
zipTest.jsp
」と入力し、[終了] をクリックします。
図 13-4 に示すように、デフォルトの JSP ファイルがエディタに表示されます。
<%@ 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 に、新しいソース コードを表示したエディタを示します。
ヒント : | このサンプルの後半では、コンシューマ Web アプリケーションでバッキング ファイルをプロキシ ポートレットに追加します。このバッキング ファイルは、SimpleStateHolder オブジェクトを作成してデータを追加し、コンシューマからプロデューサに送信するリクエストにそのオブジェクトを組み込みます。SimpleStateHolder の詳細については、「Javadoc」の説明を参照してください。 |
producerProject/WebContent
フォルダを開きます。WebContent フォルダで zipTest.jsp
を右クリックし、[ポートレットの生成...] を選択します。
[ポートレットの詳細] ダイアログ ボックスが表示されます。図 13-6 に示すように、[コンテンツ パス] フィールドに zipTest.jsp
がすでに表示されています。
図 13-7 に示すように、パッケージ エクスプローラにポートレット zipTest.portlet
が表示されます。
次に、プロデューサから zipTest.portlet
に表示するリモート ポートレットをコンシューマ アプリケーションで作成します。次の手順を実行します。
ヒント : | ポータル パースペクティブを使用している場合、[新規] メニューには [ポートレット] 選択項目のみしか表示されません。[ポートレット] がメニューに表示されていない場合は、ポータル パースペクティブに切り替えます。 |
図 13-9 に示すように、[新しいポートレット] ダイアログ ボックスが表示されます。
zipPrime.portlet
」と入力して [終了] をクリックします。
図 13-10 に示すように、[ポートレット タイプの選択] ダイアログ ボックスが表示されます。
http://localhost:7001/producerProject/producer?wsdl
ヒント : | プロデューサがコンシューマと同じサーバで実行されている場合、ホスト名は localhost になります。このサンプルでは、簡単にするために、コンシューマとプロデューサは同じ場所に配置しています。通常、プロデューサとコンシューマが同じサーバで実行されることはありません。 |
ヒント : | WSDL は Web Services Description Language の略で、プロデューサが提供するサービスを記述するために使用されます。詳細については、「WebLogic Portal コンシューマ」を参照してください。 |
しばらくすると、[ポートレット ウィザード - プロデューサ] ダイアログ ボックスが更新されて、図 13-12 に示すように、[プロデューサの詳細] パネルに登録情報が表示されます。
ヒント : | 登録は、WSRP の仕様でオプションの機能として記述されています。WebLogic Portal の複雑なプロデューサは、このオプションを実装しているため、コンシューマはプロデューサが提供するポートレットを検出して対話する前に、登録する必要があります。詳細については、「複雑なプロデューサ」を参照してください。 |
myProducer
」と入力して [登録] をクリックします。ハンドルがコンシューマに保存され、プロデューサの識別に使用されます。
図 13-16 に示すように、エディタに新しいポートレットが表示されます。
この手順では、コンシューマ アプリケーションで CustomDataBacking.java
というバッキング ファイルを作成します。次に、このバッキング ファイルを先に作成したリモート ポートレット zipPrime.portlet
に追加します。
ヒント : | バッキング ファイルは、ポートレットに機能を追加する Java クラスです。バッキング ファイルについては、『ポートレット開発ガイド』を参照してください。 |
backing
という名前の新しいフォルダを作成します。
図 13-17 に示すように、パッケージ エクスプローラに src/backing フォルダが表示されます。
ヒント : | または、フォルダの代わりに Java パッケージを作成することもできます。 |
CustomDataBacking
」と入力し、[終了] をクリックします。新しい Java ソース ファイルがエディタに表示されます。 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;
}
}
ヒント : | バッキング ファイルは、AbstractJspBacking.preRender() メソッドを実装します。このメソッドは、リクエストがプロデューサに送信される前に呼び出されます。実装によって、カスタム データを含む SimpleStateHolder オブジェクトがリクエストに追加されます。このオブジェクトはプロデューサで検索されます。プロデューサでは、データを抽出してリモート ポートレットに表示します。 |
zipPrime.portlet
] をダブルクリックして、エディタに表示します。zipPrime.portlet
に追加します。そのためには、プロパティ ビューの [バッキング ファイル] フィールドにバッキング ファイルの完全なクラス名を入力します。
図 13-20 に、追加された後のクラス名を示します。
コンシューマ アプリケーションのコンポーネントの準備が整ったところで、コンフィグレーションをテストできます。テストが正常に終了すると、郵便番号 80501 (バッキング ファイルから提供される) がリモート ポートレットと同時に表示されます。
を右クリックし、[新規|ポータル] を選択します。[新しいポータル] ダイアログが表示されます。zipTest.portal
」と入力し、[終了] をクリックします。
図 13-21 に示すように、ポータルが作成されてエディタに表示されます。
ポータルが Workshop for WebLogic ブラウザに表示されます。図 13-23 に示すように、コンシューマから送信されたカスタム データがポートレットに表示されます。
前の節、「複雑なプロデューサによるカスタム データ転送」では、WebLogic Portal コンシューマ アプリケーションと WebLogic Portal ドメインで実行される複雑なプロデューサ間のデータ転送方法について説明しました。さらに、WebLogic Portal コンシューマと WebLogic Server ドメインで実行される単純なプロデューサ間でもデータを転送できます。
ヒント : | 複雑なプロデューサと単純なプロデューサの詳細については、「WebLogic Portal プロデューサ」を参照してください。 |
単純なプロデューサでカスタム データ転送を使用する基本的な手順は、次のとおりです。
com.bea.wsrp.ext.holders.XmlPayload
インタフェースの実装を使用して、コンシューマとプロデューサ間で XML データ (要素タイプのオブジェクト) を転送します。このクラスのインスタンスは、リクエスト オブジェクトと応答オブジェクトの中に直接置くことができます。XmlPayload インタフェースの詳細については、「Javadoc」の説明を参照してください。
コード リスト 13-3 に、XmlPayload を使用するサンプル コードを示します。
//-- 送信する Element オブジェクトを作成します。
Element xml = ...
XmlPayload payload = new XmlPayload(xml);
httpRequest.setAttribute(MarkupRequestState.KEY, payload);
この節では、「カスタム データ転送のインタフェース」に示すカスタム データ転送インタフェースを実装するためのガイドラインについて説明します。
ヒント : | com.bea.wsrp.ext.holders.SimpleStateHolder クラスは、4 つのデータ転送インタフェースのデフォルト実装を提供します。このクラスを使用すると、単純な名前と値の組み合わせのデータを交換できます。このクラスのメソッドの詳細については、「Javadoc」の説明を参照してください。 |
コンシューマまたはプロデューサがカスタム データを送信できるかどうかは、リクエストのタイプによって決まります。次のルールが適用されます。
InteractionRequestState
を送信できる。例外はありません。InteractionResponseState
を返すことができる。例外はありません。MarkupRequestState
を送信できるのは、ポートレットを更新する必要がある場合のみ。たとえば、リモート ポートレットでキャッシングが有効になっている場合、コンシューマはマークアップを生成するためのリクエストをプロデューサに送信しないこともあります。MarkupResponseState
を返すことができない。
![]() ![]() ![]() |