IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  SOA and Web services | WebSphere  >

FormWaveのSOA機能を活用する-WebSphere ESBとの接続

開発元直送シリーズ

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

サンプルコード


レベル: 初級

増田 真, インダストリー・ソリューション・テクノロジー / ソフトウェア開発研究所, IBM

2007年 1月 19日

IBM FormWave for WebSphere(以下、FormWaveと略します。)は、IBM WebSphere Application Server(以下、WASと略します。)上で動作するJava EE(Java Enterprise Edition)技術を活用したワークフロー製品です。2006年11月にリリースされたV6.1ではFormWaveをSOA(Service Oriented Architecture)に対応させるための機能(SOA機能)が追加され、基幹業務システム(ERP/CRM/SCMなど)との連携型ワークフローがGUIベースのツールで簡単に実現できるようになりました。本稿では、SOA機能の一つであるWebサービス・ノードを利用して、ESB(Enterprise Service Bus)経由でのWebサービス連携を実現するための手順を紹介します。

(本稿ではメディエーション・モジュールを開発するためにIBM WebSphere Integration Developer V6.0.2(以下、WIDと略します。)を、ESBにはIBM WebSphere Enterprise Service Bus V6.0.2(以下、WESBと略します。)を使用しています。)

Webサービス・ノードの概要

Webサービス・ノードは、FormWaveのワークフロー定義で利用できるノードの1つで、Webサービス・リクエスター機能を提供します。Webサービス・ノードに伝票が届くと、ワークフロー・エンジンはSOAP/HTTPまたはSOAP/JMSプロトコルを使って、外部のWebサービスを呼び出します。Webサービス・ノードで送受信するSOAPメッセージは、あらかじめFormWaveの開発ツールであるインターフェース・デザイナーによって定義されたインターフェース(WSDL)に対応します。そのため、図 1のようにFormWaveと他システムWebサービス・プロバイダーを接続するには、ESBのメディエーション・モジュールでインターフェースのマッピングを行います。


図 1 ESB経由でのWebサービスとの連携イメージ
図 1 ESB経由でのWebサービスとの連携イメージ



上に戻る


本稿のシナリオ

Webサービス・ノードを利用して、ESB経由でのWebサービス連携を構築する手順には、次の4つのステップがあります。

  1. インターフェース・デザイナーによるフィールドとインターフェースの定義
  2. ESB開発ツールによるメディエーション・モジュールの開発
  3. サービス・エンドポイント情報の登録
  4. プロジェクト・デザイナーによるWebサービス・ノードの設定

本稿では、4つのステップの具体的な作業内容を紹介しながら、表 1のWebサービスをWESBでのメディエーションを経由して呼び出すFormWaveプロジェクトを作成していきます。本稿ではこれをサンプル・プロジェクトと呼ぶことにします。


表 1 Webサービスのサンプル
サービス名RFQService
サービスの説明見積要求のWebサービス
内容品目コード、数量などの要求情報を送信すると、見積金額、納期が回答されます。
オペレーション名quote
オペレーション・タイプ要求-応答(Request-Response)タイプ

本稿で紹介する作業を実際に試される方は、以下の準備を行ってください。

  • FormWaveの実行環境および開発環境に加え、WIDおよびWESBが必要となりますので、準備してください。
  • サンプル・コードの“RFQService.ear”を任意のWASにインストールしてください。
  • メディエーション・モジュールの開発では“RFQService.ear”のWSDLファイルを使用します。“RFQService.ear”をインストールしたWASの管理コンソールから図 14と同様の手順で取得してください。

1.インターフェース・デザイナーによるフィールドとインターフェースの定義

インターフェース・デザイナーは、FormWaveのSOA機能の一部として提供されるツールです。SOA機能におけるFormWaveと他システムとのインターフェース(WSDL)を定義することができます。

このステップではインターフェース・デザイナーを使って次の3つの作業を行います。


(1)フィールド定義
(2)インターフェース定義とWSDLの生成
(3)マッピング定義

以下に、(1)~(3)の各作業について説明します。

(1)フィールド定義

FormWaveで扱う伝票のフィールドを定義します。FormWaveでフィールドを定義する方法には、プロジェクト・デザイナーを使用する方法とインターフェース・デザイナーを使用する方法があります。ここでは後者のインターフェース・デザイナーを使用する方法でフィールドを定義します。(図 2)


図 2 フィールド定義の編集画面

サンプル・プロジェクトには、Webサービスの要求および応答パラメーターと対応するフィールドのみを表 2のように定義します。ここでは便宜上、フィールド名とパラメーター名は同じにします。


表 2 サンプル・プロジェクトにおけるフィールド定義
フィールド名コメントタイプコンテナータイプ制限等
userId要求元ユーザーIDテキスト標準任意の文字列
itemCode品目コードテキスト配列英字・数字のみ
itemQuantity数量数値配列小数点以下0桁固定
estimatedPrice見積金額数値標準小数点以下0桁固定
deliveryDate納期日付標準日付のみ

(2)インターフェース定義とWSDLの生成

インターフェース定義は、インターフェース・デザイナーの「インターフェース定義」タブで編集します。インターフェース定義にはWebサービスの要求・応答パラメーター、オペレーション名などを定義します。また、インターフェース定義を一意に識別するための「インターフェースID」を設定します。(図3)


図 3 “インターフェース定義”タブの編集画面
図 3 “インターフェース定義”タブの編集画面

サンプル・プロジェクトでは「インターフェースID」を“RFQServiceCall”とし、パラメーターは表 3のように作成します。


表 3 サンプル・プロジェクトにおけるインターフェース定義
パラメーター名名前空間(※)要求/応答
userIdstringxsd要求
itemCodeArrayOfStringfcsrv要求
itemQuantityArrayOfIntfcsrv要求
estimatedPriceintxsd応答
deliveryDatedatexsd応答

※・・・名前空間の接頭辞は、次のそれぞれを表すものとします。

fcsrv: http://www.ibm.com/xmlns/prod/websphere/formwave
xsd: http://www.w3.org/2001/XMLSchema

WSDLファイルは、インターフェース定義の作成後に「WSDL生成」ボタンをクリックして生成します。生成する際に、エンドポイント情報を含めるかどうかを選択できますが、サンプル・プロジェクトではこの時点でFormWave側のエンドポイント情報がまだ確定していませんので、エンドポイント情報を含めないようにします。ファイル名は、“RFQServiceFW.wsdl”としておきます。

(3)マッピング定義

マッピング定義は、インターフェース・デザイナーの「マッピング定義」タブで編集します。マッピング定義では、インターフェース定義に設定した要求・応答パラメーターの値と、FormWaveのフィールド(または簡易式の評価結果)との対応関係を定義します。また、マッピング定義を一意に識別するために「マッピングID」を設定します。

サンプル・プロジェクトでは、「マッピングID」を“RFQServiceCallMap”とし、すべてのパラメーターを同一名のフィールドにマップします。この場合、「同名フィールドをマップ」ボタンをクリックするだけでマッピング定義は完成します。(図4)


図 4 “マッピング定義”タブでの編集画面
図 4 “マッピング定義”タブでの編集画面

インターフェース・デザイナーでの開発はこれで終了です。サンプル・プロジェクトを任意の名前をつけて保存してください。

2.ESB開発ツールによるメディエーション・モジュールの開発

ESB開発ツールを使用して、ESBにおいてFormWaveとWebサービス・プロバイダーのインターフェースのマッピングを行うメディエーション・モジュールを開発します。

ここでは、WIDを使ってサンプル・プロジェクトで使用するメディエーション・モジュールを開発する手順を説明します。

はじめに、“RFQMediation”という名前でメディエーション・モジュール(プロジェクト)を作成し、インターフェース・デザイナーで生成した“RFQServiceFW.wsdl”と、RFQServiceのWSDLである“RFQService.wsdl”をインポートします。WSDLのインポートにより2つのインターフェースが生成されますので、それらを1つずつアセンブリー・ダイアグラムにドラッグアンドドロップして、インポートとエクスポートを作成します。このときFormWave側のインターフェースをバインディングのないエクスポートとして、Webサービス側のインターフェースをWebサービス・バインディングを持ったインポートとして作成しておきます。また、インポートのWebサービス・ポートには、“RFQ”を指定してください。(図5および図6)


図 5 WSDLのインポートとアセンブリー・ダイアグラムへのドラッグアンドドロップ
図 5 WSDLのインポートとアセンブリー・ダイアグラムへのドラッグアンドドロップ

図 6 インポートの詳細(Webサービス・ポートの指定)
図 6 インポートの詳細(Webサービス・ポートの指定)

ここで、作成したエクスポートの名前を“FWExport”に変更し、インポートの名前を“RFQService”に変更します。

次に、エクスポートとインポートの間にメディエーション・フロー・コンポーネントを配置し、それらをワイヤで結びます。(図 7)また、メディエーション・フロー・コンポーネントの名前を“Mapping”に変更します。


図 7 メディエーション・モジュールの概要
図 7 メディエーション・モジュールの概要

メディエーション・フロー・エディターを開き、“Mapping”のメディエーション・フローを編集します。図 8に示すように要求タブと応答タブのそれぞれのフローにXSL変換を1つずつ配置します。


図 8 メディエーション・フローの内容
図 8 メディエーション・フローの内容

XSL変換の内容は、XMLマッピング・エディター上で入力パラメーター(ソース)を対応する出力パラメーター(ターゲット)にドラッグアンドドロップして設定します。要求フローについては図 9に示すように、応答フローについては図 10に示すように設定します。


図 9 XSL変換の内容(要求フロー)
図 9 XSL変換の内容(要求フロー)
配列パラメーターを複合型にマッピングする方法

RFQServiceにおいて、“itemCode”および“itemQuantity”は“ItemInfo”という複合型のスカラー値であるのに対し、インターフェース・デザイナーでは“itemCode”および“itemQuantity”はベクター値(配列)として定義しています。そのため、双方をマッピングするにはまず図 9のようにXMLマッピング・エディター上で、 FormWave側:配列の要素 と RFQService側:“ItemInfo”の“itemCode”および“itemQuantity” をマッピングしておき、そのあとで自動生成されたXSLファイルを一部書き換えてマッピングを完成させます。


図 10 XSL変換の内容(応答フロー)

要求フローのXSL変換では、配列から複合型への特殊なマッピングを行いますので、XMLマッピング・エディターでの設定に加えてXSLファイルの編集が必要です。


図 11 要求フローのXSL変換のプロパティーでXSLファイルの所在を確認する
図 11 要求フローのXSL変換のプロパティーでXSLファイルの所在を確認する

XMLマッピング・エディターで自動生成されたXSLファイルの所在は、メディエーション・フロー・エディターの要求フローのXSL変換のプロパティーで確認できます。(図 11)

そのファイルを「物理リソース」ビューから開き、『<xsl:template name=“ItemInfo”>』の内容をリスト1からリスト2に書き換えます。


リスト1 編集前
                
<xsl:template name="ItemInfo">
 <ItemInfo>
    <itemCode>
      <xsl:value-of select="/body/quote/itemCode/arrayElement/text()"/>
    </itemCode>
    <itemQuantity>
      <xsl:value-of select="/body/quote/itemQuantity/arrayElement/text()"/>
    </itemQuantity>
  </ItemInfo>
</xsl:template>


リスト2 編集後 ※太字で示した部分が追記および変更する部分です。
                
<xsl:template name="ItemInfo">
  <xsl:for-each select="/body/quote/itemCode/arrayElement">
    <xsl:variable name="pos">
      <xsl:value-of select="position()"/>
    </xsl:variable>
    <ItemInfo>
      <itemCode>
        <xsl:value-of select="./text()"/>
      </itemCode>
      <itemQuantity>
        <xsl:value-of select="/body/quote/itemQuantity/arrayElement[position()=$pos]/text()"/>
      </itemQuantity>
    </ItemInfo>
  </xsl:for-each>
</xsl:template>

最後に、アセンブリー・ダイアグラムにおいてエクスポートにWebサービス・バインディングを生成します。このとき、サンプル・プロジェクトではトランスポートに“soap/http”を選択します。これにより、FormWaveから見たサービス・エンドポイント情報が確定します。

以上でメディエーション・モジュールは完成です。

完成したメディエーション・モジュールは、インテグレーション・モジュール(サーバー・デプロイメント用EARファイル)としてエクスポートしてWESBにインストールしますが、その前にWIDのテスト環境を使用してテストをしておくとよいでしょう。(図 12)


図 12 メディエーション・モジュールのテス
図 12 メディエーション・モジュールのテス

メディエーション・モジュールをWESBへインストールするには、WESBの管理コンソールを使用します。管理コンソールの左ペインより、「アプリケーション」→「新規アプリケーションのインストール」の順にクリックし、「新規アプリケーションへのパス」にはWIDからエクスポートしたEARファイル(“RFQMediation.ear”)を指定します。特に設定を変更する必要はありませんので、「次へ」をクリックしてインストールを進めてください。途中でMessage-driven Beanのリスナー・バインディングに関して、アプリケーション・リソースの警告が表示されることがありますが、無視して作業を継続してください。

3.サービス・エンドポイント情報の登録

エンドポイント定義の登録には、FormWave管理サービスのエンドポイント定義機能を使用します。

FormWaveの管理サービスにログインして、左ペインの「環境設定」を展開し、「サービスエンドポイント」を選択すると、登録されているエンドポイント定義が表示されます。

「追加」ボタンをクリックし、「サービスエンドポイントの設定」ダイアログに値を設定して「OK」ボタンをクリックすると、エンドポイント定義が登録されます。(図 13)


図 13 エンドポイント定義の登録画面
図 13 エンドポイント定義の登録画面

エンドポイント定義には、接続先となるサービス・エンドポイントの情報を設定します。また、エンドポイント定義を一意に識別するために、「エンドポイントID」を設定します。

サンプル・プロジェクトでは、WESBの管理コンソールからWSDLを含むzipファイルをダウンロードし(図 14)、その中に含まれるエクスポートのWSDLに従って表 4に示すように設定します。


図 14 WESBの管理コンソールからWSDLを含むzipファイルをダウンロード
図 14 WESBの管理コンソールからWSDLを含むzipファイルをダウンロード

表 4 エンドポイント定義の設定内容
設定項目設定値
エンドポイントID“RFQServiceCallEP”
サービス名“FWExport_quotePortTypeHttpService”
エンドポイントアドレス“http://XXXX:NNNN/RFQMediationWeb/sca/FWExport” (※)
ポート名“FWExport_quotePortTypeHttpPort”
コメント例)RFQMediationのエクスポート
用途タイプ“リクエスター”を選択

※・・・・“XXXX”にはWESBのアドレス、“NNNN”にはWESBのポート番号が入ります。

4.プロジェクト・デザイナーによるWebサービス・ノードの設定

FormWaveのプロジェクト・デザイナーを使って経路定義を編集し、外部のWebサービスを呼び出したい場所にWebサービス・ノードを配置します。Webサービス・ノードには、そのノードで使用するインターフェース定義、マッピング定義およびエンドポイント定義のIDを設定します。これらのIDはすでに登録されている定義の中から選択して設定しますので、事前に必要な情報はすべて登録しておく必要があります。

サンプル・プロジェクトでは、「インターフェース・デザイナーによるフィールドとインターフェースの定義」の最後で保存したファイルをプロジェクト・デザイナーで開き、以下のように編集します。

はじめに、「起票者→Webサービス・ノード→ノード参照」という経路定義を作成し、「ノード参照」では「起票者」を指定します(図 15)。次に、起票者のレイアウトに“RequestForQuotation.jsp”を、ノード参照のレイアウトに“Quotation.jsp”を指定します。


図 15 伝票経路の定義
図 15 伝票経路の定義

最後にWebサービス・ノードのプロパティーを設定します。ここまでの作業で作成したインターフェース定義、マッピング定義およびエンドポイント定義のIDを表 5のように設定してください。


表 5 Webサービス・ノードのプロパティー
プロパティー名設定する値
ノード名例) “RFQService”
インターフェースID“RFQServiceCall”を選択
マッピングID“RFQServiceCallMap”を選択
エンドポイントID“RFQServiceCallEP”を選択

以上でサンプル・プロジェクトが完成しましたので、サーバーに登録します。レイアウト・ファイルも忘れずにサーバーに配置してください。




上に戻る


サンプル・プロジェクトの実行

FormWaveのクライアント・サービスにログインしてサンプル・プロジェクトを起票します。サンプル・プロジェクトは、Webサービス・ノードの次に起票者へ届くように定義してありますので、起票したユーザーでRFQServiceの応答がフィールドに反映されていることを確認できます。また、RFQServiceは要求値に基づき、次のような応答を返します(表 6)。


表 6 RFQServiceの応答内容
応答パラメーター
deliveryDate14日後の日付を返します。
estimatedPriceある規則に従って計算した金額を返します。



上に戻る


まとめ

本稿では、IBM FormWave for WebSphereのWebサービス・ノードを使って、ESB経由で他システムのWebサービスと連携する手順を説明しました。SOAP/HTTPを使った要求-応答型のWebサービスとの連携について説明しましたが、片方向型のWebサービスとの連携やSOAP/JMSを使った非同期連携なども、同様の手順で、簡単に構築することができます。興味をお持ちになった方は試してみてください。





上に戻る


ダウンロード

内容ファイル名サイズダウンロード形式
ご使用前にエンドポイント定義の登録が必要です。FormWaveProject.zip5 KBHTTP
RFQService(インポート)のエンドポイントを編集してご使用ください。RFQMediation_ProjectInterchange.zip15 KBHTTP
WASにインストールしてご使用ください。RFQService.ear78 KBHTTP
ダウンロード形式について


参考文献



著者について

増田真は、ソフトウェア開発研究所のエンジニアで、IBM FormWave for WebSphereの製品開発業務に従事しています。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


この記事を共有する

はてなブックマーク はてなブックマーク livedoorクリップ livedoorクリップ del.icio.us del.icio.us Buzzurl(バザール) Buzzurl(バザール) Choix! Choix!
Saafブックマーク Saafブックマーク FC2ブックマーク FC2ブックマーク MM/memo MM/memo ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
CZブックマーク CZブックマーク newsing newsing




上に戻る


    日本IBMについて プライバシー お問い合わせ