Comments
Description
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