(57)【要約】  継続を介してワークフローにおける制御フローパターンの作成を可能にする。各継続は、管理対象実行環境を仮想化するワークフローエンジンによりワークフローで実行しているアクティビティのアクティビティ実行コンテキストを表す。要求に応答して、アクティビティ実行コンテキストは継続を介して再作成され、アクティビティは再作成されたコンテキストの範囲内で実行される。
2009532758.tif 000002
【特許請求の範囲】
【請求項１】
ワークフローにおける制御フローパターンの作成を可能にする方法であって、
メタランタイムエンジンによるプログラムフラグメントの実行中に１つまたは複数のプログラムフラグメントの複数の継続を生成するステップであって、前記メタランタイムエンジンは固定の機能を有する管理対象実行環境を仮想化し、前記生成された複数の継続は各々アクティビティ実行コンテキストを表すステップと、
前記プログラムフラグメントの実行ジャーナルを作成するために前記生成された複数の継続を格納するステップと、
前記実行ジャーナルから前記格納された継続のうちの１つを選択し、ユーザーからの要求に応答して前記選択された継続を取り出すステップと、
前記取り出された継続に関連付けられている前記アクティビティ実行コンテキストを再作成するステップと、
前記再作成されたアクティビティ実行コンテキストの範囲内で、前記取り出された継続に関連付けられている前記プログラムフラグメントを実行するステップとを備えることを特徴とする方法。
【請求項２】
前記複数の継続を生成するステップは、前記メタランタイムエンジンに関連付けられているランタイム状態を取り込むステップと、前記プログラムフラグメントに関連付けられているアプリケーション状態を取り込むステップとを備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記ユーザーが前記実行ジャーナルをブラウズできるようにするステップと、
前記実行ジャーナルから前記格納された継続のうちの１つの選択を、前記ユーザーから受け取るステップとをさらに備えることを特徴とする請求項１に記載の方法。
【請求項４】
ユーザーが、アクティビティ作成者によって公開されたアプリケーションプログラミングインターフェイスを介して前記実行ジャーナルをブラウズすることができるようにするステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記生成された複数の継続を格納するステップは、前記プログラムフラグメントに関連付けられているアクティビティの実行順序に従って前記生成された複数の継続を格納するステップを備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記ユーザーが、実行中の継続を探して前記実行ジャーナルを検索することができるようにするステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項７】
前記ユーザーが、実行中ではない継続を探して前記実行ジャーナルを検索することができるようにするステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記ユーザーが前記実行ジャーナルをソートすることができるようにするステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項９】
不動態化を通じて前記選択された継続を存続するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記継続のデータ境界を定義するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記データ境界を定義するステップは、変数の存在期間、結合、および有効範囲を決定するステップを備えることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記複数の継続を生成するステップは、１つまたは複数の前記プログラムフラグメントに関連付けられているアクティビティからの要求に応答して前記複数の継続を生成するステップを備えることを特徴とする請求項１に記載の方法。
【請求項１３】
１つまたは複数のコンピュータ可読媒体は、請求項１に記載の方法を実行するためのコンピュータ実行可能命令を有することを特徴とする請求項１に記載の方法。
【請求項１４】
ワークフローにおいて継続をモデル化するシステムであって、
実行マシンによって実行されるプログラムフラグメントに関連付けられている複数の継続を表す実行ジャーナルを格納するためのメモリ領域であって、前記複数の継続は各々、アクティビティ実行コンテキストを表すメモリ領域と、
前記プログラムフラグメントの実行中に前記プログラムフラグメントの前記複数の継続を生成し、
前記生成された複数の継続を前記メモリ領域に格納し、
前記メモリ領域の前記実行ジャーナルにインターフェイスを提供し、
前記提供されたインターフェイスを介して受け取った特定の継続を求める要求に応答して、前記メモリ領域の前記実行ジャーナルから前記特定の継続を取り出し、
前記取り出した継続に関連付けられている前記アクティビティ実行コンテキストを再作成し、
前記再作成されたアクティビティ実行コンテキストの範囲内で、前記取り出された継続に関連付けられている前記プログラムフラグメントを実行するためのコンピュータ実行可能命令を実行するように構成されたプロセッサとを備えることを特徴とするシステム。
【請求項１５】
前記複数の継続は各々、前記プログラムフラグメントのうちの１つの実行状態を表すことを特徴とする請求項１４に記載のシステム。
【請求項１６】
前記ユーザーは、人間、アプリケーションプログラム、およびオペレーティングシステムのうちの１つまたは複数を備えることを特徴とする請求項１４に記載のシステム。
【請求項１７】
前記生成された複数の継続を管理するための手段をさらに備えることを特徴とする請求項１４に記載のシステム。
【請求項１８】
コンピュータ実行可能コンポーネントを有する１つまたは複数のコンピュータ可読媒体であって、前記コンポーネントは、
ワークフローに関連付けられている複数のプログラムフラグメントを実行するための実行マシンコンポーネントであって、固定の機能を有する管理対象実行環境を仮想化する実行マシンコンポーネントと、
前記実行マシンコンポーネントによって実行されている前記プログラムフラグメントの複数の継続を生成するための状態コンポーネントであって、前記複数の継続は各々、ランタイム状態およびアプリケーション状態を含み、前記ランタイム状態はスケジューラキューのステータスを示し、前記アプリケーション状態はアクティビティのステータスを示す状態コンポーネントと、
前記継続を直列化するためのメモリコンポーネントと、
ユーザーからの要求に応答して、前記メモリコンポーネントによって直列化された１つまたは複数の継続に関連付けられている前記ランタイム状態および前記アプリケーション状態を再作成するため、および前記再作成されたランタイム状態およびアプリケーション状態の範囲内で、前記１つまたは複数の継続に関連付けられている前記プログラムフラグメントを実行するためのリプレイコンポーネントとを備えることを特徴とするコンピュータ可読媒体。
【請求項１９】
前記生成された複数の継続は各々、アクティビティ実行コンテキストを表すことを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記メモリコンポーネントによって直列化された前記継続は、制御フローパターン、反復、並列ｆｏｒｅａｃｈ文、状態マシン、ページフローコントローラ、シーケンス発生器、および継続のうちの１つまたは複数をモデル化することを特徴とする請求項１８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ワークフローにおける制御フローパターンの作成を可能にする方法、システム、及びそのコンピュータ可読媒体に関する。
【背景技術】
【０００２】
既存のシステムは、高水準ワークフローを介して自律型エージェント間のビジネスプロセスまたはその他の現実世界の対話をモデル化しようと試みる。しかし、ワークフローは、（ａ）実行およびモデル化の複雑さ、（ｂ）設計時におけるフローの構造の知識、（ｃ）静的に定義されたか、または臨時／動的、（ｄ）ライフサイクルのさまざまな時点におけるフローの作成と編集の容易さ、および（ｅ）コアワークフロープロセスとのビジネス論理の弱いまたは強い関連のように、さまざまな局面で異なる場合もある。既存のワークフローは、これらの要因すべてに対応することはできない。
【０００３】
さらに、ほとんどの既存のワークフローモデルは、言語ベースの手法（たとえば、ＢＰＥＬ４ＷＳ、ＸＬＡＮＧ／Ｓ、およびＷＳＦＬ）あるいはアプリケーションベースの手法に基づいている。言語ベースの手法は、ユーザー／プログラマに対してワークフロープロセスのモデル化に役立つ事前定義の構成体の閉集合を備える高水準ワークフロー言語である。ワークフロー言語は、構成体の閉集合の意味情報すべてを保持して、ユーザーがワークフローモデルを構築することができるようにする。しかし、言語は、開発者により拡張可能ではなく、ワークフローモデルを構成するプリミティブの閉集合を表す。言語は、ワークフローシステムのベンダーによって出荷される言語コンパイラに拘束される。製品の将来のバージョンの新しい構成体の集合で言語を拡張することにより、モデルを拡張することができるのは、ワークフローシステム製品のベンダーだけである。このことは、多くの場合、言語に関連付けられているコンパイラのアップグレードを必要とする。加えて、言語は通常、その他のプログラムにより容易かつ効率的に使用することができる関数または演算を宣言型で公開または定義することはない。
【０００４】
アプリケーションベースの手法は、ドメイン固有の問題を解決するためにアプリケーション内にワークフロー機能を備えるアプリケーションである。これらのアプリケーションは、真に拡張可能ではなく、プログラム化できるモデルを有することもない。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、継続を介してワークフローにおける制御フローパターンの作成を可能にすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の実施形態は、ワークフローにおける制御フローパターンの作成を可能にする。１つの実施形態において、本発明は、メタランタイムエンジンによるプログラムフラグメントの実行中にプログラムフラグメントの継続を生成する。メタランタイムエンジンは、固定の機能を備える管理対象の実行環境を仮想化する。ユーザーまたはその他のソースからの要求に応答して、本発明の態様は、生成された継続を介してアクティビティ実行コンテキストを再作成し、プログラムフラグメントまたはその部分を再作成されたアクティビティ実行コンテキスト内で実行する。
【０００７】
この［課題を解決するための手段］は、以下の［発明を実施するための最良の形態］でさらに説明される一連の概念を簡略化した形態で示すために提供される。この［課題を解決するための手段］は、請求項に係る主題の主要特徴または本質的特徴を特定することを意図するものではなく、また請求項に係る主題の範囲を決定する際の補助として使用することを意図するものでもない。  
その他の特徴は、部分的に明白であり、これ以降部分的に指摘される。  
対応する参照文字は、図面全体を通じて対応する部分を示す。
【発明を実施するための最良の形態】
【０００８】
図１を参照すると、ブロック図は、ワークフローのプロセス中心のアクティビティをモデル化するための標準的なプログラミングのパラダイムを示す。この図において、オペレーティングシステム１０４を仮想化する、最上位レベルに管理対象実行環境１０６を備えた３レベルの仮想化モデルを示す。管理対象実行環境１０６は、コンピューティング装置のプロセッサアーキテクチャからは独立して実施することのできる抽象スタックマシンに関して環境１０６で実行しているプログラムの実行を仮想化する。オペレーティングシステム１０４は、最下位レベルにおいて処理装置１０２を仮想化する。管理対象実行環境１０６レベルにおけるプログラムには、管理対象実行環境１０６で使用可能な固定機能が原因で、ワークフロー内のプロセス間の複雑な対話に適合する能力および効率が不足している。管理対象実行環境１０６はまた、実世界のワークフローをモデル化するワークフローの複雑さと機能を処理するには適していないさまざまな厳密な要件を含む。さらに、オペレーティングシステム１０４のプログラミングコードまたはルーチンは、数ある制約の中でも特に、処理装置１０２のタイプまたは構成、およびコンピュータアーキテクチャのタイプ（たとえば、ＩＢＭ製品のパーソナルコンピュータ、ＡＰＰＬＥ製品のパーソナルコンピュータ、またはその他のシステムと互換性があるなど）に依存する。加えて、プログラミング言語は通常、適正に機能するため、オペレーティングシステム１０４のスタック、ヒープ、またはスレッドなど、ハードウェア固有のデータ構造を必要とする。
【０００９】
次に図２を参照すると、本発明の態様は、継続ベースのワークフローエンジン２０２、メタランタイムエンジン、または管理対象実行環境１０６を仮想化するその他のフレームワークを含む。ワークフローは、各々のアクティビティが作業単位を表しているアクティビティの階層構成を含む。ワークフローエンジン２０２は、実世界のプロセスを表すワークフローで命令コード（ｏｐ−ｃｏｄｅｓ）またはアクティビティの実行の非同期の抽象モデルを供給する。ワークフローエンジン２０２は、プログラムを中断して、実行サイクル中の任意の時点でそれらを再開することができる継続ベースのランタイムである。アクティビティはドメイン固有であるが、ワークフローエンジン２０２はドメイン固有性を認識しない。さらに、ワークフローエンジン２０２は、アクティビティに関してパッケージされて入る固有の制御フローパターンに関して全く認識がない。そのように、本発明の態様によって提供される実行モデルは抽象的である。さらに、全ワークフローインスタンスは任意の時間（たとえば、日、月、または年）にわたり論理的に実行することができるが、ワークフローに関連付けられているアクティビティは、協調的なマルチタスキングの方式で短期的な作業を実行して結果をもたらすことができる。本発明の態様の抽象実行モデルにより、ワークフローエンジン２０２は、実行の途中でインスタンスを中断する、および／またはメモリから除去して、それを将来再開することができる。ワークフローエンジン２０２は、プログラムの不動態化にわたりそのようなオペレーションを管理する。
【００１０】
１つの実施形態において、ワークフローエンジン２０２は、管理対象実行環境１０６の態様であるドメイン固有命令コード、スレッド、同期化プリミティブ、実行マシン、オブジェクト存続時間、ソースフォーマット、例外、障害、障害伝搬、および障害処理のうちの１つまたは複数を仮想化するように動作する。たとえば、本発明の態様は、ユーザーがカスタムアクティビティに関してカスタムの命令コードを作成することができるようにする。一般に、ワークフローエンジン２０２は、管理対象実行環境１０６からのスレッド、スタック、および／またはヒープを使用する。任意のプログラミング言語で作成され、任意のファイルフォーマットで構成されたプログラムを実行する機能を備え、ワークフローエンジン２０２は、プログラム開発者が妥協することなくプログラムを設計することができるようにする。ワークフローエンジン２０２によって実行されるべき基底クラスとしてワークフロータスクまたはプロセスを表すアクティビティを定義することにより、本発明の態様は、開発者が、管理対象実行環境１０６において厳格なハードコードされた、柔軟性のない固定の機能またはアクティビティクラスのセットに固執することなく、ドメイン固有の命令コードを容易かつ効率的に構築することができるようにする。命令コードは、保健医療業界、金融業界、またはその他のドメインに固有であってもよい。図２のワークフローエンジン２０２は、継続およびそのさまざまな態様のモデル化を可能にしてプログラマが複雑で動的な制御フローパターンをモデル化できるようにする、既存の実行フレームワーク（たとえば、図１の管理対象実行環境１０６、オペレーションシステム１０４、または処理装置１０２）の上部に階層化された任意の継続ベースのランタイムであってもよい。本発明の態様は、任意の方法または表現（たとえば、流れ図、図表、番号付きの説明など）でアクティビティを定義できるようにする。
【００１１】
継続は、複雑で動的な制御フローパターンをモデル化するために使用することができる。継続は、実行中にフリーズしたプログラムを表し、計算の状態を含む単一の機能オブジェクトを含むことができる。オブジェクトが評価されるとき、格納されている計算は、中断した時点から再開することができる。特定の種類の問題を解決する際、プログラムの状態を保存して後に再開できることは、非常に役に立つ可能性もある。たとえば、マルチプロセッシングにおいて、継続が、中断されたプロセスを表すことは便利である。非決定性の検索プログラムにおいて、継続は、検索ツリー内のノードを表すことができる。
【００１２】
管理対象実行環境１０６は、プログラム間の共通であるが固定した通信環境を作成するが、そのような環境において実世界のプロセスをモデル化する能力は十分ではない。たとえば、管理対象実行環境１０６で実行中のアプリケーションは、機能または共通のオブジェクト指向クラスを共用するために中間言語に制限されている。中間言語は、固定されたパラメータ、引数、スキーマ、または関数を備えている。
【００１３】
再び図２を参照すると、ユーザー２０４（たとえば、人間、アプリケーションプログラム、オペレーティングシステムなど）は、ワークフローの基礎フレームワークを提供するコンピュータ２０６と対話する。コンピュータ２０６およびそこに関連付けられているプロセッサ（図示せず）は、実行ジャーナル２１０と、ワークフロー基礎を実施するためのコンピュータ実行可能命令を備える１つまたは複数のコンピュータ可読コンポーネントまたはモジュールとを格納するメモリ領域２０８にアクセスすることができる。図２の実施形態において、コンピュータ実行可能コンポーネントまたはモジュールは、実行マシンコンポーネント２１２、状態コンポーネント２１４、メモリコンポーネント２１６、およびリプレイコンポーネント２１８を含む。実行マシンコンポーネント２１２は、コンピュータ２０６によって実行されるとき、ワークフローに関連付けられている複数のプログラムフラグメントを実行して、固定の機能を有する管理対象実行環境１０６を仮想化する。状態コンポーネント２１４は、実行マシンコンポーネント２１２によって実行されているプログラムフラグメントの複数の継続を生成する。
【００１４】
複数の継続は各々、ランタイム状態およびアプリケーション状態を含み、一般に、所定の時点におけるアクティビティ実行コンテキストまたはプログラムフラグメントのその他の状態を表す。アクティビティ実行コンテキストは、管理対象実行環境１０６からの物理スレッドに関連付けられているスタックとは関係なく使用可能である。ランタイム状態は、スケジューラキューのステータス（たとえば、スケジューラに関連付けられているキュー内の項目）を示すか、あるいは次に実行するようスケジュールされる例外ハンドラを識別するプログラムカウンタを示す。アプリケーション状態は、（たとえば、アクティビティツリーを参照して）アクティビティのステータスを示す。メモリコンポーネント２１６は、継続を直列化して、直列化継続を実行ジャーナルに格納する。メモリコンポーネント２１６によって直列化された継続は、制御フローパターン、反復、並列ｆｏｒｅａｃｈ文、状態マシン、ページフローコントローラ、シーケンス発生器、およびもう１つの継続のうちの１つまたは複数をモデル化する。リプレイコンポーネント２１８は、ユーザー２０４からの要求に応答して、メモリコンポーネント２１６によって直列化された１つまたは複数の継続に関連付けられているランタイム状態およびアプリケーション状態を再作成する。コンピュータ２０６によって実行されるとき、リプレイコンポーネント２１８は、再作成されたランタイム状態およびアプリケーション状態の範囲内で、１つまたは複数の継続に関連付けられているプログラムフラグメントを実行する。
【００１５】
たとえば、継続への参照を使用して、実行ハンドラ（たとえば、アクティビティに関連付けられているメソッド）は、さらに多くの実行ハンドラをスケジュールすることができる（たとえば、複合アクティビティはその子の実行をスケジュールすることができる）。１つの実施形態において、継続への参照は、直接または暗黙の引数としてアクティビティ実行コンテキストを含む。正常に完了したアクティビティの補正は、存続するコンテキストを再呼び出しして、コンテキスト内でアクティビティインスタンスの補正器メソッドを実行することにより、将来実行することができる。
【００１６】
本明細書において、図２、その他の図面、および専門用語の要素はいずれも、生成された複数の継続を管理するための手段を構成する。
【００１７】
次に図３を参照すると、例示的なワークフロー３００が示される。図３の例において、ワークフロー３００は、注文書を処理するためのワークフローである。ワークフロー内のアクティビティは、一部のアクティビティがワークフロー３００内の他のアクティビティと並行または同時に実行することができるが、ワークフロー３００内の一部のアクティビティがワークフロー３００内の他のアクティビティの完了後に実行されるように順序付けることができる。ワークフロー３００は、顧客からの注文の受領などの、開始点３０２から開始する。ワークフロー３００は、条件文３０４の条件の結果に応じて条件文３０６と３０８に分岐する条件文３０４（たとえば、ＩＦ文またはＷＨＩＬＥ文）を含む。条件文３０６に続いて、ワークフロー３００は、非同期的に実行される２つのシーケンスを有する並列構造３１０を含む。図３に示される例において、「Ｓｅｎｄ  Ｅｍａｉｌ」アクティビティおよび「Ｇｅｔ  Ａｐｐｒｏｖａｌ」アクティビティは、ワークフローが３１４において完了する前に並行して処理される。
【００１８】
条件文３０８の後、「ｄｒｏｐ  ａｃｔｉｖｉｔｉｅｓ  ｈｅｒｅ」領域３１６は、ワークフローが３１４において完了する前にアクティビティ作成者または他のユーザーがアクティビティをワークフロー３００に追加できることを示す。
【００１９】
次に図４を参照すると、ブロック図は、ワークフローアクティビティの階層構造４０２（たとえば、ツリー構造）を示す。アクティビティの実行は、ツリーのルートで開始するアクティビティツリーの実行を含む。アクティビティは、任意のプログラミング言語のソフトウェアコードによって構成されてもよい。たとえば、ソフトウェアコードは、特定のドメインまたは実行環境において作成されたビジネスまたはアプリケーションの論理または規則を表すことができる。アクティビティは、論理または規則を実施する１つまたは複数の作業項目またはその他のアクティビティを含むことができる。図４の実施形態において、アクティビティおよび関連する作業項目は、構造４０２またはその他の実行シーケンスに従って配列され実行される。
【００２０】
メタランタイムエンジンは、アクティビティに関連付けられている作業項目ごとに有効範囲または境界を定義する。この有効範囲または境界は、作業項目によりアクセスされる共用データまたはリソース、関連するプロパティ、ハンドラ、制約、イベントなどのような（たとえば、データ、メタデータなどの形態の）情報を含み、公開する。
【００２１】
次に図５を参照すると、例示的な状態オートマトンは、アクティビティが遷移することのできる状態のセットを定義する。一般に、状態オートマトン５００は、アクティビティの実行存続時間を定義する。図５の例示的なオートマトンにおいて、アクティビティは、メタランタイムエンジンがアクティビティを実行して遷移条件を評価すると、定義された状態のセットを経て遷移する。メタランタイムエンジンは、抽象オートマトンに従ってアクティビティの実行を実施する。１つの実施形態において、アクティビティの実行は、オートマトン５００の状態および各状態の特定の可能な遷移に関して行われる。
【００２２】
１つの例示的なオートマトンは、初期化状態、実行状態、および閉じた状態を含む。図５の例において、状態オートマトン５００は、初期化状態５０２、実行状態５０４、取り消し状態５０６、障害状態５０８、補正状態５１０、および閉じた状態５１２を含む。もう１つの実施形態において、１つまたは複数の追加の状態は、本発明の実施形態の範囲を逸脱することなく、状態オートマトン５００で定義することができる。
【００２３】
一般に、状態オートマトン５００は、状態のセットを経由するアクティビティの遷移を定義する１つまたは複数の遷移条件を備える。１つの実施形態において、第１のオートマトンが第１のアクティビティに関連付けられ、第２のオートマトンが第２のアクティビティに関連付けられている場合、第１のアクティビティの第１のオートマトンの遷移条件は、第２のアクティビティの第２のオートマトンの現在の状態に依存してもよい。
【００２４】
さらに、状態オートマトン５００は、複合アクティビティにおいて作業項目またはアクティビティ間の１つまたは複数の関係を確立することができる。たとえば、関係規則の１つは、アクティビティツリーから閉じた状態５１２へとルートノードのメソッドまたは作業項目が遷移する前に、子ノードのすべての作業項目が初期化状態５０２または閉じた状態５１２でなければならないことを含むことができる。もう１つの規則は、アクティビティの子ノードの作業項目が実行状態５０４に遷移する前に、ルートノードの作業項目が実行状態５０４でなければならないことを指定することができる。
【００２５】
次に図６を参照すると、図は、本発明の実施形態によるワークフローアクティビティを処理するためのシステム６００を示す。システム６００は、図１の処理装置１０２のような処理装置、または処理装置の集合であってもよいプロセッサ６０２を含む。システム６００はまた、プロセッサ６０２によってアクセス可能なデータを格納するためのストレージまたはメモリ領域６０４を含む。１つの実施形態において、システム６００は、１つまたは複数のプロセッサまたは処理装置（たとえば、プロセッサ６０２）、システムメモリ（たとえば、メモリ領域６０４）、およびプロセッサ６０２を含むさまざまなシステムコンポーネントをメモリ領域６０４に結合するその他のコンポーネントを有するコンピュータであってもよい。
【００２６】
たとえば、メモリ領域６０４は、ワークフロー（たとえば、図３のワークフロー３００）で処理するための複数のアクティビティ６０６を格納する。複数のアクティビティ６０６は各々、１つまたは複数の作業項目を含み、作業項目は、ツリー構造（図４を参照）などの階層構造に編成することができる。複数のアクティビティ６０６を処理する際、プロセッサ６０２はスケジューラ６０８にアクセスするか、またはスケジューラ６０８を実行する。スケジューラ６０８は、作業項目（たとえば、作業キュー）のキュー６１０、および項目をデキューして、キュー６１０が空になるまでデキューした作業項目に関連付けられた作業を実行する対応する実施態様を呼び出すディスパッチャ６１２を含む。キュー６１０内の各作業単位は、アクティビティによって実施されるメソッドに対応する。メソッドは、実行ハンドラと呼ぶことができる。所定のアクティビティの完全な実行は、それ以前の時点においてキュー６１０にエンキューされた実行ハンドラのセットの呼び出しおよび実行まで及ぶことができる。
【００２７】
図５の状態オートマトン５００のような状態オートマトンは、ワークフローアクティビティの作業項目（たとえば、作業項目６２２）の実行フローを定義する。プロセッサ６０８は、スケジューラ６０８などのコンポーネントまたはコンピュータ実行可能命令のセットを介して複数のアクティビティ６０６の作業項目にアクセスして作業項目６２２を初期化し、作業項目６２２をキュー６１０にエンキューするかまたは格納する。たとえば、図６に示されるように、作業項目６２２−１は初期化され、キュー６１０にエンキューされる。次に作業項目６２２−１は、実行のために実行状態（たとえば、図５の実行状態５０４）に遷移する前に、ディスパッチャ６１２によってキュー６１０からデキューされるかまたは削除される。
【００２８】
１つの例において、作業項目６２２−１は、「ｒｅｑｕｅｓｔｉｎｇ  ｉｎｐｕｔ  ｆｒｏｍ  ａ  ｕｓｅｒ」の関数を実行するためのアクティビティメソッドまたはアクティビティオペレーション６２４、ルーチン、またはコードの集合を含む。１つまたは複数のその他のアクティビティメソッド、アクティビティオペレーション、ルーチン、またはコードは、本発明の態様の範囲を逸脱することなく作業項目６２２の各々に含めることができる。
【００２９】
ディスパッチャ６１２が作業項目６２２をディスパッチすると、プロセッサ６０２は、６１４において作業項目６２２の各々でメソッド６２４を実行する。作業項目６２２−１の例において、プロセッサ６０２は、要求された情報またはデータを入力するためのユーザーインターフェイス（ＵＩ）をユーザーに供給することができる。もう１つの実施形態において、プロセッサ６０２は、入力のために外部データソースに接続またはアクセスすることができる。アクティビティメソッドまたはアクティビティオペレーション６２４が完了すると、プロセッサ６０２は、６１６において作業項目６２２−１の実行を完了する。
【００３０】
代替として、プロセッサ６０２は、その後の取り出しおよび継続実行のために、６１８において作業項目（たとえば、作業項目６２２−１）の実行状態を不動態化するかまたはデータストア６２０に取り込むことができる。
【００３１】
作業項目６２２−１の実行中のパラメータまたは条件に応じて、作業項目６２２−１は、取り消し状態（たとえば、図５の取り消し状態５０６）または障害状態（たとえば、図５の障害状態５０８）へと進むことができる。１つの実施形態において、作業項目４２２−１は、取り消し状態から障害状態に進むことができる。代替実施形態において、補正状態（たとえば、図５の補正状態５１０）は、障害または例外が発生した場合に実行すべきオペレーションまたは関数のセットを記述する。
【００３２】
次に図７を参照すると、例示的な流れ図は、ワークフローにおける継続のモデル化を示す。方法は、７０２において、メタランタイムエンジンによるプログラムフラグメントの実行中に１つまたは複数のプログラムフラグメントの複数の継続を生成するステップを含む。たとえば、継続は、１つまたは複数のプログラムフラグメントに関連付けられているアクティビティからの要求に応答して生成することができる。１つの実施形態において、プログラムフラグメントの実行は、各々の出現が継続として存続する一時的なものである。メタランタイムエンジンは、固定の機能を備える管理対象の実行環境を仮想化する。生成された複数の継続は各々、１つの実施形態において、メタランタイムエンジンに関連付けられているランタイム状態およびプログラムフラグメントに関連付けられているアプリケーション状態を含むアクティビティ実行コンテキストを表す。継続のデータ境界は、たとえば、周囲を取り巻くコンテキストの状態に対する変数の存在期間、有効範囲、および結合を決定することにより定義される。
【００３３】
方法は、７０４において、生成された複数の継続を格納して、不動態化を通じて選択された継続を存続し、プログラムフラグメントの実行ジャーナルを作成する。１つの実施形態において、継続は、プログラムフラグメントに関連付けられているアクティビティの実行順序に従って格納される。方法は、ユーザーが、実行ジャーナルを（たとえば、アクティビティ作成者によって公開されたアプリケーションプログラミングインターフェイスを介して）ブラウズすることができるようにし、実行ジャーナルからの格納された継続のうちの１つの選択をユーザーから受け取る。方法はまた、ユーザーが、実行ジャーナルをソートして、実行中および／または実行中ではない継続を探して実行ジャーナルを検索することができるようにする。
【００３４】
方法はさらに、７０６において、実行ジャーナルから格納された継続のうちの１つを選択し、ユーザーからの要求に応答して選択された継続を取り出す。方法はまた、７０８において、取り出された継続に関連付けられているアクティビティ実行コンテキストを再作成し、７１０において、再作成されたアクティビティ実行コンテキストの範囲内で、取り出された継続に関連付けられているプログラムフラグメントを実行する。
【００３５】
図２のコンピュータ２０６および図６のプロセッサ６０２は、汎用コンピューティング装置の例である。１つの実施形態において、コンピュータは、本明細書に示され説明されている他の図面での使用に適している。コンピュータは、１つまたは複数のプロセッサまたは処理装置、およびシステムメモリを備える。コンピュータは通常、少なくともある種の形態のコンピュータ可読媒体を備える。揮発性および不揮発性媒体の両方、取り外し可能および固定式の媒体を含むコンピュータ可読媒体は、コンピュータがアクセスすることができる任意の使用可能な媒体であってもよい。一例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を備えるが、これらに限定されることはない。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよびその他のデータなどの情報のストレージのための任意の方法または技術において実施された揮発性および不揮発性の、取り外し可能および固定式の媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリその他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）その他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージその他の磁気記憶装置、あるいは望ましい情報を格納するために使用することができ、コンピュータによってアクセスすることができる他の媒体を含む。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを、搬送波または他のトランスポート機構のような変調データ信号で具現し、任意の情報伝達媒体を含む。当業者であれば変調データ信号を熟知しているが、これは１つまたは複数の特性セットを備えるか、または信号の情報をエンコードするような方法で変更された信号である。有線ネットワークまたは直接配線接続のような有線媒体、および音響、ＲＦ、赤外線などの無線媒体は、通信媒体の例である。上記の任意の組み合わせも、コンピュータ可読媒体の範囲に含まれる。
【００３６】
システムメモリは、取り外し可能および／または固定式、揮発性および／または不揮発性のメモリの形態のコンピュータ記憶媒体を含む。コンピュータはまた、他の取り外し可能／固定式、揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。
【００３７】
コンピュータは、リモートコンピュータなど、１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク化された環境において動作することができる。リモートコンピュータは、パーソナルコンピュータ、サーバー、ルーター、ネットワークＰＣ、ピアデバイスまたはその他の共通ネットワークノードなどであってもよく、通常はコンピュータに関連して上記で説明されている要素の多くまたはすべてを含む。
【００３８】
コンピュータを含む例示的なコンピューティングシステム環境に関連して説明してきたが、本発明の実施形態は、数多くの他の汎用または特殊用途のコンピューティングシステム環境または構成で動作することができる。コンピューティングシステム環境は、本発明の態様の使用の範囲または機能にいかなる制限を提案することも意図するものではない。さらに、コンピューティングシステム環境は、例示的なオペレーティング環境に示されるコンポーネントのいずれか１つまたはその組み合わせに関していかなる依存または要件も有するものと解釈されるべきではない。本発明の態様と共に使用するために最適な既知のコンピュータシステム、環境、および／または構成の例は、パーソナルコンピュータ、サーバーコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、携帯電話、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境などを含むが、これらに限定されることはない。
【００３９】
本発明の実施形態は、１つまたは複数のコンポーネントまたはプログラムモジュールに編成され、１つまたは複数のコンピュータまたは他の装置によって実行されるコンピュータ実行可能命令の一般的なコンテキストに即して説明することができる。コンピュータのデータプロセッサは、コンピュータのさまざまなコンピュータ可読記憶媒体にそれぞれ別の点で格納されたコンピュータ実行可能命令によりプログラムすることができる。一般に、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造を含むが、これらに限定されることはない。本発明の態様は、そのようなコンポーネントまたはモジュールの任意の数および編成で実装することができる。たとえば、本発明の態様は、図面に示され、本明細書において説明されている特定のコンピュータ実行可能命令あるいは特定のコンポーネントまたはモジュールに限定されることはない。本発明のその他の実施形態は、本明細書において示され説明されている機能よりも多いかまたは少ない機能を有するさまざまなコンピュータ実行可能命令またはコンポーネントを含むことができる。動作中、コンピュータは、図面に示されているようなコンピュータ実行可能命令を実行して、本発明の態様を実施する。本発明の態様はまた、タスクが通信ネットワークを通じてリンクされたリモート処理装置によって実行される分散コンピューティング環境においても実施することができる。分散コンピューティング環境において、プログラムモジュールは、記憶装置を含むローカルおよびリモートのコンピュータ記憶媒体に配置することができる。
【００４０】
ソフトウェアアーキテクチャのコンテキストにおけるインターフェイスは、ソフトウェアモジュール、コンポーネント、コード部分、またはコンピュータ実行可能命令のその他のシーケンスを含む。インターフェイスは、たとえば、第１のモジュールに代わってコンピューティングタスクを実行するように第２のモジュールにアクセスする第１のモジュールを含む。第１および第２のモジュールは、一例として、オペレーティングシステムによって提供されるようなアプリケーションプログラミングインターフェイス（ＡＰＩ）、（たとえば、ピアツーピアアプリケーション通信の）コンポーネントオブジェクトモデル（ＣＯＭ）インターフェイス、および（たとえば、Ｗｅｂサービス間の通信の）拡張マークアップ言語メタデータ交換（ＸＭＩ）インターフェイスを含む。インターフェイスは、Ｊａｖａ（登録商標）２  Ｐｌａｔｆｏｒｍ  Ｅｎｔｅｒｐｒｉｓｅ  Ｅｄｉｔｉｏｎ（Ｊ２ＥＥ）、ＣＯＭ、または分散ＣＯＭ（ＤＣＯＭ）の例におけるような、密結合の同期実施であってもよい。代替として、あるいはこれに加えて、インターフェイスは、（たとえば、ｓｉｍｐｌｅ  ｏｂｊｅｃｔ  ａｃｃｅｓｓ  ｐｒｏｔｏｃｏｌを使用する）Ｗｅｂサービスにおけるような、疎結合の非同期実施であってもよい。一般に、インターフェイスは、密結合、疎結合、同期、および非同期の特性の任意の組み合わせを含む。さらに、インターフェイスは、標準プロトコル、専有プロトコル、または標準および専有プロトコルの任意の組み合わせに準拠することができる。本明細書に説明されているインターフェイスはすべて、単一のインターフェイスの一部であってもよいか、または別個のインターフェイスとして実装されてもよく、それらの組み合わせであってもよい。インターフェイスは、ローカルに、またはリモートに実行して、機能を提供することができる。さらに、インターフェイスは、本明細書において示されるかまたは説明されている機能よりも多いかまたは少ない機能を含むことができる。
【００４１】
以下の例は、本発明の実施形態をさらに説明する。制御フローは、コンパイル時に子アクティビティの数が不明のとき、事実上、動的であると見なされる。たとえば、標準的なドキュメントレビュープロセスをモデル化する複合アクティビティは、基本レビュアーアクティビティのセットを並行して実行することによってメッセージをレビュアーに送信する。しかし、レビュアーの数はプログラムが作成される時点で静的に知られていないために、正確な数量の複合アクティビティの子はその時点において構成することができないこともある。そのような場合、複合アクティビティは、テンプレートとしての役割を果たす単一のレビュアーアクティビティで構成され、実際の使用可能なレビュアーに基づいて実行時点で動的インスタンスのセットを生成する。これらの構成体の制御フローの態様が事実上動的であるだけではなく、局所性および結合を含むランタイム状態も動的である。たとえば、状態マシンをモデル化するアクティビティは、状態を表す子アクティビティのセットで構成される。各状態アクティビティは、メタプログラムの状態、または所定の時点においてフリーズした状態マシンを表す継続である。継続は、本発明の態様により、複数回、任意の順序で実行することができる。
【００４２】
ループ構成体は、動的制御フローの特殊事例と見なすことができる。たとえば、ＦｏｒＥａｃｈ構成体をモデル化するアクティビティの意味は、各反復がＦｏｒＥａｃｈアクティビティ内に含まれる状態の明確な範囲を作成すべきであることを指示する。状態の有効範囲は、状態の局所性、参照整合性の管理または有効範囲にわたる状態の結合、および所定の有効範囲に囲まれた状態の存在期間または存続時間の管理を伴う。本発明の態様により、プログラム状態は、プログラムツリーのアクティビティのフィールドおよび依存属性に関して取り込まれる。このようにして、ループ構成体をモデル化するアクティビティのローカルまたは一時変数の概念は、動的にアクティビティのインスタンスを効果的に生成することによって作成される。これは、ループの本体を表すテンプレートアクティビティに基づいて、反復の局所状態を取り込む。
【００４３】
さらに、非耐久性／非トランザクションのプログラミング環境におけるプログラム構成体とは異なり、アクティビティは、その後のプログラム実行中に補正されるよう要求することができる。たとえば、正常に完了したＤｏＷｈｉｌｅアクティビティの反復は、その親アクティビティが失敗した場合、そのライフサイクルの後の時点で補正することができる。本発明の態様は、継続として各反復に対応するアクティビティの実行状態を取り込んで格納することにより、反復ごとのそのような補正（たとえば、ｕｎｄｏセマンティックを実施する）を可能にする。格納された実行状態を表す継続は、アクティビティのいずれかに関連付けられた補正メソッドが実行を試みるとき、実行の元の状態を使用可能にするために、後に呼び出すことができる。
【００４４】
本明細書に示され説明される本発明の実施形態において、特に指定のない限り、実行の順序またはオペレーションのパフォーマンスは必須ではない。つまり、特に指定のない限り、オペレーションは任意の順序で実行することができ、本発明の実施形態に含まれるオペレーションは、本明細書に開示されるオペレーションよりも多いか、または少なくてもよい。たとえば、特定のオペレーションを、別のオペレーションの前、別のオペレーションと同時、または別のオペレーションの後に実行または実施することは、本発明の態様の範囲内に含まれると考えられる。
【００４５】
本発明の態様の要素を提示する場合、「ａ」、「ａｎ」、「ｔｈｅ」、および「ｓａｉｄ」の冠詞は、１つまたは複数の要素があることを意味するよう意図されている。「ｃｏｍｐｒｉｓｉｎｇ」、「ｉｎｃｌｕｄｉｎｇ」、および「ｈａｖｉｎｇ」は、包括的であるよう意図され、一覧されている要素の他に追加の要素がある可能性もあることを意味する。
【００４６】
本発明の態様を詳細に説明してきたが、添付の特許請求の範囲に定義されている本発明の態様の範囲を逸脱することなく変更および変形が可能であることが明らかとなろう。本発明の態様の範囲を逸脱することなく、上記の構成体、製品、および方法にさまざまな変更を行うことができるため、上記の説明に含まれ添付の図面に示されるすべての事項が、限定的なものではなく、例示的なものとして解釈されるべきであることが意図される。
【図面の簡単な説明】
【００４７】
【図１】本発明の態様の例示的なオペレーティング環境を示すブロック図である。
【図２】本発明の実施形態による継続ベースのワークフローフレームワークを示す例示的なブロック図である。
【図３】本発明の実施形態によるワークフローを示す例示的なブロック図である。
【図４】本発明の実施形態によるワークフローアクティビティの階層構造を示す図である。
【図５】本発明の実施形態によるアクティビティの例示的な状態オートマトンを示す図である。
【図６】本発明の実施形態によるワークフローアクティビティを処理するための例示的なシステムを示すブロック図である。
【図７】ワークフローにおける継続のモデル化を示す例示的な流れ図である。
【図１】
2009532758.tif 000003
【図２】
2009532758.tif 000004
【図３】
2009532758.tif 000005
【図４】
2009532758.tif 000006
【図５】
2009532758.tif 000007
【図６】
2009532758.tif 000008
【図７】
2009532758.tif 000009
【国際調査報告】
2009532758.tif 000010
2009532758.tif 000011