Web Services Remote Portlets (WSRP) の
相互運用性ソリューション

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

WSRP 相互運用の例

この節では、WSRP 相互運用の例を示します。内容は以下のとおりです。

 


例の前提条件

WSRP 相互運用の例では、以下のコンポーネントとコンフィグレーションを想定しています。

この例で定義されているコンフィグレーションをサポートする AquaLogic Service Bus コンフィグレーションについては、AquaLogic Service Bus/WSRP コード サンプルを参照してください。これは、以下に示す BEA dev2dev の AquaLogic Service Bus コード サンプル ページにあります。

 


例のプロジェクトとフォルダ

この例では、ALSB 2.5 dev2dev コード サンプルに対応するコンフィグレーションについて説明します。

サンプルの構造は、2 つのプロジェクトに分割されます。共通リソースを含むプロジェクト、およびサンプル プロデューサのリソースを含むプロジェクトです。

表 3-1 WSRP 相互運用の例のプロジェクト
フォルダ
説明
wsrp
プロデューサ固有ではない共通のリソースを含む。
operationExample
最も高レベルのモニタをサポートする詳細な例。フォルダには、プロデューサ固有のリソースが含まれる。「モニタの例」を参照。

 


モニタの例

モニタ コンフィグレーションの例 (operationExample folder 内) では、プロデューサのすべてのサービスと操作をモニタするように、AquaLogic Service Bus をコンフィグレーションします。

モニタ コンフィグレーションでは、使用するビジネス サービスとプロキシ サービスが、WSRP 標準で定義されている WSDL に基づいています。例では、WSRP サービスを記述したり、メッセージ フローを拡張したりして、操作レベルのモニタをサポートするために、追加のリソースを定義します。この節の後の部分では、モニタのコンフィグレーションを実装するために必要なタスクを説明します。

手順 1 : WSDL リソースの定義

すべての WSRP WSDL 定義ファイルと、その定義が依存している XML スキーマ ファイルをインポートします。ファイルはすべて、この例に対応するサンプル コードの一部として用意されています。標準リソースの場所は次の表のとおりです。

表 3-2 WSDL リソース定義 
リソース名
場所
wsrp_v1_bindings
http://www.oasis-open.org/committees/wsrp/specifications/version1/wsrp_v1_bindings.wsdl
wsrp_v1_interfaces
http://www.oasis-open.org/committees/wsrp/specifications/version1/wsrp_v1_interfaces.wsdl
wsrp_v1_types
http://www.oasis-open.org/committees/wsrp/specifications/version1/wsrp_v1_types.xsd
wlp_wsrp_v1_bindings
$BEA_HOME/weblogic81/portal/lib/wsrp/wsrp-common.jar
wlp_wsrp_v1_types
$BEA_HOME/weblogic81/portal/lib/wsrp/wsrp-common.jar
xml
http://www.w3.org/2001/xml.xsd
wsrpWSDL
http://platform:7001/producer/producer_WSDL

BEA Portal で生成されたプロデューサは、追加ポートを定義して標準 WSDL を拡張し、MIME 添付を使用してメッセージを送信できるようにします。この拡張についての説明はこの例で扱う範囲から外れますが、プロデューサの WSDL が拡張リソースを参照する場合は、その定義が必要です。この例では、オプションのタスクで、プロデューサで使用される WSDL のリソースを作成します。これらの WSDL リソースと XML スキーマ リソースを作成した後、各リソースの参照を編集して他のリソースとの依存関係を解決します。

手順 2 : ビジネス サービスの作成

このモニタの例では、プロデューサが実装するポート タイプごとに WSDL バインディングを使用します。1 つのビジネス サービスには 1 つの WSDL ポートまたはバインディングしか関連付けられないため、それぞれに対して個別のビジネス サービス リソースを作成する必要があります。単純なプロデューサでは、必須のマークアップとサービス記述のインタフェースしか実装されませんが、複雑なプロデューサでは、管理と登録のインタフェースも実装されます。これらのサービスの作成方法は同じです。ただし、次の表に示すように、サービス名とサービスのタイプが異なります。

表 3-3 ビジネス サービス コンフィグレーション
サービス名
サービスのタイプ
base
WSDL port: operationExample/wsrpWSDL, port="WSRPBaseService"
desc
WSDL port: operationExample/wsrpWSDL, port="WSRPServiceDescriptionService"
mgmt
WSDL port: operationExample/wsrpWSDL, port="WSRPPortletManagementService"
reg
WSDL port: operationExample/wsrpWSDL, port="WSRPRegistrationService"
ext
WSDL port: operationExample/wsrpWSDL, port="WLP_WSRP_Ext_Service"

各サービスについて、少なくとも次の表に示す属性を設定します。

表 3-4 ビジネス サービスのサービス属性
名前
コメント
プロトコル
HTTP
プロデューサが secure="true" として作成されている場合は HTTPS。
ロード バランシング アルゴリズム
none
none を指定する必要がある。そうしないと、複数のエンドポイントを定義した場合に要求のセッション データが失われる。
エンドポイント URI
WebLogic Platform 8.1 :
http://platform:7001/producer/producer/
URL はマークアップ、サービス記述、登録サービス、およびポートレット管理と同じ。
エンドポイント URI (続き)
WebLogic Platform 9.2 での URL :
  • サービス記述 :
  • http://bangpltw3k1:8003/wsrpProducer/producer/wsrp_1.0/serviceDescription
複数のエンドポイントは、WSRP プロデューサに定義する必要がある。
  • マークアップ :
http://bangpltw3k1:8003/wsrpProducer/producer/wsrp_1.0/markup
  • 登録 :
http://bangpltw3k1:8003/wsrpProducer/producer/wsrp_1.0/registration
  • ポータル管理 :
http://bangpltw3k1:8003/wsrpProducer/producer/wsrp_1.0/portletManagement
  • マークアップ拡張機能 :
http://bangpltw3k1:8003/wsrpProducer/producer/wsrp-wlp-ext-1.0/markup

手順 3 : プロキシ サービスの作成

このモニタの例では、次のようにプロキシ サービスをコンフィグレーションしています。

プロキシ サービスを作成するには、以下の手順を実行します。

  1. ベースになる WSRP サービスにプロキシ サービスを作成します。
  2. 前の例と同様に、既存の operationExample/base ビジネス サービスをモデルとして使用し、プロキシ サービスを作成します。これによって、自動的に、ビジネス サービスと同じ WSDL バインディングがプロキシ サービスのベースとなり、ビジネス サービスへの条件なしのルート アクションを含むメッセージ フローが作成されます。エンドポイント URI については、ポート タイプの略語をプロデューサ名に付ける (たとえば、/operationExampleBase) など、任意に使用できます。

  3. メッセージ フローを編集し、コンシューマとプロデューサ間で要求転送ヘッダと応答転送ヘッダをコピーするのに必要な、同じトランスフォーメーションを追加します。
    WSRP は正常に機能するために、転送ヘッダで渡されるデータに依存します。特に、プロデューサは、応答ヘッダで、コンシューマがそれ以降の要求に指定すると想定する任意のセッション クッキーをコンシューマに返します。同様に、プロデューサは、コンシューマが SOAPAction 要求ヘッダに要求操作を指定することを想定します。
  4. デフォルトでは、AquaLogic Service Bus は、転送ヘッダを着信要求から発信要求に、または発信応答から着信応答にコピーしません。このため、メッセージ フローで、必要なヘッダをビジネス サービスに伝播し、ビジネス サービスから必要なヘッダを伝播する必要があります。このようなトランスフォーメーションがすべての WSRP サービスで必要になるため、適切なヘッダを抽出する 2 つの共通 XQuery リソース (要求ヘッダ用と応答ヘッダ用) を定義しておくと便利です。

    要求ヘッダでは次のクエリを使用します。

    表 3-5 要求ヘッダのクエリ
    名前
    リソース名
    wsrp/rqstHeaders
    Xquery
    declare namespace ctx="http://www.bea.com/wli/sb/context";
    declare namespace tp="http://www.bea.com/wli/sb/transports";
    declare variable $in external;
    $in/ctx:transport/ctx:request/tp:headers/child::*[local-name()!="Content-Length"]

    rqstHeaders クエリは、$in 変数からすべての転送ヘッダ (Content-Length 以外) を抽出します。AquaLogic Service Bus がメッセージ本体のフォーマットを変更することがあるため、長さが要求メッセージと正確に一致しません。本体が変更された場合 (フォーマット変更など) は、元の要求の長さをコピーすると転送エラーが発生することがあります。

    着信要求ヘッダを発信ビジネス サービスにコピーするには、次の置換要求アクションをメッセージ フローに追加します。

    変数 outbound の ./ctx:transport/ctx:request/tp:headers を xqTransform() で置換する
     
    
    ノードのコンテンツを置換
    
    変数マッピング (wsrp/rqstHeaders) : 
    
    in: $inbound 
    

    要求側と同様に、応答側でも、プロデューサが返す応答から Content-Length ヘッダ以外のすべてのヘッダを抽出する共通の XQuery リソースを定義します。

    応答ヘッダでは次のクエリを使用します。

    表 3-6 応答ヘッダのクエリ
    名前
    リソース名
    wsrp/rspncHeaders
    Xquery
    declare namespace ctx="http://www.bea.com/wli/sb/context";
    declare namespace tp="http://www.bea.com/wli/sb/transports";
    declare variable $out external;
    $out/ctx:transport/ctx:response/tp:headers/child::*[local-name()!="Content-Length"]

    ルート ノードの次のような置換応答アクションで、必要なヘッダを伝播します。

    変数 inbound の ./ctx:transport/ctx:response/tp:headers を xqTransform() で置換する
     
    
    ノードのコンテンツを置換
    
    変数マッピング (wsrp/rspncHeaders) : 
    
    out: $outbound 
    
  5. 呼び出す操作を指定します。
  6. 通常は、WSDL ベースのサービスにルーティングするルート アクションで、呼び出す操作を (ドロップダウン メニューから選択して) 指定します。ただし、各 WSRP ポートで複数の操作が実装されるため、操作ごとのケースを含むルーティング テーブルがコンフィグレーションに必要です。各ケースには、転送ヘッダを伝播するために同じトランスフォーメーションが必要です。

    この方法ですべてのトランスフォーメーションを作成するのは、かなり単調な作業になる場合があります。幸い、もっと便利な方法があります。ドロップダウン メニューを使用する代わりに、もう 1 つのトランスフォーメーションを使用してプロキシ サービスからビジネス サービスに操作をコピーします。次のような挿入アクションをメッセージ フローの要求アクションに追加して、このトランスフォーメーションをコンフィグレーションします。

    変数 outbound の ./ctx:service の最後の子として $inbound/ctx:service/ctx:operation を挿入する
    
    

これ以外のビジネス サービス用のプロキシ サービスは、同じ手順を繰り返して作成できます。ただし、すべてのトランスフォーメーションを手動で再作成せずにすむ簡単な方法もあります。たとえば、サービス記述サービス用のプロキシ サービスを作成するには、以下の手順を実行します。

  1. 作成した operationExample/base プロキシ サービスをモデルとして新しいプロキシ サービスを作成します。この例に従い、エンドポイント URI には /operationExampleDesc を使用します。
  2. 概要ページで、全般的なコンフィグレーションの編集リンクをクリックします。WSDL バインディングが Base ポートを使用して作成されています。これを、ここでは WSRPServiceDescriptionService ポートを参照するように修正します。
  3. メッセージ フローを編集します。ルート アクションが base ビジネス サービスを参照しています。これを、desc サービスにルーテイングするように修正します。

手順 4 : プロデューサからの WSDL の取得

プロデューサから WSDL を取得し、実際のプロデューサのエンドポイントを隠すように変換するサービスを作成します。この例では、各プロデューサのプロキシの URI が異なります。この節の後の部分では、プロデューサの WSDL を取得するためにリソースを作成する方法について説明します。

手順 4.1 : WSDL を取得するためのビジネス サービスの作成

プロデューサから WSDL を取得するためにビジネス サービスを作成します。このリソースはプロデューサに固有であるため、operationExample プロジェクトに作成する必要があります。次の表に、このビジネス サービスのプロパティを示します。

表 3-7 ビジネス サービス コンフィグレーションのプロパティ
名前
コメント
サービス名
wsdlSvc
任意の名前を付けることができる。
サービスのタイプ
任意の XML サービス
コンシューマは通常、HTTP GET 要求を使用してプロデューサから WSDL を取得する。GET をサポートするのは XML サービスのみ。
プロトコル
HTTP
または HTTPS。
ロード バランシング アルゴリズム
なし
[なし] が推奨される。
エンドポイント URI
http://platform:7001/producer/producer?WSDL
WSDL 取得用に複数のエンドポイントを指定できるが、指定すると利点が制約される。
HTTP 要求メソッド
GET
 

手順 4.2 : URL を構成するための XQuery 式の作成

プロデューサの WSDL にあるすべてのエンドポイント アドレスを、AquaLogic Service Bus サーバのアドレスとプロキシ サービスの URI の値を表すように変換する必要があります。プロデューサの WSDL にはそれぞれ 4 つまたはそれ以上のポートが定義されている場合があるため、エンドポイント位置の構成を簡略化するために XQuery 式を作成すると便利です。XQuery 式は次の 3 つの文字列変数を入力として受け取り、連結して SOAP アドレス要素を形成します。

次の表に、wsrp プロジェクトでのクエリの定義を示します。

表 3-8 wsrp プロジェクトでの XQuery 定義
名前
リソース名
wsrp/addr
XQuery
declare variable $baseURL external;
declare variable $name external;
declare variable $svc external;
declare namespace soap="http://schemas.xmlsoap.org/wsdl/soap/";
<soap:address location="{concat($baseURL, $name, $svc)}"/>

手順 4.3 : 操作のないプロキシ サービスの作成

以降のコンフィグレーション タスクで、何も実行しないサービスが必要になります。このサービスを作成するには、wsrp プロジェクト フォルダにリソース名 nullSvc として新しいプロキシ サービスを定義します。このサービスではすべてデフォルトを受け入れます。このプロキシ サービスをコンフィグレーションすると、この例で必要な 1 つのエコー ノードのみを含むサービスのメッセージ フローが作成されます。

手順 4.4 : WSDL を取得するための共通プロキシ サービスの作成

プロデューサから WSDL を取得するためにコンシューマが使用するプロキシ サービスを作成します。このプロキシ サービスは、この基本サンプルで作成されるすべてのプロデューサ コンフィグレーションに対応します。この節の例は提案に過ぎません。実装によっては特定の要件に合わせて別の方法が望ましい場合があります。このプロキシ サービスは 1 つのプロデューサに固有のものではないため、wsrp プロジェクト フォルダに作成する必要があります。

この手順で使用する方法では、管理者が各プロデューサに名前を割り当てる必要があります。この名前は、WSDL 取得用 URL の一部になります。プロキシ サービスのメッセージ フローが URL から名前を抽出し、そのプロデューサ固有のビジネス サービスを検索し、WSDL を取得します。その後、WSDL を変換して AquaLogic Service Bus へのエンドポイントを再作成します。プロキシ サービスのエンドポイント URI は、/getWSDL としてコンフィグレーションされ、コンシューマが WSDL を取得するために使用する URL は次のようになります。

http://alsb:7001/getWSDL/producerName

producerName は、管理者がプロデューサに割り当てた名前です。この例では、プロデューサ名は operationExample です。

次の表に、このプロキシ サービスのコンフィグレーションを示します。

表 3-9 プロキシ サービス コンフィグレーションのプロパティ
プロパティ名
コメント
サービス名
producerWSDL
任意の名前を付けることができる。
サービスのタイプ
任意の XML サービス
 
プロトコル
HTTP
 
エンドポイント URI
/getWSDL
 

このプロキシ サービスのメッセージ フローは、1 つのパイプライン ペアと 1 つのルート ノードで構成されます。パイプライン ペアの要求側は 1 つのステージで構成され、そのジョブは、プロデューサ名を URL から抽出してコンテキスト変数に割り当てることです。アクションは次のとおりです。

変数 producerName に $inbound/ctx:transport/ctx:request/http:relative-URI を割り当てる

メッセージ フローの応答側は、すべてのトランスフォーメーションを実行するステージです。置換アクションを実行して WSDL を変換する前に、次のように AquaLogic Service Bus サーバのベース URL をコンテキスト変数に割り当てて、トランスフォーメーションのたびに指定しなくてもよいようにします。

変数 nonSecureBaseURL に "http://alsb:7001/" を割り当てる

応答パイプラインのステージを編集して、指定のエンドポイント URI を前に作成したプロキシに一致させるトランスフォーメーションを実行するように、各置換アクションを変更します。この例で作成したプロキシの名前は、プロデューサ名にサービスのタイプの略称を付けたものです。前に作成した addr XQuery リソースは、拡張子引数を受け入れ、URI の位置を構成します。次の表のように、引数を適切な値に変更してください。

表 3-10 URI の位置を構成する拡張子の設定
@binding
addr のサービス引数
WSRP_v1_Markup_Binding_SOAP
"Base"
WSRP_v1_ServiceDescription_Binding_SOAP
"Desc"
WSRP_v1_PortletManagement_Binding_SOAP
"Mgmt"
WSRP_v1_Registration_Binding_SOAP
"Reg"
WLP_WSRP_v1_Markup_Ext_Binding_SOAP
"Ext"

表「URI の位置を構成する拡張子の設定」にある「サービス引数」のマッピングと同様に、「name:」を「$producerName」にマッピングし、「BaseURL」を「$nonSecureBaseURL」にマッピングする必要があります。

5 つの置換アクションは、次のコード リストのように定義されます。name の値は、表のバインディング名で置換されます。

./*[local-name()="definitions"]/*[local-name()="service"]/*[local-name()="port"][ends-with(attribute::binding,"name")]/*[local-name()="address" を置換する

ノード全体を置換

name

WSRP_v1_Markup_Binding_SOAP

WSRP_v1_ServiceDescription_Binding_SOAP

WSRP_v1_PortletManagement_Binding_SOAP

WSRP_v1_Registration_Binding_SOAP

最初の置換アクションに、次のユーザ ネームスペース定義を追加する必要があります。

表 3-11 置換アクションのユーザ ネームスペース定義
プレフィックス
ネームスペース
wsdl
http://schemas.xmlsoap.org/wsdl/
soap
http://schemas.xmlsoap.org/wsdl/soap/

このメッセージ フローのルート ノードは、$producerName に基づいてケースを選択するルーティング テーブルで構成されます。認識されている各プロデューにケースを追加し、名前が一致すると、ケースがそれぞれ適切なビジネス サービスにルーティングされて WSDL を取得するようにします。この例では次のディレクティブを使用します。

= "operationExample" wsdlSvc にルーティングする

不明なプロデューサ名が指定されたケースを処理するには、次のように、操作のないサービスにルーティングするデフォルト ケースを追加します。

デフォルト nullSvc にルーティングする

この例では、次のような応答アクションをデフォルト ケースに追加して、HTTP 404 ステータス コードを返します。

変数 inbound の ./ctx:transport/ctx:response の最初の子として <http:http-response-code>404</http:http-response-code> を挿入する
失敗時に返信する 

最後に、ルート ノードのルーティング テーブルを編集して、ケースがシステムで認識されているプロデューサに対応するようにします。

手順 5 : コンフィグレーションのテスト

コンフィグレーションが完了したら、正しく機能するかどうかを確認するためにテストします。コンフィグレーションは以下の手順でテストします。

  1. 通常のブラウザ ウィンドウに次の URL を入力して、WSDL を取得します。
  2. http://alsb:7001/getWSDL/operationExample

  3. エンドポイント WSRP のすべてのエンドポイント URL (BEA 拡張機能サービス以外) が、AquaLogic Service Bus サーバのプロキシ サービスの値を正しく参照するように変更されていることを確認します。
  4. この URL をプロデューサの WSDL のアドレスとして指定して、ポータル コンシューマ アプリケーションにリモート ポートレットを作成します。
  5. リモート ポートレットを作成するには、WebLogic Workshop または Portal Administration Tool を使用します。WSDL 取得時に入力する URL が異なる点を除き、このポートレットを作成する手順は、AquaLogic Service Bus が仲介しないポートレットの作成手順と同じです。

  6. コンシューマ ポータルが完成したら、アプリケーションを実行します。
  7. 目的の AquaLogic Service Bus コンポーネントのモニタを有効にします。
  8. AquaLogic Service Bus Console を使用して、プロデューサが処理するすべての WSRP サービスおよび操作に関するメッセージ件数やパフォーマンス統計を詳しく表示します。

  ページの先頭       前  次