...

作成手順書 BPC作成手順書 コンペンセーション コンペンセーション編

by user

on
Category: Documents
15

views

Report

Comments

Transcript

作成手順書 BPC作成手順書 コンペンセーション コンペンセーション編
®
IBM Software Group
BPC作成手順書
作成手順書
コンペンセーション編
コンペンセーション編
概説
2006年2月1日
日本アイ・ビー・エム株式会社
ソフトウェア事業
© 2005 IBM Corporation
Updated February 7, 2006
Page 1
IBM Software Group
目次
コンペンセーション
コンペンセーションとは
Compensation Handler
Compensateアクティビティ
Scope
Fault
コンペンセーションの動作例
2
© 2005 IBM Corporation
このドキュメントでは、WPS V6.0におけるコンペンセーションについて解説します。
Page 2
IBM Software Group
コンペンセーション概要
コンペンセーション概要
3
© 2005 IBM Corporation
Page 3
IBM Software Group
コンペンセーションとは
コンペンセーションとは
プロセスでエラーが発生した場合に逆向きの処理を呼び出す
ことで整合性を保つ機能
CompensateアクティビティとCompensation Handlerによって実現
COMMIT
逆処理によって実現
UOW
COMMIT
UOW
コンペンセーション
によって実 現
逆処理によって実現
UOW
トランザクションのロール
バックによって実現
4
© 2005 IBM Corporation
コンペンセーションとはプロセスでエラーが発生した場合に逆向きの処理を呼び出すことによって全体の整合性を保つ
機能です。
ロング・ランニング・プロセスでは、プロセスは複数のトランザクション・スコープに分割されます。
レンタカー、ホテル、飛行機を予約するアプリケーションを例に考えて見ましょう。
レンタカーの予約、ホテルの予約、飛行機の予約はそれぞれ別々のトランザクションスコープになります。
最後の飛行機の予約で、エラーが発生した場合、それ以前の2つの処理は既にCommit済みのために、逆向きの処理
によって予約を取り消すことが必要です。
BPELプロセスでは、CompensateアクティビティとCompensation Handlerによってこれらの機能を実現します。
Page 4
IBM Software Group
Compensation Handler
ScopeやInvokeアクティビティに対する逆向きの処理を記述
Compensateアクティビティによって明示的に呼び出される
自動的にCompensation Handlerが呼び出されることはない
Compensation Handler内には通常のプロセスと同様の処理を
記述可能
全てのパートナーリンクや変数を使用可能
ロング・ランニング・プロセスでのみ使用可能
5
© 2005 IBM Corporation
Compensation HandlerはScopeやInvoke アクティビティに対する逆向きの処理を記述するものです。
Compensation Handlerはエラーが発生したときに自動的に呼び出されることはありません。Compensateアクティビ
ティによって起動される必要があります。
Compensation Handler内には通常のプロセスと同様の処理を記述可能であり、パートナーリンクや変数を使用可能
です。
Compensation Handlerはロング・ランニング・プロセスでのみ使用可能です。
Page 5
IBM Software Group
Compensateアクティビティ
アクティビティ
Compensate
Compensation Handlerを呼び出す
ロング・ランニング・プロセスでの
Compensation HandlerまたはFault
Handler内でのみ定義可能
呼び出したいCompensation Handlerが定
義されているInvokeアクティビティ/Scopeを
指定
‘NONE’を指定した場合、そのScopeに含
まれる正常に処理が終了したアクティビティ
/Scopeに対応するCompensation
Handlerが順番に呼び出される
ネストされている場合は最上位の
Compensation Handlerのみ呼び出される
6
© 2005 IBM Corporation
CompensateアクティビティによってCompensation Handlerが起動されます。
Compensateアクティビティはロング・ランニング・プロセスの時にCompensation Handler、Fault Handler内でのみ定
義可能です。
呼び出したいCompensation Handlerが定義されているアクティビティまたはScopeを指定します。
特定のアクティビティ/Scopeを指定せずに’NONE’を指定した場合、Scope内で正常に処理が終了したアクティビティ
/Scopeに対応するCompensation Handlerが呼び出されます。
ネストされたScopeに対するCompensation Handlerは外側のCompensation Handlerのみが呼び出されます。
コンペンセーションの動作に関しては、FaultやScopeと密接に関係しているため、次ページ以後でFault, Scopeの説
明をした後、コンペンセーションの詳細な動作例について説明します。
Page 6
IBM Software Group
Scope
Scope
7
© 2005 IBM Corporation
この章ではScopeについて説明します。
Page 7
IBM Software Group
Scope概要
概要
変数とCorrelation Setsをカプセル化
ネストのサポート
同じ名前のVariableは異なるインスタンスになる
コンペンセーションの範囲を制限
Fault Handler、Compensation HandlerをScopeに
対して指定可能
Scope
Fault Handler
Compensation Handler Event Handler
8
© 2005 IBM Corporation
Scopeは変数やCorrelation Setsをカプセル化します。
Scopeレベルで作成した変数にはScopeの外部からはアクセスすることができません。
Scopeはネストをサポートします。同じ名前で変数を定義した場合、それらの変数は異なるインスタンスとして扱われま
す。この場合、ネストの内側からアクセスできるのはネストの内側に定義したインスタンスのみになります。名前の異なる
ネストの外側の変数にはアクセス可能です。
また、Scopeはコンペンセーションの範囲を制限します。
Fault Handler、Compensation HandlerはScopeに対して定義することができます。
Page 8
IBM Software Group
Scopeの
の設定
Isolated
nestの可否を設定
Compensable
コンペンセーションの可否を設定
9
© 2005 IBM Corporation
Scopeには次のPropertyを指定することができます。
Isolated:
チェックした場合Scopeをネストすることができません。
Compensable:
チェックをはずした場合、Scopeに対してCompensation Handlerを定義することはできません。
Page 9
IBM Software Group
Fault
Fault
10
© 2005 IBM Corporation
この章ではFaultとFault Handlerの概要について説明します。
Page 10
IBM Software Group
Faultとは
とは
FaultとはJavaにおけるException
のようなもの
ThrowアクティビティによってThrowされる
Faultをスローすることにより上位
のスコープにそのハンドリングを委
譲
Faultは名前とエラー処理のための
情報としてのメッセージを持つ
FaultはThrow、Rethrowアクティビ
ティ、もしくはInvokeアクティビティ
のoperationの結果などからスロー
される
operationの結果として返される
FaultはFault Handlerによって処
理される
11
© 2005 IBM Corporation
FaultとはJavaにおけるExceptionのようなものです。ハンドリングできない状況をFaultをスローすることによって上位に
委譲します。
Faultは名前と例外とエラー処理のためのメッセージを変数として保持することができます。
FaultはThrow、Rethrowアクティビティの他にInvokeアクティビティのOperationの結果としてスローされます。
スローされたFaultは通常Fault HandlerによってCatchされ処理されます。
Page 11
IBM Software Group
Throw
Throw
WS-BPELの基本アクティビティのひとつ
Faultを生成し、エラーを通知したい場合に使用
Faultの型、名前、変数を設定
12
© 2005 IBM Corporation
ThrowはFaultを生成し、エラーを通知したい場合に使用します。
Faultには名前と、変数を定義することができます。
変数には、あらかじめ定義されたBuilt-in Typeのほかにユーザーが定義したBusiness Objectを使用することができま
す。Faultをキャッチし、これらの情報をもとにハンドリングを行います。
Page 12
IBM Software Group
Rethrow
Rethrow
WS-BPELの基本アクティビティのひとつ
さらに上位にFaultをスローしエラー状態を通知
Fault Handlerの中でのみ使用可能
キャッチしたFaultと同じ名前、メッセージのFaultをリ
スロー
②Fault Handlerにキャッチされる
③Fault Handler内でハンドリング
①Faultがスローされる
④さらに上位にFaultをリスロー
13
© 2005 IBM Corporation
RethrowはFaultをCatchした後でまだエラー状態が継続していることを上位に通知するときに使用します。
そのため、Rethrow はFault Handlerの中でのみ使用可能です。
Rethrow を使用することでキャッチしたFaultと全く同じFaultを上位にスローします。
Rethrow を使用すると、再度Throwを使用する場合に比べて、同じFaultをスローすることが非常に容易になります。
Page 13
IBM Software Group
参考:
からのFaultの
のスロー
参考:Java Componentからの
からの
OperationにはInput, Outputの他にFaultを定義す
ることが可能
FaultとしてFaultDataというBOを定義した場合、JavaComponent側のメソッドシグネチャは
次のようになる
public String bookFlight(String input1) throws ServiceBusinessException
JavaComponent 内で次のようにBOを生成しServiceBusinessExceptionにCastしてスロー
ServiceManager serviceManager = new ServiceManager();
BOFactory bof = (BOFactory)
serviceManager.locateService("com/ibm/websphere/bo/BOFactory");
DataObject fault=bof.create("http://Compensation",“FaultData");
fault.setString(“attribute1",“XXX");
throw new ServiceBusinessException(fault);
14
© 2005 IBM Corporation
InvokeアクティビティのOperationには入出力のほかにFaultを定義することができます。
呼び出されるサービスが、例えばJavaのクラスであった場合、FaultはServiceBusinessExceptionにMapされます。
WSDLで定義したFaultの型をBOFactoryより生成し、 ServiceBusinessExceptionにCastしてスローすることで、
例外がFaultに変換されてプロセス上で扱うことができます。
Page 14
IBM Software Group
Fault Handler
x
FaultHandlers
FaultHanderはScope、Invokeアクティビ
ティに関連づけられる
Scope、Invokeアクティビティからスローさ
れたFaultをハンドリング
Faultの種類ごとにキャッチすることが可能
キャッチするFaultの種類ごとに異なるハン
ドリングを記述可能
FaultがFault Handlerに到達した場合、
Scope内の全ての処理は停止する
15
© 2005 IBM Corporation
FaultはFault HandlerによってCatchされ処理されます。
Fault HandlerはInvokeアクティビティやScopeに関連づけられ、そのInvokeアクティビティやScopeからスローされた
Faultをハンドリングします。
JavaのCatch節で例外の種類ごとにキャッチできるのと同様に、CatchしたFaultの種類ごとに異なる処理を記述可能で
す。
FaultがFault Handlerに到達するとScope内の全ての処理は停止します。
Page 15
IBM Software Group
FaultHandlerの
の設定
x
FaultHandlers
CatchとCatch Allを指定可能
Catch
CatchするFaultの型と名前、代入する変数を指定
Fault Handler内ではこの変数から追加の情報を取得することが可能
Catch All
全てのFaultをCatch
変数の指定はできない
16
© 2005 IBM Corporation
CatchとCatch Allを指定してFaultをCatchすることができます。
Catchは特定のFaultを指定することによって、Faultの種類ごとに処理を記述することができます。
Catch AllはCatchで指定されていない全てのFaultをCatchします。Catch AllでCatchした場合、代入する変数の指定
はできません。
Page 16
IBM Software Group
コンペンセーション動作例
コンペンセーション動作例
17
© 2005 IBM Corporation
この章ではコンペンセーションの実際の動作例をもとに、コンペンセーションがどのように実行されるのかを解説します。
Page 17
IBM Software Group
コンペンセーションの
コンペンセーションの動作例
特定のScope,アクティビティを指定しない場合
Scope
Scope1
NONE
Scope2
そのScope内のCompensation
Handlerが逆向きの順序で呼び出
される
Faultのスロー
18
© 2005 IBM Corporation
この例ではScope、Scope1、Scope2という3つのScopeに対してCompensation Handlerが定義されています。
ScopeとScope1/Scope2はネストされていて、ScopeにはFault Handlerが定義されています。
このケースでScopeに定義Fault Handler内のコンペンセーションのターゲットがNONEの場合の動きは次のようになり
ます。
①Scope内のアクティビティからFaultがスローされる
②Scopeに定義されたFault HandlerによってFaultがCatch される
③Compensateアクティビティによってコンペンセーションが起動
④Scope2に対するCompensation Handlerが呼び出される
⑤Scope1に対するCompensation Handlerが呼び出される
⑥コンペンセーションが終了し、Fault Handler内の処理に戻る
⑦Faultがリスローされ、上位のFault Handlerによってさらにハンドリングされる
NONEを指定してもScopeの手前にあるCompensation Handlerは起動されません。
Page 18
IBM Software Group
コンペンセーションの
コンペンセーションの動作例
特定のScope,アクティビティを指定した場合
Scope1
Scope2
Scope2
指定したCompensation Handlerの
み呼び出される
Faultのスロー
19
© 2005 IBM Corporation
Compensateで明示的にScope/アクティビティを指定した例です。
この場合はコンペンセーションのターゲットとしてScope2を指定しているため、Scope2に対するCompensation
Handlerのみが呼び出されます。
Page 19
IBM Software Group
コンペンセーションの
コンペンセーションの動作例
Scopeがネストしている場合 プロセスレベルでFaultがCatchされコンペンセーションが起動
Scope
Scopeの
のCompensation Handler
Scope1
Scope2
Scope3
Scope1の
の Compensation Handler
Scope1の後続のアクティビティでエラーが発生し、
プロセス・レベルのFault HandlerでCatchされて
Compensation Handlerが起動された場合、
Scope,Scope1のCompensation Handlerが呼
び出され、Scope2,Scop3のCompensation
Handlerは呼び出されない
後続のアクティビティーでエラー発生
20
© 2005 IBM Corporation
Scopeがネストしていて、それらに対してCompensation Handlerが定義されている例です。
この例ではScope ,Scope1がシーケンシャルに定義され、Scope1の中にはScope2,Scope3が定義されています。
Scope、Scope1,Scope2,Scope3にはそれぞれCompensation Handlerが定義されています。
上記の例で、Scope1の後続の処理でエラーが発生し、プロセス・レベルのFault HandlerでCatchされたとします。この
Fault Handlerで定義されたCompensationアクティビティ(図ではCompensationAll)の指定がNONEであった場合、
実行されるのはScopeのCompensation HandlerとScope1のCompensation Handlerであり、Scope2とScope3に定
義されたCompensation Handlerは実行されません。
つまりプロセスからみて、同一レベルのアクティビティやScopeに定義されているCompensation Handlerが起動され、
ネストされているScopeに対するCompensation Handlerは起動されません。
Page 20
IBM Software Group
参考:
参考:ActivityLevelCompensation
ActivityLevelCompensationによるコンペンセーション
IBM拡張機能
ロング・ランニング・プロセスとショート・ランニング・プロセスで使用可能
入出力の変数はDataTypeVariableは使用不可InterfaceTypeVariableで
ある必要あり
プロセス・コンテナーによって自動的に起動される
Compensateアクティビティによる明示的な指定も可能
Compensation Handlerによるコンペンセーション
BPEL準拠
ロング・ランニング・プロセスのみ
Compensateアクティビティによって明示的に起動させる必要あり
21
© 2005 IBM Corporation
ActivityLevelでのコンペンセーションはショート・ランニング・プロセスでも使用可能です。
入出力の変数としては、DataTypeVariableは使用できず、InterfaceTypeVariableのみです。
この機能はIBM拡張の機能です。従ってロング・ランニング・プロセスにおけるコンペンセーションはCompensateアク
ティビティ、Compensation Handlerを使用したBPEL準拠の方法をお勧めします。
Page 21
IBM Software Group
まとめ
コンペンセーション
プロセスの逆処理を呼び出し、整合性を保つ機能
Compensate アクティビティとCompensation Handlerによっ
て実現
Compensate アクティビティ
Compensation Handler または Fault Handler 内でのみ定義可能
Compensation Handlerを呼び出す
呼び出すターゲットを指定可能
Compensation Handler
ScopeとInvokeアクティビティに対して定義可能
コンペンセーションの動作はScopeの範囲やCompensateア
クティビティの設定により変化
22
© 2005 IBM Corporation
コンペンセーションとはプロセスでエラーが発生した場合に逆向きの処理を呼び出すことによって全体の整合性を保つ
機能で、CompensateアクティビティとCompensation Handlerによって実現されます。
Compensateアクティビティはロング・ランニング・プロセスの時にCompensation Handler、Fault Handler内でのみ定
義可能です。呼び出したいCompensation Handlerが定義されているアクティビティまたはScopeを指定します。
Compensation HandlerはScopeやInvoke アクティビティに対する逆向きの処理を記述するもので、Compensateアク
ティビティによって起動される必要があります。
コンペンセーションの動作は、コンペンセーションの範囲を制限するScopeや、Compensateアクティビティでのター
ゲットの設定により変化します。
Page 22
Fly UP