English | Japanese

演習: Webサービス連携3

Webサービスとヒューマンタスクの連携

この演習では,Webサービス連携1 (BPELによるサービス連携)を拡張し,ヒューマンタスクとWebサービスの連携に取り組みます.

WS-BPELはWebサービスの連携を記述するために用いられています.しかし,実際に多くのWebサービス指向のシステムの稼働時では,人間が作業を実行したり確認したりすることがしばしば必要とされます.そこで,ヒューマン・ワークフローのための WS-BPEL拡張として,BPEL4People が提案されました.BPEL4Peopleは,IBM や SAPなどのITベンダーにより仕様が発表され,現在OASISで標準化が進められています. BPEL4Peopleでは,人のアクティビティもWebサービスと同じように サービスとして統一的に記述できます(参考:WS-BPEL Extension for People).

BPELプロセスにおけるヒューマンタスクへの入力は,そのタスクを担当する人間に示されます.ヒューマンタスクの出力は,人間が直接入力します.

この演習では,以上のヒューマンタスクを翻訳サービスと連携させ,入力された文章を始めに機械翻訳サービスで翻訳し,それを人間がチェックして修正するBPELプロセスを作成します.すでに学んだ機械翻訳サービスの連携だけでなく,人間によって実行されるヒューマンタスクの作成方法について学びます.

BPELプロセスの作成手順や本演習課題の環境は,Webサービス連携1 (BPELによるサービス連携)を参照してください.

Webサービスとヒューマンタスクの連携の演習

1.プロジェクトの用意

  • 「Webサービス連携1」で作成したプロジェクトを開きます.
    • 本演習課題から始める場合,ここからダウンロードして,ファイルを展開してください.次にFile->Import から, Existing Projects into Workspaceを選択してインポートしてください.
  

2.ヒューマンタスクの追加

Eclipse BPEL Designerがヒューマンタスクに対応していないため,Backtrans.bpelをテキストエディタで編集します.ヒューマンタスクを追加するた めに,BPELプロセスに対して以下の操作が必要です:(1)ヒューマンタスク利用のためのネームスペースの追加,(2)拡張機能の利用の宣言と humanInteractionの定義,(3)ヒューマンタスクの定義.

翻訳サービスと人間チェック作業の連携を例として,上記の操作を説明します.

  • Backtrans.bpelにおいて,<bpws:process>タグの属性として,以下で赤く示したネームスペースを追加します.
  • BPELのネームスペースの追加内容
    <bpws:process exitOnStandardFault="yes" name="Backtrans"
        suppressJoinFailure="yes"
        targetNamespace="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/"
        xmlns:b4p="http://www.example.org/BPEL4People"
        xmlns:htd="http://www.example.org/WS-HT"
        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:process>タグの先頭及び2番目の子要素として,以下に示すb4p:humanInteractionsタグ及びbpws:extensionsタグを追加します.追加する部分を,下図で赤く示しています.これらの内容は,拡張機能の利用の宣言と,ヒューマンタスクを実行するユーザグループの記述です.
  • 拡張機能の利用の宣言,humanInteractionの定義の追加内容
    <bpws:process ... >
       <b4p:humanInteractions>
          <htd:logicalPeopleGroups>
             <htd:logicalPeopleGroup name="HumanTranslator"/>
          </htd:logicalPeopleGroups>
          <htd:tasks/>
          <htd:notifications/>
       </b4p:humanInteractions>
       <bpws:extensions>
          <bpws:extension mustUnderstand="yes" 
                namespace="http://www.example.org/BPEL4People"/>
          <bpws:extension mustUnderstand="yes" 
                namespace="http://www.example.org/WS-HT"/>
       </bpws:extensions>
       <bpws:import ...>
    ...
    
  • 2つめの翻訳 (BackwardTranslation) を行うInvokeアクティビティを,ヒューマンタスクに置き換えます.
    • 2つめのInvokeを削除します.
    • 以下の内容をInvokeがあった位置に挿入します.
    ヒューマンタスクの定義
       <bpws:extensionActivity>
         <b4p:peopleActivity 
                  inputVariable="translateRequest2" 
                  outputVariable="translateResponse2">
            <wsht:task xmlns:wsht="http://www.example.org/WS-HT" name="TranslationTask">
               <wsht:interface 
      xmlns:ns="http://langrid.ai.soc.i.kyoto-u.ac.jp/langrid-service_1_2/services/JServer" 
                 operation="translate" portType="ns:Translation"/>
               <wsht:peopleAssignments>
                  <wsht:potentialOwners>
                     <wsht:from logicalPeopleGroup="HumanTranslator"></wsht:from>
                  </wsht:potentialOwners>
                  <wsht:businessAdministrators>
                     <wsht:from logicalPeopleGroup="HumanTranslator"></wsht:from>
                  </wsht:businessAdministrators>
               </wsht:peopleAssignments>
               <wsht:presentationElements>
                  <wsht:name></wsht:name>
                  <wsht:subject>Please translate this text.</wsht:subject>
               </wsht:presentationElements>
            </wsht:task>
         </b4p:peopleActivity>
      </bpws:extensionActivity>
    
  

3.配備情報の設定

Webサービスとヒューマンタスクの連携プロセスを配備するために,次のような配備情報の記述が必要です:(1)ヒューマンタスクの配備のためのネームスペースの追加,(2)ヒューマンタスクの拡張配備情報やユーザ情報の記述.

翻訳サービスと人間チェック作業の連携を例として,配備情報の設定を説明します.

  • Backtrans.pddにおいて,<pdd:process>タグに下図で赤く示したネームスペースを追加します.
  • pddのネームスペースの追加内容
    <pdd:process
     xmlns:bpelns="http://www.ai.soc.i.kyoto-u.ac.jp/process/Backtrans/"
     xmlns:pdd="http://schemas.active-endpoints.com/pdd/2006/08/pdd.xsd" 
     xmlns:aeb4p="http://www.activebpel.org/b4p/2007/10/wshumantask/deployments"
     xmlns:htd="http://www.example.org/WS-HT"
     location="bpel/Backtrans.bpel" name="bpelns:Backtrans"
     platform="opensource">
    
  • <pdd:process>タグの最後の子要素として下図で赤く示したpdd:extensionsタグを追加します.
    • USERNAME の箇所には,適当なユーザ名を設定してください (e.g. testuser)
    pdd:references直後の追加内容
    <pdd:process ...>
    ...
      <pdd:extensions>
        <aeb4p:logicalPeopleGroups>
          <aeb4p:logicalPeopleGroup 
                location="/process/humanInteractions/logicalPeopleGroups" 
                name="HumanTranslator" type="STATIC">
            <htd:organizationalEntity>
              <htd:users>
                <htd:user>USERNAME</htd:user>
              </htd:users>
            </htd:organizationalEntity>
          </aeb4p:logicalPeopleGroup>
        </aeb4p:logicalPeopleGroups>
      </pdd:extensions>
    </pdd:process>
    
  

4.実行エンジンの設定

ヒューマンタスクを含むBPELプロセスでは,ユーザとユーザグループなどの設定が必要です.以下にその設定の手順を示します.

  • CATALINA_HOME/conf/tomcat-users.xmlに,下図で赤く示した記述を加えてください.(CATALINA_HOME :Tomcatがインストールされたフォルダ)
    • roleタグ,userタグを追加します.
    • ユーザ名は先のステップで設定したものにしてください.
    • 変更後にはTomcatの再起動が必要です.
    Tomcatのユーザの追加
    <?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
    ...
      <role rolename="testrole"/>
      ...
      <user username="USERNAME" password="PASSWORD" roles="testrole"/>
    ...
    </tomcat-users>
    
  • 実行エンジンの管理画面 (http://localhost:8080/BpelAdmin/) のメニューから,Identify Service を選択し,Provider Configurationの項目を以下のように設定してください.
    • Enable:チェックを入れる
    • Provider Type:XML File
    • File Location on server: ${catalina.home}/conf/tomcat-users.xml
    • Test Current Configuration 以下のUser for Testに作成したユーザ名を入力し,Test Settingsを押します.Test successfulと表示されれば,正しくユーザが設定されています.
  • 他の課題(Webサービス連携1,2)と同様の手順で配備を行ってください.
  

5.実行

  • 他の課題(Webサービス連携1,2)と同様に実行します.
    • 実行エンジンの管理画面のメニューからActive Processesを選択し,実行したプロセスを選択します.ヒューマンタスクの箇所で実行が停止しているのが確認できます.
  • タスクボックスにログインします.
    • http://localhost:8080/aetask/ にアクセスします.
    • 先のステップで設定したユーザ名とパスワードを使用します.
    • ログインすると,BPELプロセスから送られたタスクが確認できます.
  • タスクを実行します.
    • 表示されたタスクをダブルクリックして開きます.Start ボタンを押すことで,Human Task の出力を入力できます.入力領域の下にある Save Data ボタンを押し,上部のComplete を選択することで,ヒューマンタスクが終了します.
    • ヒューマンタスクが終了すると,BPELプロセスの実行が再開されます.正しく動作していれば,BPELプロセスから返された結果が表示されます.
  

発展課題

上記のステップに従って,J-Server以外のWebサービスも呼び出してみましょう.この演習では以下のサービスが使用できます.

  • Google Translate
    • Copyright: Google, Inc.
    • 対応言語対: Service Profileに記載
    • オペレーション: String translate (String sourceLang, String targetLang, String source)
      • sourceLang: 翻訳元言語
      • targetLang: 翻訳先言語
      • source: 翻訳される文章