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