ナビゲーションをスキップ

相互運用性ソリューション ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

Web Services for Remote Portlets (WSRP) との相互運用性

Web Services for Remote Portlets (WSRP) は、マークアップ フラグメントをリモート システムで生成してローカルのポータル アプリケーションで表示するメカニズムとして、よく使用されています。この節では、AquaLogic Service Bus を使用して、WSRP を使用するアプリケーションでサービス レベル アグリーメントをモニタする方法を説明します。

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

AquaLogic Service Bus Console (『AquaLogic Service Bus Console の使い方』を参照) を使用して AquaLogic Service Bus をコンフィグレーションします。WebLogic Portal での WSRP 対応ポータル作成の詳細については、『WebLogic Portal での WSRP の使用』を参照してください。

 


WSRP プロデューサおよびコンシューマ

WSRP では以下の 2 つのコンポーネントが不可欠です。

 


アーキテクチャ

この節では、WSRP の基本アーキテクチャについて説明し、AquaLogic Service Bus を追加してこのアーキテクチャを拡張する方法を示します。

WSRP の基本アーキテクチャ

次の図は、プロデューサ アプリケーションとコンシューマ アプリケーション間の、基本の WSRP SOAP 要求および応答フローを示します。

図 6-1 プロデューサ アプリケーションとコンシューマ アプリケーション間の基本の要求/応答フロー

プロデューサ アプリケーションとコンシューマ アプリケーション間の基本の要求/応答フロー


 

AquaLogic Service Bus を使用した WSRP の拡張アーキテクチャ

WSRP プロデューサによって SOAP Web サービスが実装されるため、次の図のように、Enterprise Service Bus (AquaLogic Service Bus など) をプロデューサとコンシューマの仲介者として使用して、サービス レベル アグリーメントのモニタ機能を実現できます。

図 6-2 AquaLogic Service Bus によって拡張された WSRP の要求/応答フロー

AquaLogic Service Bus によって拡張された WSRP の要求/応答フロー


 

このアーキテクチャでは、WSRP SOAP 要求/応答フローは以下の順序で行われます。

  1. 着信要求 : クライアント (コンシューマ) が AquaLogic Service Bus のプロキシを呼び出します。
  2. 発信要求 : プロキシは要求 (SOAP 本体と転送ヘッダを含むメッセージ) をビジネス サービスにルーティングし、ビジネス サービスは外部 Web サービス (プロデューサ) の要求を作成します。
  3. 着信応答 : Web サービスが AquaLogic Service Bus に返信を返します。
  4. 発信応答 : プロキシが返信 (SOAP 本体と転送ヘッダを含むメッセージ) をコンシューマに返します。

この節の後の部分では、WSRP サービスのサービス要求を仲介するように AquaLogic Service Bus をコンフィグレーションする手順について説明します。プロデューサで提供されるサービスや、AquaLogic Service Bus の適切なコンフィグレーションのために使用する必要がある WSRP のその他の属性について説明します。また、プロデューサを詳しくモニタするために使用できるさまざまな戦略も示します。最後に、WSRP でのロード バランシングとフェイルオーバについても説明します。

 


WSRP 設計の概念

このトピックでは、以下の WSRP 設計の概念について説明します。

WSRP WSDL

次の表は、プロデューサで提供されるサービスの種類を示します。

表 6-1 プロデューサのサービス 

サービス

説明

サービス記述

必須サービス。コンシューマが使用できるように、プロデューサとポートレットについて記述する。

マークアップ

必須サービス。リモート ポートレットとのユーザの対話を管理し、ポートレットのレンダリングに使用される HTML マークアップを返す。

登録

オプション サービス。これを使用してコンシューマがプロデューサに自己登録できる。登録は、複雑なプロデューサでは必須。

管理

オプション サービス。複雑なプロデューサでポートレットのカスタマイズとポートレットの環境設定を管理するために提供される。

マークアップ拡張機能

BEA Portal プロデューサでマークアップ サービスの代わりに提供されるサービス。マークアップ拡張機能では、HTML マークアップ コンテンツの送信でマルチパート MIME メッセージを使用することで、メッセージ処理の効率が上がる。 


 

各プロデューサは、少なくとも 2 つのサービス (サービス記述とマークアップ) を実装します。単純なプロデューサは、これら 2 つのサービスだけを提供します。 複雑なプロデューサは、この他に 2 つのサービス (登録と管理) を提供します。また、WebLogic Portal プロデューサは、標準のマークアップ サービスの代わりに使用できる拡張機能サービス (マークアップ拡張機能) も実装します。

これらのサービスは、標準の WSDL 形式で記述されます。プロデューサは、WSDL 取得用に 1 つの URL を提供します。WSDL には、そのプロデューサが提供するすべてのサービスが記述されています。各サービスのエンドポイントによって、コンシューマがプロデューサとの通信に転送レベルのセキュリティ (HTTPS) を使用する必要があるかどうかが指定されます。

WSRP メッセージ

WSRP は、プロデューサとコンシューマの間で送信されるすべてのメッセージで SOAP over HTTP を使用します。SOAP 本体で標準メッセージ形式を使用するだけでなく、WSRP では、要求メッセージに特定の転送ヘッダを設定する必要があります。少なくとも、コンシューマは、SOAPAction ヘッダ、クッキー ヘッダ、および通常の HTTP ヘッダ (Content-Type など) を設定する必要があります。プロデューサは、セッション クッキーとアプリケーション固有のクッキー (存在する場合) を、応答メッセージの HTTP 転送ヘッダで返します。コンシューマは、後続の要求メッセージでそのセッション クッキーを返す必要があります。

 


WSRP 対応 AquaLogic Service Bus のコンフィグレーション

WSRP 対応 AquaLogic Service Bus のコンフィグレーションには、以下のタスクが含まれます。

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

プロデューサの WSDL の取得

通常、コンシューマは、プロデューサに直接アクセスして WSDL を取得します。ただし、AquaLogic Service Bus を使用してサービスを仲介する場合、プロデューサへのアクセスはすべて AquaLogic Service Bus を介して行われます。このため、コンシューマにプロキシ サービスを実装し、そのプロキシ サービスで、プロデューサの実際の URL を呼び出して WSDL を取得し、以下の方法で結果を変換する必要があります。

開発者がプロデューサを作成するときに、プロデューサで SSL が必要 ("secure=true") かどうかを指定できます。また、AquaLogic Service Bus 管理者は、AquaLogic Service Bus コンフィグレーションを使用して、コンシューマに対するセキュリティ要件を変更できます。たとえば、プロデューサが SSL を要求しないとします。このとき、AquaLogic Service Bus 管理者は、次のようにしてコンシューマに SSL の使用を要求することができます。

このようにコンフィグレーションすると、AquaLogic Service Bus は、コンシューマからの安全なメッセージとプロデューサが使用する安全でないメッセージを自動的に橋渡しします。

コンシューマとプロデューサの間でのメッセージのルーティング

コンシューマは WSDL のコピーを取得した後、WSDL の定義を使用してサービス要求を作成し、AquaLogic Service Bus を介してプロデューサに送信します。WSRP の要求/応答プロセスの内容は以下のとおりです。

  1. コンシューマが、プロデューサ サービスに対応する AquaLogic Service Bus プロキシ サービスにメッセージを送信する。
  2. プロキシ サービスは、メッセージを (そのままの状態で) 実際のプロデューサ サービスにルーティングする単純なメッセージ フローを実行する。
  3. プロデューサは応答を作成し、AquaLogic Service Bus を介してコンシューマに送信する。
  4. コンシューマは、プロデューサからの応答を (そのままの状態で) 受信する。

WSRP Web サービスはポートレットをエクスポーズします。それらのポートレットは HTTP のクッキーとセッションに依存する場合があります。このため、HTTP 転送ヘッダ (SOAPAction やクッキーなど) を伝播するように ALSB をコンフィグレーションする必要があります。ただし、デフォルトでは、AquaLogic Service Bus は、プロキシ サービスからビジネス サービスに転送ヘッダを渡しません。プロキシ サービスとビジネス サービスが同じ転送を使用するとは限らないためです。したがって、要求ヘッダを着信要求から発信要求にコピーするようにメッセージ フローをコンフィグレーションする必要があります。同様に、ビジネス サービスの応答ヘッダも、プロキシ サービスからコンシューマへの応答にコピーする必要があります。

すべての転送ヘッダをプロキシ サービスとビジネス サービスの間でコピーできますが、エラーを避けるために、コピーする転送ヘッダを選択してください。Set-Cookie ヘッダと Cookie ヘッダはコピーする必要があります。AquaLogic Service Bus は、送信する最終メッセージをアセンブルするエンティティであるため、ヘッダ情報の一部 (Content-Length など) は保持する必要があります。たとえば、メッセージ フローで Content-Length ヘッダをプロキシ サービスからビジネス サービスにコピーすると、処理中にメッセージの長さが変化したためにエラーになることがあります。

モニタ レベルの選択

WSRP アプリケーションをモニタする場合、AquaLogic Service Bus 管理者が、必要なモニタ レベルを決定する必要があります。

表 6-2 WSRP のモニタ レベル 

モニタ レベル

説明

プロデューサレベル

最も低いレベル。最も容易に実装できる。このレベルでは、プロデューサを構成するサービスに関係なく、プロデューサ全体をモニタする。

操作レベル

最も高いモニタ レベル。プロデューサの個々のサービスと操作の使用状況をモニタする。


 

実装するモニタ レベルは、AquaLogic Service Bus コンフィグレーションの複雑さに影響します。これによって、各プロデューサのために作成する必要があるプロキシ サービスまたはビジネス サービスのタイプと数が決まります。また、AquaLogic Service Bus 管理者は、プロキシ サービスとプロデューサ サービスの両方を監視するように選択できます。2 つのモニタのレベルを同じにする必要はありません。

プロデューサレベルのモニタ

プロデューサレベルのモニタは、要求される特定のサービスには関係なく、1 つのプロデューサに送信される要求の合計数を追跡します。そのため、プロデューサレベルのモニタは、AquaLogic Service Bus でのコンフィグレーションが最も簡単です。サービス タイプは重要ではないため、プロキシ サービスまたはビジネス サービスを、WSDL ベースで作成する必要がありません。代わりに、サービス タイプは [任意の SOAP サービス] としてコンフィグレーションできます。各プロデューサに、1 つのプロキシ サービスと 1 つのビジネス サービスのみが必要です。実装例については、「プロデューサレベルのモニタの例」を参照してください。

プロデューサレベルのモニタをコンフィグレーションするには、以下のタスクを実行します。

  1. すべてのメッセージを条件なしでビジネス サービスにルーティングするように、プロキシ サービスのメッセージ フローをコンフィグレーションします。
  2. 着信要求から発信要求に適切な要求ヘッダをコピーする要求アクションをメッセージ フローに追加します。
  3. 応答ヘッダを発信応答から着信応答にコピーする応答アクションをメッセージ フローに追加します。

プロデューサレベルのモニタが適しているかどうかは、実装の特定の要件によって変わります。プロデューサレベルのモニタでは、プロデューサのサービスや操作によって経過時間に差がある場合でも、すべてのサービスや操作の平均時間が算出されます。ただし、プロデューサのサービスと操作によって特性が大きく異なることがあり、集約された計測値を検討しても意味がない場合があります。たとえば、マークアップ サービスは、WSRP の主要機能であり、登録サービスよりも大幅に長い実行時間が必要です。ただし、プロデューサレベルのモニタではこれらは区別されません。それでも、プロデューサレベルのモニタは、プロデューサの利用状況を測定するときや、プロデューサに深刻なパフォーマンスの問題がある場合には役立ちます。プロダクション システムでは、マークアップ サービスはさらに頻繁に使用される (ほぼ 99%) ため、やはりプロデューサ レベルでのサービス レベル アグリーメント (SLA) のモニタが役立つ場合があります。

操作レベルのモニタ

操作レベルのモニタは、サービスの操作を個別に追跡します。プロキシ サービスの操作レベルのモニタは、非常に簡単に設定できます。ただし、ビジネス サービスに操作レベルのモニタをコンフィグレーションするには少し手間がかかります。幸い、WSRP サービスのメッセージ フローのオーバーヘッドは非常に少なく、プロキシ サービスとプロデューサのマッピング、およびビジネス サービスとプロデューサのマッピングは容易にコンフィグレーションできます。このため、多くの場合、SLA 要件を満たすにはプロキシ サービスを操作レベルでモニタするだけで十分です。実装例については、「操作レベルのモニタの例」を参照してください。

プロキシ サービスの操作レベルのモニタ

WSRP プロキシ サービスに操作レベルのモニタをコンフィグレーションするには、プロデューサが実装する各サービスに対してプロキシ サービスを作成します。

これらのプロキシ サービスは、SOAP バインディングを使用する標準 WSRP WSDL をベースにしている必要があります。ビジネス サービスは、プロデューサに対して 1 つだけ作成し、WSDL ベースではなく [任意の SOAP サービス] を使用するようにコンフィグレーションしてください。プロキシ サービスとビジネス サービスの間のメッセージ フローで SOAP 本体が変更されないようにしてください。ただし、すべての WSRP メッセージ フローと同じく、HTTP を介して要求ヘッダをクライアント要求から実際のプロデューサに渡す必要があります。同様に、プロデューサから返される応答 HTTP ヘッダは、メッセージ フローでコピーしてクライアントに返す必要があります。

ビジネス サービスの操作レベルのモニタ

プロデューサのビジネス サービスに操作レベルのモニタが必要な場合、プロデューサの WSDL に記述された各 Web サービスに対して個別のビジネス サービスを作成する必要があります。また、ビジネス サービスは、プロデューサの WSDL を使用して定義する必要があります。プロキシ サービスとビジネス サービスは 1 対 1 でマッピングされるため、メッセージ フローは、条件のない単純なルーティング ノード 1 つで十分です。

操作を正しくカウントするためには、使用する操作を AquaLogic Service Bus に認識させておく必要があります。通常は管理者が、ルート アクションでビジネス サービスを選択するときに、ドロップダウン メニューから 1 つの操作を選択します。ただし、クライアント メッセージで指定される操作はすべてのメッセージで同じではないため、ここでは 1 つの値をハードコード化すると機能しません。管理者は、ビジネス サービスがプロキシ サービスと同じ操作を使用することを保証する必要があります。これは、$operation 変数を使用して、ケースを選択するルーティング テーブル アクションを指定することで実現できますが、この方法はかなり手間がかかります。WSRP 標準では、すべての WSRP サービスに対して 14 の操作が定義されており、それぞれの操作で、転送ヘッダを伝播するためのトランスフォーメーションを含むルート アクションが必要となるためです。

幸い、さらに効率のよい方法があります。ビジネス サービスにルーティングするときに、ドロップダウン メニューから操作を選択するのではなく、管理者が要求アクションで別のトランスフォーメーションを使用し、$inbound/ctx:service/ctx:operation の値を $outbound/ctx:service に挿入する方法です。このトランスフォーメーションで、ビジネス サービスの操作が、プロキシ サービスに指定されていたのと同じ値に動的に設定されます。これにより、AquaLogic Service Bus はサービスのすべての操作を正確にカウントしてモニタすることができます。

ロード バランシングとフェイルオーバ

AquaLogic Service Bus では、ビジネス サービスに、同じ Web サービスを提供する複数のエンドポイントを定義できます。複数のエンドポイントが定義されていると、AquaLogic Service Bus は、エンドポイント間で要求のロード バランスを自動的に調整できます。また、1 つのエンドポイントがアクセスできなくなると、要求を自動的にフェイルオーバすることもできます。ただし、WSRP ではこれらの機能の使用が一部制限されます。

ポートレットは、特定のアプリケーションにユーザ インタフェースを提供する手段です。このため、通常、ポートレットにはセッション データが関連付けられています。セッション データを保持するために、ポートレットへの要求は、元の要求を処理したのと同じサーバ (またはクラスタ) に送られる必要があります。この要件により、AquaLogic Service Bus でのロード バランシングは適していません。ビジネス サービスの複数のエンドポイントは、通常は異なるサーバまたはクラスタを対象とします。別のクラスタにあるサーバ間には通信がないため、セッションを保存できません。したがって、WSRP ビジネス サービスに複数のエンドポイントを定義した場合は、ロード バランシング アルゴリズムを [なし] に設定する必要があります。

特定の環境では、複数のエンドポイントを使用して冗長性を確保し、1 つのエンドポイントが使用できなくなった場合に備えることができます。この場合、2 つ目のエンドポイントで WSRP サービスを利用できます。ただし、最初のエンドポイントが使用できなくなった時点のセッション データを、他のエンドポイントで引き継ぐことはできません。

このフェイルオーバ コンフィグレーションは、単純なプロデューサでのみ使用できるオプションです (「WSRP WSDL」を参照)。複雑なプロデューサでは使用できません。複雑なプロデューサでは、コンシューマがサービス要求を送信する前にまずプロデューサに登録する必要があります。プロデューサは登録ハンドルを返します。コンシューマは、そのプロデューサへの各要求にこのハンドルを含める必要があります。ビジネス サービスに複数のエンドポイントが定義されている場合、各エンドポイントに個別の登録ハンドルが必要です。

ただし、AquaLogic Service Bus は、要求と要求の間はステートレスであるため、特定のエンドポイントに送信するための正しいハンドルのマッピングは保持されません。実際、登録要求は 1 つのエンドポイントに送信されるだけなので、コンシューマはその 1 つのプロデューサにのみ登録されます。そのプロデューサがクラッシュすると、AquaLogic Service Bus は、ビジネス サービスに定義された別のエンドポイントにサービス要求をルーティングしますが、コンシューマはその新しいプロデューサには登録されていないため、要求は「InvalidRegistration」エラーで失敗します。

したがって、登録ハンドルを管理するには、AquaLogic Service Bus 以外に、この状態データを保持するためのアプリケーションが必要です。エラー処理を実装するのは困難な場合があります。そのため、この登録要件により、複雑なプロデューサでは複数のエンドポイントを定義できません。単純なプロデューサは、登録サービスを必要としない (サポートしない) ため、ビジネス サービスに複数のエンドポイントを定義するフェイルオーバ コンフィグレーションが可能です。ただし、セッション データはフェイルオーバ時に失われます。

 


WSRP 相互運用の例

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

例の前提条件

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

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

https://codesamples.projects.dev2dev.bea.com/

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

この例では、2 つのプロデューサに対して個別のコンフィグレーションが設定されています。実際には両方のサンプルのプロデューサは同一ですが、コンシューマにとっては異なるプロデューサになります。

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

表 6-3 WSRP 相互運用の例のプロジェクト 

フォルダ

説明

wsrp

プロデューサ固有ではない共通のリソースを含む。

producerExample

最も容易にコンフィグレーションできる基本例。プロデューサ固有のリソースが含まれる。「プロデューサレベルのモニタの例」を参照。

operationExample

最も高レベルのプロデューサ モニタをサポートする詳細な例。プロデューサ固有のリソースが含まれる。「操作レベルのモニタの例」を参照。


 

プロデューサレベルのモニタの例

この基本的なコンフィグレーション例 (producerExample フォルダ) は、最も容易に実装できるコンフィグレーションです。このコンフィグレーションでは、プロデューサ全体のモニタ (「プロデューサレベルのモニタ」を参照) がサポートされ、プロデューサを構成するサービスや操作は考慮されません。

このプロデューサレベルのモニタのコンフィグレーションを実装するには、以下の作業を行います。

この節の後の部分では、このプロデューサレベルのモニタのコンフィグレーションを実装するために必要なタスクを説明します。

手順 1 : プロデューサから WSDL を取得する

プロデューサレベルのモニタをコンフィグレーションするための最初の手順は、プロデューサの WSDL を取得してそれをコンシューマに返すために必要なリソースを作成することです。WSDL にはプロデューサのサービスのエンドポイントが含まれるため、実際のサーバの IP アドレスとポートを隠すようにエンドポイントを変換する必要があります。つまり、アドレスは AquaLogic Service Bus サーバを参照する必要があり、URI は、プロキシ サービスが定義するこのプロデューサの URI と一致する必要があります。

手順 1.1 : ビジネス サービスを作成する

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

表 6-4 ビジネス サービス コンフィグレーションのプロパティ 

名前

コメント

サービス名

wsdlSvc

任意の名前を付けることができる。

サービスの種類

任意の XML サービス

コンシューマは通常、HTTP GET 要求を使用してプロデューサから WSDL を取得する。GET をサポートするのは XML サービスのみ。

プロトコル

HTTP

または HTTPS。

ロード バランシング アルゴリズム

なし

[なし] が推奨される。

エンドポイント URI

http://platform:7001/producer/producer?WSDL

WSDL 取得用に複数のエンドポイントを指定できるが、指定すると利点が制約される。

HTTP 要求メソッド

GET



 

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

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

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

表 6-5 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)}"/>


 

手順 1.3 : 操作のないプロキシ サービスを作成する

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

手順 1.4 : 共通プロキシ サービスを作成する

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

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

http://alsb:7001/producerWSDL/producerName

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

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

表 6-6 プロキシ サービス コンフィグレーションのプロパティ 

プロパティ名

コメント

サービス名

producerWSDL

任意の名前を付けることができる。

サービスの種類

任意の XML サービス


プロトコル

HTTP


エンドポイント URI

/producerWSDL



 

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

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

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

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

プロデューサは 4 つのポートを実装できるため、プロキシ サービスは各ポートを変換する必要があります。プロデューサが特定のポートを実装していない場合、XQuery トランスフォーメーションでは何も行われません。1 つのエンドポイントでこのプロデューサのすべての WSRP トラフィックを処理するように定義するので、置換アクションでは、前に作成した addr XQuery リソース (「手順 1.2 : URL を構成するための XQuery 式を作成する」を参照) を使用して、エンドポイントを値に変換します。

表 6-7 変数のマッピング (wsrp/addr) 

プロパティ

設定

name:

$producerName

svc:

""

BaseURL:

$nonSecureBaseURL


 

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

変数 body の ./wsdl:definitions/wsdl:service/wsdl:port[@binding="name"]/soap:address[starts-with(attribute::location,"http:")] を xqTransform() で置換する

ノード全体を置換

name

urn:WSRP_v1_Markup_Binding_SOAP

urn:WSRP_v1_ServiceDescription_Binding_SOAP

urn:WSRP_v1_PortletManagement_Binding_SOAP

urn:WSRP_v1_Registration_Binding_SOAP

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

表 6-8 置換アクションのユーザ ネームスペース定義 

プレフィックス

ネームスペース

wsdl

http://schemas.xmlsoap.org/wsdl/

soap

http://schemas.xmlsoap.org/wsdl/soap/


 

注意 : BEA ツールで作成されたプロデューサでは、拡張機能サービス (urn:WLP_WSRP_v1_Markup_Ext_Binding_SOAP) が実装されます。このポートはこの例では使用されません。このポートのエンドポイントは変更しなくても問題ありません。

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

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

不明なプロデューサ名が指定されたケースを処理するには、次のように、操作のないサービス (「手順 1.3 : 操作のないプロキシ サービスを作成する」で定義) にルーティングするデフォルト ケースを追加します。

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

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

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

返信する 失敗時

手順 2 : WSRP サービスの処理をコンフィグレーションする

プロデューサの WSDL を取得するために必要なリソースを作成したら、通常の WSRP サービス要求を AquaLogic Service Bus で処理するためのコンフィグレーション リソースを作成します。最も簡単なコンフィグレーションでは、1 つのプロキシ サービスと 1 つのビジネス サービスを作成し、それらのサービスをメッセージ フローでリンクさせ、WSRP が必要とする転送ヘッダを伝播します。

手順 2.1 : ビジネス サービスを作成する

WSRP で必要な最小のビジネス サービスは、WSDL ベースではありません。代わりに、任意の SOAP メッセージを受け入れるビジネス サービスを作成します。この方法ではコンフィグレーションが単純化され、WSRP で使用されるすべてのポート タイプを 1 つのビジネス プロセスで処理できます。この方法の短所はモニタの機能が制約されることです。次の設定を使用してビジネス サービスをコンフィグレーションします。

表 6-9 ビジネス サービス コンフィグレーションの設定 

プロパティ名

コメント

サービス名

producerSvc

任意の名前を付けることができる。

サービスの種類

任意の SOAP サービス


プロトコル

HTTP

プロデューサが secure="true" として作成されている場合は HTTPS。

ロード バランシング アルゴリズム

なし

[なし] を指定する必要がある。そうしないと、複数のエンドポイントを定義した場合に要求のセッション情報が失われる。

エンドポイント URI

http://platform:7001/producer/producer

単純なプロデューサでのみ複数のエンドポイントを定義できる。複雑なプロデューサで複数のエンドポイントを定義すると、無効な登録エラーが発生する。


 

手順 2.2 : プロキシ サービスを作成する

プロキシ サービスを定義する最も便利な方法は、前の手順で定義した既存のビジネス サービスから作成する方法です。このようにすると、適切なタイプ (ビジネス サービスでコンフィグレーションされたのと同じタイプ、すなわち [任意の SOAP サービス]) でプロキシ サービスが作成され、メッセージを条件なしで適切なビジネス サービスにルーティングする基本的なメッセージ フローも構成されます。このメッセージ フローは後の手順で編集する必要があります。次の設定を使用してプロキシ サービスをコンフィグレーションします。

表 6-10 プロキシ サービス コンフィグレーションの設定 

名前

コメント

サービス名

proxySvc

任意の名前を付けることができる。

サービスの種類

任意の SOAP サービス


プロトコル

HTTP

または、必要に応じて HTTPS。この値は、プロデューサのセキュア モードと合わせる必要はないが、WSDL のエンドポイントに返される値と一致させる必要がある。この例では HTTP を使用する。

エンドポイント URI

/producerExample

任意の値を使用できるが、WSDL で返される位置と一致する必要がある。

操作選択アルゴリズム

SOAP 本体の種類

転送ヘッダの SOAPAction を使用することもできる。


 

手順 2.3 : メッセージ フローを編集する

WSRP は正常に機能するために、転送ヘッダで渡されるデータに依存します。特に、プロデューサは、応答ヘッダで任意のセッション クッキーをコンシューマに返し、コンシューマがそれ以降の要求にはそのセッション クッキーを指定することを想定します。同様に、プロデューサは、コンシューマが SOAPAction 要求ヘッダに要求操作を指定することを想定します。

デフォルトでは、AquaLogic Service Bus は、転送ヘッダを着信要求から発信要求または発信応答から着信応答にコピーしません。このため、メッセージ フローで、必要なヘッダをビジネス サービスに伝播し、ビジネス サービスから必要なヘッダを伝播する必要があります。このようなトランスフォーメーションがすべての WSRP サービスで必要になるため、適切なヘッダを抽出する 2 つの共通 XQuery リソース (要求ヘッダ用と応答ヘッダ用) を定義しておくと便利です。

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

表 6-11 要求ヘッダのクエリ 

名前

リソース名

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 リソースを定義します。

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

表 6-12 応答ヘッダのクエリ

名前

リソース名

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

手順 3 : コンフィグレーションをテストする

プロデューサレベルの例の単純なコンフィグレーションが完了したら、セッションで行われた変更をアクティブ化します。テストをコンフィグレーションするには、以下の手順を実行します。

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

    これでサンプル プロデューサの WSDL が取得されます。

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

  6. コンシューマ ポータルが完成したら、アプリケーションを実行します。

AquaLogic Service Bus をコンフィグレーションするときは、どのコンポーネントのモニタも明示的に有効になっていません。モニタを有効にする手順は、WSRP サービスでも、AquaLogic Service Bus の他の Web サービスでも同じです。目的のコンポーネントごとに、モニタの管理ページの [モニタを有効化] ボックスを選択 (チェック) し、集約間隔を設定します。該当する場合は、アラート ルールの設定を検討します。これらの変更をアクティブ化したら、AquaLogic Service Bus Console のダッシュボードからコンフィグレーションをモニタできます。

操作レベルのモニタの例

詳細なモニタ コンフィグレーションの例 (operationExample フォルダ) では、プロデューサのすべてのサービスと操作をモニタするように AquaLogic Service Bus をコンフィグレーションします (「操作レベルのモニタ」を参照)。プロデューサレベルのモニタの例で説明したすべての概念 (「プロデューサレベルのモニタの例」を参照) は、この例にも当てはまります。コンフィグレーション タスクを簡略化するために、プロデューサレベルのモニタのコンフィグレーションから特定の要素をコピーします。操作レベルのモニタの例では、プロデューサレベルのモニタの例と同じプロデューサ アプリケーションを使用します。

この例とプロデューサレベルのモニタの例との根本的な違いは、操作レベルのモニタ コンフィグレーションでは、使用するビジネス サービスとプロキシ サービスの両方が、WSRP 標準で定義された WSDL ベースであるということです。この例では、WSRP サービスを記述したり、メッセージ フローを拡張して操作レベルのモニタをサポートしたりするために、リソースをさらに定義します。

この節の後の部分では、この操作レベルのモニタのコンフィグレーションを実装するために必要なタスクを説明します。

手順 1 : WSDL リソースを定義する

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

表 6-13 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 Schema リソースを作成したら、各リソースの参照を編集して他のリソースとの依存関係を解決します。

手順 2 : ビジネス サービスを作成する

プロデューサレベルのモニタの例では、1 つのビジネス サービスを作成してプロデューサのすべてのメッセージを処理しました。この方法が機能したのは、ビジネス サービスが WSDL に関連付けられていなかったためです。

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

表 6-14 ビジネス サービス コンフィグレーション 

サービス名

サービス タイプ

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"


 

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

表 6-15 ビジネス サービスのサービス属性 

名前

コメント

プロトコル

HTTP

プロデューサが secure="true" として作成されている場合は HTTPS。

ロード バランシング アルゴリズム

なし

[なし] を指定する必要がある。そうしないと、複数のエンドポイントを定義した場合に要求のセッション データが失われる。

エンドポイント URI

http://platform:7001/producer/producer

単純なプロデューサでのみ複数のエンドポイントを定義できる。複雑なプロデューサで複数のエンドポイントを定義すると、無効な登録エラーが発生する。


 

手順 3 : プロキシ サービスを作成する

この操作レベルのモニタの例のプロキシ サービスは、プロデューサレベルのモニタの例で作成したプロキシ サービスに非常によく似ていますが、以下の重要な違いがあります。

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

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

  3. メッセージ フローを編集して、コンシューマとプロデューサの間で要求転送ヘッダと応答転送ヘッダをコピーするために、プロデューサレベルのモニタの例 (「手順 2.3 : メッセージ フローを編集する」を参照) で追加したのと同じトランスフォーメーションを追加します。
  4. 呼び出す操作を指定します。
  5. 通常は、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 を取得するために使用するビジネス サービスは、プロデューサレベルのモニタの例で使用したリソースと同じです (「手順 1.1 : ビジネス サービスを作成する」を参照)。

手順 4.2 : プロキシ サービスを作成する

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

表 6-16 URI の位置を構成する拡張子の設定 

@binding

addr のサービス引数

urn:WSRP_v1_Markup_Binding_SOAP

"Base"

urn:WSRP_v1_ServiceDescription_Binding_SOAP

"Desc"

urn:WSRP_v1_PortletManagement_Binding_SOAP

"Mgmt"

urn:WSRP_v1_Registration_Binding_SOAP

"Reg"


 

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

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

コンフィグレーションが完了したら、正しく機能するかどうかを確認するためにテストします。コンフィグレーションをテストする手順は、プロデューサレベルのモニタの例と似ています (「手順 3 : コンフィグレーションをテストする」を参照)。1 つだけ異なるのは、プロデューサから WSDL を取得するための URL です。次のようになります。

http://alsb:7001/getWSDL/operationExample
  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 サービスおよび操作に関するメッセージ件数やパフォーマンス統計を詳しく表示します。

 

ページの先頭 前 次