BPEL で作成したヒューマン・タスクを JSF を使って操作する

JSF を使って BPC Explorer の機能を提供する

この記事では WebSphere Integration Developer 6.1 を使って、BPEL でヒューマン・タスクを作成し、JSF で Web ベースのユーザー・インターフェースを作成する方法を 1 つの事例で説明します。また、JSF を使って WebSphere Process Server の Business Process Choreographer Explorer の機能を提供し、ビジネス・プロセス・フローを操作する方法も説明します。そして最後に、BPEL で作成したヒューマン・タスクをユーザーにとって容易な方法で操作するための、カスタマイズされた Web インターフェースを提供する方法についても説明します。

Sridevi Pinniti, Application Developer, IBM  

Sridevi Pinniti photoSridevi は IBM に勤務して 3 年になります。彼女の専門は SOA のための J2EE アプリケーションおよび再利用可能アセットの開発です。彼女はこれまで、保健用複合ビジネス・サービスおよび Provider Collaboration Suite の Enrollment to File のためのアセットを提供してきました。彼女が関心を持っている領域は、SOA のソフトウェア・モデリング、今後の技術の学習、および新製品の開発です。



2010年 1月 06日

BPEL の概要

Business Process Execution Language を意味する BPEL は、SOA (Service Oriented Architecture) の重要な技術の 1 つであり、内部での情報交換および外部との情報交換を記述するためのオーケストレーション・エンジンとして機能します。明らかに BPEL が扱う対象となるのは、ビジネス・プロセスの機能面であり、制御フロー (分岐、ループ、並列)、非同期の通信と相関処理、ネストされていて長期間実行される作業単位、障害、そして補償です。

BPEL によって、ビジネス・プロセスに関する以下の課題に直接対応することができます。

  • サービス間の非同期通信の調整
  • 関係者間でのメッセージ交換の相関処理
  • アクティビティーの並列処理の実装
  • パートナー間でやりとりされるデータの処理
  • 長期間実行されるビジネス・トランザクションやアクティビティーのサポート

ビジネス・プロセスでのユーザー間のやりとり

BPEL でのビジネス・プロセスは、サービスを呼び出すアクティビティーの集合として定義されます。BPEL では、アプリケーションが提供するサービスと、その他の相互作用 (例えば人間同士のやりとりなど) とを区別しません。実際のビジネス・プロセスにはシステムやサービスが統合されているだけではなく、ユーザーも統合されていることが多いため、人間同士のやりとりは重要になります。ビジネス・プロセスにおけるユーザー間のやりとりは、特定のタスクや決定を承認するだけの単純な場合もあれば、委譲、更新、エスカレーション、任命、連続実行など、複雑な場合もあります。

タスクの承認はユーザー間のやりとりとして最も単純で、おそらく最も一般的です。例えば保険会社で保険の請求を承認するビジネス・プロセスでは、請求への支払いを許可するかどうかに関してユーザー間のやりとりが必要かもしれません。あるいはもっと複雑なビジネス・プロセスでは、数人のユーザーが連続的に、または並行して、承認を行う必要があるかもしれません。連続的に承認を行うシナリオでは、次のユーザーは自分の前のユーザーが下した決定を見たがることが多いものです。その一方で、並行してユーザー間のやりとりが行われる場合には、ユーザーは他のユーザーの決定を見ることはできません。場合によっては、ユーザーは他に誰が関係しているかを知ることもなく、さらには他のユーザーが関係しているかどうかさえ知らない場合もあります。しかしそうすることによって、決定の質を高めることができます。

BPEL では、人間同士のやりとりのためのヒューマン・タスク・コンポーネントをビジネス・プロセスとして提供することができるのです。


BPEL でヒューマン・タスクを作成する

まず、アクターが申請者と承認者である 1 つの事例を考えましょう。この事例では、ビジネス・プロセスは保険請求の承認であり、ヒューマン・タスクによって承認が行われます。このプロセスでは、顧客の個人情報 (customerID や customerName など) と、請求の詳細 (請求内容や請求金額など) を使用します。実際のビジネスでは、これらの詳細情報を HIPPA や HL-7 などの医療情報規格に準拠させ、異種混成のシステムで相互運用できるようにします。

保険請求ビジネス・プロセスを作成するためには、以下のステップに従います。

  • WebSphere Integration Developer を起動し、「Business Integration (ビジネス・インテグレーション)」パースペクティブに切り換えます。
  • 「File (ファイル)」 > 「New (新規)」 > 「Module (モジュール)」の順に選択し、新規ビジネス・インテグレーション・モジュールを作成します。
  • 必要な設定をして「Finish (完了)」をクリックすると、InsuranceClaimModule が作成されます。
図 1. ビジネス・モジュールを作成する
ビジネス・モジュールを作成する
図 2. ビジネス・オブジェクトを作成する
ビジネス・オブジェクトを作成する
  • ビジネス・モジュールが作成できると、図 2 のようにモジュールが開かれます。
  • 必要なビジネス・オブジェクト (「Data Types (データ型)」) を作成します。
  • 「Data Types (データ型)」を右クリックし、「New (新規)」 > 「Business Object (ビジネス・オブジェクト)」の順に選択します。
  • 必要な設定をして「Finish (完了)」をクリックすると、空のオブジェクトが作成されます。
  • このオブジェクトに対し、必要なフィールドを追加し、そのフィールドの型を指定します。
図 3. ビジネス・オブジェクトにフィールドを追加する
Add fields to the Business Object

このシナリオに必要なビジネス・オブジェクトは CustomerInformation (顧客情報)ClaimInfomation (請求情報) です。CustomerInformation は customerId や customerName などの値を持ち、また ClaimInformation は請求の内容と金額を含んでいます。「Business Object (ビジネス・オブジェクト)」エディターでの典型的なビジネス・オブジェクトは図 3 のようになります。

図 4. インターフェースを作成する
インターフェースを作成する

次に図 4 に示すウィザードにより、InsuranceClaim インターフェースClaimReview インターフェースを作成します。

図 5. インターフェースに「Operations (操作)」を追加する
インターフェースに「Operations (操作)」を追加する
  • InsuranceClaim インターフェースには、processClaim() という操作を追加します。この操作には、「Input(s) (入力)」パラメーターとして CustomerInformation 型の customer と ClaimInformation 型の claim があり、「Output(s) (出力)」パラメーターとして string 型の decision があります。
  • ClaimReview インターフェースには、review() という操作を追加します。この操作には、「Input(s) (入力)」パラメーターとして ClaimInformation 型の claim があり、「Output(s) (出力)」パラメーターとして boolean 型の result があります。
図 6. ビジネス・プロセスを作成する
Creating Business Process
  • 新しいビジネス・プロセスを作成します。
  • 「Business Logic (ビジネス・ロジック)」を右クリックし、「New (新規)」 > 「Business Process (ビジネス・プロセス)」の順に選択します。
図 7. プロセス・タイプを選択する
プロセス・タイプを選択する

図 7 に示すように、ここでは人間同士のやりとりを含むため、「Long-running process (長期実行プロセス)」を選択します。

図 8. インターフェースを選択する
インターフェースを選択する
  • ここで「Receive (受信)」アクティビティーに対して実際にマッピングする必要があるインターフェースと、そこで行われる処理を開始するための操作を選択します。
  • そのために、「Select an interface (インターフェースを選択)」ラジオ・ボタンをクリックし、「Interface (インターフェース)」には「InsuranceClaim」を、「Operations (操作)」には「processClaim」を選択します。
  • 「Finish (完了)」をクリックすると、ClaimBusinessProcess が作成されます。
図 9. フィールドをマッピングする
フィールドをマッピングする
  • 「Receive (受信)」アクティビティーは InsuranceClaim インターフェース、processClaim 操作、そして 2 つの入力へとマッピングされます。
  • 「Reply (応答)」アクティビティーは string 型の decision という出力にマッピングされます。
図 10. 「Business Process (ビジネス・プロセス)」エディター
Business Process Editor

「Business Process (ビジネス・プロセス)」エディターの右上に、「Interface Partners (インターフェース・パートナー)」と、それに対応する「Variables (変数)」が表示されています。図 10 では「Business Process (ビジネス・プロセス)」エディターにマクロ・フローが作成されており、そのマクロ・フローには「Receive (受信)」アクティビティーと「Reply (応答)」アクティビティーが含まれています。このフローにパレットから「Human Task (ヒューマン・タスク)」をドラッグして追加します。

図 11. ヒューマン・タスクを追加する
ヒューマン・タスクを追加する

請求処理での中心となる決定はヒューマン・タスクを使って行われます。ヒューマン・タスクでは、ユーザーの決定に応じたプロセス・フローを採る適切なインターフェースが選択されます。この例では、そのインターフェースは ClaimReview です。ClaimReview には review() 操作があり、請求の承認の可否を示すブール値が返されます。図 11 に示すように、このヒューマン・タスクに何らかの名前を付け、適切なインターフェースを選択してから、新しい変数である「result」をブール型で追加します。

図 12. 「Human Task (ヒューマン・タスク)」にプロパティーを追加する
「Human Task (ヒューマン・タスク)」にプロパティーを追加する
  • 「Properties (プロパティー)」タブでは review() 操作にマッピング変数を追加します。
  • ヒューマン・タスク・アクティビティーの後に、ヒューマン・タスクの結果を表示するスニペットを追加し、そのスニペットに下記の Java コードを入力します。
if(result.booleanValue() == true)
{
   decision = "approved";
}
else
{
  decision = "rejected";
}      
   System.out.println("result:"+decision);
図 13. スニペットを追加する
スニペットを追加する
  • プロセス・フローとJava スニペット用エディターの典型的なビューを示したものが図 13 です。
  • 適切なマッピングを行った後、このモジュールを保存します。

ヒューマン・タスク用のユーザー・インターフェースを生成する

この前のセクションでは、情報を取得して処理し、ヒューマン・タスクに応じた出力を生成するビジネス・プロセスを作成しました。この BPEL 全体をインターフェースとして公開するためには、以下のステップに従う必要があります。

  • BPEL コンポーネントを「Assembly Diagram (アセンブリー・ダイアグラム)」に配置します。
  • 「Assembly Diagram (アセンブリー・ダイアグラム)」をダブル・クリックし、「Assembly (アセンブリー)」エディターを開きます。
  • 「Assembly (アセンブリー)」エディターに「ClaimBusinessProcess」という BPEL をドラッグします。
  • 「Processes」の下にある「ClaimBusinessProcess」を右クリックし、「Generate User Interfaces (ユーザー・インターフェースの生成)」を選択します。
図 14. ユーザー・インターフェースを生成する
ユーザー・インターフェースを生成する
図 15. 「User Interface Wizard for Human Tasks (ヒューマン・タスク用のユーザー・インターフェース・ウィザード)」
「User Interface Wizard for Human Tasks (ヒューマン・タスク用のユーザー・インターフェース・ウィザード)」
  • 「User Interface Wizard for Human Tasks (ヒューマン・タスク用のユーザー・インターフェース・ウィザード)」ではデフォルトで、「Generator Type (生成プログラム・タイプ)」として「JSF custom client (JSF カスタム・クライアント)」が、「Human Task (ヒューマン・タスク)」として先ほどの BPEL プロセスが選択されています。
  • 「Next (次へ)」をクリックして次に進みます。
図 16. Web モジュールを作成する
Web モジュールを作成する

生成されたユーザー・インターフェースを、何らかの Web プロジェクトの中に入れる必要があります。そのためには以下のステップに従います。

  • 新しい Web プロジェクトに名前を付けます。
  • 生成されたページのユーザー・インターフェースのスタイルを選択し、「Finish (完了)」をクリックします。
  • すると、動的 Web プロジェクトと、それに対応する EAR が作成されます。

プロジェクトを実行する

ここで、これまでに BPEL で作成したヒューマン・タスクをテストしましょう。そのためには以下のステップを実行します。

  • サーバーを起動し、そのサーバーに上記の 2 つのプロジェクトを追加します。
  • サーバーを右クリックして「Add and Remove projects (プロジェクトの追加および除去)」を選択し、表示された画面で BPEL プロジェクトと Web プロジェクト EAR を選択し、「Finish (完了)」をクリックします。
図 17. BPEL プロジェクトと Web プロジェクトを追加する
BPEL プロジェクトと Web プロジェクトを追加する
図 18. BPEL プロジェクトと Web プロジェクトを追加する (ステップ 2)
BPEL プロジェクトと Web プロジェクトを追加する (ステップ 2)
  • 「Assembly Diagram (アセンブリー・ダイアグラム)」に切り換えます。
  • BPEL コンポーネントを右クリックし、「Test Component (コンポーネントのテスト)」を選択します。
  • 「Initial request parameters (初期要求パラメーター)」セクションにすべての詳細情報を入力します。
  • 「Events (イベント)」セクションで「Invoke (呼び出し)」を選択し、「Continue (続行)」をクリックします。
  • ヒューマン・タスクでプロセスが中断され、入力待ちになります。
  • ヒューマン・タスクを呼び出すために、Web プロジェクトを実行します。
図 19. JSF ユーザー・インターフェースを実行する
JSF ユーザー・インターフェースを実行する
  • サーバーにクレデンシャルを入力してログインすると、settings.jsp ページにリダイレクトされます。
  • ヒューマン・タスクを処理するために、「Open (開く)」リンクを選択します。すると、処理待ちのヒューマン・タスクがウィンドウに表示されます。
図 20. 処理待ちのヒューマン・タスク
処理待ちのヒューマン・タスク

そのタスクを選択すると、必要な入力データと「Claim (請求)」ボタンが表示されます。

図 21. 受信された入力パラメーター
受信された入力パラメーター

「Claim (請求)」ボタンをクリックします。

図 22. ヒューマン・タスクによる決定
ヒューマン・タスクによる決定
  • この請求を承認するためには、「result (結果)」チェック・ボックスにチェックを付けます。
  • このタスクを処理待ちの状態にするためには、「Save (保管)」ボタンをクリックします。
  • この請求を却下するためには、「Release (解放)」ボタンをクリックします。
図 23. 結果を表示する
結果を表示する

図 23 はスニペットによる結果と、この BPEL のうちの残ったアクティビティーを示しています。

実際のシナリオでは、この例と同じような方法で設計し、ユーザーを別のページにリダイレクトし、他の画面やアクションにナビゲートすることもできます。この事例で使用したユーザー・インターフェースは WebSphere Integration Developer にデフォルトで用意されているものですが、ビジネス要件に応じて自由にカスタマイズすることで、よりリッチなルック・アンド・フィールを実現することができます。


まとめ

この記事では、BPEL 技術と JSF 技術を使用して SOA アプリケーションを作成する方法の概要を説明しました。そのなかで、BPEL で作成したヒューマン・タスク用にカスタマイズしたユーザー・インターフェースを作成する方法に焦点を当てました。ほとんどのビジネス・プロセスではこの方法を必要とする場合が多くあります。

参考文献

学ぶために

  • OASIS のサイトを訪れ、Web Service Business Process Execution Language Version 2.0 の詳細を学んでください。
  • developerWorks の SOA and web services ゾーンで必要なリソースを入手し、またスキルを磨いてください。
  • Technology bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。

製品や技術を入手するために

  • IBM 製品の評価版をダウンロードして、DB2®、Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=465798
ArticleTitle=BPEL で作成したヒューマン・タスクを JSF を使って操作する
publish-date=01062010