Business Process Execution Language を意味する BPEL は、SOA (Service Oriented Architecture) の重要な技術の 1 つであり、内部での情報交換および外部との情報交換を記述するためのオーケストレーション・エンジンとして機能します。明らかに 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. ビジネス・オブジェクトにフィールドを追加する
このシナリオに必要なビジネス・オブジェクトは CustomerInformation (顧客情報) と ClaimInfomation (請求情報) です。CustomerInformation は customerId や customerName などの値を持ち、また ClaimInformation は請求の内容と金額を含んでいます。「Business Object (ビジネス・オブジェクト)」エディターでの典型的なビジネス・オブジェクトは図 3 のようになります。
図 4. インターフェースを作成する
次に図 4 に示すウィザードにより、InsuranceClaim インターフェースと ClaimReview インターフェースを作成します。
図 5. インターフェースに「Operations (操作)」を追加する
- InsuranceClaim インターフェースには、processClaim() という操作を追加します。この操作には、「Input(s) (入力)」パラメーターとして CustomerInformation 型の customer と ClaimInformation 型の claim があり、「Output(s) (出力)」パラメーターとして string 型の decision があります。
- ClaimReview インターフェースには、review() という操作を追加します。この操作には、「Input(s) (入力)」パラメーターとして ClaimInformation 型の claim があり、「Output(s) (出力)」パラメーターとして boolean 型の result があります。
図 6. ビジネス・プロセスを作成する
- 新しいビジネス・プロセスを作成します。
- 「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 (ビジネス・プロセス)」エディターの右上に、「Interface Partners (インターフェース・パートナー)」と、それに対応する「Variables (変数)」が表示されています。図 10 では「Business Process (ビジネス・プロセス)」エディターにマクロ・フローが作成されており、そのマクロ・フローには「Receive (受信)」アクティビティーと「Reply (応答)」アクティビティーが含まれています。このフローにパレットから「Human Task (ヒューマン・タスク)」をドラッグして追加します。
図 11. ヒューマン・タスクを追加する
請求処理での中心となる決定はヒューマン・タスクを使って行われます。ヒューマン・タスクでは、ユーザーの決定に応じたプロセス・フローを採る適切なインターフェースが選択されます。この例では、そのインターフェースは ClaimReview です。ClaimReview には review() 操作があり、請求の承認の可否を示すブール値が返されます。図 11 に示すように、このヒューマン・タスクに何らかの名前を付け、適切なインターフェースを選択してから、新しい変数である「result」をブール型で追加します。
図 12. 「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 (ヒューマン・タスク用のユーザー・インターフェース・ウィザード)」ではデフォルトで、「Generator Type (生成プログラム・タイプ)」として「JSF custom client (JSF カスタム・クライアント)」が、「Human Task (ヒューマン・タスク)」として先ほどの BPEL プロセスが選択されています。
- 「Next (次へ)」をクリックして次に進みます。
図 16. Web モジュールを作成する
生成されたユーザー・インターフェースを、何らかの Web プロジェクトの中に入れる必要があります。そのためには以下のステップに従います。
- 新しい Web プロジェクトに名前を付けます。
- 生成されたページのユーザー・インターフェースのスタイルを選択し、「Finish (完了)」をクリックします。
- すると、動的 Web プロジェクトと、それに対応する EAR が作成されます。
ここで、これまでに BPEL で作成したヒューマン・タスクをテストしましょう。そのためには以下のステップを実行します。
- サーバーを起動し、そのサーバーに上記の 2 つのプロジェクトを追加します。
- サーバーを右クリックして「Add and Remove projects (プロジェクトの追加および除去)」を選択し、表示された画面で BPEL プロジェクトと Web プロジェクト EAR を選択し、「Finish (完了)」をクリックします。
図 17. BPEL プロジェクトと Web プロジェクトを追加する
図 18. BPEL プロジェクトと Web プロジェクトを追加する (ステップ 2)
- 「Assembly Diagram (アセンブリー・ダイアグラム)」に切り換えます。
- BPEL コンポーネントを右クリックし、「Test Component (コンポーネントのテスト)」を選択します。
- 「Initial request parameters (初期要求パラメーター)」セクションにすべての詳細情報を入力します。
- 「Events (イベント)」セクションで「Invoke (呼び出し)」を選択し、「Continue (続行)」をクリックします。
- ヒューマン・タスクでプロセスが中断され、入力待ちになります。
- ヒューマン・タスクを呼び出すために、Web プロジェクトを実行します。
図 19. JSF ユーザー・インターフェースを実行する
- サーバーにクレデンシャルを入力してログインすると、settings.jsp ページにリダイレクトされます。
- ヒューマン・タスクを処理するために、「Open (開く)」リンクを選択します。すると、処理待ちのヒューマン・タスクがウィンドウに表示されます。
図 20. 処理待ちのヒューマン・タスク
そのタスクを選択すると、必要な入力データと「Claim (請求)」ボタンが表示されます。
図 21. 受信された入力パラメーター
「Claim (請求)」ボタンをクリックします。
図 22. ヒューマン・タスクによる決定
- この請求を承認するためには、「result (結果)」チェック・ボックスにチェックを付けます。
- このタスクを処理待ちの状態にするためには、「Save (保管)」ボタンをクリックします。
- この請求を却下するためには、「Release (解放)」ボタンをクリックします。
図 23. 結果を表示する
図 23 はスニペットによる結果と、この BPEL のうちの残ったアクティビティーを示しています。
実際のシナリオでは、この例と同じような方法で設計し、ユーザーを別のページにリダイレクトし、他の画面やアクションにナビゲートすることもできます。この事例で使用したユーザー・インターフェースは WebSphere Integration Developer にデフォルトで用意されているものですが、ビジネス要件に応じて自由にカスタマイズすることで、よりリッチなルック・アンド・フィールを実現することができます。
この記事では、BPEL 技術と JSF 技術を使用して SOA アプリケーションを作成する方法の概要を説明しました。そのなかで、BPEL で作成したヒューマン・タスク用にカスタマイズしたユーザー・インターフェースを作成する方法に焦点を当てました。ほとんどのビジネス・プロセスではこの方法を必要とする場合が多くあります。
学ぶために
- 詳しい背景知識を得るには、「Business Process Execution Language (BPEL) for Web Services」(developerWorks、2007年2月) を読んでください。
- 「WS-BPEL 2.0 Extensions for Sub-Processes」(developerWorks、2005年10月) をダウンロードしてください。
- ホワイトペーパー、「BPELJ: BPEL for Java technology」(developerWorks、2004年5月) をダウンロードしてください。
- OASIS のサイトを訪れ、Web Service Business Process Execution Language Version 2.0 の詳細を学んでください。
- developerWorks の SOA and web services ゾーンで必要なリソースを入手し、またスキルを磨いてください。
- Technology bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。
製品や技術を入手するために
- IBM 製品の評価版をダウンロードするか、あるいは IBM SOA Sandbox のオンライン試用版で、DB2®、Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。
議論するために
- developerWorks blogs から developerWorks のコミュニティーに加わってください。
