WebLogic Portal での WSRP の使用
![]() |
![]() |
![]() |
![]() |
カスタム データ転送によって、ポートレットの開発者はプロデューサとコンシューマの間で任意のデータを交換できます。次に例を示します。
カスタム データ転送により、上記のようなケースや類似した問題を容易に解決できます。単純なプロデューサと複雑なプロデューサの両方でこの機能を利用できます。
この節では、カスタム データ転送を実装する方法について説明します。内容は以下のとおりです。
カスタム データ転送によって、次の「マーカ」インタフェースが導入されます。
次の例では、com.bea.wsrp.ext.holders.SimpleStateHolder
を使用するカスタム データ転送を説明します。このクラスでは、上記のインタフェースのデフォルト実装が提供されます。このクラスを使用すると、単純な名前と値の組み合わせのデータを交換できます。
データを送信するには、このインスタンスのインスタンスを作成し、リクエスト属性としてリクエストに含める必要があります。すると、プロデューサまたはコンシューマがネットワークを通じてオブジェクトを送信し、オブジェクトは送信先でリクエスト属性として使用できるようになります。
注意 : 以下の手順を実行するために必要なコンポーネントを作成する方法については、「リモート ポートレットでのポートレット間通信の確立」の「手順 1 : 環境の設定」を参照してください。
環境が準備できたら、次はプロデューサに JSP ファイルを作成し、そのファイルを表示するポートレットを作成します。この JSP ファイルはリクエストの状態を取得します。この手順は、次のとおりです。
注意 : この後の手順では WebLogic Workshop が実行中であることを前提としています。実行中でない場合はここで起動してください。
[新しいファイル] ダイアログ ボックス (図 6-2) が表示されます。
図 6-2 新規 JSP の [新しいファイル] ダイアログ ボックス
WebLogic Workshop の中央のペインであるデザイン ビューにデフォルトの JSP ファイルが表示されます (図 6-3)。
<%@ 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%>
この操作が終わると、ソース ビューは 図 6-5 のようになります。
図 6-5 zipTest.jsp の新しい JSP ソース
[ポートレットの詳細] ダイアログ ボックスが表示されます。[コンテンツ URI] フィールドにすでに zipTest.jsp
が表示されていることに注意してください (図 6-6)。
図 6-6 zipTest.jsp が表示されている [ポートレットの詳細]
ポートレット zipTest.portlet
が作成され、アプリケーション ツリーに表示されます (図 6-7)。
図 6-7 追加された新規 JSP ポートレット zipTest.portlet
次は、プロデューサの zipTest.portlet
を表示するために、コンシューマにリモート ポートレットを設定する必要があります。次の手順を実行します。
注意 : 開始する前に、[ツール|WebLogic Server|WebLogic Server の起動] を選択して、WebLogic Server を起動します。
[ポートレット タイプの選択] ダイアログ ボックスが表示されます (図 6-8) 。
図 6-8 [ポートレット タイプの選択] ダイアログ ボックス
[プロデューサの検索] または [プロデューサの選択] ダイアログ ボックスが表示されます (図 6-9)。
図 6-9 [プロデューサの検索] または [プロデューサの選択] ダイアログ ボックス
http://localhost:7001/Producer/producer?WSDL
[登録] ダイアログ ボックス (図 6-11) が表示されます。
[リストからポートレットを選択] ダイアログ ボックスが表示されます (図 6-12)。
図 6-12 [リストからポートレットを選択] ダイアログ ボックス
[プロキシ ポートレット詳細] ダイアログ ボックス (図 6-13) が表示されます。
図 6-13 [プロキシ ポートレット詳細] ダイアログ ボックス
[プロキシ ポートレット詳細] ダイアログ ボックスが閉じて、WebLogic Workshop が再び表示され、新しいポートレットがデザイン ビューに表示されます (図 6-14)。
図 6-14 デザイン ビューでの新規リモート ポートレット zipPrime.portlet
この手順では、CustomDataBacking.java
という名前のバッキング ファイルをコンシューマ側に作成し、「手順 3 : zipTest.portlet のコンシューマへの結合」で作成したポートレットにそのバッキング ファイルを追加します。次の手順を実行します。
WEB-INF/src
を表示し、右クリックしてコンテキスト メニューを開き、図 6-15 に示すように [新規作成|フォルダ] を選択します。図 6-15 WEB-INF/src での新規フォルダの作成
[新しいフォルダの作成] ダイアログ ボックス (図 6-16) が表示されます。
図 6-16 [新しいフォルダの作成] ダイアログ ボックス
図 6-17 のように、backing
フォルダがアプリケーション ツリーの WEB-INF/src
の下に表示されます。
図 6-17 WEB-INF/src 内の backing フォルダ
バッキング ファイル テンプレートが WebLogic Workshop に表示されます (図 6-19)。
コード リスト 6-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
{
public boolean preRender(HttpServletRequest request,
HttpServletResponse response)
{
SimpleStateHolder state = new SimpleStateHolder();
state.addParameter("zipCode", "80501");
request.setAttribute(MarkupRequestState.KEY, state);
return true;
}
}
テンプレートは、このとき 図 6-20 の例のようになっているはずです。
図 6-20 WebLogic Workshop の CustomDataBacking.java
backing.CustomDataBacking
と入力してバッキング ファイルを zipPrime.portlet
に追加し、〔Tab〕を押します。アプリケーションのコンポーネントの準備が整ったところで、アプリケーションをテストできます。テストが正常に終了すると、郵便番号 80501 (コンシューマに作成されたバッキング ファイルから提供される) がポートレットと同時に表示されます。
ポータルが作成され、WebLogic Workshop デザイン ビューに表示されます (図 6-22)。
図 6-22 WebLogic Workshop デザイン ビューでの zipTest.portal
図 6-23 zipTest.portal への zipTest.portlet の追加
ブラウザが開いてポータルが表示されます (少し時間がかかることがあります)。郵便番号 80501 がポートレットに表示されることに注意してください (図 6-24)。
図 6-24 正常に表示された zipTest.portal
「複雑なプロデューサでのインタフェースの実装 : 例」で説明した手順は、複雑なプロデューサのみに対応します。この例を単純なプロデューサを使用する場合は、少し変更する必要があります。単純なプロデューサにインタフェースを実装するには、次の手順に従います。
[ページ フロー ウィザード - ページ フロー名] ダイアログ ボックスが表示されます (図 6-26)。
図 6-26 [ページ フロー ウィザード - ページ フロー名] ダイアログ ボックス
[ページ フロー ウィザード - ページ フロー タイプを選択] ダイアログ ボックスが表示されます (図 6-27)。
図 6-27 [ページ フロー ウィザード - ページ フロー タイプを選択] ダイアログ ボックス
WebLogic Workshop が再表示され、フロー ビューに基本のページ フローが表示されます (図 6-28)。
index.jsp
のソースを表示します (図 6-29)。index.jsp
にコピーして、デフォルトの内容をすべて上書きします。コード リスト 6-3 単純なプロデューサでのページ フロー ポートレットの使用
<%@ page import="com.bea.wlw.netui.pageflow.scoping.ScopedRequest"%>
<%@ page import ="com.bea.wsrp.ext.holders.SimpleStateHolder,
com.bea.wsrp.ext.holders.MarkupRequestState"%>
<%
SimpleStateHolder state = (SimpleStateHolder)
((ScopedRequest) request).getOuterRequest().
getAttribute(MarkupRequestState.KEY);
String zip = (String) state.getParameter("zipCode");
%>
<%=zip%>
index.jsp
のソース ビューは、このとき図 6-30 のようになっているはずです。
図 6-30 WebLogic Workshop での更新された index.jsp
[ポートレットの詳細] ダイアログ ボックス (図 6-31) が表示されます。
図 6-31 JPF ポートレットの [ポートレットの詳細]
[コンテンツ URI] フィールドにすでに /zipTestPF/ZipTestPFController.jpf
が入力されていることに注意してください。
ポートレットが作成され、ZipTestPFController.portlet
が simpleProducerWeb/WEB-INF
の下に表示されます (図 6-32)
。
図 6-32 アプリケーション ツリーに追加された ZipTestPFController
ZipTestPFController.portlet
をコンシューマのポータル Web アプリケーションに結合します。手順を次のように変更してください。注意 : WebLogic Server が実行中であることを確認します。
http://localhost:7001/simpleProducer/producer?WSDL
注意 : 単純なプロデューサからポートレットを結合しているため、登録は必須ではありません ([登録が必要] : false)。このため、複雑なプロデューサの場合とは異なり、[登録] ダイアログ ボックスを開く必要はありません。
backing.CustomDataBacking
と入力して、バッキング ファイル CustomDataBacking.java
を追加します。〔Tab〕を押します。ブラウザが開き、しばらくするとポータルが表示されて、図 6-33 のように郵便番号 80501 が表示されます。
これらのインタフェースの独自の実装をデプロイする場合は、次の考慮事項に注意してください。
serialVersionUID
が同じになるようにしてください。コンシューマまたはプロデューサがカスタム データを送信できるかどうかは、リクエストのタイプによって決まります。次のルールが適用されます。
InteractionRequestState
を送信できる。例外はありません。InteractionResponseState
を返すことができる。例外はありません。MarkupRequestState
を送信できるのは、ポートレットを更新する必要がある場合のみ。たとえば、リモート ポートレットでキャッシングが有効になっている場合、コンシューマはマークアップを生成するためのリクエストをプロデューサに送信しないこともあります。MarkupResponseState
を返すことができない。
![]() ![]() |
![]() |
![]() |