(57)【要約】  既存の機能を拡張するかまたは追加の機能を提供するサードパーティ拡張子を含むパイプライン構造を採用するサービス指向型システムが提供される。ユーザまたはサードパーティに提供されたプラグインは、メタデータを利用して登録されて、プラットフォームオペレーションとともにパイプラインで実行される。パイプラインは、新しくアップロードされたプラグインを備えたオンザフライで拡張可能である。同期パイプラインオペレーションまたは非同期パイプラインオペレーションを順序づけるための依存分析は、複数のパーティがシステムを拡張して予想可能にオペレーションを行えるようにする。ループ検出メカニズムは、非変性無限ループについての例外を除いて、無限ループを偶然または悪意で生成することによるシステム資源の誤用を防ぐ。
2010541080.tif 000002
【特許請求の範囲】
【請求項１】
サービス指向型システムにパイプライン構造を実装するためにコンピュータデバイス（５００）において少なくとも一部が実行される方法(６００)であって、
ユーザが構築したスキーマを自動的に設定するステップ（６０４）と、
前記スキーマに関連付けられたプラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を受信するステップ（６０６）と、
メタデータを利用して前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を登録するステップであって、前記メタデータは、前記プラグインの順序及びステージのうちの少なくとも１つを含むステップと、
前記ユーザから動作の呼び出しを受信するのに応じて、実行パイプラインにおいて１つまたは複数のコアプラットフォームオペレーションとともに前記受信した順序に従って前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を実行するステップを含むことを特徴とする方法。
【請求項２】
実行中に前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に要求オブジェクトを渡して、前記プラグインが応答オブジェクトを操作できるようにするステップを更に含むことを特徴とする請求項１に記載の方法（６００）。
【請求項３】
前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に前記実行に付随する任意状態を渡すステップを更に含むことを特徴とする請求項１に記載の方法（６００）。
【請求項４】
前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）及び前記コアプラットフォームオペレーションは、逐次処理及び並列処理のいずれかで実行されることを特徴とする請求項１に記載の方法（６００）。
【請求項５】
別のプラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を受信するステップと、
前記他のプラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を登録することによってコンパイルせずに前記スキーマを設定するステップと、
を更に含むことを特徴とする請求項１に記載の方法（６００）。
【請求項６】
前記メタデータによって提供される依存情報を分析して前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）の順序及び前記コアプラットフォームのオペレーションを決定するステップを更に含むことを特徴とする請求項５に記載の方法（６００）。
【請求項７】
前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）は、前記サービス指向型システムについての新しい機能の追加及び既存の機能拡張のいずれかのためであることを特徴とする請求項１に記載の方法（６００）。
【請求項８】
前記プラグインの設定及び前記プラグインのコードは、前記サービス指向型システムにおいて中央に格納されることを特徴とする請求項１に記載の方法（６００）。
【請求項９】
前記サービス指向型システムは、同期プロセス及び非同期プロセスのうちの少なくとも１つを実行することを特徴とする請求項１に記載の方法（６００）。
【請求項１０】
前記同期プロセスの実行は、
前記パイプラインの状態を保存するステップと、
その後に、処理のために前記パイプラインの前記状態を復元するステップと、
を更に含むことを特徴とする請求項９に記載の方法（６００）。
【請求項１１】
パイプライン構造を実装するサービス指向型システム（２００）であって、
少なくとも１つのウェブサーバ(１１２)を含み、
前記ウェブサーバ（１１２）は、
ユーザが構築したスキーマを受信し（６０２）、
前記スキーマを自動的に設定し(６０４)、
前記スキーマに付随する前記サービス指向型システムについての新しい機能の追加及び既存の機能の拡張のいずれかのために複数のプラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を受信し（６０６）、
メタデータを利用して前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を登録し（６０８）、前記メタデータは、順序及び前記プラグインのステージのうちの少なくとも１つを含み、
前記ウェブサーバ（１１２）は更に、
前記メタデータによって提供される依存情報を分析して、前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）及びコアプラットフォームオペレーションの順序を決定し、
前記システムは更に、
実行パイプラインを含み、
前記実行パイプラインは、前記ユーザから要求を受信するときに、前記コアプラットフォームオペレーションとともに前記受信した順序に従って前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を実行し、当該プラグインの実行は、前記プラグインが応答オブジェクトを操作することができるように前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に要求オブジェクトを渡すことによってかつ前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に前記実行に付随する任意状態を渡すことによって行われる（６１０）ことを特徴とするサービス指向型システム。
【請求項１２】
前記サービス指向型システム（２００）は、パイプライン構造システム(２３０)の起動のためのフロントエンドとして実装されることを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）は、前記サービス指向型システム（２００）のアプリケーションプログラミングインタフェース（ＡＰＩ）を介して登録され、前記パイプラインは前記ＡＰＩを介して設定されることを特徴とする請求項１１に記載のシステム。
【請求項１４】
前記実行パイプラインは、更に、
プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を呼び出すときに、前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に前記パイプラインの現在の状態を有するコンテキストオブジェクトを渡して、前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）が、追加のシステム機能を実行するためのインタフェースを得られるようにすることを特徴とする請求項１１に記載のシステム。
【請求項１５】
前記少なくとも１つのウェブサーバは拡張可能であって、前記システムは前記サーバの複数のインスタンスを受け入れることができることを特徴とする請求項１１に記載のシステム。
【請求項１６】
前記少なくとも１つのウェブサーバは、
各動作に割当量及び深さパラメータのうちの１つを割り当て、
前記割当量及び前記深さパラメータのうちの前記割り当てられた１つの一部が各チャイルド動作に割り当てられ、
プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）内のシステム方法を呼び出すときに、各チャイルド動作に割り当てられた相関識別子とともに、前記割当量及び前記深さパラメータのうちの１つの前記一部を渡し、
実行されるべき各チャイルド動作についての前記割当量の１つをデクリメントし（７０８）、前記割当量はチャイルド動作に付随する各オペレーションのコストに基づいてデクリメントされ、
前記要求された動作に付随するチャイルド動作のカウントに基づいて実行されるべき各チャイルド動作についての深さパラメータをインクリメントし、
前記割当量及び前記深さパラメータのうちの１つが、対応する所定の閾値に達する場合、前記オペレーションを終了し、エラーメッセージを提供することを特徴とする請求項１１に記載のシステム。
【請求項１７】
前記少なくとも１つのウェブサーバは更に、
所定の遅延が動作に付随するオペレーション順序に含まれる場合に、前記割当量のうちの１つの前記デクリメント及び前記深さパラメータのインクリメントをリセットし（７１０）、
前記動作がチャイルド動作の有限のツリー構造を含む場合、前記割当量のうちの１つの前記デクリメント及び前記深さパラメータのインクリメントをリセットする(７１２)ことを特徴とする請求項１６に記載のシステム。
【請求項１８】
サービス指向型システム(２００)にパイプライン構造を実装するための命令が格納されたコンピュータ可読の記憶媒体であって、
前記命令は、
ユーザが構築したスキーマを受信し（６０２）、
前記スキーマを自動的に設定し（６０４）、
前記サービス指向型システムについての新しい機能の追加及び既存の機能の拡張のいずれかのために前記スキーマに付随するプラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を受信し（６０６）、
メタデータを利用して前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を登録し(６０８)、
前記メタデータは、前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）の依存情報及びステージのうちの少なくとも１つを含み、
前記メタデータによって提供される依存情報を分析して、登録したプラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）及びコアプラットフォームオペレーションの順序を決定し、
実行パイプラインにおいて前記コアプラットフォームオペレーションとともに前記受信した順序に従って前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）を実行し（６１０）、
前記プラグインの実行は、
前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に要求オブジェクトを渡して、前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）が応答オブジェクトを操作できるようにすることと、
前記実行に付随する任意状態を前記プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）に渡すこと、を含むことを特徴とするコンピュータ可読の記憶媒体。
【請求項１９】
前記命令は更に、
割当量を各動作に割り当て、
前記割り当てられた割当量の一部は、各チャイルド動作に割り当てられ、
前記命令は更に、
プラグイン（２３１、２３２、２３４、２３５、２３６、３３１、３３２、３３５、３３６）内のシステム方法を呼び出すときに、各チャイルド動作に割り当てられた相関識別子とともに前記割当量の前記一部を渡すことと、
チャイルド動作に付随する各オペレーションの予め定められたコストに基づいて実行されるべき各チャイルド動作についての割当量をデクリメントすることと（７０８）、
前記割当量が使い尽くされると、前記オペレーションを終了して、エラーメッセージを提供することを含むことを特徴とする請求項１８に記載のコンピュータ可読の記憶媒体。
【請求項２０】
前記命令は更に、
所定の遅延が動作に付随するオペレーション順序に含まれる場合、前記割当量の前記デクリメントをリセットすること(７１０)、及び
前記動作がチャイルド動作の有限のツリー構造を含む場合、前記割当量の前記デクリメントをリセットすること(７１２)を含むことを特徴とする請求項１９に記載のコンピュータ可読の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン構造を実装するサービス指向型システム、方法、及び、前記方法を実行する命令を格納するコンピュータ可読記憶媒体に関する。
【背景技術】
【０００２】
ホステッドサービスはますます一般的になっている。ホステッドサービスでは、様々なアプリケーションが共有ハードウェア（マルチテナントシステムとも称する）上の多くのカスタマにサービスを提供する。ホステッドサービスでは、共通のタイプのサービスを多くのクライアントに提供してもよいし、複数のサービスを単一のクライアントに提供してもよい。従って、ホステッドサービスは、かなり複雑なシステムになることがある。複雑なホステッドサービスシステムの代表例は、ウェブベースの顧客関係管理（ＣＲＭ）サービスである。
【０００３】
ＣＲＭによる解決法は、通常、ホステッドコンピュータのアプリケーション環境において、最初のコンタクトから購入及びポストセールスを通じて、カスタマの明確なイメージをつくって維持するのに必要なツール及び能力を提供する。複合テナントのために、ＣＲＭシステムは、販売組織及びマーケティング組織が、新規のカスタマを対象とし、販促キャンペーンを管理し、販売活動を促進する方法を改善するのに役立つ特徴及び能力を提供することができる。ＣＲＭシステムは、個々に利用されるかまたはテナント内外のユーザが共有する方法で利用される、多くの構成要素、ハードウェア、及びソフトウェアを含むことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ホステッドＣＲＭサービスのような複雑なシステムは、クライアントの要求に応じて一連のオペレーションを行なう必要がある。これらのオペレーションは、同期であってもよいしまたは非同期であってもよく、順序依存性を有してもよく、異なる団体によって実施されてもよい。かかるシステムを実装する際の１つの問題は、特にサードパーティプロバイダの追加オペレーションとして、システムの複雑さを管理することにある。この問題は、サードパーティ拡張子をサービスプロバイダが全面的に信頼していないＳａａＳ（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）アプリケーションにおいて深刻になっているかもしれない。
【課題を解決するための手段】
【０００５】
この概要は、詳細な説明で以下に詳述される単純化した形式の概念の選択を導くために提供されている。この概要によって、請求された本発明の重要な特徴または基本的特徴を識別することは意図されておらず、請求された本発明の範囲を決定する際の助けとすることも意図されていない。
【０００６】
実施形態は、パイプライン構造を採用するホステッドサービスを提供することを目的としている。既存の機能を拡張するためのサードパーティ拡張子または追加の機能を提供するためのサードパーティ拡張子は、メタデータを利用して登録され、プラットフォームオペレーションを用いてパイプラインで逐次実行される。ここで、オペレーションの順序及び各オペレーションのステージはメタデータを利用して交換され、システム機能とカスタム機能は対称的に処理される。ループ検出メカニズムも、無限ループを偶然にまたは悪意を持って作成することによるシステム資源の誤用・悪用を防ぐために採用されてもよい。
【０００７】
これらの特徴及び効果並びに他の特徴及び効果は、以下の詳細な説明を読み取ることでかつ付随する図面を検討することで明らかになる。上述の概説及び以下の詳細な説明のいずれも説明のためだけであって、請求された態様を限定するものではないと理解されなければならない。
【図面の簡単な説明】
【０００８】
【図１】マルチテナントサービスのシステムアーキテクチャの例を示す図である。
【図２】パイプライン構造を備えたサービス指向型システムの主な構成要素を示す図である。
【図３】パイプライン構造を備えたサービス指向型システム（ＣＲＭ）の例を示す図である。
【図４】実施形態を実行することができるネットワーク環境の例を示すブロック図である。
【図５】実施形態を実行することができるコンピュータオペレーティング環境の例を示すブロック図である。
【図６】パイプライン構造を備えたサービス指向型システムのオペレーション管理プロセスについての論理フローチャートである。
【図７】パイプライン構造を備えたサービス指向型システムのループ検出プロセスについての論理フローチャートである。
【発明を実施するための形態】
【０００９】
上で簡単に述べたように、パイプライン構造は、サードパーティのプラグイン機能を管理するためのサービス指向型システムに実装することができる。以下の詳細な説明では、添付の図面が参照される。添付の図面は、本明細書の一部を成しており、特定の実施形態または例を説明するために示されている。これらの態様は組み合わされてもよいし、他の態様が利用されてもよい。更に本開示の趣旨または範囲から逸脱することなく構造を変化させてもよい。従って、以下の詳細な説明は、限定的な意味にとられてはならない。本発明の範囲は添付の請求の範囲及び該請求の範囲の均等物で画定される。
【００１０】
本実施形態は、パーソナルコンピュータのオペレーティングシステムで動作するアプリケーションプログラムと連動して実行されるプログラムモジュールの一般的なコンテキストで説明されているが、当業者は、複数の態様を、他のプログラムモジュールと組み合わせて行なうこともできると認めることができる。
【００１１】
通常、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実施するルーチン、プログラム、構成要素、データ構造、及び他のタイプの構造を含む。更に、携帯端末、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電化製品またはプログラム可能な家庭用電化製品、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステムの構成で、実施形態を実施することができると当業者は認めることができる。通信ネットワークを介して結ばれるリモートの処理装置によってタスクが実行される複数の実施形態も、分散コンピューティング環境において実施することができる。分散コンピューティング環境では、プログラムモジュールを、ローカルのメモリ記憶装置及びリモートのメモリ記憶装置の両方に配することができる。
【００１２】
複数の実施形態を、コンピュータプロセス（方法）として、コンピュータシステムとして、または、コンピュータプログラム製品もしくはコンピュータ可能媒体などの製品として実施することができる。コンピュータプログラム製品は、コンピュータシステムによって読み取り可能でありかつコンピュータプロセスを実行するためのコンピュータの命令プログラムをコード化するコンピュータ記憶媒体であってもよい。コンピュータプログラム製品はまた、コンピュータシステムによって読み取り可能であってかつコンピュータプロセスを実行するためのコンピュータの命令プログラムをコード化する搬送波上の伝播信号であってもよい。
【００１３】
図１を参照すると、マルチテナントサービスのシステムアーキテクチャの例についての図１００が示されている。通常のマルチテナントシステムでは、異なるテナントに付随するユーザは、テナントに特有の情報を含む同期オペレーション及び非同期オペレーションを行うことができるサービスにオペレーションを要求することができる。
【００１４】
上記のように、ホステッドサービスは、デフォルトの機能及びカスタマイズされた機能についての多数の態様を用いて、様々なアプリケーションと共有ハードウェア上の多数のカスタマとの間のインタラクションを容易にする。例えば、ＣＲＭ（Ｃｕｓｔｏｍｅｒ  Ｒｅｌａｔｉｏｎｓｈｉｐ  Ｍａｎａｇｅｍｅｎｔ）サービスは、セキュリティ機能及びカスタム機能を各テナントに提供するとともに、複数のテナントに付随するユーザが、コンタクト、セールスリード等を記録し、フォローアップし、分析し、かつ処理できるようにする。これらのいわゆるＳａａＳ（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）アプリケーションのためのカスタム（またはデフォルト）機能のいくつかは、登録されてコアプラットフォームオペレーションと一緒に実行されるサードパーティの拡張子またはプラグインの形で提供することができる。
【００１５】
通常のホステッドサービス環境において、拡張可能で冗長性のあるウェブサービスのサーバのグループ１１２は、テナントデータストア１１４と協働して、個々のサービステナントに付随するデータを格納しかつ処理する。また、補足サービス１１６が、別のグループのサーバ及び／またはデータストアを介して提供されてもよい。例えば、同期処理及び非同期処理が、システム性能を最適化した分散型の方法で、異なるサーバグループによって実行されてもよい。
【００１６】
同期プロセス及び非同期プロセスが独立分散されることを採用しかつサーバとデータベースとの間のインタラクションを利用すれば、ホステッドサービスグループのいかなる部分も、拡張可能にすることができる。よって、サーバ（及び／またはデータベース）の複数の例を、増大する作業負荷、追加のテナント、データ容量などに対処するために提供することができる。
【００１７】
オペレーションにおいて、ホステッドサービスは、入力データ（例えば、ＣＲＭサービスにおける新しい連絡先）を受信して、ユーザ１０２に処理を要求する。ユーザ１０２は、ホステッドサービスをカスタマイズするためのユーザアプリケーション、ツール、及び／またはプラグイン１０４から成る別個のシステムに付随していてもよい。該別個のシステムに付随するデータは、ユーザデータストア（または複数のユーザデータストア）１０６に格納されていてもよい。ユーザ１０２は、追加の機能またはカスタマイズされた機能のためにホステッドサービスに拡張子（プラグイン）を提供することができる。該ホステッドサービスにおいて、プラグインは、登録されて、コアプラットフォームオペレーションとともに実行される。いくつかの実施形態によれば、かかるプラグインは、追加の機能を提供することができるだけでなく、サービスについての既存のデフォルト機能を拡張することもできる。
【００１８】
ユーザ１０２は、プラグイン自体を提供することができるか、またはサードパーティ（図示せず）からのプラグインがホステッドサービスによって登録されるように要求することができる。かかるシナリオにおいて、ホステッドサービスはサードパーティプロバイダと直接インタラクションを行って、プラットフォームにプラグインを登録することができる。更に、サードパーティプロバイダは、ユーザ（テナント）の要求でホステッドサービスにコンタクトして１つまたは複数の拡張子を登録し、提供されたプラグインがユーザによって本当に要求されているということをホステッドサービスに保証する証明書を提供することができる。
【００１９】
もちろん、この複雑なインタラクションは、ユーザデータについてのオペレーションのインテグリティ及びセキュリティを制御するためのサービスについての問題をもたらすかもしれない。全てのサードパーティプロバイダは信頼できるソースであるとは限らないかもしれないし、サービスプラットフォーム及びプラグイン（または複数のプラグイン）に付随する互換性の問題があるかもしれないし、プラグインをサービスについてのオペレーション構造に統合することは簡単でないかもしれない。
【００２０】
いくつかの実施形態によれば、パイプライン構造に基づくプラグイン機能を有する柔軟性があって拡張可能なプラットフォームを、クライアントの要求に応じて逐次に実行することができる。要求オブジェクトは、パイプラインの各プラグインにパラメータとして渡されてもよく、各プラグインは応答オブジェクトをつくることができるかまたは操作することができる。任意状態も、プラグインの間でデータを渡すためにパイプラインに沿って渡されてもよい。
【００２１】
図２は、パイプライン構造を備えたサービス指向型システムの主な構成要素を示す。実施形態によるシステムは、クライアントの要求に応じてプラグイン機能を介して、柔軟性があって拡張可能なプラットフォームを定義するパイプライン構造を採用することができる。要求オブジェクトは、パイプラインの各プラグインにパラメータとして渡される。それは応答オブジェクトをつくることができるかまたは操作することができる。２つのクライアント要求が同じパイプラインで作動する場合、該２つのクライアント要求の動き（behavior）は同一でなければならない。従って、かかるシステムにおいてテストを受ける場合のマトリクスは、動きをハードコードするシステムと比較して減少する。
【００２２】
クライアント要求に応じて実行する動作のシーケンスは、一実施形態によるシステムにおいて、パイプライン構造によって表される。パイプラインにおける動作の順序は、依存性グラフ分析によって決定することができる。新しい動作を、パイプライン構造における「プラグイン」の登録によりシステムを再コンパイルせずに設定することができる。このように、新しい機能が加えられるかまたは既存の機能が変更されて、ダイナミックで拡張可能な実行モデルが形成される。より重要なことに、パイプライン構造は、実行されるべき一連の動作を画定している依存に関する情報及び実際のプラグインコードモジュールから成る。
【００２３】
サービス指向型パイプライン構造における動作はまた、非同期であってもよい。非同期の場合には、パイプラインの状態を、処理するために保存して復元することができる。よって、非同期動作は、応答に影響を及ぼすことがない。いくつかの実施形態によれば、プラグイン構成（プラグインコードを含む）は中央に格納されて、そのときのパイプライン構成を一貫した視点で見るクラスタベースのシステムを可能にする。
【００２４】
１つの実施形態によれば、サービス指向型アーキテクチャを、パイプライン構造システムの起動のためのフロントエンドとして実装することができる。次に、パイプライン構造（プラグインコードを含む）を、サービス指向型システムのアプリケーションプログラミングインタフェース(ＡＰＩ)を介して（例えば、ウェブサービスを介して）設定することができる。プラグインの実行によって、管理された実行環境が用いられて、プラグインのオーサによって決まる（例えば、サインしているコードによって決定される）プラグインに限定した信用が強制されてもよい。
【００２５】
本実施形態によるサービス指向型システムのためのプラグインを構築するために、開発者は、プラグインコードを呼び出すインタフェースを設計することができる。プラグインを呼び出したときに、システムはパイプラインの現在の状態を有するコンテキストオブジェクトを渡すことができる。このコンテキストオブジェクトから、プラグインは、追加のシステム機能を実行することができるインタフェースを得ることができる。
【００２６】
図に示すように、ウェブサービス２１２は、アプリケーション２２２、ツール２２４、及びワークフロー（ビジネスプロセス）２２６とインタラクションを行って、ユーザの要求を処理する。更に、ウェブサービス２１２は、ユーザのプラグイン（例えば、２３１、２３２、２３５、２３６）を受信してユーザ定義型動作を実行する。プラグインを介したユーザ定義型動作は、既存の機能の拡張によるカスタム化または既存の機能と平列の新しい機能によるカスタム化を含むことができる。プラグインは、メタデータを利用してＡＰＩに登録され、該メタデータは、プラグインの順序及びステージを含むことができる（例えば、別のプラグインが起動される前に、オペレーションがキャンセルされ、完了されるといったことである）。次に、プラグインが、メタデータによって定義される該プラグインの登録の順序に従って、プラットフォームオペレーション２３４とともに（実行パイプライン２３０によって）実行される。この場合、いくつか（例えば、２３１、２３２）は該プラットフォームオペレーション２３４の前に、いくつか（例えば、２３５、２３６）は該プラットフォームオペレーションの後に実行される。
【００２７】
シナリオの例では、１つのプラグインは、新しい情報が追加されるか既存の情報が変更される（削除される）ときに、コンタクト情報を更新することができ、一方、最初のプラグインと連続して実行されるもう１つのプラグインは、最初のプラグインによって実行された更新に基づくユーザのコンタクトレコードを検査するために採用される。実施形態によるシステムにおいて、プラグインは、柔軟性があって拡張可能なシステムを可能にするプラグイン自身のトランザクション限界を定義する能力を与えられている。プラグインは、逐次にまたは並列に実行することができる。実施形態は、１つの特定の実行方法に限定されない。
【００２８】
前述のように、実施形態によるシステムは、個々のサーバ及び処理ホスト（例えば、非同期処理ホスト）についての多くのインスタンスを含むことができる。長時間実行される要求は後で処理するために個々のサーバによってキューに入れられるといった、信頼できるプロセスのキューを実施することによって、これらのサーバクラスタの各々を独立して拡張することができる。
【００２９】
かかるプラグインからシステム動作を呼び出す能力は、管理された実行環境においてでさえ、無限ループの可能性をもたらす。無限ループは、特にマルチテナントシステムの他のテナントに対して、システム性能の低下をもたらすかもしれない。かかるループには、偶然にまたは悪意をもって無限のデータ量を発生させる変性ループまたは無限であるが変性していない非変性ループ（例えば、不定期間の間１年に一度処理されることになっている誕生日のリマインダ）を含むことができる。かかるループを終わらせる（または制御する）ために、クライアントの要求が受信されるときに、デフォルトの「割当量（budget）」及び相関ｉｄが設定されてもよい。プラグイン内でシステム方法を呼び出すときに、相関識別子及び割当量の一部が転送されてもよい。チャイルドの起動が不十分な割当量を有している場合、チャイルドの起動は、ループを終了するエラーをもたらす。
【００３０】
実施形態によるシステムは、設定された割当量に対して各オペレーションについてのコストを割り当てる。設定された割当量は、チャイルドオペレーションの間で分配される。よって、呼び出し側によって独立して開始されかつ付随する以前のコンテキストを有していない動作、及び、継承したコンテキストを備えた別の動作（例えば、チャイルド動作）の結果である動作は、呼び出し側に付随するオペレーションのためのアカウントを用いて追跡することができる。例えば、ユーザは、ウェブサービスを介して新しいアカウントを生成するために呼び出しを行うことができ、アカウントの作成は、プラグインにタスクを生成する呼び出しを起動させることができる。タスクを生成する呼び出しは、最初のアカウントの作成から継承されたコンテキストを有する。新しいアカウントが生成されている場合、割当量はその時に設定されてもよく、オペレーションがそのアカウントについて実行されるたびに、割当量はデクリメントされてもよい。別の実施形態によれば、深さパラメータを利用して無限ループを終了することができる。オペレーション（チャイルド）数のカウントを、最初に設定して、追加のオペレーションが実行される（複数のチャイルドがつくられる）ときにインクリメントしてもよい。最初に設定された深さ限界に達すると、ループは終了される。
【００３１】
時間ベースの割当量の再設定が別の実施形態により採用されて、時刻を決められた非同期イベントのような非変性の無限ループが、誕生日リマインダのために起動する前に、１年間スリープできるようにしてもよい。オペレーションの順序に所定の遅延がある場合、システムは割当量または深さをリセットすることができる。また、別の実施形態は、無限ループの検出及び終了の際に有限のツリー構造のオペレーション（複数のチャイルド）についての例外を採用する。例えば、地域アカウントの作成は、有限のツリー構造をもたらす非均一（各州は、種々の数の販売領域を有する）であってもよい。割当量（または深さ）が全てのチャイルドに固定された方法で分配される場合、割当量ベースのループ検出アルゴリズムは、オペレーションを終了しようと試みることができる。システムは、ループ検出が実行されると、かかる有限のツリー構造に配慮して有限のツリー構造を除外するよう設定されている。
【００３２】
図３は、パイプライン構造を備えたサービス指向型システム（ＣＲＭ）の例を示す。ＣＲＭシステムは、マルチテナントシステムの例であり、該マルチテナントシステムにおいて、カスタマは、自分たちの組織（テナント）にサインインすることができ、該組織（テナント）は、論理的に自分たち自身のＣＲＭデータについてのデータベースである。カスタマは、例えばアカウントをつくるか、電子メールを送信するか、または連絡先を削除するといった要求を行うことができる。これらの要求は、サーバのクラスタで処理される。
【００３３】
図３のシステム３００の例において、ＣＲＭウェブサービス３１２は、プラグイン３３１、３３２、３３５、３３６とともに、プラットフォームコアオペレーション３３４（デフォルトの機能）を実行することによってかかるユーザ要求を処理する。プラグイン３３１、３３２、３３５、３３６は、サービスがユーザのためにカスタマイズされるのを可能にする拡張された機能または代替機能を提供する。プラグインは、ＣＲＭ実行パイプライン３３０において逐次実行され、それらの順序はユーザ（３３１、３３２、３３５、３３６）が定義することができる。１つの実施例によれば、プラグインは、コア機能によって処理される事前処理データまたは後処理データのための事前イベントのオペレーション及び後イベントのオペレーションとしてグループ化されてもよいが、このグループ化は限定でない。実施形態によるシステムにおいて、プラグイン及びコアオペレーションは、いかなる方法でグループ化されてもよいし、まったくグループ化されなくてもよい。
【００３４】
ＣＲＭウェブサービス３１２は、特定のＣＲＭアプリケーション３２２とインタラクションすることができ、ＣＲＭツール３２４を利用することができ、ＣＲＭワークフロー３２６としてビジネスプロセスを格納することができる。実施の例によれば、ＣＲＭウェブサービス３１２の利用は、ユーザ要求のためのトランスポートとして利用されてもよい。ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）データベースなどのリレーショナルデータベースは、パイプライン構造の収納場所として用いられてもよいし、別のデータベースがプラグインコードモジュールの収納場所として用いられてもよい。
【００３５】
図２及び図３に説明されているサービス指向型システム及びオペレーションは、図示するための例である。マルチテナントサービスにおけるパイプライン構造を用いるシステムは、追加の構成要素もしくはより少ない構成要素または本明細書において説明されている原理を用いる他のスキームを用いて実施することができる。
【００３６】
図４は、実施形態を実施することができるネットワーク化された環境の例である。パイプライン構造を採用したサービス指向型システムは、多数の物理的クライアント及び仮想クライアント並びに物理的サーバ及び仮想サーバにわたる分散方法で実施されてもよい。サービス指向型システムはまた、１つまたは複数のネットワーク（例えば、ネットワーク（または複数のネットワーク）４５０）を介して通信する多くのノードを採用するクラスタ化されていないシステムまたはクラスタ化されたシステムにおいて実施されてもよい。
【００３７】
かかるシステムは、サーバ、クライアント、インターネットサービスプロバイダ、及び通信媒体についてのあらゆるトポロジを含むことができる。また、システムは、静的トポロジまたは動的トポロジを有することができる。用語「クライアント」は、クライアントアプリケーションまたはクライアントデバイスのことをいう。マルチテナントサービスにおいてパイプライン構造を実装しているネットワーク化されたシステムは、さらに多くの構成要素を含むことができると共に、関係のある構成要素がこの図と関連して検討される。更に、実施形態によるシステムは、また、単一のテナントに付随するユーザのために働く単一のテナントシステムであってもよい。
【００３８】
処理要求は、個々のクライアントデバイス４４１〜４４３を介してユーザによってもたらされる。ユーザ自身、またはサードパーティプロバイダ（サーバ４４４を介して）は、１つまたは複数のサーバ（例えば、サーバ４５２）によって管理されるパイプライン構造のサービスに対する拡張された機能または追加の機能のためのプラグインを提供することができる。サービスはまた、１つまたは複数のサーバで実施することができる。テナントデータベースは、データストア４５８において具体化することができる。専用のデータベースサーバ（例えば、データベースサーバ４５６）は、かかるデータストアのうちの１つまたは複数においてデータの検索及びデータの格納を調整するために用いられる。
【００３９】
ネットワーク（複数のネットワーク）４５０は、企業ネットワークなどの安全なネットワーク、無線オープンネットワークなどの安全でないネットワーク、またはインターネットを含むことができる。ネットワーク４５０は、本明細書において説明されているノード同士の間の通信を提供する。一例であって限定ではないが、ネットワーク（または複数のネットワーク）４５０は、有線ネットワークなどの有線媒体または、直接配線による接続、並びに音響、ＲＦ、赤外線、及び他の無線媒体などの無線媒体を含むことができる。
【００４０】
コンピュータデバイス、アプリケーション、データソース、データ分散システムの他の多くの構成を、サービス指向型システムにおけるパイプライン構造を実装するために採用することができる。また、図４で検討したネットワーク化された環境は、説明のためだけにある。実施形態は、アプリケーション、モジュール、またはプロセスの例に限定されない。
【００４１】
図５及び付随する検討は、実施形態を実施することができる適当なコンピューティング環境の簡単で一般的な説明を提供することを意図している。図５を参照すると、コンピュータデバイス５００などの、コンピュータオペレーティング環境の例のブロック図が示されている。基本構成では、コンピュータデバイス５００は、パイプライン構造を採用するサービス指向型システムに付随するサービスを提供するサーバであってもよく、通常、少なくとも１つの処理装置５０２及びシステムメモリ５０４を含むことができる。コンピュータデバイス５００は、また、プログラムを実行する際に協働する複数の処理装置を含むことができる。コンピュータデバイスの厳密な構成及びタイプにより、システムメモリ５０４は、揮発性（例えばＲＡＭ）、不揮発性（例えばＲＯＭ、フラッシュメモリ等）、または該２つの種類の中のいくつかを組み合わせたものであってもよい。システムメモリ５０４は、通常、ワシントン州レドモンドのマイクロソフトコーポレーションから市販されているウィンドウズ（登録商標）オペレーティングシステムなどの、ネットワーク化されたパソコンのオペレーションを制御するのに適したオペレーティングシステム５０５を含む。システムメモリ５０４は、また、プログラムモジュール６０６、ウェブサービス５２２、及びプラグイン（または複数のプラグイン）５２４などの１つまたは複数のソフトウェアアプリケーションを含むことができる。
【００４２】
ウェブサービス５２２は、ホステッドサービスアプリケーションのうちの別個のアプリケーションまたは一体型モジュールであってもよい。該ホステッドサービスアプリケーションは、コンピュータデバイス５００に付随するクライアントアプリケーションにデータ及び処理サービスを提供する。プラグイン５２４は、前述のように、特定のユーザ及び／またはオペレーションのためにウェブサービス５２２のオペレーションをカスタマイズする追加の機能を提供することができる。この基本構成は、図５に破線５０８内に該基本構成の構成要素で示されている。
【００４３】
コンピュータデバイス５００は、追加の特徴または追加の機能を有することができる。例えば、コンピュータデバイス５００はまた、磁気ディスク、光ディスク、またはテープなどの、追加のデータ記憶装置（着脱自在及び／または固定式）を含むことができる。かかる追加の記憶装置は、図５に着脱自在の記憶装置５０９及び固定式の記憶装置５１０で示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するためのいかなる方法または技術で実施される揮発性及び不揮発性で、着脱自在及び非着脱自在の媒体を含むことができる。システムメモリ５０４、着脱自在の記憶装置５０９、及び固定式の記憶装置５１０は、コンピュータ記憶媒体の全ての例である。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または所望の情報を格納するために用いることができてコンピュータ５００がアクセスすることができる他のいかなる媒体も含むが、これらに限定されるものではない。そのようなコンピュータ記憶媒体は、デバイス５００の一部であってもよい。コンピュータデバイス５００は、また、キーボード、マウス、ペン、音声入力装置、タッチ入力装置などの入力デバイス（または複数の入力デバイス）５１２を有することができる。ディスプレイ、スピーカ、プリンタなどの出力デバイス（または複数の出力デバイス）５１４を含むこともできる。これらのデバイスは、当該技術分野で周知であって、本明細書で詳細に検討する必要はない。
【００４４】
コンピュータデバイス５００は、また、通信接続部５１６を含むことができ、該通信接続部５１６は、例えばイントラネットまたはインターネットといった分散コンピューティング環境内の無線ネットワークなどを介して、該デバイスが他のコンピュータデバイス５１８と通信できるようにする。他のコンピュータデバイス５１８は、プラグインを提供する他のサービスプロバイダまたはサードパーティプロバイダに付随するアプリケーションを実行するサーバ（または複数のサーバ）を含むことができる。通信接続部５１６は、通信媒体の１つの例である。通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または搬送波もしくは他の搬送メカニズムなどの変調されたデータ信号内の他のデータによって具体化することができ、あらゆる情報交付媒体を含む。用語「変調されたデータ信号」は、その特徴セットのうちの１つまたは複数を有し、信号内の情報をコード化するような方法で変更された信号を意味する。一例であって限定ではないが、通信媒体は、有線ネットワークなどの有線媒体、または直接配線による接続、及び音響、ＲＦ、赤外線、他の無線媒体などの無線媒体を含む。本明細書において用いられる用語「コンピュータ可読媒体」は、記憶媒体及び通信媒体の両方を含む。
【００４５】
請求された本発明は方法も含む。これらの方法は、この明細書において説明されている構造を含んだ様々な方法で実施することができる。この明細書に説明されているタイプのデバイスについての１つのかかる方法は、マシンオペレーションによるものである。
【００４６】
別の任意の方法は、方法のうちの１つまたは複数の個々のオペレーションについて、該オペレーションのいくつかを実行する１人または複数の人間のオペレータと連動して実行されることになっている。これらの人間のオペレータは、互いに結びつく必要はないが、各人は一部のプログラムを実行するマシンとともにだけあることができる。
【００４７】
図６は、パイプライン構造を備えたサービス指向型システムにおけるオペレーションを管理するプロセス６００のための論理フローチャートを示す。プロセス６００は、例えば、ホステッドＣＲＭサービスの一部として実施することができる。
【００４８】
プロセス６００は、工程６０２から始まる。工程６０２で、ユーザが構築したスキーマ（及び／またはオペレーション）は、パイプライン構造のサービスによって受信される。スキーマ（及び／または動作）は、ユーザによってまたはユーザが許可したサードパーティによって提供される１つまたは複数のプラグインに付随する。処理は、工程６０２から工程６０４に進む。
【００４９】
工程６０４において、スキーマは自動的に設定される。例えば、ＳＱＬデータベースを利用するＣＲＭシステムでは、ＳＱＬデータ（クエリ）を、メタデータに付随するスキーマ及びオペレーション自体に基づいて生成することができる。ユーザデータに付随するユーザが動作を要求していないので、システムはまだあらゆる動作を実行していない。処理は、工程６０４から工程６０６に移動する。
【００５０】
工程６０６において、ユーザプラグインが受信される。プラグインは、サービスの中心的な機能に対称的に拡張された機能または代替機能を提供しているユーザの要求した動作を実行する。処理は、工程６０６から工程６０８に進む。
【００５１】
工程６０８において、ユーザの動作はメタデータによりシステムＡＰＩに登録される。それは、また、それらがパイプラインにおいて実行されるときの順序及びステージまたは各プラグインを含む。処理は、工程６０８から工程６１０に移動する。工程６１０で、ユーザから要求があると、サービスはユーザデータを処理するために指定された順序で登録したプラグインを実行する。システムは、複数のパーティがシステムを拡張して、予想可能に機能できるようにするパイプラインオペレーション（プラグインがアップロードされるように）を命じるために依存分析のような追加のオペレーションを実行することができる。処理は、更なる工程のために工程６１０から呼び出しプロセスに移動する。
【００５２】
前に述べたように、ユーザがいかなる順序でも（かつ、オンザフライで）自分自身の拡張子を登録して実行できるようにすることによって、システムは、偶然にまたは悪意をもって生成された無限ループのために、性能低下に対して弱いかもしれない。従って、ループ検出メカニズムは、特定の半無限の（無限であるが、非変質の）ループが終了を免れるようにするとともに、無限ループを検出して終了させるために採用することができる。かかるメカニズムは、更に詳細に以下で検討される。
【００５３】
図７は、パイプライン構造を備えたサービス指向型システムのループ検出プロセス７００のための論理フローチャートを示す。プロセス７００は、図６のオペレーション管理プロセス６００内で実行することができる。
【００５４】
プロセス７００は、工程７０２から始まる。工程７０２で、呼び出しが受信される。呼び出しは、第１の動作のためであってもよいしまたは既存のアカウントに関する動作のためであってもよい。これは、呼び出しとともに渡されるコンテキストをチェックすることによってシステムにより決定される。処理は、工程７０２から判断工程７０４へ進む。
【００５５】
判断工程７０４において、渡されたコンテキストが既存の割当量（深さ）を含むか否かについて判断が行われる。既存の割当量（深さ）が要求された動作に対して見つけられない場合、割当量（深さ）が工程７０６においてつくられる。既存の割当量（深さ）が呼び出しに付随して見つけられる場合、オペレーション７０８において、割当量（または深さ）は、呼び出しに付随するオペレーションの数または種類に基づいてデクリメントされる。あらゆるオペレーションは、複数のチャイルドの間で分配される割当量に対するコストを有している。これまで検討してきたように、複数のチャイルドまたはオペレーションのカウントに基づく深さも、割当量の代わりに用いられてもよい。
【００５６】
差し当たり任意の工程７１０及び工程７１２を飛ばすと、判断工程７１４において、割り当てられた割当量が使い尽くされたかどうかについての判断が行われる。割当量が使い尽くされると、工程は終了する。割当量がまだ利用できる場合、呼び出しに付随するオペレーションが、それに続く工程７１６で実行される。
【００５７】
実施形態によるシステムは、また、変性ループを防ぐとともに、一見無限に見えるループについての例外を容易にすることができる。一見無限に見えるループは、標準のオペレーティング手順の一部として終了されてはならない。例えば、コンタクトのための誕生日リマインダオペレーションは、不定期間設定されている。従って、システムはそれを無限ループと考えて終了しようとするかもしれない。工程７０８に続く任意の工程７１０は、その免除対象を作ることを目的としている。オペレーションが所定の遅延（誕生日リマインダ同士の間の１年の遅延など）を含む場合、割当量（深さ）はリセットされる。
【００５８】
別の例外の例として、有限のツリー構造を含むオペレーションがある。例えば、ＣＲＭサービスのための販売地域は、非均一に区分することができる。１つの州が１つの販売の地域に割り当てられるが、別のもっと人口の多い州は、複数の販売地域に割り当てることができる。固定された深さまたは割当量の割り当てが複数のチャイルドの中で採用される場合、システムはこの場合もやはりこの動作を無限であると考えて終了しようとするかもしれない。任意の工程７１２において、呼び出しが有限のツリー構造を含む場合、割当量または深さがリセットされてもよく、それによって早期に動作が終了するのが防止される。
【００５９】
プロセス６００及びプロセス７００に含まれる工程は、説明のためである。パイプライン構造を採用するホステッドサービスの提供は、より少ないステップまたは追加のステップを有する類似のプロセスで実施されてもよいし、本明細書において説明された原理を用いる異なった順序で実施されてもよい。
【００６０】
上記の明細書、例、及びデータは、本実施形態の構成についての製品および使用法の完全な説明を提供している。本発明は構造上の特徴及び／または方法論的行為に固有の言語で説明されてきたが、添付の請求の範囲において画定される本発明は、必ずしも上述の特定の特徴または行為に限定されるわけではないことが理解されなければならない。むしろ、上述の特定の特徴及び行為は、請求の範囲及び実施形態を実施する形式の例として開示されている。
【図１】
2010541080.tif 000003
【図２】
2010541080.tif 000004
【図３】
2010541080.tif 000005
【図４】
2010541080.tif 000006
【図５】
2010541080.tif 000007
【図６】
2010541080.tif 000008
【図７】
2010541080.tif 000009
【国際調査報告】
2010541080.tif 000010
2010541080.tif 000011