(57)【要約】【課題】コミットされていない作業をバッチ処理することにより、通信コンポーネントを介して持続された状態の一貫性を維持するワークフロー管理を提供する。【解決手段】ワークフローコンポーネントは、サービスプロバイダコンポーネントによって実施される作業項目を含むワークフローを定義する。ワークフローコンポーネントは、作業項目をサービスプロバイダコンポーネントに割り当て、サービスプロバイダコンポーネントは、その作業項目を認識する。ワークフローコンポーネントは、割り当てられた作業項目を作業バッチに付加する。ワークフローコンポーネントは、バッチ処理された作業項目を含むトランザクションを生成し、サービスプロバイダコンポーネントに作業項目を実施するよう要求することによってワークフローにコミットする。ワークフローコンポーネントは、作業項目の実行の状態を調べて、その状態を永続記憶装置に格納する。【選択図】図１
2006178935.tif 000002
【特許請求の範囲】
【請求項１】
ワークフローの状態を管理する方法であって、
実行すべき１つまたは複数の作業項目を定義すること、
前記１つまたは複数の定義された作業項目を、１つまたは複数のサービスプロバイダコンポーネントに実行のために割り当てること、
前記１つまたは複数のサービスプロバイダコンポーネントに割り当てられた前記１つまたは複数の作業項目を後でバッチ処理すること、
前記１つまたは複数のバッチ処理された作業項目の状態を持続すること、および、
前記１つまたは複数のサービスプロバイダコンポーネントに前記１つまたは複数のバッチ処理された作業項目を実行するようコミットすることであって、前記１つまたは複数のサービスプロバイダコンポーネントが前記１つまたは複数のコミットされた作業項目を実行すること
を含むことを特徴とする方法。
【請求項２】
コミットすることは、トランザクションを生成すること、および、前記１つまたは複数のバッチ処理された作業項目をトランザクションに付加することの少なくとも一方を含むことを特徴とする請求項１に記載の方法。
【請求項３】
付加することは、前記トランザクション内の前記１つまたは複数の付加された作業項目を、前記１つまたは複数の定義された作業項目の機能に応じて区分することを含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記１つまたは複数のサービスプロバイダコンポーネントは、１つまたは複数のホスト環境と、前記１つまたは複数の定義された作業項目に関してリモートである１つまたは複数のホスト環境との一部であり、
前記１つまたは複数の作業項目は、メッセージング、インスタンス、トランザクション、パーシスタンス、スレッディング、タイマ、ロール、および、トラッキングのうちの少なくとも１つまたは複数を含むこと
を特徴とする請求項１に記載の方法。
【請求項５】
前記１つまたは複数のコミットされた作業項目の実行に失敗した場合に、前記１つまたは複数のサービスプロバイダコンポーネントによってメッセージが送信されることをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
持続することは、前記１つまたは複数のバッチ処理された作業項目の前記状態を、コンピュータ読み取り可能記憶媒体に保存することを含み、前記１つまたは複数の割り当てられた作業項目の前記状態は、完了、実行中、および中止のうちの少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項７】
１つまたは複数のコンピュータ読み取り可能記憶媒体は、前記請求項１に記載の方法を実施するためのコンピュータ実行可能命令を有することを特徴とする請求項１に記載の方法。
【請求項８】
ワークフローの状態を管理するためのコンピュータ実行可能コンポーネントを含む、１つまたは複数のコンピュータ読み取り可能記憶媒体であって、前記コンポーネントは、
実行すべき１つまたは複数の作業項目を割り当てるワークフローコンポーネントであって、前記１つまたは複数の作業項目を定義し、１つまたは複数の割り当てられた作業項目を後でバッチ処理するワークフローコンポーネントと、
前記１つまたは複数のバッチ処理された作業項目の実行にコミットする１つまたは複数のサービスプロバイダコンポーネントと
を含むことを特徴とするコンピュータ読み取り可能記憶媒体。
【請求項９】
前記１つまたは複数のバッチ処理された作業項目の永続的な状態を格納するためのメモリをさらに含み、前記１つまたは複数のバッチ処理された作業項目の前記永続的な状態は、完了、実行中、および中止のうちの少なくとも１つを含むことを特徴とする請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１０】
前記ワークフローコンポーネントはトランザクションを生成し、前記トランザクションは前記１つまたは複数のバッチ処理された作業項目を含むことを特徴とする請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１１】
前記ワークフローコンポーネントは、前記トランザクション内の前記１つまたは複数の割り当てられた作業項目を、前記１つまたは複数の定義された作業項目の機能に応じて区分することをさらに含むことを特徴とする請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１２】
前記１つまたは複数のサービスプロバイダコンポーネントは、１つまたは複数のホスト環境の一部であることを特徴とする請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１３】
前記ワークフローコンポーネントは、前記１つまたは複数の定義された作業項目を１つまたは複数のサービスプロバイダコンポーネントに実行のために割り当て、前記１つまたは複数のサービスプロバイダコンポーネントは、前記１つまたは複数の定義された作業項目に関してリモートである１つまたは複数のホスト環境の一部であることを特徴とする請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１４】
前記１つまたは複数のコミットされた作業項目の実行に失敗した場合に、前記１つまたは複数のサービスプロバイダコンポーネントが前記ワークフローコンポーネントに通知することを特徴とする請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１５】
第１のホスト環境によって実行可能な、１つまたは複数の作業項目のワークフローを管理する方法であって、
前記第１のホスト環境において、１つまたは複数の作業項目を実行することの割当てを受信すること、
前記１つまたは複数の割り当てられた作業項目をバッチに付加することであって、前記１つまたは複数の割り当てられた作業項目を、後で前記第１のホスト環境によって実行するよう指示すること、
前記第１のホスト環境において、前記１つまたは複数の割り当てられた作業項目の実行を求める要求を受信すること、および、
前記第１のホスト環境において、前記１つまたは複数の要求された作業項目を実行すること
を含むことを特徴とする方法。
【請求項１６】
前記割当ては、１つまたは複数の定義された作業項目を含み、
前記トランザクションは、前記１つまたは複数の定義された作業項目の機能に応じて前記トランザクション内の前記１つまたは複数の作業項目のアトミックトランザクション境界を定義することを含み、
前記１つまたは複数の作業項目は、第２のホスト環境において実行可能であること
を特徴とする請求項１５に記載の方法。
【請求項１７】
前記１つまたは複数の作業項目の前記定義されたアトミックトランザクション境界に従って、前記トランザクション内の前記１つまたは複数のバッチ処理された作業項目の前記状態を保存することをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
前記１つまたは複数のバッチ処理された作業項目の前記状態を、コンピュータ読み取り可能記憶媒体に保存することをさらに含み、前記１つまたは複数のバッチ処理された作業項目の前記状態は、完了、実行中、および中止のうちの少なくとも１つを含むことを特徴とする請求項１５に記載の方法。
【請求項１９】
トランザクションに前記バッチを付加することをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項２０】
前記１つまたは複数のコミットされた作業項目の実行に失敗した場合に、前記第１のホスト環境によってメッセージが送信されることをさらに含むことを特徴とする請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、ワークフローモデリングの分野に関し、より具体的には、コミットされていない作業のバッチ処理によって、通信コンポーネント間での持続状態の一貫性を維持することに関する。
【背景技術】
【０００２】
現在のソフトウェアシステムは、ビジネスの問題をモデル化することによって、ビジネスの問題を高いレベルのワークフローにマップしようと試みる。一般に、ワークフロープロセスは、一連のタスクもしくはアクション、それらを実施すべき順序、誰がそれらを実施できるのかを規定する権限、および各アクションで実行されるスクリプトを含む。ワークフローはまた、状態とイベントの観点から記述することもできる。ワークフローエンジンは、例えばソフトウェアシステムのコンポーネントであり、ワークフローを使用可能にし、ワークフロー定義を実施し、ワークフローアクションを実行する。
【０００３】
ワークフローエンジンは３つの主要な機能を有する。第１に、現在のワークフローの状態に対する変更が有効かどうかを検証する。第２に、現在のユーザがワークフローイベントを実行する権限を有しているかどうかを調査する。第３に、そのイベントが有効で、かつユーザがそのイベントを実行する権限を有している場合は、ワークフローエンジンは実行を許可する。例えば、ニュース記事の発行に関するタスクなどの、一連のタスク管理においては、一連の作業項目を実施しなければならない。この例では、タスクには、記事を書くこと、書かれた記事を編集すること、編集された記事を見直すこと、および編集された記事を公表することなどが含まれる。代表的なワークフローエンジンは、様々なサービスプロバイダコンポーネント（例えば、書込みコンポーネント、編集コンポーネント、見直しコンポーネント、公表コンポーネントなど）に、これらの作業項目またはタスクを実施するように要求することができる。
【０００４】
ソフトウェアシステムのワークフローエンジン／コンポーネントは、他のコンポーネント（例えば、書込みコンポーネント、編集コンポーネントなど）と定期的に通信して様々な作業項目の状態を監視する。同時に、これらのコンポーネントもまた、これらの作業項目の状態を監視すること、またはその状態のチェックポイントをとることができる。残念ながら、これらのコンポーネントは、その持続された状態の一貫性を保つための機構を有していない。
【０００５】
例えば、ワークフローエンジンは、ワークフローの実行中に様々なコンポーネントを呼び出し、いくつかの作業項目を実行することができる。ワークフローエンジンは、これらのコンポーネントにいくつかのメッセージを送信して各作業項目の状態を決定することもできる。送信される各メッセージは、メッセージングサービスプロバイダコンポーネントを呼び出す。メッセージングコンポーネントは、ワークフローに関して一貫性があり永続的な状態を維持する必要があるので、ワークフローの状態をうまく持続することができない場合は、メッセージを送信すべきではない。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
残念なことに、この種の垂直統合ソフトウェアシステム設計アプローチ（すなわち、作業項目の実行が、実質的にデータの到着に基づくアプローチ）には多くの欠点がある。例えば、あるコンポーネントが特定のタスクまたは作業項目を実施している間は、他のコンポーネントは、その特定の作業項目の状態（例えば、完了、実行中、中止など）を知ることができない。さらに、実施すべきワークフローの１つまたは複数の作業項目の実行に障害が存在する場合でも、ワークフローエンジンは、状態に関する認識が不足しているため、全体のワークフローを再実行することが必要になる場合もある。
【０００７】
したがって、１つまたは複数のこれらおよび他の欠点に対処するために、ワークフロートランザクションのバッチ処理機構により作業項目のランタイムおよびアプリケーションの状態を同期させるため、ならびにトランザクションのバッチ処理により、ワークフローエンジンが作業項目の実行を遅延できるようにし、通信コンポーネントを介して作業項目の持続された状態の一貫性を維持できるようにするための、ワークフロー管理の改善が必要とされている。
【課題を解決するための手段】
【０００８】
本発明の諸実施形態により、永続的トランザクションにおける、コンポーネントの共用が容易になる。言い換えると、これらの実施形態により、ワークフローの状態および未処理メッセージングの状態を単一のトランザクションにおいて永続記憶装置にコミットすることが可能になり、「チェックポイントがとられた（checkpointed）」状態がすべてのコンポーネントにわたって一貫していることが保証される。本発明の実施形態はワークフローコンポーネントを含み、ワークフローコンポーネントは、サービスプロバイダコンポーネントに対するすべての呼出しまたは割当てにおいて、スレッド呼出し状況での作業バッチオブジェクトをフロート（float）する。サービスプロバイダコンポーネントは、コミットタイムにすべてのアクションを単一のトランザクションとして処理するバッチ処理に、作業を追加することを選択することができる。
【０００９】
一態様によれば、一方法によりワークフローの状態が管理される。実行すべき１つまたは複数の作業項目が定義される。定義された１つまたは複数の作業項目が、実行のために１つまたは複数のサービスプロバイダコンポーネントに割り当てられる。１つまたは複数の割り当てられた作業項目は、後で１つまたは複数のサービスプロバイダコンポーネントへバッチ処理される。１つまたは複数のバッチ処理された作業項目の状態は持続される。１つまたは複数のサービスプロバイダコンポーネントが、１つまたは複数のコミットされた作業項目を実行するとき、１つまたは複数のサービスプロバイダコンポーネントは、１つまたは複数のバッチ処理された作業項目の実行にコミットする。
【００１０】
他の態様によれば、１つまたは複数のコンピュータ読み取り可能記憶媒体は、ワークフローの状態を管理するためのコンピュータ実行可能コンポーネントを含む。ワークフローコンポーネントは、１つまたは複数の実行すべき作業項目を割り当てる。ワークフローコンポーネントはまた、１つまたは複数の作業項目を定義し、１つまたは複数の割り当てられた作業項目を後でバッチ処理する。１つまたは複数のサービスプロバイダコンポーネントは、１つまたは複数のバッチ処理された作業項目の実行にコミットする。
【００１１】
さらに他の態様によれば、システムはサービスの永続的状態を維持する。ワークフローエンジンは、実行すべき１つまたは複数の作業項目を割り当てる。ワークフローエンジンは１つまたは複数の作業項目を定義し、１つまたは複数の割り当てられた作業項目を後でバッチ処理する。サービスプロバイダコンポーネントは、１つまたは複数の割り当てられた作業項目の実行にコミットする。
【００１２】
さらにまた他の態様においては、一方法により、第１のホスト環境によって実行可能な１つまたは複数の作業項目のワークフローが管理される。１つまたは複数の作業項目の実行の割当ては第１のホスト環境において受信される。１つまたは複数の割り当てられた作業項目が第１のホスト環境においてバッチに付加され、その１つまたは複数の割り当てられた作業項目が、後で第１のホスト環境によって実行されるように指示される。１つまたは複数の割り当てられた作業項目の実行を求める要求が、第１のホスト環境において受信される。第１のホスト環境は、１つまたは複数の要求された作業項目を実行する。
【００１３】
別法として、本発明は様々な他の方法および装置を含むことができる。
【００１４】
他の特徴については、一部は自明であり、また一部は以下の記述によって指し示す。
【００１５】
全図面を通して、対応する参照番号は対応する部品を示す。
【発明を実施するための最良の形態】
【００１６】
最初に図１を参照すると、本発明の一実施形態による、コミットされていない作業のバッチ処理により、通信コンポーネントを介して持続された状態の一貫性を維持するためのシステム１００の構成図が示されている。システム１００は、これに限られるものではないが、ワークフローコンポーネント１０２、１つまたは複数のサービスプロバイダコンポーネント１０４、永続記憶装置１０６を含む。一実施形態では、システム１００は１つまたは複数のコンポーネント（例えば、ワークフローコンポーネント１０２、サービスプロバイダコンポーネント１０４など）を含むソフトウェアシステムである。他の実施形態では、システム１００は、本発明の実施形態を含む１つまたは複数のアプリケーションおよび／またはソフトウェアシステムを含む、企業アプリケーション統合システムなどの統合ソフトウェアアプリケーションシステムである。
【００１７】
ワークフローコンポーネント１０２は、サービスプロバイダコンポーネント１０４（例えば、１０４−１から１０４−Ｎ）によって実施されるタスクの形で作業を管理する。
【００１８】
図１のサービスプロバイダコンポーネント１０４−１から１０４−Ｎは、様々なサービスまたは作業項目を提供するコンポーネントである。例えば、サービスプロバイダコンポーネント１０４−１は、ユーザ検索クエリの受信、製品のオンライン発注書の受信などのウェブサービスを提供するコンポーネントであってもよい。一実施形態では、サービスプロバイダコンポーネント１０４は、ホスト環境とも呼ばれるシステム１００の一部であり、サービスプロバイダコンポーネント１０４はホストである。他の実施形態では、サービスプロバイダコンポーネント１０４の一部またはすべては、システム１００の外部に存在する。例えば、サービスプロバイダコンポーネント１０４−１は、サービスプロバイダコンポーネント１０４−２とは別のソフトウェアアプリケーションまたはシステムであってもよい。他の実施形態では、サービスプロバイダコンポーネント１０４によって実施される作業項目の例には、これに限られるものではないが、メッセージング、インスタンス、トランザクション、パーシスタンス（persistence）、スレッディング、タイマ、ロール（role）、トラッキングなどが含まれる。
【００１９】
図１に示したようなワークフローコンポーネント１０２およびサービスプロバイダコンポーネント１０４は、システム１００の一部であるが、これらのコンポーネント（すなわち、ワークフローコンポーネント１０２、サービスプロバイダコンポーネント１０４、および／または永続記憶装置１０６）は、別のシステム（例えば、別のホスト環境）の一部であってもよいことを理解されたい。例えば、ワークフローコンポーネント１０２はスタンドアロンソフトウェアアプリケーションであってもよく、一方サービスプロバイダコンポーネント１０４−１および／またはサービスプロバイダコンポーネント１０４−２は、ワードプロセッシングソフトウェア、スプレッドシートソフトウェアなど別のソフトウェアであってもよい。
【００２０】
最初に、ワークフローコンポーネント１０２は一連の実行すべき作業項目を有する。例えば、ウェブサービスを提供するシステムでは、新製品を販売するための新しいウェブページを作成するための一連の作業項目が必要になることがある。作業項目またはタスクには、これに限られるものではないが、製品の写真を提供すること、製品の説明を提供すること、製品の入手可能性を検索することなどが含まれる。この例では、サービスプロバイダコンポーネント１０４−１から１０４−Ｎが、これらの作業項目のすべてまたは一部を実施または実行するサービスを提供する。図１に示したように、サービスプロバイダコンポーネント１０４は、ワークフローコンポーネント１０２だけでなく、永続記憶装置１０６と直接対話することもできる。
【００２１】
この一連の作業項目について考える。ワークフローコンポーネント１０２は、最初にこれらの作業項目の実行を定義する。新しいウェブページを作成する上記の例では、製品の説明の前に製品の写真を提供するなど、作業項目の実行の順序を定義する。さらに、ワークフローコンポーネント１０２は、締め切りおよび／または他のビジネスルールなど他のルールも定義する。例えば、ワークフローコンポーネント１０２は、新しいページ作成の完了締め切りおよび／またはオンライン顧客が新製品を入手できるようになったときの最初の２日間のディスカウントなどを設定することができる。作業項目実行のための他のルールおよび／または定義を、ワークフローコンポーネント１０２に提供できることを理解されたい。
【００２２】
これら一連の作業項目が定義された後で、ワークフローコンポーネント１０２は、これらの作業項目を１つまたは複数のサービスプロバイダコンポーネント１０４に割り当てる。次に、図２を参照すると、本発明の一実施形態による、サービスプロバイダコンポーネント１０４からの作業項目のバッチ処理についてのフロー図が示されている。例えば、サービスプロバイダコンポーネントを呼び出す前に、ワークフローコンポーネント２０２は、２０８において、一連の作業項目に対する作業バッチを生成する。２１０−１において、ワークフローコンポーネント２０２は、サービスプロバイダコンポーネントＡ（例えば、サービスプロバイダコンポーネント１０４−１）にメッセージを送信することによって、（例えば、新製品の写真を提供するなどの）作業項目を割り当てる。言い換えると、ワークフローコンポーネント２０２は、サービスプロバイダコンポーネントＡ上の動作の呼び出しに、バッチを加える。同様に、サービスプロバイダコンポーネントＡは、第１の作業項目を生成し、それに作業バッチを付加する。同様に、ワークフローコンポーネント２０２は、２１２−１によって、（例えば、新製品の説明を提供するなどの）他の作業をサービスプロバイダコンポーネントＢ（例えば、サービスプロバイダコンポーネント１０４−２）に割り当てる。一実施形態では、ワークフローコンポーネント２０２は、サービスプロバイダコンポーネントＡに作業項目の実行を遅延させるように要求することによって、作業項目をサービスプロバイダコンポーネントＡに割り当てる。例えば、ワークフローコンポーネント２０２は、ワークフローコンポーネント２０２がサービスプロバイダコンポーネントＡに実施するように指示するまで、サービスプロバイダコンポーネントＡに作業項目を実施しないよう要求する。他の実施形態では、ワークフローコンポーネント２０２は、各々が様々なサービスプロバイダコンポーネント１０４によって実施される一連の作業項目を含む、１つまたは複数の作業バッチを生成することができる。
【００２３】
ワークフローコンポーネント２０２がサービスプロバイダコンポーネントＡに作業項目を実施するよう要求することができること、および、サービスプロバイダコンポーネントＡが、全体の作業項目ではなく、割り当てられた作業項目の一部分を作業バッチに付加することを理解されたい。例えば、サービスプロバイダコンポーネントＡによって作業バッチに付加される作業項目は、ワークフローコンポーネント２０２からの要求のデータベース要素であってもよい。他の例では、サービスプロバイダコンポーネントＢによって作業バッチに付加される作業項目は、ワークフローコンポーネント２０２からの同じ要求の異なる部分であってもよい。
【００２４】
ワークフローコンポーネント２０２と各サービスプロバイダコンポーネント（例えば、サービスプロバイダコンポーネントＡ）との間で、複数の対話が行われることがあることを理解されたい。例えば、ワークフローコンポーネント２０２は、２１０−２によってサービスプロバイダコンポーネントＡに（または、２１２−２によってサービスプロバイダコンポーネントＢに）、２つ以上の作業項目を割り当てることができる。また、サービスプロバイダコンポーネントＡは、１つまたは複数の割り当てられた作業項目を２１４−２によって作業バッチに付加することができる（あるいは、サービスプロバイダコンポーネントＢは、１つまたは複数の割り当てられた作業項目を２１６−２によって作業バッチに付加することができる）。
【００２５】
他の実施形態では、ワークフローコンポーネント２０２は、特定のサービスプロバイダコンポーネントに割り当てられた作業項目に関する作業バッチを生成することができる。例えば、ワークフローコンポーネント２０２は、サービスプロバイダコンポーネントＡからの作業項目に対する１つの作業バッチを生成し、サービスプロバイダコンポーネントＢからの作業項目に対するもう１つの作業バッチを生成することができる。このように、ワークフローコンポーネント２０２は、必要に応じて各サービスプロバイダコンポーネントに対する作業バッチを生成する。
【００２６】
サービスプロバイダコンポーネントＡは、作業バッチに割り当てられた作業項目を付加または追加することによって、２１４−１によってワークフローコンポーネント２０２に応答する。同様に、サービスプロバイダコンポーネントＢは、２１６−１によって作業バッチに作業項目を付加する。例えば、上記の例を使用すると、サービスプロバイダコンポーネント１０４−１は、新しいウェブページを作成するために新製品の写真を提供することができるというメッセージをワークフローコンポーネント１０２に送信する。同様に、サービスプロバイダコンポーネント１０４−２は、新製品の説明を提供できるというメッセージをワークフローコンポーネント１０２に送信する。ワークフローコンポーネント１０２が、個々のサービスプロバイダコンポーネント１０４がどのようにして個々の作業項目を実行するのかの詳細を知らなくてもよいことを理解されたい。新製品の新しいウェブページを作成する上記の例を用いると、サービスプロバイダコンポーネント１０４−１は、多数の製品写真を含むデータベースにアクセスして新製品の写真を見つけ出すことが必要になることもある。同様に、サービスプロバイダコンポーネント１０４−２は、製品についての説明を含むデータベースにアクセスすることが必要になること、および／またはデータベースから入手できない場合は、新しい説明を提供するために人の介在が必要になることもある。
【００２７】
図２には、２つのサービスプロバイダコンポーネントＡおよびＢだけが示されているが、これらおよび他のサービスプロバイダコンポーネントに、追加の作業項目を割り当てることができることを理解されたい。サービスプロバイダコンポーネント１０４は、ワークフローコンポーネント１０２から割り当てられた作業項目の実施を拒絶することができることも理解されたい。
【００２８】
サービスプロバイダコンポーネントＡおよび／またはＢからのメッセージを受信するとすぐに、ワークフローコンポーネント２０２は、２２６で作業項目の状態を持続するためのバッチ処理された作業項目を含むトランザクションを生成する。例えば、ワークフローコンポーネント２０２は、予定された時点または時間にトランザクションを生成することができる。２１８−１で、ワークフローコンポーネント２０２は、サービスプロバイダコンポーネントＡに、（例えば、新製品の写真を提供することなどの）バッチ処理された作業項目を持続するよう要求する。言い換えると、ワークフローコンポーネント２０２はサービスプロバイダコンポーネントＡにバッチ処理された作業項目の実行の状態に関する要求を行う。２２２−１において、サービスプロバイダコンポーネントＡは、「未実行」、「完了」、「実行中」、「中止」など、バッチ処理された作業項目の状態を示すことによって、ワークフローコンポーネント２０２に応答する。個々の作業項目に対応する１つまたは複数の他の状態を、ワークフローコンポーネント２０２に提供できることを理解されたい。同様に、ワークフローコンポーネント２０２は、２２０−１で、サービスプロバイダコンポーネントＢ（例えば、サービスプロバイダコンポーネント１０４−２）に、（例えば、新製品の説明を提供することなどの）バッチ処理された作業項目の実行の状態を永続するよう要求し、２２４−１において、サービスプロバイダコンポーネントＢはその要求に応答する。
【００２９】
ワークフローコンポーネント２０２が、他のバッチ処理された作業項目の実行の状態に関する複数の要求（例えば、２１８−２など）をサービスプロバイダコンポーネントＡに送信することができることを理解されたい。同様に、サービスプロバイダコンポーネントＡは、（例えば、２２２−２において）ワークフローコンポーネント２０２に応答して、他の要求によるバッチ処理された作業項目の状態を示すことができる。
【００３０】
本発明の一実施形態によれば、ワークフローコンポーネント２０２は、状態を持続するためのトランザクションを生成する。ワークフローコンポーネント２０２は作業バッチを繰り返し、サービスプロバイダコンポーネントＡについての作業項目のすべてを収集する。この例では、ワークフローコンポーネント２０２は、各作業項目間の順序を維持して特定の作業バッチを生成する。ワークフローコンポーネント２０２は、コミットポイントにおいて、サービスプロバイダコンポーネントＡの動作を呼び出したときに、トランザクションおよび作業バッチを渡す。サービスプロバイダコンポーネントＡは、トランザクションに作業バッチ中の各作業項目を追加する。言い換えると、作業項目が持続される。これらのプロセスは、作業バッチ中の各項目を含むすべてのコンポーネントに対して繰り返すことができる。コミット通知またはメッセージの成功時に、ワークフローコンポーネント２０２はトランザクションをコミットする。次いで、トランザクションのコミットに成功すると、ワークフローコンポーネント２０２は、（サービスプロバイダコンポーネントＡに関して前述したように）バッチを繰り返し、各コンポーネントに対するすべての作業項目を収集する。
【００３１】
次に、ワークフローコンポーネント１０２は、サービスプロバイダコンポーネント１０４によって提供される永続記憶装置１０６に作業項目の状態を格納する。例えば、サービスプロバイダコンポーネント１０４は、作業項目の状態を格納するために、永続記憶装置１０６など、そのコンポーネントの全体のリソース環境をワークフローコンポーネント１０２に提供する。同様に、対話（例えば、図１のサービスプロバイダコンポーネント１０４−Ｎと永続記憶装置１０６の間の矢印）は、ワークフローコンポーネント１０２のために永続記憶装置１０６にアクセスして作業項目の状態を格納する、サービスプロバイダコンポーネント１０４−Ｎを示す一例である。図１には、ただ１つの永続記憶装置１０６だけが示されているが、作業項目の状態を格納するために、ワークフローコンポーネント１０２が複数の永続記憶装置を使用できることを理解されたい。永続記憶装置１０６は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、その他のデータなどの情報を格納するための揮発性および不揮発性、取り外し可能および取り外し不可能な媒体であってもよい（例えば、図５のシステムメモリ１３４）。格納された作業項目の永続的な状態を使用して、ワークフローコンポーネント１０２は作業項目の一貫性を維持することができる。言い換えると、ワークフローコンポーネント１０２は定期的に作業項目のチェックポイントをとり、そのチェックポイントでの作業項目の状態を格納して、すべての作業項目の永続的な状態を維持する。
【００３２】
２２８において、ワークフローコンポーネント２０２はトランザクションをコミットする。言い換えると、ワークフローコンポーネント２０２は、サービスプロバイダコンポーネントＡおよび／またはＢに、バッチ処理された作業項目の実行にコミットするよう要求する。新製品のために新しいウェブページを作成する上述の例を再度参照すると、ワークフローコンポーネント１０２が、タスクを完了するために必要なすべての作業を割り当てた後で、ワークフローコンポーネント１０２はサービスプロバイダコンポーネントに新製品の写真の提供、新製品の説明の提供などを要求する。このような作業項目の割当て、バッチ処理、およびコミットを介して、ワークフローコンポーネント２０２は、割当て時に作業項目が実行／実施される垂直統合モデルの不利な点や欠点の解決を支援することを理解されたい。この遅延実行を提供することによって、ワークフローコンポーネント２０２は、作業項目の一貫した状態を維持しながら、いつ作業項目を実行／実施すべきかを管理する。同時に、各サービスプロバイダコンポーネントＡおよび／またはＢはまた、他のサービスプロバイダコンポーネントが個々のバッチ処理またはトランザクション中に有する作業項目の状態についての一貫したビューも備える。
【００３３】
限定のためではなく例として、メッセージングサービスプロバイダコンポーネントの「Ｓｅｎｄ（送信）」メッセージは、特別なＳＱＬ（structured query language）を含むオブジェクトを構成することに帰着することがある。この例では、メッセージングサービスプロバイダコンポーネントは、オブジェクト、すなわち、Ｗｏｒｋ  Ｉｔｅｍ（作業項目）を作業バッチに追加する。ワークフローコンポーネントによって決定された、スケジュールされたコミットポイントにおいて、トランザクションが生成される。さらに、すべての未処理の割り当てられた作業項目にはトランザクションが与えられ、サービスプロバイダコンポーネントは作業項目の実行／実施にコミットするよう指示される。このポイントにおいて、例えば、メッセージングサービスプロバイダコンポーネントは、トランザクションの一部としてＳＱＬを実行するのに適切な、あらゆるアクションを実施する。次いで、トランザクションがコミットされる。
【００３４】
次に、図３を参照すると、本発明の一実施形態による、１つまたは複数の付加された作業項目を有する、トランザクション３０４の構成図が示されている。先に論じたように、ワークフローコンポーネント１０２は、バッチ処理された作業項目からなる１つまたは複数のバッチを含むトランザクションを生成する。一実施形態では、トランザクション３０４は１つまたは複数のトランザクション３０２（例えば、３０２−１から３０２−Ｎ）を含む長期実行トランザクションであり、完了までに非常に長い期間（例えば、数カ月）を要する。言い換えると、トランザクション３０２は、トランザクション３０４など他の長期実行トランザクションの中にバッチ処理されることができる。各トランザクション３０２は、各トランザクション３０２が個別のブロックで示された図３に示されるように、トランザクション境界に従って構成される。例えば、トランザクション３０２−１（例えば、アトミックトランザクション（atomic transaction）１）は、トランザクション３０２−２（例えば、アトミックトランザクション２）とは別の境界を有する。個別の境界を有するトランザクション３０２を定義することによって、ワークフローコンポーネント１０２はトランザクション３０２のチェックポイントをとり、トランザクション３０２の状態／状況を決定することができる。例えば、ワークフローコンポーネント１０２は、３０８において、トランザクション３０２−１の状態を調査または監視する。同様に、ワークフローコンポーネント１０２は、３０６において、トランザクション３０２−２の状態を調査する。トランザクション３０２の状態のチェックポイントをとることによって、ワークフローコンポーネント１０２はトランザクション３０２の作業項目の永続的な状態を維持する。
【００３５】
他の例では、各トランザクション３０２には、１つまたは複数の作業項目を含む１つまたは複数のバッチが含まれる。例えば、アトミックトランザクション３０２−１には、１つまたは複数の作業項目（図示せず）を含むバッチ（または、スコープバッチ（scope batch））３１０が含まれる。同様に、アトミックトランザクション３０２−２には、１つまたは複数の作業項目を含むバッチ（または、スコープバッチ）３１２が含まれる。図３のアトミックトランザクション３０２−１には、ただ１つのバッチ３１０だけが示されているが、各トランザクション３０２が１つまたは複数のバッチまたは内部スコープバッチを含むことができることを理解されたい。
【００３６】
他の実施形態においては、障害のために１つまたは複数の作業項目または全体のトランザクションが実行されない場合に、ワークフローコンポーネント１０２は、定義されたトランザクション境界のおかげで影響を受けない他のトランザクションとともにある、障害のあるトランザクション中の作業項目を中止することだけを必要とする。ワークフローコンポーネント１０２は、最初に、障害の起こっているスコープ（例えば、アトミックトランザクション３０２−１のスコープバッチ３１０）に関係するすべての作業項目を識別し、障害作業バッチを構成する。次いで、ワークフローコンポーネント１０２は、各個別の未処理作業項目の「完了」状態を呼び出し、障害作業バッチ内のすべての作業に対して完了状態を「偽（false）」に設定する。さらに、ワークフローコンポーネント１０２は、この作業バッチ内のすべての作業を中止する。この実施形態におけるランタイムは、障害からの回復の後で、残りのすべての作業バッチ項目への参照を維持する。次いで各作業を、後の永続ポイントでコミットすることができる。
【００３７】
新しいウェブページを作成する前述の例において、トランザクション内の作業項目の実行をコミットした後で、サービスプロバイダコンポーネント１０４−１が新製品の写真を提供することができないと想定する。トランザクションの永続的な状態を維持する際に、ワークフローコンポーネント１０２は、特定の作業項目（例えば、新製品の写真を提供することなど）が中止されたか、または未完了であるかを判断する。ワークフローコンポーネント１０２は次に、このトランザクション（すなわち、新しいウェブページを作成すること）中の作業項目の一部またはすべてを中止するが、この障害のあったトランザクションによって他のトランザクション（例えば、他の項目のためのオーダを取るなど）が影響を受けることはない。一実施形態では、他のトランザクションにおける他の作業項目の完了時、または障害からの回復時に、ワークフローコンポーネント１０２は、障害のあるトランザクションの参照（例えば、バッチ処理された作業項目、作業項目定義など）を維持して、後でワークフローコンポーネント１０２はサービスプロバイダコンポーネント１０４がその作業項目に再度コミットするよう要求できるようにすることができる。
【００３８】
さらに他の実施形態では、サービスプロバイダコンポーネント１０４−１は、コミットされた作業項目の実行を完了できないと知らせるメッセージを、ワークフローコンポーネント１０２に通知または送信することができる。その結果、ワークフローコンポーネント１０２は、受信したメッセージに応答して作業項目を中止することができる。
【００３９】
図４は、本発明の一実施形態による、コミットされていない作業のバッチ処理により、通信コンポーネントを介して持続された状態の一貫性を維持する動作を示す一例示的流れ図である。最初に、ワークフローコンポーネント１０２は、実行／実施すべき一組の作業項目を含むワークフローを定義する。４０２において、ワークフローコンポーネント１０２は、作業バッチを生成する。４０４において、ワークフローコンポーネント１０２は、作業項目をサービスプロバイダコンポーネント（例えば、サービスプロバイダコンポーネント１０４−１）に割り当てる。例えば、ワークフローコンポーネント１０２は、作業項目（例えば、新製品の写真を提供すること）をサービスプロバイダコンポーネント１０４に割り当てる。４０６において、サービスプロバイダコンポーネント１０４は、割当てに従って作業項目を生成し、それを作業バッチに付加する。４０８において、ワークフローコンポーネント１０２は、ワークフローを完成させるために作業バッチにさらに付加すべき作業項目があるかどうかを判定する。判定結果が肯定の場合は、ワークフローコンポーネント１０２は４０４に続き、その作業バッチに追加すべき追加の作業項目を収集する。
【００４０】
判定が否定の場合は、ワークフローコンポーネント１０２は、４１０においてトランザクションを生成する。あるいは、ワークフローコンポーネント１０２は、スケジュールされた時間またはポイントにおいて、トランザクションを生成することができる。４１２において、ワークフローコンポーネント１０２は、バッチ処理された作業項目をトランザクションに収集する。４１４において、ワークフローコンポーネント１０２は作業項目の状態を持続する。次に４１６において、ワークフローコンポーネント１０２は、トランザクションの実行をコミットする。すなわち、ワークフローコンポーネント１０２は、割り当てられた作業を実行／実施するようサービスプロバイダコンポーネント１０４に要求する。サービスプロバイダコンポーネント１０４が作業項目にコミットした後で、ワークフローコンポーネント１０２は、作業項目の状態を図１の永続記憶装置１０６に格納することによって作業項目の状態を持続することを理解されたい。
【００４１】
４１８で、ワークフローコンポーネント１０２は、定期的に作業項目／トランザクションの状態のチェックポイントをとることによって、コミットされた作業項目の実行の間に何らかの障害が発生しているかどうかを判定する。他の実施形態では、サービスプロバイダコンポーネント１０４は、ワークフローコンポーネント１０２に障害が発生したことをメッセージ送信するか、または通知する。実行障害がないとワークフローコンポーネント１０２が判定した場合は、４２０において、ワークフローコンポーネント１０２はトランザクションの実行を完了する。
【００４２】
一方、ワークフローコンポーネント１０２が、実行障害があると判定した場合、または他の実施形態で、サービスプロバイダコンポーネントが実行障害があると示した場合は、ワークフローコンポーネント１０２は、４２２において、障害のある作業項目／トランザクションに関連するバッチを中止する。言い換えると、この実施形態では、ワークフローコンポーネント１０２は、（障害のあるスコープの）内部バッチ中のすべての項目を中止し、後のコミットポイントのために周囲のスコープ中の作業項目を維持する。４２４において、ワークフローコンポーネント１０２は、非障害作業項目の実行を完了する。ワークフローコンポーネント１０２は、４２６において、障害のある作業項目に関連する作業への参照を維持し、（破線で示されているように）後でサービスプロバイダコンポーネント１０４を、障害のあった作業項目にコミットさせ続けさせることもできる。付録Ａは、ワークフロートランザクションのバッチ処理のための例示的プロトコルを示す。
【００４３】
本発明は、本発明の特徴の少なくともいくつかを実施する作業項目を含むバッチを実装することによって、従来のワークフローシステム設計およびモデリングに対する利点を提供する。動作に際して、１つまたは複数のコンポーネントまたは複数のソフトウェアシステムを含むソフトウェアシステムは、複数のワークフローを管理するワークフローコンポーネントを含む。ワークフローコンポーネントは、１つまたは複数のサービスプロバイダコンポーネントによって実施される（例えば、新製品のための新しいウェブページを作成することなどの）ワークフローを定義する。例えば、新しいウェブページ作成のためのワークフローには、新製品の写真を提供すること、新製品の説明を提供すること、新製品の入手性の決定などを含めることができる。サービスプロバイダコンポーネントが、ワークフローコンポーネントとは別のソフトウェアシステム、アプリケーション、またはパッケージ内に存在してもよいことを理解されたい。
【００４４】
ワークフローコンポーネントは作業バッチを生成し、作業項目をサービスプロバイダコンポーネントに割り当てるメッセージを送信する。サービスプロバイダコンポーネントは、割り当てられた作業項目が実行／実施できるかどうかを判定する。判定が肯定の場合は、サービスプロバイダコンポーネントは、作業バッチに作業項目を付加する。このバッチ処理プロセスによって、ワークフローコンポーネントは、割り当てられた作業項目の実質上同時に起こる実行を遅延させることを理解されたい。
【００４５】
次に、ワークフローコンポーネントは、バッチされた作業項目を含むトランザクションを生成する。ワークフローコンポーネントは、トランザクション／作業項目のチェックポイントをとり、作業項目の状態を永続記憶装置に格納することによって、作業項目の状態を定期的に持続する。その際、ワークフローコンポーネントは、様々なトランザクションにおける作業項目の持続された状態の一貫性を維持する。ワークフローコンポーネントは、サービスプロバイダコンポーネントに作業項目を実行／実施することを要求することによってトランザクションをコミットする。
【００４６】
実行障害が発生した場合は、ワークフローコンポーネントは障害のある作業項目を中止する。ワークフローコンポーネントは、引き続き非障害作業項目の実行を完了させる。一実施形態では、サービスプロバイダコンポーネントは、ワークフローコンポーネントに実行障害が発生したことを知らせるメッセージを送信する。障害のある実行から回復したとき、または非障害作業項目の実行が完了した後で、ワークフローコンポーネントは、その後障害のある作業項目をコミットすることができる。
【００４７】
図５はコンピュータ１３０の形の汎用コンピュータ装置の一例を示す。本発明の一実施形態において、コンピュータ１３０などのコンピュータは、本明細書で図示し説明した他の図における使用にも適するものである。コンピュータ１３０は１つまたは複数のプロセッサまたは処理ユニット１３２、およびシステムメモリ１３４を有する。図示の実施形態では、システムバス１３６は、システムメモリ１３４など様々なシステムコンポーネントをプロセッサ１３２に結合する。バス１３６は、メモリバスもしくはメモリコントローラ、ペリフェラルバス、ＡＧＰ（accelerated graphics port）、および様々なバスアーキテクチャのいずれかを使用するプロセッサもしくはローカルバスなど、いくつかの種類のバス構造のうちの任意の１つまたは複数を表す。限定の意味ではなく例として、このようなアーキテクチャには、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video  Electronics Standards Association）ローカルバス、メザニン（Mezzanine）バスとも呼ばれるＰＣＩ（Peripheral Component Interconnect）バスなどが含まれる。
【００４８】
一般に、コンピュータ１３０は、少なくとも何らかの形のコンピュータ読み取り可能記憶媒体を含む。コンピュータ読み取り可能記憶媒体は、コンピュータ１３０によってアクセス可能な任意の使用可能媒体でよく、揮発性および不揮発性媒体、ならびに取り外し可能および取り外し不可能な媒体の両方を含む。限定の意味ではなく例として、コンピュータ読み取り可能記憶媒体には、コンピュータ記憶媒体および通信媒体を含めることができる。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、その他のデータなどの情報を記憶するための任意の方法または技術で実装された、揮発性および不揮発性、取り外し可能および取り外し不可能な媒体を含む。例えば、コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術製品、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disks）、または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置、あるいは、所望の情報を格納するために使用することができ、かつコンピュータ１３０によってアクセスできる他の任意の媒体を含む。一般に、通信媒体はコンピュータ読み取り可能命令、データ構造、プログラムモジュール、その他のデータなどを、搬送波もしくは他の伝送機構など被変調データ信号の形で実施するとともに、いずれかの情報送達媒体を含む。当業者ならば、情報を信号中に符号化するような形で設定または変更された、１つまたは複数の信号特性を有する被変調データ信号については熟知しているはずである。有線ネットワーク、直接有線接続などの有線媒体、および音響、無線周波数（ＲＦ）、赤外などの無線媒体は通信媒体の例である。上記の媒体の任意の組合せもまた、コンピュータ読み取り可能記憶媒体の範囲に含まれる。
【００４９】
システムメモリ１３４は、取り外し可能および／または取り外し不可能、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。図示の実施形態では、システムメモリ１３４は、ＲＯＭ（読み出し専用メモリ）１３８およびＲＡＭ（ランダムアクセスメモリ）１４０を含む。基本入／出力システム（ＢＩＯＳ）１４２は、例えば起動時などに、コンピュータ１３０内の各要素間の情報転送を支援する基本ルーチンを含み、通常はＲＯＭ１３８に格納されている。ＲＡＭ１４０は一般に、処理ユニット１３２によって即時にアクセス可能かつ／または現在動作中である、データおよび／またはプログラムモジュールを含む。限定の意味ではなく、例として、図５には、オペレーティングシステム１４４、アプリケーションプログラム１４６、その他のプログラムモジュール１４８、およびプログラムデータ１５０が示されている。
【００５０】
コンピュータ１３０は、他の取り外し可能／取り外し不可能、揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。例えば図５には、取り外し不可能な不揮発性の磁気媒体に読み書きするハードディスクドライブ１５４が示されている。図５にはまた、取り外し可能な不揮発性磁気ディスク１５８に読み書きする磁気ディスクドライブ１５６、およびＣＤ−ＲＯＭや他の光媒体など取り外し可能な不揮発性光ディスク１６２に読み書きする光ディスクドライブ１６０も示されている。例示の動作環境で使用できる、他の取り外し可能／取り外し不可能、揮発性／不揮発性のコンピュータ記憶媒体には、これに限定されるものではないが、磁気テープカセット、フラッシュメモリカード、ＤＶＤ、デジタルビデオテープ、半導体ＲＡＭ、半導体ＲＯＭなどが含まれる。ハードディスクドライブ１５４、ならびに磁気ディスクドライブ１５６および光ディスクドライブ１６０は一般に、インターフェース１６６などの不揮発性メモリインターフェースによってシステムバス１３６に接続される。
【００５１】
上述し図５に示した各ドライブまたは大容量記憶装置、ならびにそれらに関連するコンピュータ記憶媒体は、コンピュータ１３０のためのコンピュータ読み取り可能命令、データ構造、プログラムモジュール、その他のデータなどを記憶する。図５において、例えば、ハードディスクドライブ１５４は、オペレーティングシステム１７０、アプリケーションプログラム１７２、その他のプログラムモジュール１７４、およびプログラムデータ１７６を格納するように図示されている。これらのコンポーネントは、オペレーティングシステム１４４、アプリケーションプログラム１４６、その他のプログラムモジュール１４８、およびプログラムデータ１５０と同一であっても、異なっていてもよいことに留意されたい。オペレーティングシステム１７０、アプリケーションプログラム１７２、他のプログラムモジュール１７４、およびプログラムデータ１７６は、少なくともそれらが異なるコピーであることを示すために、本明細書では異なる番号が付与されている。
【００５２】
ユーザは、キーボード１８０やポインティング装置１８２（例えば、マウス、トラックボール、ペン、タッチパッド）などの入力装置またはユーザインターフェース選択装置を介して、命令および情報をコンピュータ１３０に入力することができる。他の入力装置（図示せず）には、マイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらおよび他の入力装置は、システムバス１３６に結合されたユーザ入力インターフェース１８４を介して処理ユニット１３２に接続されるが、パラレルポート、ゲームポート、ＵＳＢ（Universal Serial Bus）など、他のインターフェースやバス構造を用いて接続されることもある。モニタ１８８、または他の種類の表示装置もまた、ビデオインターフェース１９０などのインターフェースを介してシステムバス１３６に接続される。モニタ１８８の他に、コンピュータは、出力ペリフェラルインターフェース（図示せず）を介して接続できるプリンタやスピーカなど、他の周辺出力装置（図示せず）を含むことも多い。
【００５３】
コンピュータ１３０は、リモートコンピュータ１９４など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク環境で動作させることができる。リモートコンピュータ１９４は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、他の一般的なネットワークノードなどであってもよく、コンピュータ１３０に関連して上述した要素の多く、またはすべてを含むことができる。図５に示された論理接続には、ＬＡＮ（ローカルエリアネットワーク）１９６およびＷＡＮ（ワイドエリアネットワーク）１９８が含まれているが、他のネットワークを含めることもできる。ＬＡＮ１９６および／またはＷＡＮ１９８は有線ネットワークでも、無線ネットワークでも、それらの組合せなどであってもよい。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびグローバルコンピュータネットワーク（例えば、インターネット）において一般的なものである。
【００５４】
ＬＡＮネットワーク環境で使用されるとき、コンピュータ１３０は、ネットワークインターフェースまたはアダプタ１８６を介してＬＡＮ１９６に接続される。ＷＡＮネットワーク環境で使用されるとき、コンピュータ１３０は一般に、インターネットなどのＷＡＮ１９８を介して通信を確立するためのモデム１７８、その他の手段を含む。モデム１７８は、内蔵でも外付けでもよいが、ユーザ入力インターフェース１８４または他の適切な機構を介してシステムバス１３６に接続される。ネットワーク環境では、コンピュータ１３０に関連して示された各プログラムモジュールまたはその一部は、リモートのメモリ記憶装置（図示せず）に格納することができる。限定の意味ではなく例として、図５には、リモートアプリケーションプログラム１９２が、メモリ装置上に常駐するように示されている。図示のネットワーク環境は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段を使用することもできる。
【００５５】
一般に、コンピュータ１３０のデータプロセッサは、異なる時点においてコンピュータのさまざまなコンピュータ読み取り可能記憶媒体に格納された、命令を用いてプログラムされる。プログラムおよびオペレーティングシステムは一般に、例えば、フロッピー（登録商標）ディスクやＣＤ−ＲＯＭなどに分散される。そこから、それらはコンピュータの２次メモリにインストールまたはロードされる。実行時には、それらの少なくとも一部はコンピュータの主電子メモリにロードされる。本明細書に記載の本発明は、これらおよび他の様々な種類のコンピュータ読み取り可能記憶媒体を含み、それらの媒体には、マイクロプロセッサまたは他のデータプロセッサと共に使用される、以下に記載の諸ステップを実行するための命令またはプログラムが含まれる。本発明はまた、本明細書に記載の方法および技術に従ってプログラムされたコンピュータそれ自体も含む。
【００５６】
例示のために、オペレーティングシステムなどのプログラムや他の実行可能なプログラムコンポーネントは、本明細書では個別のブロックとして示されている。しかし、このようなプログラムおよびコンポーネントは、様々な時点にコンピュータの様々な記憶コンポーネントに存在し、コンピュータのデータプロセッサによって実行されることを理解されたい。
【００５７】
コンピュータ１３０などの例示的コンピュータシステム環境と共に説明されているが、本発明は多くの他の汎用または専用コンピュータシステム環境または構成と共に使用することができる。このコンピュータシステム環境は、本発明の使用または機能の範囲に関するいかなる制限を示唆することも意図したものでもない。さらに、コンピュータシステム環境は、例示的動作環境に示されたコンポーネントのいずれか、またはその組合せに関して何らかの依存関係または要件を有しているものと解釈すべきではない。本発明と共に使用するのに適した周知のコンピュータシステム、環境、および／または構成の例には、これに限られるものではないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家電、携帯電話、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピュータ環境などが含まれる。
【００５８】
本発明は、１つまたは複数のコンピュータまたは他の装置によって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的文脈で説明することができる。一般に、プログラムモジュールには、これに限られるものではないが、特定のタスクを実行するかまたは特定の抽象データ型を実行するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明は分散コンピュータ環境でも実施できるが、その場合タスクは、通信ネットワークを介してリンクされたリモート処理装置によって実施される。分散コンピュータ環境においては、プログラムモジュールは、ローカルおよびリモート両方のコンピュータの、メモリ記憶装置などの記憶媒体に配置することができる。
【００５９】
ソフトウェアアーキテクチャの文脈におけるインターフェースには、ソフトウェアモジュール、コンポーネント、コードの一部分、または他の一連のコンピュータ実行可能命令が含まれる。インターフェースは、例えば、第１のモジュールが、その第１のモジュールの代わりにコンピューティングタスクを実施する第２のモジュールにアクセスすることを含む。第１および第２のモジュールは、一例として、オペレーティングシステムなどによって提供されるＡＰＩ（アプリケーションプログラムインターフェース）、（例えば、ピアツーピアアプリケーション通信のための）ＣＯＭ（コンポーネントオブジェクトモデル）インターフェース、および（例えば、ウェブサービス間の通信のための）ＸＭＩ（ＸＭＬメタデータ交換形式）インターフェースなどを含む。
【００６０】
インターフェースは、Ｊ２ＥＥ（Java（登録商標）2 Platform Enterprise Edition）、ＣＯＭ、ＤＣＯＭ（distributed COM）の例などの、密結合、同期実行であってもよい。別法または追加として、インターフェースは、（例えば、ＳＯＡＰ（simple object access protocol）を使用する）ウェブサービスなどの、疎結合、非同期実行であってもよい。一般に、インターフェースは、密結合、疎結合、同期、非同期などの特性の任意の組合せを含む。さらに、インターフェースは、標準プロトコル、専用プロトコル、あるいは標準プロトコルと専用プロトコルの任意の組合せに従うことができる。
【００６１】
本明細書に記載のインターフェースはすべて、単一のインターフェースの一部であってもよいし、あるいは個別のインターフェースまたはそれらの任意の組合せとして実装することもできる。インターフェースは、機能を提供するために、ローカルまたはリモートで実行することができる。さらに、インターフェースは、本明細書に図示し説明した機能に対して追加の機能を含むことも、削減された機能を含むこともできる。
【００６２】
本明細書に図示し記載した方法の実行または動作の順序は、特に指定した場合を除き重要ではない。すなわち、本方法の各要素は、特に指定がない場合は、任意の順序で実施することができる。また、本明細書の方法は、本明細書に開示の諸要素に対してより多くの要素を含むことも、あるいはより少ない要素を含むこともできる。例えば、特定の要素を他の要素より前に、それと同時に、またはそれより後で実行または実施することは、本発明の範囲に含まれることが企図される。
【００６３】
上記の成果および方法については、本発明の範囲を逸脱することなく様々な変更がなし得るので、上記の説明に含まれ添付の図面に示されたすべての内容は例示的なものであり限定の意味ではないものと解釈すべきであることが意図される。
【００６４】
付録Ａ
ワークフロートランザクションのバッチ処理
例示のワークフローの実行の間に、ランタイムはそのサービスを呼び出し、作業を実施する。例えば、送信ワークフロー動作は、メッセージングサービスの呼出しである。メッセージングサービスは送信要求を処理し、送信に関するある状態を維持する。トランザクション／永続的モデルの要件の１つは、様々なサービスおよびワークフローランタイムによって維持される各状態間の一貫性を維持することである。ワークフローがコミットポイントに到達したとき、ランタイムは永続的サービスを呼び出し、そのワークフローインスタンスの状態を渡す。このインスタンスの状態および他のサービスの作業をバッチ処理し、ある単一のトランザクションに関与する複数の永続的リソースマネージャ（ＲＭ）にコミットすることができる。
【００６５】
Ｂ０およびＢ１が別々の作業バッチである場合は（例えば、図３のトランザクション３０４およびアトミックトランザクション３０２−Ｎ参照）、コミットポイントにおいて全体の作業集合｛Ｂ０，Ｂ１｝をトランザクションにコミットする必要がある。トランザクションの障害発生時には、要件により、Ｂ０に関する作業は捨てなければならない。Ｂ１に関する作業は、後続のポイントのために存在し続ける必要がある。
【００６６】
本発明の一実施形態によれば、各プロバイダが容易に同じトランザクションを共用できるように、ランタイムは、そのサービスへのすべての呼出しにおいて、そのスレッド呼出し状況でのＷｏｒｋＢａｔｃｈオブジェクトをフロートさせる。各サービスはこのバッチに作業を追加することを選択することができる。例えば、メッセージングサービスにおけるＳｅｎｄメソッドにより、アドホックＳＱＬを含むオブジェクトが構築されることがある。次いで、メッセージングサービスは、そのオブジェクトをＷｏｒｋＢａｔｃｈに追加することができる。スケジュールされたコミットポイントにおいて、メッセージングサービスＩＰｅｎｄｉｎｇＷｏｒｋ．Ｃｏｍｐｌｅｔｅメソッドが呼び出され、その未処理作業のすべてがそのメソッドに返される。次いで、サービスは、トランザクションの一部としてＳＱＬを実行するのが適切な、どのようなアクションでも実施することができる。
【００６７】
例えば、Ｎａｍｅｓｐａｃｅ：Ｍｉｃｒｏｓｏｆｔ．Ｗｏｒｋｆｌｏｗ．Ｒｕｎｔｉｍｅは、
【００６８】
【表１】
2006178935.tif 000003
【００６９】
で与えられる。
【００７０】
Ａｄｄメソッドを使用して、未処理の作業項目を作業バッチに追加することができる。プロバイダは、ＩＰｅｎｄｉｎｇＷｏｒｋインターフェースを実装するオブジェクトに関連するバッチに追加された作業にタグをつける。このオブジェクトは、作業の最終的なコミットを処理することになる。以下の例では、永続プロバイダそれ自体が、ＩＰｅｎｄｉｎｇＷｏｒｋインターフェースを実装する。
【００７１】
インターフェースＩＰｅｎｄｉｎｇＷｏｒｋは次のように定義される。
【００７２】
【表２】
2006178935.tif 000004
【００７３】
Ｃｏｍｍｉｔメソッドでは、作業項目のリストはトランザクションオブジェクトを使用してデータベースにコミットされる。
【００７４】
Ｃｏｍｐｌｅｔｅメソッドは、必要なクリーンアップを実施する。このメソッドは、項目リストにある作業の処理が終了したときに、ランタイムによって呼び出される。作業が正常に終了した場合は、ｓｕｃｃｅｅｄｅｄ＝真（true）であり、それ以外の場合はｓｕｃｃｅｅｄｅｄ＝偽（false）である。
【００７５】
さらにこの例に関して、コミットポイントでの一連の動作は、以下の項目を含む。
ａ．ランタイムは、PersistenceService::Saveメソッドを呼び出す。
ｂ．ランタイムは、TransactionService::Createメソッドを呼び出し、System.ICommitableTransactionを取得する。
ｃ．ランタイムはその作業収集を繰り返し、同じＩＰｅｎｄｉｎｇＷｏｒｋオブジェクトを参照するすべての項目を収集する。次いで、ランタイムは各固有のＩＰｅｎｄｉｎｇＷｏｒｋオブジェクトのＣｏｍｍｉｔメソッドを一度だけ呼び出し、Ｔｒａｎｓａｃｔｉｏｎとそのすべての未処理作業のリストを渡す。
ｄ．コミット通知の成功時に、ランタイムはICommittableTransaction::Commitを呼び出す。
ｅ．トランザクションの成功時に、ランタイムは各固有のＩＰｅｎｄｉｎｇＷｏｒｋオブジェクトのＣｏｍｐｌｅｔｅメソッドを一度だけ呼び出し、ｓｕｃｃｅｅｄｅｄ＝真と、そのすべての未処理作業のリストを渡す。
【００７６】
Ｗｏｒｋｆｌｏｗ  Ｆａｕｌｔに関する例示的一連の動作には以下の項目が含まれる。
ａ．ランタイムは、ワークフローモデルセマンティックス（アトミックスコープ）に基づいて、障害範囲に関連するＩＰｅｎｄｉｎｇＷｏｒｋオブジェクトを中止することを決定する。
ｂ．ランタイムは各固有のＩＰｅｎｄｉｎｇＷｏｒｋのＣｏｍｐｌｅｔｅメソッドを呼び出し、中止したすべての作業に対して完了状態＝偽とする。
ｃ．ランタイムは、障害からの回復の後でその作業が引き続き有効であることを、その作業のセマンティックスが示している任意の作業への参照を維持する。次いで、その作業を後の永続ポイントにおいてコミットすることができる。
【図面の簡単な説明】
【００７７】
【図１】本発明の一実施形態による、コミットされていない作業のバッチ処理により、通信コンポーネントを介して持続された状態の一貫性を維持するシステムを示す一例示的実施形態の構成図である。
【図２】本発明の一実施形態による、サービスプロバイダコンポーネントからの作業項目のバッチ処理を示す一例示的フロー図である。
【図３】本発明の一実施形態による、１つまたは複数の付加された作業項目を有するトランザクションを示す一例示的構成図である。
【図４】本発明の一実施形態による、コミットされていない作業のバッチ処理により、通信コンポーネントを介して持続された状態の一貫性を維持する動作を示す一例示的流れ図である。
【図５】本発明を実装することができる適切なコンピュータシステム環境の一例を示す構成図である。
【図１】
2006178935.tif 000005
【図２】
2006178935.tif 000006
【図３】
2006178935.tif 000007
【図４】
2006178935.tif 000008
【図５】
2006178935.tif 000009