南山大学 数理情報学部 情報通信学科 2004 年度卒業論文要旨集

BPEL ４ WS を用いた複合 Web サービスの研究
2001MT014 福永遂重 2001MT098 高木松雄
指導教員 青山幹雄

1. はじめに
現在，ビジネス環境はますます複雑さを増している．増殖を続けるビジネスプロセスを柔軟に連携させてビジネスプロセスの自動化が望まれている．この要求を満たす新たなシステム連携技術として Web サービスが注目されている[4][5][6]．本研究は，SOA（Service-Oriented Architecture）の概念を基に，Web サービスを利用したビジネスプロセスの自動化を目的として，複合 Web サービスを動的に構築する方法を提案する．

2. Web サービスの問題と解決
2.1. ビジネスプロセスの自動化における問題点
ビジネスプロセスの自動化おいてには，(1)サービスを利用する手順の不明確さ，(2) 異なるインタフェース間を動的に連携する困難さ，(3)サービスの意味定義ができない，という問題点が挙げられる．
(1)については，複数の Web サービスを組み合わせて，
呼 出 し 手 順 を 定 義 す る BPEL4WS(Business Process
Execution Language for Web Services，以下 BPEL と略記)[1]により解決できるので複合 Web サービスとして連携可能である．しかし，BPEL4WS では事前に記述したサービスしか利用できず，(4)サービスの追加変更の場合は，サービス情報を人手で変更しなければならない問題がある．
2.2. 解決案
ビジネスプロセスを連携する場合，全く異なるサービスを連携させることは考えにくい．また，問題点(2)について解決するため使用するサービスの機能，属性の類似部分を関連付けることで，同時に利用することが可能である．したがって，類似の機能を持つサービスを連携する必要性が高い．問題点(3)については現在の技術では困難なため，機能が類似のサービスを集めてリクエスタに提供する．問題点(4)については BPEL 文書をサービス選択時に自動生成することにより解決できると考える．以上をふまえBPELを用いてサービスを動的に連携する方法を提案する．この方法を実現するための提案を以下に示す．
(1) 対話型サービス：リクエスタとプロバイダが対話形式でサービスを利用．
(2) 類似サービスの選択：クライアントが選択したサービスを選択サービスリストとして作成．
(3) 選択されたサービスの自動連携：クライアントが選択したサービス情報を取得し，自動的に連携．
(4) BPEL 文書の自動生成：選択サービスを同時に使用するために並行実行するBPELプロセスのテンプレートを作成．このテンプレートよりプロセスを生成．
以上の４つの課題を解決した開発の全体像を図 1 に示す．
プロバイダ

(1)対話形式

リクエスタ

提供サー
提供サー
ビスリスト
ビスリスト

サービス要求

DataBase
リストの提供リスト作成
選択
選択サービス
サービスリスト
リスト(2)サービス選択
使用したい
サービスリスト
を送信

レスポンス

雛形となる
XSLTに情報を送信(3)サービスの自動連携(4)BPEL文書の自動生成
BPELエンジン

BPEL文書BPEL文書文書の読み込みBPEL文書の作成

図 1 提案する BPEL 複合 Web サービス

3. BPEL 複合 Web サービス作成方法
本研究では，プロバイダ側のBPELプロセスの自動生成に特化し開発する．BPEL プロセスの自動生成を実現するための提案方法を以下に示す．
(1)類似サービス間のデータ構造，操作の対応付け．
(2)使用サービスの WSDL からのデータマッピング．
(3)選択サービスリストを生成．
(4)並行実行用 XSLT スタイルシート作成．
(5)XSLT プロセッサによる BPEL プロセス生成．
これらの提案方法を検討し，プロトタイプを開発する．
3.1. 類似サービスの対応付け
意味的に類似したサービスを対応付けするために各サービスの WSDL の type，message，operation に新たに属性を付加する．同様に BPEL プロセス側の WSDL にも属性を付加する．これによって各サービスの機能ごとにサービスデータ構造と操作を対応づける[3]．
3.2. サービスリストの作成
各サービスで関連付けた WSDL より, BPEL プロセスを南山大学 数理情報学部 情報通信学科 2004 年度卒業論文要旨集作成するためのデータリストを生成する．このデータリストは後述するXSLTの変換元になるXMLインスタンスにあたる.
3.2.1. サービスリストデータ構造へのマッピング方法
本研究では BPEL プロセスを生成するために選択サー
ビスリスト生成と，プロセス側の WSDL，選択サービスのWSDLを生成しなくてはならない．また選択されたサービスによって BPEL プロセスとプロセスの WSDL の内容も変更してリクエスタに提供しなくてはならない．この変更をする
度に WSDL を読み込み，変更するための値を取得する処理が必要である．しかしサービスリストの生成，プロセスのWSDL の変更といった WSDL を読み込む処理を何回も行うことは効率的ではない．そこで WSDL の構造とほぼ同型な木構造へのマッピング[4]をすることを提案する．１度マッピングを行い Java のオブジェクト化することでデータへのアクセスを容易に行うことができ，同じ処理の繰り返しを回避できる．図 2 に木構造へのマッピングを示す.
<?xml version?>
解析
Class Definitions{<definitions …>
unmarshal
Types type;<types>….
Message message;</types>…..}<message>…..
</message>
生成………
Class Definitions{
marshalClassTypes{<portType>
Types type;
Stringtypename;<operation>…..
Message message;
StringeleName;…..
</portType>} …..}</definitions>wsdｌファイル

BPEL プロセスに必要なデータだけで構成されており，並行実行用の XSLT スタイルシートが各サービスのデータにアクセスしやすいデータ構造とした．
3.3. BPEL プロセスの作成
サービスリストのXMLインスタンスからBPELプロセスを生成するための XSLT スタイルシートを用いる．
選択サービスにより動的に要素が組み込まれる時の処理とし て，BPEL プロ セスの root 要素 process の子要素
<partnerLink>，<variables>，また main の<sequence>の中で処理される，各サービスに対する変数の初期化を行う<assign>， 並行実行を行う<flow>の要素に対してはそれぞれ組み込むテンプレートを作成することで動的に値を組み込めるようにする．template の呼び出し方法を図 4 に示す.

3.2.2. サービスリストのモデル
サービスリストの XML インスタンスを作成するために，XML インスタンスのモデルを考える．BPEL プロセスに必要な要素と出現回数を表すクラス図を図 3 に示す．

各サービスの名前空間を生成するtemplate<xsl:apply-templates<xsl:apply-templates
select="a:service"/>select="a:service"/><partnerLinks><partnerLinks><xsl:call-template<xsl:call-template
name="Partner"/>
name="Partner"/></partnerLinks></partnerLinks>…………..
…………..
</xsl:template></xsl:template>Class Definitions{Class
Message{
Types type;
StringmesName;Message message;
String….. mesAttrName;} …..}図 2 木構造へのマッピング<xsl:templatematch="a:service">

し<xsl:templateび出match="a:servicedata"> 呼呼び出し<xsl:template
name="Partner">
partnerLink要素を生成するtemplate

図 4 template 呼び出し図
3.4. BPEL 生成 ProcessController の作成
3.4.1. 開発目標
使用サービスリストから，動的にBPELプロセスを生成す
る ProcessController を 開 発 す る ． こ こ で ， 動 的 と はProccesController が使用サービスの WSDL よりデータのマッピングを行い，サービスリスト生成, BPEL プロセスの生成までの処理を実行することを指す．
3.4.2. ProcessController のアーキテクチャ
選択サービスの情報を取得し，BPEL プロセス生成まで行う ProcessController のアーキテクチャを図 5 に示す．
ProcessController
Importer

HttpGeneratorHttpServiceSelect

図 3 サービスリストのクラス図

ObjManager

図 5 ProcessController のアーキテクチャ

南山大学 数理情報学部 情報通信学科 2004 年度卒業論文要旨集
ProcessControllerを構成する主要な4つのクラスとして外部リソースを提供する ServiceSelect クラス，外部リソースからモデルに登録する Importer クラス， モデルとしてデータオブジェクトの管理を行う ObjManager クラス， モデルよりプロセス生成を行う Generator クラスを作成した．
ProcessController の制御である BPEL プロセス生成までのシーケンス図を図 6 に示す.

ICDサービス

NetDicサービス

SimpleSearch

WORD{

DicItem{

SampleInfo{

title
id
englishjapanese

DicID
Title
ItemId
Head
Body

mean
keyword}}}検索単語の意味を返すデータ

図 7 各サービスのデータ構造の対応(2) サービスのメソッドの対応
三つの Web サービスのメソッドの対応関係を図 8 に示す．
検索単語を保持するデータ
seachWord(query:String
partial:boolean)searchDicItem(dicId:Guidquery:String
ScopeOption:String
MatchOption:String
FromatOption:String
ResourceOption:StringCharsetOption:String

Search(In0:String)

reqItemIndex:int
reqItemTitleCount:int
reqItemContentCount)

ICDサービス

NetDicサービス

SimpleSearch

対応メソッド

図 6 BPEL プロセス生成のシーケンス図

図 8 メソッドの対応

3.5. BPEL プロセス生成 ProcessController の実装
実行可能な BPEL プロセスを提供するための生成物を挙げて，ProcessController で生成するように実装する．これらのクラスは全て，Generator の共通インタフェースを定義
interface である IGenerator にアドオンする．

(3) 類似サービスの対応の実装
WSDL の記述に新たに属性を追加することは WSDL の仕様で可能である．追加する属性は XML スキーマによって定義する．作成するスキーマは，属性名の定義とその属性値の定義になる．

表 1 IGenerator にアドオンするクラス
必要な生成物
クラス名
サービスリストServiceListGenerator クラス
BPEL プロセス
BpelGenerator クラス
使用する WSDL
WSDLGenerator クラス

4. プロトタイプの開発
4.1. 単語張サービス
本研究では BPEL プロセスで扱う類似サービスとして単語帳サービスを使用する．使用するサービスとして@IT のICD，三省堂の NetDic，我々が作成した Simple サービスの三つとする[2]．
(1) 各サービスのデータ構造の対応
三つの Web サービスを連携させるため，三つのサービスのデータの構造の対応関係を図 7 に示す．

5. 評価
5.1. サービスの対応付け
BPEL プロセスに各サービスの WSDL を読み込ませ，共通する機能のデータ構造と操作を各サービスの WSDLと BPEL プロセスの WSDL の operation，message，type に属性を用いて対応付けた．これによりサービス間に対応関係を持たせ，BPEL プロセスで扱うデータを指定できることを確認した．
5.2. BPEL プロセスの自動生成
本研究では，プロバイダはリクエスタに結果が理解できるように類似のサービスを提供し，それらのサービスを同時に使用できるように並行実行するプロセスを生成した．複数のサービス結果を同時に得るビジネスプロセスを自動生成はプロトタイプにより確認できた．本研究の目的である
BPEL プロセスの自動生成は実現できたといえる．

南山大学 数理情報学部 情報通信学科 2004 年度卒業論文要旨集
5.3. BPEL プロセス生成評価
本研究で作成した ProcessController は，WSDL を一度解析しオブジェクト化することでデータ解析部の処理を省略できる．サービス情報を記述し， ObjManager クラスにサービスのデータオブジェクトを登録することで，サービスの追加が容易にでき，拡張性が高いといえる．
次に BPEL プロセス生成において，DOM を用いた場合と，サービスリスト作成と XSLT により生成した場合の二つを，生成コード行数により比較したものを表 2 と図 9 に示す．
表 2 BPEL プロセスのコード行数の違い
生成方法
コード行数553 行+約 140*サービス数
DOM
選択リスト+XSLT1163 行+約 50*サービス数
3000
2500

コード数

2000
DOM
XSLT

1500
1000
500
00510
追加サービス数1520

図 9 追加サービス数によるコード数の変化
BPEL プロセスの生成は DOM がサービスリストと XSLTを用いた場合の半分程度のコードですむ．しかし，選択サービスの追加を行うのに必要なコード数は選択サービスリ
ストと XSLT を用いた方が DOM の時の半分以下である．このように，DOMで生成するよりも選択サービスリストとXSLTを用いた生成の方がサービスの追加が効率的となる．
本研究では並行実行のプロセスしか生成しないので，DOM で生成する BPEL プロセスでも対応できる．しかし，
DOM で生成する時にサービス順序変更などの動的な構造の変換が行われる場合，一度生成した DOM 木からの構造変換が困難になり，XSLT を用いて構造を変換し直す必要がある．構造を柔軟に変更できる XSLT による BPEL プロセスの生成は効率的であるといえる．

6.2. BPEL プロセス
作成した BPEL プロセス生成プログラムでは，提供できるサービス内ではプロセスを自動生成が可能ではあるが，新規サービスを追加するには，プロバイダ側が静的に行わなければならない．サービスを動的に追加することが今後の課題として挙げられる．また，作成した ProcessControllerの Web サービス化を行い，BPEL プロセスを提供することを今後の課題とする．プロバイダがリクエスタに提供サービ
スを公開し，リクエスタがプロバイダに選択サービスを送信するための XML フォーマットを提案し，有用性を評価することで実現できると考える．
BPEL プロセスの考察として，本研究では BPEL プロセス側がクライアントに対してリクエスト，レスポンスの各機能に portType を分けて考えた．しかし単語帳サービス以外の類似サービスを追加した場合，提供された側はどのportType が対応しているかが理解しにくいので，類似サービスに対して 1 つの portType を定義し，バリエーションの少ないインタフェースを提供することが望ましいと考える．

7. まとめ本研究では，ビジネスプロセスの自動化を実現するた
め，BPEL を用いた複合 Web サービスの構築を提案した．
各サービスの WSDL の拡張により類似サービスの対応を行い，インタフェース間でデータ構造と操作を対応させた．
実験結果よりサービスの選択だけで BPELプロセスと，使用するサービスの WSDL ファイルを自動生成することを確認した．DOM による BPEL プロセス生成方法と比較して，XSLT スタイルシートを用いた方法だと変更容易性が高いと考え，選択サービスリストを用いた方法を提案した．実験
結果，実現方法の比較により BPEL プロセス生成プログラムの有用性の評価を行った．

参考文献
[1]

[2]

[3]

6. 考察と今後の課題
6.1. サービスの対応付け
研究より単語帳サービス以外にも，類似の機能を持ったサービスの対応が行える．しかし，開発者が類似な機能を判断し，対応を考えなければならない．したがって，開発コストの増大も考慮する必要がある．

[4]
[5]
[6]

IBM Web Services，ビジネスプロセス BPEL4WS について，http://www-6.ibm.com/jp/developerworks/webservices/021025/j_ws-bpelcol1.html#1，2002．
中村一仁ほか，価値に基づく Web サービスの動的連携ブローカとその評価，情報処理学会ソフトウェア工学研究会，Vol. 2004-SE-144, Mar. 2004，pp.123-130.
丸吉祐也，秋田太陽，Web サービスにおけるリクエス
タプログラムの再利用に関する研究，2003 年度卒業
論文，2004．
丸山 宏他， XML と Java による Web アプリケーション開発 第 2 版， ピアソン･エディケーション，1999．
本 俊也，Web サービス構築，ソフトバンク，2003．
本 俊也，最新 Web サービスマスタリングハンドブッ
ク，秀和システム，2004．