idempotentプロパティとフォルト処理に関する必知事項
composite.xml
ファイルでidempotent
デプロイメント・ディスクリプタのプロパティがfalse
に設定されている場合、パートナ・リンクの起動が失敗しても、invokeアクティビティからリカバリは開始されません。invokeアクティビティの再試行をidempotent
プロパティに依存することはお薦めいたしません。かわりに、BPELプロセス内に設計したフォルト処理(catchAllアクティビティの場合など)によって、リカバリを試みます。ベスト・プラクティスとして、かわりにフォルト・ポリシーを使用してinvokeアクティビティを再試行することをお薦めします。
表12-8は、idempotent
プロパティがfalse
に設定されていて、パートナ・リンクの起動が成功した場合と失敗した場合の動作を示しています。
表12-8 idempotentプロパティがfalseに設定されている場合のリカバリ動作
パートナ・リンクの起動 | 結果 |
---|---|
成功 |
invokeアクティビティは実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます。 |
不成功、かつBPELプロセスにcatchAllアクティビティなどのフォルト処理が含まれている |
リカバリはcatchAllアクティビティから開始され、invokeアクティビティからは開始されません。 |
不成功、かつBPELプロセスにフォルト・ポリシーが含まれている |
フォルト・ポリシーが使用されて、invokeアクティビティのリカバリが試みられます。これは、推奨アプローチです。 |
たとえば、BPELプロセスに次の設計が含まれているとします。
-
invokeアクティビティによってパートナ・リンク(この例では、
myPartnerLink
という名前です)が起動されます。 -
composite.xml
ファイルで、idempotent
デプロイメント・ディスクリプタのプロパティがfalse
に設定されています。<property name="bpel.partnerLink.myPartnerLink.idempotent">false</property>
この設定により、BPELプロセスはこのアクティビティの実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます。
このプロパティは、「パートナ・リンクの編集」ダイアログで
false
に設定することもできます。図12-29に詳細を示します。詳細は、「パートナ・リンク操作レベルでの冪等性の管理」を参照してください。
-
scopeアクティビティのcatchAllアクティビティ・エラー・ハンドラによってフォルトが捕捉され、ロールバック・フォルトがスローされます。
パートナ・リンクに対するinvokeアクティビティによる起動が失敗した場合、リカバリはcatchAllアクティビティ・エラー・ハンドラから開始され、invokeアクティビティからは開始されません。Oracle Enterprise Manager Fusion Middleware ControlのBPELプロセスのflowアクティビティで、catchAllアクティビティからのリカバリを監視できます。
これは設計によります。idempotent
プロパティの設定は、invokeアクティビティの実行の後に確認されます。実行に失敗し、例外が発生した場合、idempotent
プロパティの設定には到達しません。BPELプロセス・サービス・エンジンによって、catchAllアクティビティを開いた直後のインスタンスが保存されます。idempotent
プロパティがfalse
に設定されているため、このインスタンスを保存する必要があります。これが、リカバリがcatchAllアクティビティで再開される理由です。
かわりに、失敗したinvokeアクティビティをフォルト・ポリシーでリカバリすることをお薦めします。フォルト・ポリシーの作成の詳細は、「フォルト管理フレームワークを使用したフォルトの処理」を参照してください。
idempotent
プロパティの詳細は、「デプロイメント・ディスクリプタのプロパティの概要」を参照してください。