(57)【要約】  ワークフローに関する非同期フォールト処理。ワークフロー内のアクティビティに関する状態オートマトンが定義される。状態オートマトンは、少なくとも実行状態、フォールト状態、およびクローズド状態を含み、アクティビティの実行持続時間を分類する。アクティビティはワーク・アイテムを含むように定義され、ワーク・アイテムに関して実行階層を含む。それぞれのワーク・アイテムは、アクティビティの一部分を実行するオペレーションを含む。それぞれのワーク・アイテムは実行状態に遷移させられる。遷移済みワーク・アイテムの組み込まれたオペレーションは実行状態で実行される。フォールト・イベントに反応して、遷移済みワーク・アイテムのうちの１つまたは複数が実行階層の関数および組み込まれたオペレーションとして識別される。フォールト・イベントは、残りの遷移済みワーク・アイテムの組み込まれたオペレーションを実行しながら、１つまたは複数の識別されたワーク・アイテムをフォールト状態に遷移させることにより、非同期に処理される。
2009532760.tif 000002
【特許請求の範囲】
【請求項１】
ワークフローのアクティビティについてフォールト・イベント（７２２）を非同期に処理する方法であって、
アクティビティ（７０２）に対して状態オートマトン（６００）を、定義することであって、少なくとも実行状態（６０４）、フォールト状態（６０８）およびクローズド状態（６１２）を含み、前記アクティビティ（７０２）の実行持続時間を分類する状態オートマトン（６００）、を定義すること、および
前記アクティビティ（７０２）を、複数のワーク・アイテム（４２２）を含むように定義することであって、前記複数のワーク・アイテム（４２２）のそれぞれは前記アクティビティ（７０２）の一部分を実行するためのオペレーションをインクルードし、前記複数のワーク・アイテム（４２２）に関して前記定義されたアクティビティ（７０２）が実行階層（５００）を有するように定義すること、および
前記ワーク・アイテム（４２２）のそれぞれを前記実行状態（６０４）に遷移させること、および
前記実行状態（６０４）に遷移されたワーク・アイテム（４２２）の前記インクルードされたオペレーションを実行すること、および
フォールト・イベント（７２２）に応答して、前記遷移されたワーク・アイテムのうちの１つまたは複数を前記実行階層（５００）の関数および前記組インクルードされたオペレーションとして識別すること、および
前記フォールト・イベント（６０８）に応答して、識別されなかった残りの遷移されたワーク・アイテムのインクルードされたオペレーションを実行しながら、前記１つまたは複数の識別されたワーク・アイテム（４２２）を前記フォールト状態（６０８）に遷移させることにより前記フォールト・イベント（７２２）を非同期に処理すること
を備えることを特徴とする方法。
【請求項２】
前記フォールト・イベント（７２２）を非同期に処理することは、前記１つまたは複数の識別されたワーク・アイテム（４２２）内でフォールト処理オペレーションを呼び出すことを備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記フォールト処理オペレーションを呼び出すことは、前記１つまたは複数の識別されたワーク・アイテムをスケジューラ・キュー（７１８）にエンキューすることを備えることを特徴とする請求項２に記載の方法。
【請求項４】
前記アクティビティ（７０２）の前記実行階層（５００）の関数として、前記１つまたは複数の識別されたワーク・アイテム（４２２）から前記残りの遷移されたワーク・アイテム（４２２）に通知（７２０）を伝搬することをさらに備え、前記通知（７２０）は、前記識別された１つまたは複数のワーク・アイテム（４２２）が前記フォールト状態（６０８）であることを示すことを特徴とする請求項１に記載の方法。
【請求項５】
前記伝搬された通知（７２０）に応答して、前記残りの遷移されたワーク・アイテム（４２２）を前記実行状態（６０４）から前記フォールト状態（６０８）へ遷移させることをさらに備えることを特徴とする請求項４に記載の方法。
【請求項６】
前記通知（７２０）の前記残りの遷移済みワーク・アイテム（４２２）への伝搬を抑止することをさらに備えることを特徴とする請求項４に記載の方法。
【請求項７】
前記１つまたは複数の識別されたワーク・アイテム（４２２）が前記フォールト状態（６０８）に遷移させられたことに応答して、ユーザにポスト・フォールト処理のためのオペレーションを提供することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項８】
１つまたは複数のコンピュータ可読媒体が、請求項１に記載の方法を実行するためのコンピュータ実行可能命令を有することを特徴とする請求項１に記載の方法。
【請求項９】
ワークフロー内でフォールト・イベント（７２２）を非同期に処理するためのシステム（４００）であって、
前記ワークフロー内のアクティビティ（４０６）のワーク・アイテムに関連付けられたデータを保管するためのストレージ（４０４）であって、前記アクティビティ（４０６）は前記ワーク・アイテム（４２２）に関する実行階層（５００）を有し、前記ワーク・アイテム（４２２）のそれぞれは前記アクティビティ（４０６）の一部分を実行するためのオペレーションをインクルードする、データを保管するためのストレージ、および
プロセッサ（４０２）であって、
前記アクティビティ（４０６）に対して、少なくとも実行状態（６０４）、フォールト状態（６０８）およびクローズド状態（６１２）を含み、前記アクティビティ（４０６）の実行持続時間を分類する状態オートマトン（６００）を定義し、
前記ワーク・アイテム（４２２）のそれぞれを前記実行状態（６０４）に遷移させ、
前記実行状態（６０４）に遷移されたワーク・アイテム（４２２）の前記インクルードされたオペレーションを実行し、
フォールト・イベント（６０８）に応答して、前記遷移されたワーク・アイテム（４２２）のうちの１つまたは複数を前記実行階層（５００）および前記インクルードされたオペレーションに基づいて識別し、および
前記フォールト・イベント（７２２）に応答して、識別されなかった前記残りの遷移されたワーク・アイテム（４２２）のインクルードされたオペレーションを実行しながら、前記１つまたは複数の識別されたワーク・アイテム（４２２）を前記フォールト状態（６０８）に遷移させることにより、前記フォールト・イベント（７２２）を非同期に処理する
ためのコンピュータ実行可能命令を実行するプロセッサ
を備えることを特徴とするシステム（４００）。
【請求項１０】
前記プロセッサ（４０２）は、前記１つまたは複数の識別されたワーク・アイテム（４２２）内でフォールト処理オペレーションを呼び出すメソッドおよび前記１つまたは複数の識別されたワーク・アイテム（４２２）をスケジューラ・キュー（７１８）にエンキューするメソッドのうちの１つまたは複数を用いて、前記フォールト・イベント（７２２）を非同期に処理するように構成されることを特徴とする請求項９に記載のシステム（４００）。
【請求項１１】
前記アクティビティ（４０６）の前記実行階層（５００）の関数として、前記１つまたは複数の識別されたワーク・アイテムから、前記残りの遷移されたワーク・アイテム（４２２）に通知（７２０）を伝搬するためのコンポーネントを、さらに備え、前記通知（７２０）は、前記識別された１つまたは複数のワーク・アイテム（４２２）が前記フォールト状態（６０８）であることを示すことを特徴とする請求項９に記載のシステム（６００）。
【請求項１２】
前記伝搬された通知（７２０）に応答して、前記残りの遷移されたワーク・アイテムを前記実行状態（６０４）から前記フォールト状態（６０８）へ遷移させるためのコンポーネントをさらに備えることを特徴とする請求項１１に記載のシステム（４００）。
【請求項１３】
前記プロセッサ（４０２）によって前記フォールトイベント（７２２）を非同期に処理する関数として、前記アクティビティに関連付けられたデータを前記ストレージ（４０４）から復元するための補正用のコンポーネントを、さらに備えることを特徴とする請求項９に記載のシステム（４００）。
【請求項１４】
前記通知（７２０）の前記残りの遷移されたワーク・アイテム（４２２）への伝搬を抑止するためのコンポーネントをさらに備えることを特徴とする請求項９に記載のシステム（４００）。
【請求項１５】
ワークフロー内でフォールト・イベント（７２２）を非同期に処理するためのコンピュータ実行可能コンポーネントを有する１つまたは複数のコンピュータ可読媒体（９００）であって、前記コンピュータ実行可能コンポーネントは、
アクティビティ（４０６）に対して状態オートマトン（６００）を定義することであって、少なくとも実行状態（６０４）、フォールト状態（６０８）およびクローズド状態（６１２）を含み、前記アクティビティ（４０６）の実行持続時間を分類する状態オートマトン（６００）、を定義するための状態マシン（９０２）、および
前記アクティビティ（４０６）を、複数のワーク・アイテム（４２２）を含むように定義するためのアクティビティ・コンポーネント（９０４）であって、前記複数のワーク・アイテム（４２２）のそれぞれは前記アクティビティ（４０６）の一部分を実行するためのオペレーションをインクルードし、前記複数のワーク・アイテム（４２２）に関して前記定義されたアクティビティ（４０６）が実行階層（５００）を有する、アクティビティ・コンポーネント（９０４）、および
前記ワーク・アイテム（４２２）のそれぞれを前記実行状態（６０４）に遷移させるためのスケジューラ・コンポーネント（９０６）、および
前記実行状態（６０４）の遷移されたワーク・アイテム（４２２）の前記インクルードされたオペレーションを実行するための実行コンポーネント（９０８）、および
前記フォールト・イベント（７２２）に応答して、前記遷移されたワーク・アイテムのうちの１つまたは複数を前記実行階層（５００）および前記インクルードされたオペレーションに基づいて識別するための識別コンポーネント（９１０）、および
前記フォールト・イベント（７２２）に応答して前記識別コンポーネント（９１０）によって識別されなかった前記残りの遷移されたワーク・アイテム（４２２）の前記インクルードされたオペレーションを実行しながら、前記１つまたは複数の識別されたワーク・アイテム（４２２）内でフォールト処理オペレーションを呼び出して前記１つまたは複数の識別されたワーク・アイテム（４２２）を前記フォールト状態（６０８）に遷移させることにより、前記フォールト・イベント（７２２）を非同期に処理するためのフォールト・ハンドラ（９１２）
を備えることを特徴とするコンピュータ可読媒体（９００）。
【請求項１６】
前記フォールト・ハンドラ（９１２）は、前記１つまたは複数の識別されたワーク・アイテム（４２２）を前記フォールト状態（６０８）に遷移させるために前記１つまたは複数の識別されたワーク・アイテムをスケジューラ・キュー（７１８）にエンキューすることを特徴とする請求項１５に記載のコンピュータ可読媒体（９００）。
【請求項１７】
前記アクティビティ（４０６）の実行階層（５００）の関数として、前記１つまたは複数の識別されたワーク・アイテム（４２２）から前記残りの遷移されたワーク・アイテム（４２２）に通知（７２０）を送信するためのフォールト伝搬コンポーネント（９１４）をさらに備え、前記通知（７２０）は、前記識別された１つまたは複数のワーク・アイテム（４２２）が前記フォールト状態（６０８）であることを示すことを特徴とする請求項１５に記載のコンピュータ可読媒体（９００）。
【請求項１８】
前記送信された通知（７２０）に応答して、前記残りの遷移されたワーク・アイテムを前記実行状態（６０４）から前記フォールト状態（６０８）へ遷移させるための遷移コンポーネント（９１６）をさらに備えることを特徴とする請求項１７に記載のコンピュータ可読媒体（９００）。
【請求項１９】
前記フォールトイベント（６０８）を非同期に処理する関数として、前記アクティビティ（４０６）に関連付けられたデータを復元するための補正コンポーネント（９１８）を、さらに備えることを特徴とする請求項１５に記載のコンピュータ可読媒体（９００）。
【請求項２０】
前記通知（７２０）の前記残りの遷移されたワーク・アイテムへの送信を抑止するための禁止コンポーネント（９２０）をさらに備えることを特徴とする請求項１５に記載のコンピュータ可読媒体（９００）。
【発明の詳細な説明】
【背景技術】
【０００１】
プロセス指向型（process-oriented）またはプロセス中心型（process-centric）のプログラムは、実世界の出来事をモデル化する複雑な命令を処理できるまでに発展した。プロセス中心型のプログラムは、実世界のプロセスをミラーし、実世界のエンティティ間の相互作用をミラーする。既存のシステムは、ビジネス問題をモデル化することによりビジネス問題を高水準のワークフロー（workflows）にマッピングしようとする。しかし、実世界のワークフローは、（ａ）実行およびモデル化の複雑さ、（ｂ）設計時のフローの構造に関する知識、（ｃ）静的に定義されるのか、またはアドホック／動的なのか、（ｄ）ライフサイクルにおけるさまざまな時点でのフローのオーサリングおよび編集の容易さ、（ｅ）ビジネス・ロジックとコア・ワークフロー・プロセスとの弱いまたは強い関連など、さまざまな特質が異なる。既存のモデルは、これらすべての要因に対応することはできない。
【０００２】
さらに、ほとんどの既存のワークフロー・モデルが、言語ベースのアプローチ（例えば、ＢＰＥＬ４ＷＳ、ＸＬＡＮＧ／Ｓ、およびＷＳＦＬ）またはアプリケーション・ベースのアプローチに基づいている。言語ベースのアプローチは、定義されたコンストラクト（construct：構造体）のクローズド集合を有する高水準のワークフロー言語であり、これにより、ユーザ／プログラマに対するワークフロー・プロセスのモデル化が容易になっている。ワークフロー言語は、言語構文のクローズド集合に対するすべての意味情報を備え、これにより、ユーザはワークフロー・モデルを構築することができる。しかし、言語は、開発者側で拡張することはできず、ワークフロー・モデルを構成するプリミティブのクローズド集合となっている。その言語は、ワークフロー・システムのベンダによって出荷される言語コンパイラに結び付けられている。ワークフロー・システム製品のベンダのみが、将来の製品バージョンにおいて新しい言語構文の集合を加えて言語を拡張することによりモデルを拡張することができる。このため、多くの場合、言語に関連付けられたコンパイラのアップグレードが必要となる。さらに、その言語は、通常、他のプログラムで容易かつ効率よく使用できる機能またはオペレーションを宣言的に公開せず、または定義しない。
【０００３】
アプリケーション・ベースのアプローチは、アプリケーション内に分野固有の問題を解決するためのワークフロー機能を備えるアプリケーションである。これらのアプリケーションは、本当に拡張可能であるとはいえず、またプログラム可能なモデルも存在しない。
【０００４】
さらに、既存のアプローチでは、複雑さ、先見性、動的ワークフロー、オーサリングの容易さ、ならびにビジネス・ロジックおよびコア・ワークフローとの関連度の強さ、についての課題が適切に扱えない。さまざまなクラスのワークフローをモデル化するビジュアル・ワークフロー・デザイナ（visual workflow designer）を構築するのに利用できる、拡張可能、カスタマイズ可能、および再ホスト可能な（re-hostable）ワークフロー・デザイナ・フレームワークが存在しない。既存のシステムでは、ユーザが、グラフィックスを利用してワークフロー・プロセスの設計を行い、且つ、開発者が選択したプログラミング言語によるビジネス・ロジックを関連付けることができるアプリケーション短期開発（ＲＡＤ）スタイルのワークフロー設計の体験が欠けている。
【０００５】
また、ワークフロー・プロセスでは、ワークフロー・プロセス・モデルの複数のステップにまたがる、分野横断的に直交し、かつ複雑に入り組んだ関係（concerns）を取り扱う。例えば、ワークフロー・プロセスの一部が長い実行トランザクションに関係するように設計され、一方では、同じプロセスの他の部分は、並列実行用に、または共用リソースにアクセスするように、設計される。設計上の欠点に起因して、既存のシステムでは、ユーザが、アクティビティを同期させて実行するように、またはインターリーブして実行するように設計できる実行スレッドのインターリーブを提供することができない。同じワークフロー・プロセスのさらに他の部分では、追跡を必要とし、一方では、他の部分ではビジネスまたはアプリケーション・レベルの例外を扱う。したがって、特定のビヘイビアをワークフロー・プロセスの１つまたは複数の部分に適用するニーズが存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
いくつかのワークフロー・モデル化のアプローチは、すべての例外および人間の介入を含めて、ビジネス・プロセス全体の完全なフロー・ベースの記述を必要とするので実用的でない。これらのアプローチのいくつかは、例外が発生したときの追加機能を用意しているが、他のアプローチでは、ビジネス・プロセスをモデル化するフロー・ベースのアプローチの代わりに、制約ベースのアプローチを、排他的に、採用している。既存システムでは、フロー・ベースまたは制約ベースのアプローチのいずれかを実装している。このようなシステムは、ビジネスの数多くの一般的状況をモデル化するのにあまりにも柔軟性がなさ過ぎる。また、これらのシステムには、例外またはキャンセルを非同期で扱う機能を欠いている。
【課題を解決するための手段】
【０００７】
本発明の実施形態では、ワークフロー中のアクティビティ（activity）の実行存続時間を定義する状態オートマトンにフォールト状態（faulting state）を含むことにより、非同期のフォールトまたは例外の処理を可能にしている。このフォールト状態を含むことにより、本発明の態様では、開発者またはプログラムが、例外またはフォールト処理用のプログラムを宣言的に設計でき、この結果、プログラムまたはアクティビティの一部分はフォールト状態のフォールト処理に入ることができる、一方、プログラムまたはアクティビティの他の部分は、その例外またはフォールト・イベントによって影響されないようにすることができる。
【０００８】
本発明の別の実施形態では、フォールト処理の通知を伝搬または送信することができる。さらに別の実施形態では、通知のそのような伝搬または送信は、抑制されたりまたは禁止されたりすることができる。加えて、さらに別の実施形態では、ポスト・フォールト・オペレーションまたはポスト例外オペレーションの対応に関するユーザからの入力に応答することができる。
【０００９】
上述の概要は、以下の「発明を実施するための最良の形態」でさらに説明される概念の一部を簡略な形で紹介するために供されている提供されている。この概要は、特許請求の範囲に記載された主題についての重要な機能または本質的な機能を特定することは意図されておらず、また特許請求の範囲に記載された主題の範囲を決定する際に参考にされることも意図されていない。
【００１０】
他の特徴（features）は、一部は明白であり、また一部は以下で明示される。
【００１１】
付録Ａは、本発明の実施形態による、例外を宣言的に発生させる（declaratively raising of an exception）例示的な実施態様を示している。
【００１２】
対応する参照文字は、図面全体にわたって対応する部分を表す。
【発明を実施するための最良の形態】
【００１３】
まず図１を参照すると、ブロック図で、プロセス中心型のアクティビティのためのプログラム、例えば、ワークフロー、を設計するための既存のプログラミング・パラダイムが示されている。例えば、この図は、被管理実行環境（managed execution environment）のレベルが最高位であり、処理装置が最下位である３レベルを有する仮想化モデルの既存プログラム・パラダイムを示している。このプログラミング設計システムでは、被管理実行環境のレベルであっても、プログラム、特にワークフロー・プロセス、を扱うプロセス中心型プログラムは、ワークフロー内のプロセス間の複雑な相互作用に対応する機能および効率性に欠けている。
【００１４】
当業者には、ソフトウェアまたはアプリケーション・プログラムの設計には特定の制約が関連付けられていることが知られている。この例では、オペレーティング・システム・ソフトウェア・プログラム１０４を書くにあたって、そのプログラミング・コードまたはルーチンは、コンピューティング・アーキテクチャのタイプ（例えば、ＩＢＭ（登録商標）互換、ＡＰＰＬＥ（登録商標）コンピュータ、または他のシステム）に固有な、処理装置１０２のタイプまたは構成、または他の制約に依存する。さらに、プログラム言語は、典型的には、スタック、ヒープ、スレッドベース、またはオペレーティング・システム１０４が正しく機能するための他のハードウェア固有の構造、などのデータ構造を正確に明示し、利用する必要がある。
【００１５】
複雑なワークフロー・プロセスを扱う場合、既存のアプリケーションは、あるプログラミング言語で書かれたプログラムが別のプログラミング言語で書かれた他のプログラム内の関数を呼び出すことができる被管理実行環境１０６（例えば、プログラムが関数または共通のオブジェクト指向のクラスを共用できるランタイム環境）の概念を使用する。そのような実行環境では、異なるプログラミング言語の形のプログラムは、中間言語にコンパイルされ、この結果、被管理実行環境１０６は、パラメータ、引数、またはスキーマもしくは関数を個々のプログラムに公開できるようになっており、それによりプログラムが、相互に対話することができる。
【００１６】
この実行環境１０６はプログラム間に共通の通信環境を作成するが、実行環境１０６はさまざまな厳格な要件を有しており、これらは、プロセス中心型プログラムの複雑さおよび機能を扱うのに適さない可能性がある。例えば、実行環境１０６では、プログラムは特定のファイル・フォーマットに準拠する必要がある。また、実行環境１０６では、プログラム内の関数またはオペレーションが固定の関数セット、または実行環境１０６によって定義された関数のクラスを使用する必要がある。
【００１７】
本発明の実施形態は、既存のプログラミングモデルの欠点を克服するために、図２の拡張可能な土台（foundation）またはフレームワーク２０２の上に構築される。任意のプログラミング言語で書かれ、任意のファイル・フォーマットで作成されたプログラムを許容することによって、本発明の態様は、プログラム開発者が、特定の関数を用いてプログラムを、その機能性および仕様を犠牲にすることなく、設計することを可能にする。ワークフローのタスクまたはプロセスなどのアクティビティを、ワークフローのフレームワークで実行されるベースクラスとして、定義することにより、開発者は、分野固有（例えば、医療産業、金融産業などにおけるプログラムなど、特定の実行環境）のオペレーション・コード（これ以降は「ｏｐコード」）を、既存の実行環境における、固定した、ハード・コーディングされた、柔軟性のない、あらかじめ仕組まれた関数セット（fixed set of functions）、またはアクティビティ・クラスに固執することなく、容易かつ効率よく構築できる。さらに、本発明の態様を組み入れたワークフローの土台は、任意の既存のフレームワーク（例えば、被管理実行環境、オペレーティング・システム環境、またはハードウェア処理装置レベル）の最上部に階層化された継続ベースのランタイムである。
【００１８】
本発明の態様では、そのワークフロー内のアクティビティがそのワークフロー設計のその表現から構築できる場合に限り、ワークフローの設計を任意の様式または表現（例えば、フローチャート、図、番号付き説明など）で表記できるようにすることによって、アクティビティを特定のファイル・フォーマットで定義しなければならないという制約を解除する。
【００１９】
さらに、ワークフローのフレームワークまたは土台は、より下位レベル（例えば、ＯＳ）から、または他のフォーマット（例えば、中間言語）で書かれた例外発生関数から、生じたフォールトまたは例外を扱うことができる。
【００２０】
図３は、本発明の実施形態によるワークフロー３００の簡単な図を示している。例えば、ワークフロー３００は、買い注文を処理するためのワークフローと考えることができ、この買い注文ワークフロー３００は、買い注文の受信、顧客への確認の送信、管理者による買い注文の承認などのプロセスまたはアクティビティを含むことができる。
【００２１】
ワークフロー３００は、開始ポイント３０２から開始できる。例えば、買い注文ワークフローの開始ポイント３０２は、顧客から注文を受信することができる。ワークフロー３００は、条件ステートメント３０４（「ＩＦステートメント」、「ＷＨＩＬＥステートメント」など）を含むことも可能で、その条件ステートメントは、さらに条件ステートメント３０６および３０８に細分割されることができる。ワークフロー３００は、並列構造３１０を含むこともでき、並列構造３１０は、１つまたは複数のシーケンスまたはアクティビティ３１２をさらに含む。例えば、並列構造３１０は、在庫の検査および利用できる運送業者の更新などのアクティビティを含み、これらは、並列に処理される。示された実施例では、「Ｅメールを送信する」および「承認を取得する」などのアクティビティは、並列に処理されることができる。「アクティビティをここにドロップする」３１６で、ユーザはワークフロー３００にさらにアクティビティを追加または補足することができる。ワークフロー３００を完了すると、そのプロセスまたはアクティビティは、完了ステップまたは完了ポイント３１４で終了する。
【００２２】
一実施形態では、アクティビティは、ツリー構造（図５を参照）５００または他の実行シーケンスの中で階層的に配置することができる。例えば、１つのアクティビティが、それに関連付けられた２つ以上のワーク・アイテムを含む複合アクティビティであることができる。別の実施形態では、アクティビティのコレクションが複合アクティビティであることができる。アクティビティのメソッドまたはオペレーションは、２つの子またはリーフ・ノード５０４および５０６を有するルート・ノード５０２にあることができる。子ノード５０４および５０６のアクティビティのメソッドまたはオペレーション（例えば、それぞれ、ワーク・アイテム１およびワーク・アイテム２）は、階層構造に従って実行されることができる。さらに、子ノード５０４および５０６は、実行すべきそれぞれのワーク・アイテムを有する他の子ノードを含むことができる。
【００２３】
別の実施形態では、アクティビティには、単純アクティビティ、コンテナ・アクティビティ、およびルート・アクティビティのうちの１つまたは複数の種類がある。この実施形態では、そのモデルには、１つのルート・アクティビティがあり、ルート・アクティビティの内側には、ゼロまたは幾つかの単純アクティビティまたはコンテナ・アクティビティがある。コンテナ・アクティビティは、単純またはコンテナ・アクティビティを含むことができる。ワークフロー・プロセス全体は、より高位のワークフロー・プロセスを構築するアクティビティとして使用することができる。さらに、アクティビティは、中断可能または中断不可にできる。中断不可複合アクティビティは、中断可能アクティビティを含まない。中断不可アクティビティには、アクティビティにブロックさせるサービスはない。
【００２４】
さらに、アクティビティおよびそのアクティビティに含まれるワーク・アイテムを実行するとき、ワークフロー・フレームワークまたは実行コンテクストもしくは実行環境は、それぞれのワーク・アイテムの範囲または境界を定義する。この範囲または境界は、例えば、そのワーク・アイテムによってアクセスされる共用データまたは共用リソース、関連した特性、ハンドラ、制約、および自律エージェント（autonomous agent）間の対話、などの情報を（例えば、データ、メタデータなどの形で）含み、公開する。また、各アクティビティは、任意のプログラミング言語で書かれたユーザ・コードによって構成できる。例えば、このユーザ・コードは、特定の分野または実行環境で書かれたビジネス・ロジックもしくはアプリケーション・ロジックまたはルールを表すことができる。それぞれのアクティビティは、ユーザ・コードでの実行へのインターセプト前フック（pre-interception hook）およびインターセプト後フック（post-interception hook）をサポートできる。それぞれのアクティビティは、関連付けられたランタイム実行意味論およびビヘイビア（例えば、状態管理、トランザクション、イベント処理、および例外処理）を有する。アクティビティは、他のアクティビティと状態またはリソースを共有できる。さらにアクティビティは、プリミティブなアクティビティであってもよいし、または複合アクティビティにグループ化することもできる。プリミティブつまり基本アクティビティは、下位構造（例えば、子アクティビティ）を持たず、したがって、ツリー構造内のリーフ・ノードである。複合アクティビティは、下位構造を含む（例えば、複合アクティビティは、１つまたは複数の子アクティビティの親である）。
【００２５】
図４は、本発明の実施形態によるワークフロー・アクティビティを処理するためのシステム４００を示した図である。システム４００はプロセッサ４０２を備えており、プロセッサ４０２は、１つの処理装置または複数の処理装置の集合でとすることができる。システム４００は、プロセッサ４０２によってアクセス可能なデータを保管するためのストレージまたはメモリ・エリア４０４も備えている。一実施形態では、システム４００は、１つまたは複数のプロセッサまたは処理装置を有するコンピュータ（例えば、プロセッサ４０２）、およびシステム・メモリを含めた各種システム・コンポーネントをプロセッサ４０２に結合するために他のコンポーネントを有するシステム・メモリ（メモリエリア４０４）を備えることができる。
【００２６】
一実施例では、メモリ・エリア４０４はコンピュータ可読媒体を備えることができ、その媒体は、コンピュータ可読命令、データ構造、プログラム・モジュールまたは他のデータなどの情報を格納するための方法または技術で実装された、揮発性、不揮発性、取り外し可能、または取り外し不可の媒体とすることができる。例えば、コンピュータ・ストレージ媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気ストレージ・デバイス、または所望の情報を格納するために使用でき、システム４００によりアクセスできる他の媒体がある。メモリ４０４は、コンピュータ可読命令、データ構造、プログラム・モジュール、または搬送波もしくは他のトランスポート・メカニズムなどの変調データ信号の形の他のデータ、を具現する通信媒体および任意の情報配信媒体を備えることもできる。当業者は、信号内の情報を符号化するなどの方法により特性のうちの１つまたは複数が設定または変更される変調データ信号を熟知している。有線ネットワークまたは直接配線接続などの有線媒体、ならびに音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体は、通信媒体の例である。上記のいずれの組合せもコンピュータ可読媒体の範囲に含まれる。
【００２７】
例えば、メモリ・エリア４０４は、ワークフロー（例えば、ワークフロー３００）での処理用の複数のアクティビティ４０６を格納する。複数のアクティビティ４０６のうちのそれぞれが１つまたは複数のワーク・アイテムを含み、それらのワーク・アイテムは、ツリー構造（図５を参照）などの階層構造内で編成できる。複数のアクティビティ４０６を処理するとき、プロセッサ４０２は、アクティビティの編成済みの集合をセットアップするように構成されているスケジューラ４０８をアクセスまたは実行する。
【００２８】
例えば、プロセッサ４０２は、コンポーネント、つまりスケジューラ４０８などのコンピュータ実行可能命令の集合を介して複数のアクティビティ４０６内のワーク・アイテムにアクセスし、ワーク・アイテム群４２２をキュー４１０にエンキューする、つまり保管する。ディスパッチャ４１２は、プロセッサ４０２によってアクセス可能であり、ワーク・アイテム群４２２を実行用にディスパッチする。例えば、ワーク・アイテム４２２−１は、アクティビティ・メソッドまたはアクティビティ・オペレーション４２４、ルーチン、または「ユーザからの入力を要求する」機能を実行するためのコードの集合を含んでいる。１つまたは複数の他のアクティビティ・メソッド、アクティビティ・オペレーション、ルーチン、またはコードを、本発明の範囲から逸脱することなく、それぞれのワーク・アイテム４２２に含むことができる。
【００２９】
ワーク・アイテム群４２２がディスパッチャ４１２によってディスパッチされると、プロセッサ４０２は、４１４でワーク・アイテム群４２２に入っているそれぞれのメソッド４２４を実行する。ワーク・アイテム４２２−１の例では、プロセッサ４０２は、要求された情報またはデータを入力するように、ユーザ・インターフェース（ＵＩ）を介してユーザに要求することができる。別の実施形態では、プロセッサ４０２は、ユーザからの入力を要求するために外部データソースに接続、つまりアクセスすることができる。アクティビティ・メソッドまたはアクティビティ・オペレーション４２４が完了すると、プロセッサ４０２は、４１６でワーク・アイテム群４２２の実行を終了する。一実施形態では、プロセッサ４０２は、４１８で、データ記憶装置４２０へのワーク・アイテム群の実行状態を非活性化する（passivate）。
【００３０】
別の実施形態では、プロセッサ４０２は、図６で示されたオートマトンなどの状態オートマトンによりワーク・アイテム群４２２を実行する。図６は、本発明の実施形態によるアクティビティに関連付けられたワーク・アイテム群の処理状態を記載した例示的な状態オートマトン６００を示した図である。一実施例では、この状態オートマトン６００は、アクティビティの実行持続時間（execution lifetime）を定義する。一実施例では、状態オートマトン６００は、（図４に示されているとおり）初期化（initialized）状態、実行（executing）状態、およびクローズド（closed）状態を含むことができる。別の実施形態では、状態オートマトン６００は、初期化状態６０２、実行状態６０４、キャンセル（canceling）状態６０６、フォールト（faulting）状態６０８、補正（compensating）状態６１０、およびクローズド状態６１２を含む。
【００３１】
例えば、状態オートマトン６００は、ワークフロー・アクティビティ内のワーク・アイテム（例えば、ワーク・アイテム群４２２）の実行の処理フローを記載する。図４に示されているワーク・アイテム４２２−１は、キュー４１０にエンキューされると、まず初期化される。ワーク・アイテム４２２−１は、実行状態（例えば、図６の実行状態６０４）で実行される前に、キュー４１０からディスパッチャ４１２にデキュー、つまり移動させられる。ワーク・アイテム４２２−１の実行中のパラメータまたは条件に応じて、ワーク・アイテム４２２−１はキャンセル状態６０６（例えば、図４のキャンセル状態４２６）またはフォールト状態６０８に進むことができる。一実施形態では、ワーク・アイテム４２２−１は、キャンセル状態６０６からフォールト状態６０８に進むことができる。別の実施形態では、補正状態６１０が、フォールトまたは例外が発生したときに実行すべきオペレーションまたは関数の集合を記載する。
【００３２】
例えば、ワーク・アイテム（例えば、ワーク・アイテム４２２−１）の実行中に、関数のパラメータが欠落しているなどの、例外が発生すると仮定する。システム４００は、ワーク・アイテム４２２−１をフォールト状態６０８に遷移させる。そのようにすると、システム４００は、補正状態６１０でガーベッジ・コレクション（例えば、キャッシュまたはメモリから、前に実行されたオペレーションの一部を除去すること、パラメータ値を初期化（reset）すること、など）オペレーションも実行してから、ワーク・アイテム４２２−１をクローズド状態６１２に遷移させる。例えば、補正状態６１０内のワーク・アイテムは、他のワーク・アイテムを実行するために前に使用されたデータを復元するなどのオペレーションをトリガできる。クローズド状態６１２は、アクティビティ（例えば、図５のアクティビティ５００）の実行が完了したこと表す。
【００３３】
一実施形態では、状態オートマトン６００は複合アクティビティ内の複数のワーク・アイテム間の関係（relationship）を確立する。例えば、その関係ルールの１つは、クローズド状態６１２に遷移する前、アクティビティ・ツリーのルート・ノード内のメソッドもしくはワーク・アイテム、その子ノード内のすべてのワーク・アイテムは、初期化状態６０２またはクローズド状態６１２でなければならないということを含むことができる。別のルールは、アクティビティ・ツリーの子ノード内のワーク・アイテムを実行状態６０４に遷移させるには、ルート・ノードのワーク・アイテムはすでに実行状態６０４でなければならないことを要求する。
【００３４】
別の実施形態では、本発明の実施形態の範囲から逸脱することなく、状態オートマトン６００内で１つまたは複数の追加状態を定義することができる。
【００３５】
次に図７Ａから７Ｅを参照すると、これらのブロック図は、本発明の実施形態によるワークフロー内のフォールト・イベントの非同期処理を示している。単純化のみが目的であって、限定するわけではないが、図７Ａは、複合アクティビティ７０２を示し、これは、ツリー構造に編成された３つの子ワーク・アイテム、すなわちトランザクション＿１  ７０４、トランザクション＿２  ７０６およびトランザクション＿３  ７０８を含んでいる。図に示されているように、ルート・アクティビティ７０２は、「WRITE TEXT ON DISPLAY（ディスプレイ上にテキストを書く）」メソッドを含んでいる。上記のワーク・アイテムのアクティビティのメソッドまたはオペレーションは、以下も含む。
【００３６】
【表１】
2009532760.tif 000003
【００３７】
図７Ｂにおいて、トランザクション＿１  ７０４、トランザクション＿２  ７０６およびトランザクション＿３  ７０８は、実行状態７１０に遷移している。図に示されているように、トランザクション＿１  ７０４は、ユーザ４３０に対してディスプレイ（例えば、ユーザ・インターフェース４２８）上でテキスト（「１  ａｎｄ  ２」）を挿入することにより、インクルードされたオペレーション（included operations）を実行する。
【００３８】
実行状態７１０のときに、フォールト・イベント７２２または例外が発生した。このフォールト・イベント７２２は、データの欠落、実行フォールト、データ記憶装置への不正確なアクセス、などに対する警告の通知を含むことができる。この実施例では、トランザクション＿１  ７０４は、フォールト・イベント７２２を処理するためのｈａｎｄｌｅＦａｕｌｔ（）関数７１６を含む。一実施形態では、このｈａｎｄｌｅＦａｕｌｔ関数７１６は、オペレーティング・システムまたは被管理実行環境などの他の実行環境でのフォールト処理のための「ｃａｔｃｈ」関数に類似している。この結果、ｈａｎｄｌｅＦａｕｌｔ関数７１６または「ｃａｔｃｈ」ハンドラへのフォールトの伝搬またはディスパッチは非同期である。
【００３９】
フォールト・イベント７２２が発生すると、トランザクション＿１  ７０４はフォールト状態７１２に遷移し、次に、トランザクション＿１  ７０４は、クローズド状態７１４に遷移させられる。一実施形態では、フォールト・イベント７２２に反応して、ｈａｎｄｌｅＦａｕｌｔ（）関数７１６が呼び出され、処理のためにキュー（図示せず）に置かれる。
【００４０】
例外の伝搬および処理用に洗練されたこのプロトコル（well-defined protocol）により、代替実施形態は複数の例外を処理することができ、複数の例外は、例外の伝搬が通常のプログラム実行の間にインターリーブされるようにスケジュールできる。
【００４１】
図７Ｃにおいて、トランザクション＿２  ７０６およびトランザクション７０８は、実行状態７１０になっている。トランザクション＿１  ７０４の実行と同様に、トランザクション＿２  ７０６は、インクルードされたオペレーションを実行する。この実施例では、ディスプレイ上にテキスト（「３  ａｎｄ  ４」）が挿入される。さらに、トランザクション＿２  ７０６は、フォールト・イベント７２２を処理するために、トランザクション＿１  ７０４のｈａｎｄｌｅＦａｕｌｔ（）関数７１６と同様のｈａｎｄｌｅＦａｕｌｔ（）関数を含む。
【００４２】
代替実施形態では、ｈａｎｄｌｅＦａｕｌｔ（）関数７１６は、実行階層またはアクティビティの実行階層構造内の関数として、実行状態７１０の残りのワーク・アイテムに通知７２０を伝搬または送信する。例えば、トランザクション＿１  ７０４がフォールト状態７１２になっているとき、ｈａｎｄｌｅＦａｕｌｔ（）関数７１６は通知７２０（例えば、「ｔｈｒｏｗ」関数）を伝搬することができて、それにより、親アクティビティ＿１  ７０２のｈａｎｄｌｅＦａｕｌｔ（）関数が通知７２０を、それがフォールト・イベントまたは例外であるかのように、処理できるようになる。一実施形態では、子アクティビティは、ｔｈｒｏｗ関数のターゲットをアクティビティ・ツリー内の親に限定することができる。別の実施形態では、例外処理は、アクティビティのツリー状の構造に堅く関連付けられる、あるいは結び付けられることができる。
【００４３】
フォールト・イベントを処理するためにフォールト状態７１２を確立することにより、本発明の実施形態は非同期のフォールト処理または例外処理を可能にし、実行状態７１０の残りのワーク・アイテムまたはアクティビティは引き続いて実行される。さらに、別の代替実施形態は、フォールト・イベントの処理のスケジューリングを可能にする。例えば、通知７２０に応答して、トランザクション＿２  ７０６は、フォールト状態７１２に遷移させられる前にスケジューラ・キュー７１８に置くことができる。別の実施形態では、実行状態７１０の他のワーク・アイテムまたはアクティビティが引き続いて実行されるように、通知７２０は抑止できる。一実施形態では、トランザクション＿１  ７０４は、通知７２０を伝搬または送信した後で、クローズド状態７１４に遷移する。さらに別の実施形態では、フォールトの伝搬および処理は、非活性化（passivation）サイクルをまたいで持続する。
【００４４】
図７Ｄにおいて、トランザクション＿３  ７０８は、実行状態７１０で実行中である。例えば、トランザクション＿３  ７０８のインクルードされたオペレーションは、テキスト（「５  ａｎｄ  ６」）を挿入し、ディスプレイ上にテキスト（「ＥＮＤ」）を挿入する前に１８０秒休止する。しかし、インクルードされたオペレーションは、フォールト処理のための関数を組み込んでいない。その結果、インクルードされたオペレーションが完了すると、図７Ｅにおいて、トランザクション＿３  ７０８は、クローズド状態７１４に遷移させられる。さらに、トランザクション＿２  ７０６も、スケジューラ・キュー７１８からフォールト状態７１２にデキューされた後、クローズド状態７１４に遷移する。
【００４５】
限定ではないが、付録Ａは、本発明の実施形態による、例外を宣言的に発生させる例示的な実施態様を示している。一実施形態では、プログラマまたは開発者は、特定のタイプのフォールト・イベントまたは例外を処理するためのフォールト・ハンドラを設計することができる。さらに別の実施形態では、ワークフロー内のワーク・アイテムまたはアクティビティが関数を含まないことがあったり、またはフォールト・イベントを処理できなかったりする。この実施形態では、ワークフロー実行環境はフォールト・イベントを処理する。さらに別の実施形態では、図４のユーザ４３０へのＵＩ  ４２８を介してユーザに１つまたは複数のフォールト処理後オペレーションが提供できる。
【００４６】
図７Ａから７Ｅは、実行状態のスナップ・ショットまたは状態オートマトンの一部分を順次に示しているが（例えば、トランザクションは順次に実行される）、実行状態のワーク・アイテムは、本発明の範囲から逸脱することなく、同時にまたは実質的に同時に処理できる。
【００４７】
図８は、本発明の実施形態によるワークフローのアクティビティに関するフォールト・イベントを非同期に処理する方法を示したフロー図である。例えば、図８に示された方法は、図９に示されたようなコンピュータ可読媒体に記憶されるコンピュータ実行可能命令として表すことができる。例えば、状態マシン９０２は、８０２で、アクティビティに対して状態オートマトン（例えば、状態オートマトン６００）を定義し、この状態オートマトンは、少なくとも実行状態、フォールト状態、およびクローズド状態を含んでいる。アクティビティ・コンポーネント９０４は、８０４で、複数のワーク・アイテムを含むようにアクティビティを定義する。定義されたアクティビティは、その複数のワーク・アイテムに関して実行階層または実行シーケンス（例えば、ツリー構造）を有する。それぞれのワーク・アイテムは、アクティビティの一部分を実行するためのオペレーションを含む。
【００４８】
スケジューラ・コンポーネント９０６は、８０６で、それぞれのワーク・アイテムを実行状態に遷移させる。実行コンポーネント９０８は、８０８で、実行状態の遷移済されたワーク・アイテムのインクルードされたオペレーションを実行する。８１０で、識別コンポーネント９１０は、フォールト・イベントに応答して、遷移されたワーク・アイテムのうちの１つまたは複数を、実行階層およびインクルードされたオペレーションに基づいて識別する。８１２で、フォールト・ハンドラ９１２は、フォールト・イベントに反応して識別コンポーネントによって識別されなかった残りの遷移されたワーク・アイテムのインクルードされたオペレーションを実行しながら、１つまたは複数の識別されたワーク・アイテム内のフォールト処理オペレーション（例えば、ｈａｎｄｌｅＦａｕｌｔ（）関数７１６）を呼び出して、１つまたは複数の識別されたワーク・アイテムをフォールト状態に遷移させることにより、フォールト・イベントを非同期に処理する。一実施形態では、フォールト・ハンドラ９１２は、１つまたは複数の識別されたワーク・アイテムをフォールト状態に遷移させることにより、フォールト・イベントを非同期に処理する。さらに別の実施形態では、フォールト・ハンドラ９１２は、１つまたは複数の識別されたワーク・アイテムをスケジューラ・キュー（例えば、スケジューラ・キュー７１８）にエンキューすることにより、フォールト・イベントを非同期に処理する。
【００４９】
代替実施形態では、コンピュータ可読媒体９００は、１つまたは複数の識別されたワーク・アイテムから残りの遷移済みワーク・アイテムに通知を送信するためのフォールト伝搬コンポーネント９１４を、アクティビティの実行階層の関数としてさらに含む。通知７２０は、識別された１つまたは複数のワーク・アイテムがフォールト状態であることを示している。さらに別の実施形態では、コンピュータ可読媒体９００は、送信された通知に反応して、残りの遷移済みワーク・アイテムを実行状態からフォールト状態へ遷移させるための遷移コンポーネント９１６をさらに含む。
【００５０】
コンピュータ可読媒体は、対象のアクティビティに関連付けられたデータを復元または補正するための補正コンポーネント９１８を、さらに別の代替実施形態でフォールト・イベントを非同期に処理する関数としてさらに含む。この通知を残りの遷移されたワーク・アイテムに送信することを抑止するための禁止コンポーネントがコンピュータ可読媒体９００の一部であってもよい。
【００５１】
図４で示されたシステム４００などの例示的なコンピューティング・システム環境に関連付けて説明されたが、本発明の実施形態は、多くの他の汎用または専用のコンピューティング・システムの環境もしくは構成で稼働可能である。このコンピューティング・システム環境は、本発明の態様の使い方または機能の範囲に関して何らかの限定を示唆することは意図されていない。さらに、このコンピューティング・システム環境は、例示の動作環境で示されたコンポーネントのいずれの１つまたはその組合せに関して何らかの依存関係または要件があると解釈すべきではない。本発明の態様での使用に適する可能性がある、よく知られているコンピューティング・システム、環境、および／または構成は、パーソナル・コンピュータ、サーバ・コンピュータ、ハンドヘルドまたはラップトップ・デバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサ・ベースのシステム、セットトップボックス、プログラム可能消費者電子機器、携帯電話、ネットワークＰＣ、ミニ・コンピュータ、メインフレーム・コンピュータ、上記のシステムまたはデバイスのいずれかを備えた分散コンピューティング環境などを含むが、それらに限定されない。
【００５２】
本発明の実施形態は、１つまたは複数のコンピュータまたは他のデバイスで実行される、プログラム・モジュールなどのコンピュータ実行可能命令という広い意味合いで説明することができる。一般的には、プログラム・モジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、および特定のタスクを実行する、または特定のアブストラクトのデータタイプを実装したデータ構造があるが、それらに限定されない。本発明の態様は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施できる。分散コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含めて、ローカルおよびリモート・コンピュータの記憶媒体に置くことができる。
【００５３】
システム４００は、稼働時、本発明の態様を実装する、図８などの図に示されたようなコンピュータ実行可能命令を、実行する。
【００５４】
本明細書で図示および説明された本発明の実施形態でのオペレーションの実行または実施の順序は、特に断りがない限り、必須のものではない。すなわち、オペレーションは、特に断りがない限り、任意の順序で実行することができ、本発明の実施形態は、本明細書で開示されているよりも多いまたは少ないオペレーションを組み込んでよい。例えば、特定のオペレーションを別のオペレーションの前、別のオペレーションと同時、または別のオペレーションの後で実行または実施することは、本発明の態様の範囲内であると考えられる。
【００５５】
本発明の実施形態は、コンピュータ実行可能命令を使って実装できる。コンピュータ実行可能命令は、１つまたは複数のコンピュータ実行可能コンポーネントまたはモジュールに編成できる。本発明の態様は、そのようなコンポーネントまたはモジュールを任意の数だけ使って任意の編成で実装できる。例えば、本発明の態様は、本明細書の図に示され、説明されている特定のコンピュータ実行可能命令、または特定のコンポーネントもしくはモジュールに限定されない。本明細書の他の実施形態は、本明細書の図に示され、説明されているものとは異なるコンピュータ実行可能命令、またはそれより多いまたは少ない機能を有するコンポーネントを含んでよい。
【００５６】
本発明の態様または本発明の実施形態の要素を紹介する際に、英文中の「ａ」、「ａｎ」、「ｔｈｅ」、および「ｓａｉｄ」という冠詞、したがって和文中の「１つの」、「その」、「前記」は、それらの要素が１つまたは複数あることを意味することが意図されている。「備える」、「含む」、および「有する、格納する、含む、備える」という用語は、包含的であることが意図され、リストされた要素以外にさらに要素がありうることを意味する。
【００５７】
本発明の態様を詳しく説明したので、「特許請求の範囲」で定義される本発明の態様の範囲から逸脱することなく、変更および変形が可能であることが明らかであろう。本発明の態様の範囲から逸脱することなく上記の構成、製品、および方法にさまざまな変更を加えることができるので、上記の説明に含まれ、付属の図面に示されているすべての事柄は、例示しているのであって、限定する意味はないと解釈するものとする。
【００５８】
付録Ａ
【００５９】
【表２】
2009532760.tif 000004
【００６０】
【表３】
2009532760.tif 000005
【図面の簡単な説明】
【００６１】
【図１】既存のプログラミング・パラダイムを示したブロック図である。
【図２】本発明の実施形態によるワークフロー・デザイン・フレームワークの仮想化を示した例示的なブロック図である。
【図３】本発明の実施形態による例示的なワークフローを示した例示的な図である。
【図４】本発明の実施形態によるワークフロー・アクティビティを処理するためのシステムの例示的なコンピューティング環境を示した図である。
【図５】本発明の実施形態によるワークフロー・アクティビティの階層構造を示した図である。
【図６】本発明の実施形態によるアクティビティの実行持続時間を記載した例示的な状態オートマトンを示す図である。
【図７Ａ】本発明の実施形態によるワークフローのフォールト・イベントの非同期処理を示したブロック図である。
【図７Ｂ】本発明の実施形態によるワークフローのフォールト・イベントの非同期処理を示したブロック図である。
【図７Ｃ】本発明の実施形態によるワークフローのフォールト・イベントの非同期処理を示したブロック図である。
【図７Ｄ】本発明の実施形態によるワークフローのフォールト・イベントの非同期処理を示したブロック図である。
【図７Ｅ】本発明の実施形態によるワークフローのフォールト・イベントの非同期処理を示したブロック図である。
【図８】本発明の実施形態によるワークフローのアクティビティに関するフォールト・イベントを非同期に処理する方法を示したフロー図である。
【図９】本発明の態様が格納できる例示的なコンピュータ可読媒体を示したブロック図である。
【図１】
2009532760.tif 000006
【図２】
2009532760.tif 000007
【図３】
2009532760.tif 000008
【図４】
2009532760.tif 000009
【図５】
2009532760.tif 000010
【図６】
2009532760.tif 000011
【図７Ａ】
2009532760.tif 000012
【図７Ｂ】
2009532760.tif 000013
【図７Ｃ】
2009532760.tif 000014
【図７Ｄ】
2009532760.tif 000015
【図７Ｅ】
2009532760.tif 000016
【図８】
2009532760.tif 000017
【図９】
2009532760.tif 000018
【国際調査報告】
2009532760.tif 000019
2009532760.tif 000020