TOP
>
業務システム
> BPELにおけるトランザクション制御
SOA/ESBの真の姿とは
第8回:BPELの課題
著者:
Fiorano Software 青島 茂
2007/12/5
前のページ
1
2
3
次のページ
BPELにおけるトランザクション制御
BPELにおけるトランザクション制御を考えるために、前回紹介した受注アプリケーションの例題を変更し、「クレジット審査」のステップを追加します。通常のACIDなトランザクション制御では、図3のようにクレジット審査の結果によって在庫データベースへの変更をコミットしたり、ロールバックしたりします。クレジット審査側ではデータベースなどの変更がないものとし、2フェーズコミットの処理は考えないようにします。
図3:今回の受注アプリケーション
図4:BPELにおけるコンペンセーション
BPEL仕様におけるトランザクション管理は、ロングライフトランザクションを基本コンセプトとしています。これはBPELフロー全体も個々のWebサービスも、その実行には長い時間を要する場合が多く、あるリソースを長時間ロックしておくことは不都合であるからです。
このためBPELでは、Webサービス側での処理はすべて完了(トランザクションのコミット処理まで完了)した状態でリプライされるものとして扱います。呼び出したWebサービスのコミット処理もしくはロールバック処理を、BPEL側から起こすことはありません。
受注アプリケーションの例題では、在庫管理システムの呼び出しは、在庫データベースの在庫数変更のコミット処理まで完了した状態でBPELにリプライされることになります。BPELフローの処理を進めていく段階で、何らかの状態の発生(クレジット審査に不合格となったなど)によって在庫データベースの値を元に戻す必要が生じた場合には、在庫管理システムを再度呼び出して在庫データベースを元に戻す処理をリクエストします。
この完了した処理を元に戻すことを、コンペンセーション(補償)と呼んでいます。コンペンセーションの処理オペレーションは、Webサービス側で用意しておかなければなりません。図4にクレジット審査を追加した受注アプリケーションのBPELフローを示します(配送システムの部分は省略)。
クレジット審査の結果は予期できることであり、通常のBPELフローとしてあらかじめ組み込んでおけます。このような予期しないエラーによってコンペンセーションを起こすための仕組みとして、BPELにはcompnsationHandler(補償ハンドラ)と呼ばれるものがあります。これはfaultHandler(例外ハンドラ)と併用することで機能します。
補償ハンドラはscopeアクティビティによって正常処理のインボークと関連づけて定義します。同一のスコープ内に定義することで、Webサービスをインボークした際の状態(変数)を補償オペレーションでも共有することができます。
補償ハンドラには、補償オペレーションのインボークを定義します。補償ハンドラの起動は、faultHandler内に定義したcompensateアクティビティによって行います。compensateを行う例外の指定は、catchアクティビティによって行います。
ここでBPELのトランザクション制御を理解する上でもっとも重要なポイントは、「Webサービス側に補償オペレーションの処理を用意しておく必要がある」という点です。
前のページ
1
2
3
次のページ
著者プロフィール
Fiorano Software, Inc.
日本オフィス ジャパン オペレーション マネージャ
青島 茂
SOA/ESBの分野に2003年1月からたずさわる。2005年3月にFiorano Softwareの日本オフィスを開設し、現在SOA/ESB製品の国内市場への普及に専心している。
INDEX
第8回:BPELの課題
BPELの基本フロー
BPELにおけるトランザクション制御
BPELにおけるデータハンドリング