演習: Webサービス連携1
WS-BPELによるサービス連携の基本
WS-BPEL(Web Service Business Process Execution Language)は,OASISによって標準化された,ビジネスプロセスを複数のWeb サービス間の一連のインタラクションとして規定する言語です.WS-BPELは,SOAPやWSDLなどのWebサービス標準をベースとしながら,複数のサービスを相互に連携させ,ビジネスプロセスを実現します.
WS-BPELによって記述されたプロセス(以下、「BPELプロセス」を呼ぶ)は,決まった手順で実行される Webサービスの集まりとして定義されます.各Webサービスは,それを利用するBPELプロセスからはブラックボックスとして扱われます. BPELプロセスは,それ自体をWebサービスとして公開することができます.
この演習では,Webサービス連携のためのBPELプロセスの作成について学びます.例題として, 2つの機械翻訳サービスを連携させた折り返し翻訳を作成します.折り返し翻訳とは,ある言語Aの文章を別の言語Bに翻訳した後,再び翻訳して言語Aにする処理を指し,言語Bを理解する話者がいない場合に,言語A->言語Bの機械翻訳の品質を予想するために使用されます.
BPELプロセスのアクティビティ・制御構造
BPELプロセスはXMLで記述されます.下記は,折り返し翻訳を行うBPELプロセスのXML構造例です.
BPELプロセス定義のXML構造 |
<?xml version="1.0" encoding="UTF-8"?>
<bpws:process name="Backtrans"
targetNamespace="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/"
exitOnStandardFault="yes"
suppressJoinFailure="yes"
xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:ns="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/Artifacts"
xmlns:ns0="http://langrid.ai.soc.i.kyoto-u.ac.jp/langrid-service_1_2/services/JServer"
xmlns:tns="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/">
<!?インポートの定義-->
<bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
location="../wsdl/Backtrans.wsdl"
namespace="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans"/>
<bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
location="..."
namespace="..."/>
<!?パートナーリンクの定義-->
<bpws:partnerLinks>
<bpws:partnerLink name="TranslateAltPL"
partnerLinkType="ns:TranslatePLT"
partnerRole="translator"/>
<bpws:partnerLink name="..."
partnerLinkType="..."
partnerRole="..."/>
</bpws:partnerLinks>
<!?変数の定義-->
<bpws:variables>
<bpws:variable messageType="tns:translateRequest"
name="backtransRequest"/>
<bpws:variable messageType="..."
name="..."/>
</bpws:variables>
<!--実行順次のアクティビティ定義-->
<bpws:sequence>
<bpws:receive.../>
<bpws:assign...>...</bpws:assign>
<bpws:invoke...>...</bpws:invoke>
<bpws:assign...>...</bpws:assign>
<bpws:reply.../>
</bpws:sequence>
</bpws:process>
|
BPELプロセスのタスクは,アクティビティとして記述されます.アクティビティはその種類に応じて異なる機能を持ちます.以下,本演習課題で使用する各アクティビティを簡単に説明します.
- Receive:クライアントからの要求メッセージの受信
ReveiveアクティビティのXML構造 |
<bpws:receive createInstance="yes" name="Receive"
operation="translate" partnerLink="BacktransPL"
portType="tns:Backtrans" variable="backtransRequest"/>
|
- Reply:クライアントに応答メッセージの送信
ReplyアクティビティのXML構造 |
<bpws:reply name="Reply" operation="translate"
partnerLink="BacktransPL" portType="tns:Backtrans"
variable="backtransResponse"/>
|
- Invoke:サービスの呼び出し
InvokeアクティビティのXML構造 |
<bpws:invoke inputVariable="translateRequest1"
name="ForwardTranslation" operation="translate"
outputVariable="translateResponse1"
partnerLink="TranslatePL" portType="ns0:Translation">
<bpws:catch faultName="ns0:UnsupportedLanguagePairException">
<bpws:sequence>
<bpws:invoke inputVariable="translateRequest1"
name="ForwardTranslationAlternative"
operation="translate"
outputVariable="translateResponse1"
partnerLink="TranslateAltPL" portType="ns0:Translation"/>
</bpws:sequence>
</bpws:catch>
</bpws:invoke>
|
- Assign:データの受け渡し(変数値のコピー)
AssignアクティビティのXML構造 |
<bpws:assign name="Assign" validate="no">
<bpws:copy>
<bpws:from part="sourceLang" variable="backtransRequest"/>
<bpws:to part="sourceLang" variable="translateRequest1"/>
</bpws:copy>
<bpws:copy>
<bpws:from part="intermediateLang" variable="backtransRequest"/>
<bpws:to part="targetLang" variable="translateRequest1"/>
</bpws:copy>
<bpws:copy>
<bpws:from part="source" variable="backtransRequest"/>
<bpws:to part="source" variable="translateRequest1"/>
</bpws:copy>
</bpws:assign>
|
BPELプロセス作成の手順
BPELプロセスの作成は,プロセス定義・プロセス配備・テストの手順で進められます.以下,各ステップを簡単に説明します.
- プロセス定義
プロセスの定義では,BPELプロセスの記述を行い,Webサービスの呼び出しや実行順序を設定します. BPELプロセスはXMLで記述されますが,BPELプロセスのためのGUIエディタ(例えば,Eclipse BPEL (オープンソース) DesignerやActiveVOS Designer (商用) など)によって可視化することができます.GUIエディタを利用することによって, BPELプロセスのヴィジュアルな表現からXMLを生成することができます.
- プロセス配備
BPELプロセスは,BPEL実行エンジンに配備されるることによって実行可能なサービスとして公開することができます.BPELプロセスの配備手順と方法は実行エンジンによって異なります.
- テスト
配備されたBPELプロセスの実行のテストを行います.Webサービスのためのテストツールによって,実行結果を確認することができます.
BPELプロセス作成の演習
WS-BPELによるWebサービス連携の環境例
本演習課題では,下記の環境でのBPELプロセス作成方法を示します.
- プロセス定義
Webサービスを連携させるBPELプロセスを記述するため,BPELのエディタを使用します.BPELプロセスの定義はオープンソースのEclipse BPEL Designerを使います.
http://www.eclipse.org/bpel/
Eclipse BPEL Designerは,Eclipseのプラグインとして動作します.そのため,まず下記ページからEclipse3.4 (Ganymede)をダウンロードし,インストールしてください.
http://www.eclipse.org/ganymede/
Eclipse 3.5 ではEclipse BPEL Designerは動作しません.
Eclipse 3.4のインストールが完了後,下記ページの手順に従って,EclipseにBPEL Designerをインストールしてください.
http://download.eclipse.org/technology/bpel/update-site/
- プロセス配備
BPELの実行エンジンには,オープンソースのActiveBPEL Community Edition BPEL Engineを使います.
ActiveBPEL Community Edition BPEL Engineを利用するには,JDK 5.0が必要です.下記ページからダウンロードし,インストールしてください.
http://java.sun.com/j2se/1.5.0/ja/download.html
JDKのバージョンは 5.0 を使用してください.ActiveBPEL Community Edition BPEL Engineは,最新バージョンのJDK6に対応していません.
JDKをインストールした後,環境変数の設定が必要です.以下の環境変数を設定してください.
-環境変数名:JAVA_HOME
-値:JDKのホームディレクトリへのパス
ActiveBPEL Engine 5.0は,Apache Tomcat上で動作します.Tomcatは下記のページからダウンロード可能です(バージョン5.5.xを選択してください).
http://tomcat.apache.org/download-55.cgi
(Windows Vistaにおけるインストール注意事項: TomcatをWindows Vistaにインストールする場合は,Program Files フォルダ以外の場所にインストールすることをお奨めします.Windows Vistaのユーザアカウント制御によって,正常に起動できないことがあります.)
Tomcatをインストールした後,環境変数のセットアップが必要です.以下の環境変数を設定してください.
-環境変数名:CATALINA_HOME
-値:Tomcatのホームディレクトリへのパス
ActiveBPEL Community Edition BPEL Engine(バージョン5.0)は,下記ページからダウンロードしてください.
activebpel-5.0.2-bin.zip
ActiveBPEL Engineのインストール方法は,解凍したファイル内のdoc\install_engine.txtを参照ください.インストールが成功すると,Tomcatを起動した状態で下記のURLにアクセスするとActiveBPEL Engineの管理ページが表示されます.
http://localhost:8080/BpelAdmin/
- テスト
テストには,Webサービス実行のためのクライアントソフトウェアであるsoapUIを使います.(演習課題1を参照ください.)
本演習課題で扱うプロセス
この演習では,2つの機械翻訳サービスから構成される折り返し翻訳BPELプロセスを扱います.折り返し翻訳BPELプロセスは,ある言語Aの文章を別の言語Bに翻訳した後,再び翻訳して言語Aにします.そのため,,折り返し翻訳BPELプロセスの入力は,入力文の言語・一度目の翻訳の結果の言語 (中間言語),及び翻訳される文章となります.
この演習では,機械翻訳サービスに,言語グリッドで提供されるJ-Server(高電社)を用います.
折り返し翻訳の制御構造は,2度の機械翻訳の呼び出し処理をつないだものになります.下記の図は,折り返し翻訳のシナリオ例を示しています.(翻訳サービス1: 日本語→英語 + 翻訳サービス 2: 英語→日本語)
上記の折り返し翻訳BPELプロセスの仕様は下記の図で表示されます.
- 翻訳サービス
- 入力: {翻訳元言語,翻訳先言語,翻訳対象}
- 出力:{翻訳結果}
- BPELプロセス
- 入力: {翻訳元言語,中間言語,翻訳対象}
- 出力:{翻訳結果}
- データフロー
BPELプロセス,翻訳サービス間のデータフローは下図のようになります.
折り返し翻訳BPELプロセス作成の手順
Eclipse BPEL Designerで折り返し翻訳を作成するための手順は次のようになります.
- 1. プロジェクト作成
- Eclipseを起動し,メニューから File->New->Project, BPEL 2.0->BPEL Project を選択.各項目の設定は以下の通りです.
- Project Name: Backtrans
- BPEL 2.0 Facet を選択
- 2. BPELファイルの作成
- 1 で作成したBacktransプロジェクトを右クリックし,New->Other, BPEL2.0->New BPEL Process File を選択.各項目の設定は以下の通りです.
- BPEL Process Name: Backtrans
- Namespace: http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/
- Template: Empty BPEL Process
- 3. WSDLの用意
- J-ServerのWSDL (KyotoUJServer.wsdl) および折り返し翻訳BPELプロセスのWSDL (Backtrans.wsdl)をダウンロードし,プロジェクトのディレクトリに移動します.ブラウザによっては,ダウンロード時にデフォルトのファイル名がKyotoUJServer.xml, Backtrans.xmlとなりますので,拡張子を変更してください.
- 4. ReceiveおよびReplyの追加
下記の図で表示されるように,折り返し翻訳BPELプロセスでは,クライアントからのメッセージの受信・送信を行うReceiveアクティビティおよびReplyアクティビティが必要です.
ReceiveアクティビティおよびReplyアクティビティの追加は下記の手順で行います.
- BPELプロセスが表示されている領域の右側にある,Paletteと書かれたバーをクリックすると,アクティビティの一覧が表示されます.ここからReceive, ReplyをSequenceの中にドラッグします.
- Receiveの設定
- Receiveを右クリックし,Show in Propertiesを選択し,"Details"タブをクリックします.
- Partner LinkでCreate Global Partner Linkを選択します.
- Partner Link名は,BacktransPLとします.
- Choose Partner Link Typeのダイアログで,Matchesの欄からBacktransを選択してOKを押します.Backtransが表示されていない場合,Show Partner Link Types欄のラジオボタンでFrom Projectが選択されているのを確認してください.
- 続いて表示される2つのダイアログでは,以下のように各項目を設定します.
- Partner Link Type Name: BacktransPLT
- Role Name: self
- Port Type: Backtrans
- 画面右上のPartnerLinksからBackTransPLを選択し,My Roleをselfに設定します.
- この段階で,一度BPELプロセスを保存します.メニューのFile->Saveを選択するか,Ctrl+Sを押してください.
- ReceiveのPropertiesからoperationをtranslateに設定します.
- 続いて入力変数を作ります.右側のVariablesタブの”+”をクリックし,作成された変数について,画面下部のDescriptionタブからbacktransRequestと改名します.
- backtransRequestが選択された状態で,画面下部のPropertiesタブ内,Detailsタブに表示されたData TypeからBrowse...を押してtranslateRequestを選びます(Show XSD TypesでFrom Projectが選択されていることを確認してください.さらに,FilterでMessagesにチェックが入っていることを確認してください.またShow Dupilicatesにもチェックを入れ,intermediateLangが設定されている方を選ぶようにしてください).画面下部にDetailsタブが表示されていないときは,backtransRequestを右クリックして,Show in propertiesを選択してください.
- 最後に,ReceiveのProperty->Detailsタブで以下の設定をします.
- Operationをtranslateに
- VariableをbacktransRequestに
- Create a new process instance if one does not already existをチェック
- Replyの設定
- 入力変数を作ります.右側のVariablesタブの”+”をクリックし,作成された変数をDescriptionからbacktransResponseと改名します.
- 同じくDetailsのData TypeからBrowse...でtranslateResponseを選びます.メッセージのパート名がresultになっているものを選びます(FilterでMessagesにチェックが入っていることを確認してください.)
- ReplyのProperties->Detailsタブを以下のように設定します.
- Partner Link: BacktransPL
- Operation: translate
- Variable: backtransResponse(backtransRequestと表示される場合には,直接backtransResponseとタイプしてください)
- 5. Invokeの追加
下記の図で表されるように,折り返し翻訳BPELプロセスでは,外部の翻訳サービスJ-Serverを呼び出すためのInvokeアクティビティが必要です.折り返し翻訳はJ-Serverを2回を呼び出す必要があるため,Invokeアクティビティも2つ必要になります.
Invokeの追加は下記の手順で行われます.
- 右のPaletteからドラッグし,Receive,Replyの間にinvokeを設置します.
- Invokeの設定
- Propertiesタブ->DescriptionタブからでNameを ForwardTranslationとします.
- Propertiesタブ->Detailsタブから,Partner LinkでCreate Global Partner Linkを選択し,Partner Link NameをTranslatePLとします.
- Choose Partner Linkのダイアログでは,Matchesの欄でTranslationを選択してOKを押します.Translationが表示されていない場合,From Projectが選択されていることを確認してください.
- 続いて表示される2つのダイアログでは,以下のように各項目を設定します.
- Partner Link Type Name: TranslatePLT
- Role Name: translator
- Port Type: Translation
- 画面右上のPartnerLinksからTranslatePLを選択し,Partner Roleをtranslatorに設定します.
- 続いて入力変数を作ります.右側のVariablesタブの”+”をクリックし,作成された変数をDescriptionからtranslateRequest1と改名します.
- 同じくDetailsのData TypeからBrowse...でtranslateRequestを選びます.(Show XSD TypesでFrom Projectが選択されていることを確認してください.さらに,FilterでMessagesにチェックが入っていることを確認してください.またShow Dupilicatesにもチェックを入れ,targetLangが含まれている方を選ぶようにしてください.)
- 同様に出力変数を作成します.名前はtranslateResponse1とします. Data TypeはtranslateResponseとします.(Data Type設定時には,FilterでMessagesにチェックが入っていることを確認してください.またShow Dupilicatesにもチェックを入れ,translateReturnが含まれている方を選ぶようにしてください.)
- ForwardTranslationを選択し,Properties->Detailsタブから以下のように設定します.
- Operation: translate
- Input Variable: translateRequest1
- Output Variable: translateResponse1
- ForwardTranslationを右クリック->Duplicateし,Property->Descriptionsタブから名前をBackwardTranslationとします.
- ForwardTranslation -> BackwardTranslationの順に並べます.
- ForwardTranslationと同様の方法で作成した変数translateRequest2, translateResponse2を入出力に設定します.Data TypeもForwardTranslationの入出力変数と同様です.
- 6. Assignの追加
さらに,あるWebサービスの実行結果を他のWebサービスに渡すために,変数値の操作を行うAssignアクティビティを定義します.
折り返し翻訳BPELプロセスには,Assignアクティビティが3つ必要です.下記の図は,3つのAssignアクティビティで定義されるデータフロー全てを示しています.
Assignの追加は下記の手順で行います.
- 右のPaletteからドラッグし,Receiveの後にAssignを設置します.
- Assignの設定を行います.以下のそれぞれについて,Properties->DetailsタブでNewを押し,コピーオペレーションを作成します.
- backtransRequest/sourceLang -> translateRequest1/sourceLang
- backtransRequest/intermediateLang -> translateRequest1/targetLang
- backtransRequest/source -> translateRequest1/source
- 同様に,ForwardTranslationおよびBackwardTranslationの後にもAssignを作成します.
- ForwardTranslationの後のAssignの設定は以下です.
- backtransRequest/intermediateLang -> translateRequest2/sourceLang
- backtransRequest/sourceLang -> translateRequest2/targetLang
- translateResponse1/translateReturn -> translateRequest2/source
- BackwardTranslationの後のAssignの設定は以下です.
- translationResponse2/translateReturn -> backtransResponse/result
下記の図は,折り返し翻訳BPELプロセス定義完了後のスクリーンショットを表示します.
- 7. プロセスの配備
- ActiveBPEL実行エンジンでBPELプロセスを行うには,BPELプロセスを実行エンジン上に配備する必要があります.このため,配備情報を記述したBacktrans.pddとcatalog.xmlという2つのファイルが必要となります.
- Backtrans.pddの内容はここからダウンロードしてください.abp:Userタグとabp:CleartextPasswordタグ(******と記述された部分)に一時IDとパスワード(または言語グリッドユーザIDとパスワード)を設定してください。ファイル中の記述内容については,ActiveBPELのドキュメントを参照ください.
- catalog.xmlの内容はここからダウンロードしてください.
- 下図のようにディレクトリ構造を整理します.bpel, wsdl, META-INFという三つのサブディレクトリをつくり,ファイルを移動します.
- Backtrans
- bpel : Backtrans.bpel, Backtrans.bpelex
- wsdl : Backtrans.wsdl, BacktransArtifacts.wsdl, KyotoUJServer.wsdl
- META-INF : catalog.xml
- Backtrans.pdd
- ディレクトリ構造の整理に伴い,bpelを修正します.bpelファイルをテキストエディタで開き,importタグ内のlocation属性(合計3つ有ります)を,”Backtrans.wsdl” -> “../wsdl/Backtrans.wsdl”などと修正して下さい.
importタグ内のlocation属性修正結果 |
<bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
namespace="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/Artifacts"/>
<bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
location="../wsdl/Backtrans.wsdl"
namespace="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/"/>
<bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
location="../wsdl/BacktransArtifacts.wsdl"
namespace="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/Artifacts"/>
<bpws:import importType="http://schemas.xmlsoap.org/wsdl/"
location="../wsdl/KyotoUJServer.wsdl"
namespace="http://langrid.ai.soc.i.kyoto-u.ac.jp/langrid-service_1_2/
services/JServer"/>
|
- コマンドラインで作成したプロジェクトのディレクトリに移動し,以下の配備用コマンドを実行します.エラーが出る場合,JAVA_HOME,CATALINA_HOMEなどの環境変数が正しく設定されていることを確認してみてください.
- "%JAVA_HOME%\bin\jar" cf Backtrans.bpr wsdl bpel META-INF Backtrans.pdd
- copy Backtrans.bpr "%CATALINA_HOME%\bpr"
- 上記のコマンドを実行後,最長1分程度で実行エンジンにBPELプロセスが配備されます.
- 8. 実行
- インストールしたTomcatを起動します.
- インストールしたディレクトリ以下にある,bin/startup.batを実行するか,tomcat5w.exeを起動し,GeneralタブからStartを選択することで起動できます。
- bin/shutdown.batを実行するか,またはtomcat5w.exeを起動し,GeneralタブからStopを選択することで停止できます.
- プロキシが必要な場合には,bin/catalina.bat (or catalina.sh)の,set JAVA_OPTS= … の末尾に”-Dhttp.proxyHost=YourProxy -Dhttp.proxyPort=YourProxyPort -Dhttp.nonProxyHosts=localhost” を追加してください.または,tomcat5w.exeを起動し,JavaタブのJava Optionsに同様のオプションを追加してください.
- Tomcatを起動した状態でブラウザでlocalhost:8080/BpelAdminにアクセスすると,ActiveBPEL実行エンジンの管理画面が見られます.
- 左のメニューからDeployed Serviceを選び,Backtransをクリックすると,WSDLが表示されます.
- 課題1と同様に,soapUIを用いて実行してください.WSDLのURLには,上記で得られるWSDLのURLを指定してください.
- Bindingが複数表示される場合,BacktransBindingを選びます.
発展課題
上記のステップに従って,J-Server以外のWebサービスも呼び出してみましょう.この演習では以下のサービスが使用できます.
- Google Translate
- Copyright: Google, Inc.
- 対応言語対: Service Profileに記載
- オペレーション: String translate (String sourceLang, String targetLang, String source)
- sourceLang: 翻訳元言語
- targetLang: 翻訳先言語
- source: 翻訳される文章