(57)【特許請求の範囲】
【請求項１】
コンピュータ装置上の１つまたは複数のプロセッサが、分散アプリケーションの複数のコンポーネントを識別するステップと、
前記プロセッサが、前記複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップと、
前記プロセッサが、前記識別した特定のテクノロジーに基づいて、テクノロジー固有のインターセプターを前記特定のコンポーネントに取り付け、前記取り付けられたテクノロジー固有のインターセプターを使用して、前記特定のコンポーネントによって送信または受信されたメッセージを傍受するステップと、
特定の傍受したメッセージを検出したことに応答して、
前記プロセッサが、前記特定の傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成するステップと、
前記プロセッサが、前記分散アプリケーションのパフォーマンスに対する前記少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて、前記少なくとも１つの潜在的なワークアイテムの実行をスケジューリングするかどうかを決定するステップと）
を含むことを特徴とする監視方法。
【請求項２】
前記少なくとも１つの潜在的なワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満である場合、前記少なくとも１つの潜在的なワークアイテムの実行がスケジューリングされ、前記少なくとも１つの潜在的なワークアイテムによる予測される影響が、前記受け入れ可能なパフォーマンスへの影響のしきい値を超えている場合、前記少なくとも１つの潜在的なワークアイテムの実行はスケジューリングされないことを特徴とする請求項１に記載の方法。
【請求項３】
前記少なくとも１つの潜在的なワークアイテムによる予測された影響は、前記分散アプリケーションのプロセッサ使用率、前記分散アプリケーションのメッセージ待機時間、前記分散アプリケーションの実行キューの長さ、またはそれらの任意の組み合わせに対する影響を示すことを特徴とする請求項１に記載の方法。
【請求項４】
ワークアイテムの有効期間内にスケジューリングされていない場合、前記少なくとも１つの潜在的なワークアイテムは期限が切れることを特徴とする請求項１に記載の方法。
【請求項５】
前記プロセッサが、前記分散アプリケーションで前記少なくとも１つの潜在的なワークアイテムを実行するステップをさらに含み、前記少なくとも１つの潜在的なワークアイテムは、前記分散アプリケーションに関連する検出した依存情報を格納する命令、前記分散アプリケーションに関連する監視されるアクティビティ情報を格納する命令、前記分散アプリケーションに関連するパフォーマンスカウンター情報を報告する命令、またはそれらの任意の組み合わせを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記プロセッサが、前記傍受したメッセージに基づいて、前記特定のコンポーネントで特定の関数の呼び出しを追跡するために、操作呼び出しモニターを割り当てるステップをさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記特定の関数は、ソース操作およびターゲット操作を保持し、前記少なくとも１つの潜在的なワークアイテムは、前記ソース操作と前記ターゲット操作との間の依存関係を示し、前記少なくとも１つの潜在的なワークアイテムを実行するステップは、前記依存関係を依存関係キャッシュに格納するステップを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記依存関係が以前に格納されていないと決定するステップに応じて、前記プロセッサが、前記依存関係キャッシュから保存場所に記憶域サービスを介して前記依存関係を転送するステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記プロセッサが、前記特定のコンポーネントで特定の実行パスのアクティビティを追跡するためにアクティビティモニターを割り当てるステップをさらに含み、前記少なくとも１つの潜在的なワークアイテムは、前記特定の実行パスに関連するアクティビティ情報を含み、前記少なくとも１つの潜在的なワークアイテムを実行するステップは、前記アクティビティ情報をアクティビティキューに格納するステップを含むことを特徴とする請求項５に記載の方法。
【請求項１０】
前記プロセッサが、前記傍受したメッセージに基づいて、特定のイベントの発生を追跡するためにカウンターモニターを割り当てるステップをさらに含み、前記少なくとも１つの潜在的なワークアイテムは、前記特定のイベントの少なくとも１つの発生を示し、前記少なくとも１つの潜在的なワークアイテムを実行するステップは、前記特定のイベントの前記少なくとも１つの発生を前記カウンターモニターの１つまたは複数のクライアントに報告するステップを含むことを特徴とする請求項５に記載の方法。
【請求項１１】
前記プロセッサが、前記分散アプリケーションに関連する少なくとも１つのメトリックを計算するステップであって、前記少なくとも１つのメトリックは、発生した例外の数、報告されるエラーの数、またはそれらの任意の組み合わせを含む、計算するステップと、
前記プロセッサが、前記分散アプリケーションの障害状態を検出するステップと、
前記プロセッサが、前記少なくとも１つのメトリックに基づいて、前記障害状態の潜在的な原因として前記特定のコンポーネントを識別するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１２】
第１のテクノロジーに関連する第１のテクノロジー固有のインターセプターおよび前記第１のテクノロジーとは異なる第２のテクノロジーに関連する第２のテクノロジー固有のインターセプターを含む複数のテクノロジー固有のインターセプターと、テクノロジーに依存しない、コンピュータ装置上のインターセプターマネージャーとを備える監視システムであって、
前記第１のテクノロジー固有のインターセプターは、
第１の分散アプリケーションコンポーネントによって送信および受信されるメッセージを傍受して、前記第１のテクノロジーに関連する前記第１の分散アプリケーションコンポーネントの動作を追跡し、
前記傍受したメッセージを検出したことに応答して、前記第１の分散アプリケーションコンポーネントの前記追跡された動作に基づいてワークアイテムを生成し、
前記第１の分散アプリケーションコンポーネントの前記追跡された動作に基づいて、前記ワークアイテムを前記テクノロジーに依存しないインターセプターマネージャーに送信するように構成され、
前記第２のテクノロジー固有のインターセプターは、
第２の分散アプリケーションコンポーネントによって送信および受信されたメッセージを傍受して、前記第２のテクノロジーに関連する前記第２の分散アプリケーションコンポーネントの動作を追跡し、
前記第２の分散アプリケーションコンポーネントの前記追跡された動作に基づいてワークアイテムを生成し、
前記第２の分散アプリケーションコンポーネントの前記追跡された動作に基づいて、前記ワークアイテムを前記テクノロジーに依存しないインターセプターマネージャーに送信するように構成され、
前記テクノロジーに依存しないインターセプターマネージャーは、前記第１のテクノロジー固有のインターセプターに関連する第１のワークアイテムマネージャーおよび前記第２のテクノロジー固有のインターセプターに関連する第２のワークアイテムマネージャーといった、複数のワークアイテムマネージャーを含み、
各ワークアイテムマネージャーは、特定のテクノロジー固有のインターセプターに関連し、
前記特定のテクノロジー固有のインターセプターからワークアイテムを受信し、
前記受信したワークアイテムをワークアイテムキューに入れ、
前記特定のテクノロジー固有のインターセプターによって追跡された分散アプリケーションコンポーネントのパフォーマンスに対する特定のワークアイテムによる影響を、受け入れ可能なパフォーマンスへの影響のしきい値と比較し、
前記影響が前記受け入れ可能なパフォーマンスへの影響のしきい値未満のときに、前記特定のワークアイテムの実行をスケジューリングし、
前記影響が前記受け入れ可能なパフォーマンスへの影響のしきい値より大きいときに、前記特定のワークアイテムの実行をスケジューリングせずに、前記特定のワークアイテムを破棄するように構成されていること
を特徴とする監視システム。
【請求項１３】
テクノロジー固有のインターセプターはそれぞれ、その関連するワークアイテムマネージャーに空のワークアイテムを要求し、前記空のワークアイテムに情報を格納することによってワークアイテムを生成し、および前記生成されたワークアイテムを前記テクノロジーに依存しないインターセプターマネージャーに送信するようにさらに構成されていることを特徴とする請求項１２に記載の監視システム。
【請求項１４】
前記各ワークアイテムマネージャーは、
同時に実行するワークアイテムの数を制限し、
前記ワークアイテムキューのサイズを制限し、
前記ワークアイテムキューが満杯のときに、受信したワークアイテムを拒否し、
スレッドプールのフォアグラウンドのスレッドまたは前記スレッドプールのバックグラウンドのスレッドにおいて、特定のワークアイテムの実行をスケジューリングし、
前記スレッドプールの同時に実行するスレッドの数を制限する
ようにさらに構成されていることを特徴とする請求項１２に記載の監視システム。
【請求項１５】
前記プロセッサが、空のワークアイテムに対する要求を、前記テクノロジー固有のインターセプターから受信するステップと、
前記プロセッサが、前記空のワークアイテムに対する要求を拒否するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１６】
前記プロセッサが、前記テクノロジー固有のインターセプターで依存関係検出をオンまたはオフするステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１７】
前記特定の傍受したメッセージは、前記特定のコンポーネントのソース操作と、前記複数のコンポーネントの第２のコンポーネントのターゲット操作との間の依存関係を示し、前記少なくとも１つの潜在的なワークアイテムは、前記依存関係を記憶するためのワークアイテムを含むことを特徴とする請求項１に記載の方法。
【請求項１８】
前記特定の傍受したメッセージは、分散アプリケーションの実行パスに関連するアクティブ情報を示し、前記少なくとも１つの潜在的なワークアイテムは、前記アクティブ情報を記憶するためのワークアイテムを含むことを特徴とする請求項１に記載の方法。
【請求項１９】
前記特定の傍受したメッセージは、ソフトウェア例外の発生を示し、前記少なくとも１つの潜在的なワークアイテムは、前記ソフトウェア例外の発生を報告するためのワークアイテムを含むことを特徴とする請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散アプリケーションの監視に関する。
【背景技術】
【０００２】
ソフトウェアアプリケーションは、様々な物理コンポーネントを横断して分散されていると監視するのが難しい場合がある。さらに、個々のコンポーネントが装備されていなかったり、異なるコンポーネントが企業内の異なる運用チームの管轄下にあったりする場合もある。また、アプリケーションに複数のテクノロジーが利用されている場合もある。分散アプリケーションは異種混合の場合があるが、多くの場合、分散アプリケーション用の監視システムはテクノロジーに固有のものである（たとえば、特定のシステムはJava（登録商標）アプリケーションのコンポーネントを監視できるが、．ＮＥＴアプリケーションのコンポーネントは監視できないなど）。これに加えて、監視システムは、監視対象の分散アプリケーションのパフォーマンスに悪影響を与える可能性がある。すなわち、監視システムは、分散アプリケーションですべてのトランザクションを監視する試みにおいて、処理およびメモリに大きなオーバーヘッドを生じさせ、動作を妨害したり、または分散アプリケーションのパフォーマンスに著しい影響を与えたりする可能性がある。そのようなパフォーマンスへの影響は、リアルタイム、ほぼリアルタイム、または重要な役割を担う分散アプリケーションにおいて問題となる可能性がある。
【発明の概要】
【０００３】
本開示は、分散アプリケーション用の監視システムについて記述するものである。データベース、サーバー、およびＷｅｂサービスなど、様々なハードウェアおよびソフトウェアの分散アプリケーションコンポーネントの監視に対応している。また、．ＮＥＴ、Java、Windows Communications Foundation（ＷＣＦ）、Internet Information Services（ＩＩＳ）、Ｗｉｎｄｏｗｓ（登録商標）ベースのテクノロジー、およびＵＮＩＸ（登録商標）ベースのテクノロジーなど、複数のテクノロジーの監視に対応している。
【０００４】
監視システムには、テクノロジーに依存しないインターセプターマネージャー、および分散アプリケーションのコンポーネントによって送信および受信されるメッセージを傍受できる１つまたは複数のテクノロジー固有のインターセプターが含まれている。テクノロジー固有の各インターセプターは、特定のテクノロジーに固有のものであり、特定のテクノロジーに関連する分散アプリケーションのコンポーネントに取り付けられる（たとえば．ＮＥＴインターセプターは、．ＮＥＴアプリケーションまたはサービスを含む分散アプリケーションのコンポーネントに取り付けられる）。テクノロジー固有のインターセプターは、特定の関数の呼び出しを追跡し、分散アプリケーションの特定の実行パスに沿ってアクティビティを追跡し、または分散アプリケーションに発生するイベント（たとえば、ソフトウェア例外または報告されたエラーなど）を追跡するように構成することができる。テクノロジー固有のインターセプターは、傍受したメッセージに基づいてワークアイテムを生成し、テクノロジーに依存しないインターセプターマネージャーにワークアイテムを送信する。
【０００５】
テクノロジーに依存しないインターセプターマネージャーは、受信したワークアイテムの実行をスケジューリングすることができる。たとえば、テクノロジーに依存しないインターセプターマネージャーは、分散アプリケーションの検出した依存関係を保存場所に格納し、アクティビティ情報を保存場所に格納して、ＩＴ管理者または管理アプリケーションなどのクライアントにイベントの発生を報告することができる。また、テクノロジーに依存しないインターセプターマネージャーは、監視システムによるパフォーマンスへの影響を軽減するために、ワークアイテムのキューイング、依存関係のキャッシング、バックグラウンドのスレッド処理、ガベージコレクションなどの調整機能を備えることができる。
【０００６】
この概要は、以下に発明を実施するための形態においてさらに詳しく記述する概念の抜粋を簡単な形で紹介するために提供するものである。この概要は、請求される主題の主な特徴または重要な特徴を特定することを意図したものではなく、また、請求される主題の範囲を制限するために使用することを意図したものでもない。
【図面の簡単な説明】
【０００７】
【図１】分散アプリケーションを監視するシステムの特定の実施形態を示すブロック図である。
【図２】分散アプリケーションを監視するシステムの他の特定の実施形態を示すブロック図である。
【図３】分散アプリケーションを監視するシステムと共に使用できるＩＤモニターの特定の実施形態を示すブロック図である。
【図４】分散アプリケーションを監視するメッセージ傍受機能を図示するブロック図である。
【図５】分散アプリケーションを監視する方法の特定の実施形態を示す流れ図である。
【図６】分散アプリケーションを監視する方法の他の特定の実施形態を示す流れ図である。
【図７】分散アプリケーションを監視する方法の特定の実施形態を示す流れ図である。
【図８】分散アプリケーションを監視する方法の他の特定の実施形態を示す流れ図である。
【図９】分散アプリケーションを監視する方法の他の特定の実施形態を示す流れ図である。
【図１０】テクノロジーに依存しないインターセプターマネージャーでワークアイテムを選択的にスケジューリングする方法の特定の実施形態を示す流れ図である。
【図１１】分散コンピューティング環境の特定の実施形態を図示する一般的な図である。
【図１２】図１〜図１１に示すようなコンピュータに実装された方法の実施形態をサポートするように動作可能なコンピューティングデバイス、コンピュータプログラム製品、およびシステムコンポーネントを含むコンピューティング環境を示すブロック図である。
【発明を実施するための形態】
【０００８】
特定の実施形態では、分散アプリケーションの複数のコンポーネントを識別するステップと、複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップとを含む方法が開示される。また、この方法には、識別された特定のテクノロジーに基づいて特定のコンポーネントにテクノロジー固有のインターセプターを取り付けるステップと、取り付けられたテクノロジー固有のインターセプターを使用して、特定のコンポーネントによって送信または受信されるメッセージを傍受するステップとが含まれる。この方法は、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成するステップと、分散アプリケーションのパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて、少なくとも１つの潜在的なワークアイテムの実行をスケジューリングするかどうかを決定するステップとをさらに含む。特定の実施形態では、少なくとも１つの潜在的なワークアイテムは、特定の命令または１組の命令に処理が必要であることを決定することに応じて生成される実行可能なワークアイテムである。
【０００９】
別の特定の実施形態では、第１のテクノロジー固有のインターセプターおよび第２のテクノロジー固有のインターセプターを含む複数のテクノロジー固有のインターセプターと、テクノロジーに依存しないインターセプターマネージャーとを含むシステムが開示される。第１のテクノロジー固有のインターセプターは、第１のテクノロジーに関連し、第２のテクノロジー固有のインターセプターは、第１のテクノロジーとは異なる第２のテクノロジーに関連する。第１のテクノロジー固有のインターセプターは、第１のテクノロジーに関連する第１の分散アプリケーションコンポーネントの動作を追跡するように構成されており、第１の分散アプリケーションコンポーネントによって送信されるメッセージおよび受信されるメッセージを傍受するステップを含む。第１のテクノロジー固有のインターセプターは、第１の分散アプリケーションコンポーネントの追跡された動作に基づいてワークアイテムを生成し、テクノロジーに依存しないインターセプターマネージャーにワークアイテムを送信するように、さらに構成される。第２のテクノロジー固有のインターセプターは、第２のテクノロジーに関連する第２の分散アプリケーションコンポーネントの動作を追跡するように構成されており、第２の分散アプリケーションコンポーネントによって送信されるメッセージおよび受信されるメッセージを傍受するステップを含む。第２のテクノロジー固有のインターセプターは、第２の分散アプリケーションコンポーネントの追跡された動作に基づいてワークアイテムを生成し、テクノロジーに依存しないインターセプターマネージャーにワークアイテムを送信するように、さらに構成される。テクノロジーに依存しないインターセプターマネージャーは、複数のワークアイテムマネージャーを含み、これには第１のテクノロジー固有のインターセプターに関連する第１のワークアイテムマネージャーおよび第２のテクノロジー固有のインターセプターに関連する第２のワークアイテムマネージャーが含まれている。各ワークアイテムマネージャーは特定のテクノロジー固有のインターセプターに関連しており、特定のテクノロジー固有のインターセプターからワークアイテムを受信して、受信したワークアイテムをワークアイテムキューに入れるように構成される。各ワークアイテムマネージャーは、特定のテクノロジー固有のインターセプターによって追跡された分散アプリケーションコンポーネントのパフォーマンスに対する特定のワークアイテムの影響を、受け入れ可能なパフォーマンスへの影響のしきい値と比較するようにさらに構成される。各ワークアイテムマネージャーは、影響が受け入れ可能なパフォーマンスに対する影響のしきい値未満であるときに、特定のワークアイテムの実行をスケジューリングし、影響が受け入れ可能なパフォーマンスに対する影響のしきい値より大きいときに、特定のワークアイテムの実行をスケジューリングせずに、特定のワークアイテムを破棄するように、さらに構成される。
【００１０】
別の特定の実施形態では、コンピュータ可読媒体が開示される。コンピュータ可読媒体は、コンピュータによって実行されたときに、テクノロジーに依存しないインターセプターマネージャーにおいて、分散アプリケーションの第１のコンポーネントに取り付けられている第１のテクノロジー固有のインターセプターから第１のワークアイテムをコンピュータに受信させる命令を含む。第１のテクノロジー固有のインターセプターは第１のテクノロジーに固有のものであり、第１のコンポーネントは第１のテクノロジーに関連する。また、コンピュータ可読媒体は、コンピュータによって実行されたときに、テクノロジーに依存しないインターセプターマネージャーにおいて、分散アプリケーションの第２のコンポーネントに取り付けられている第２のテクノロジー固有のインターセプターから第２のワークアイテムをコンピュータに受信させる命令を含む。第２のテクノロジー固有のインターセプターは、第２のテクノロジーに固有のものである。第２のコンポーネントは第２のテクノロジーに関連し、第２のテクノロジーは第１のテクノロジーとは異なる。コンピュータ可読媒体は、コンピュータによって実行されたときに、分散アプリケーションに対する第１のワークアイテムによる第１の影響に基づいて、および分散アプリケーションに対する第２のワークアイテムによる第２の影響に基づいて、第１のワークアイテムおよび第２のワークアイテムの実行をスケジューリングするかどうかをコンピュータに決定させる命令をさらに含む。
【００１１】
図１は、分散アプリケーション１０２を監視するシステム１００の特定の実施形態を示すブロック図である。分散アプリケーション１０２は、第１のコンピューティングデバイス１０４のＷＣＦ（Windows Communication Foundation）コンポーネント１１０および第２のコンピューティングデバイス１０６の．ＮＥＴコンポーネント１２０などのコンポーネントを含む。第１のコンピューティングデバイス１０４および第２のコンピューティングデバイス１０６は分散されている（たとえば、別個のハードウェアを使用して動作したり、または互いに遠く離れて配置されたりする）。また、分散アプリケーション１０２は、たとえばＷＣＦコンポーネント１１０に取り付けられたＷＣＦインターセプター１１２、および．ＮＥＴコンポーネント１２０に取り付けられた．ＮＥＴインターセプター１２２など、コンポーネントに取り付けられたテクノロジー固有のインターセプターを含む。分散アプリケーション１０２のコンポーネントは、メッセージを送信および受信でき、コンポーネントに取り付けられたテクノロジー固有のインターセプターは、メッセージを傍受できる。また、テクノロジー固有のインターセプターは、傍受したメッセージに基づいてワークアイテムを生成し、生成したワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信できる。
【００１２】
分散アプリケーション１０２の各コンポーネントは、分散アプリケーション１０２の他のコンポーネントにメッセージを送信し、分散アプリケーション１０２の他のコンポーネントからメッセージを受信するように構成することができる。たとえば、ＷＣＦコンポーネント１１０および．ＮＥＴコンポーネント１２０は、相互にメッセージを送信し、相互にメッセージを受信するように構成することができる。特定の実施形態では、メッセージはＸＭＬ（extensible markup language）のメッセージである。
【００１３】
テクノロジー固有のインターセプターはそれぞれ、テクノロジー固有のインターセプターが取り付けられているコンポーネントで特定の関数の呼び出しを追跡するように構成することができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０で特定の関数の呼び出しを追跡するように構成することができる。特定の実施形態では、特定の関数は、分散アプリケーション１０２の異なるコンポーネントにあるソース操作およびターゲット操作を含む。たとえば、特定の関数には、ＷＣＦコンポーネント１１０のソース操作および．ＮＥＴコンポーネント１２０のターゲット操作がある場合がある。次に、ＷＣＦインターセプター１１２は、特定の関数の呼び出しを示すメッセージを傍受することによって、ＷＣＦコンポーネント１１０のソース操作と、．ＮＥＴコンポーネント１２０のターゲット操作との間の依存関係を検出することができる。
【００１４】
また、テクノロジー固有のインターセプターはそれぞれ、テクノロジー固有のインターセプターが取り付けられているコンポーネントを含む分散アプリケーション１０２の特定の実行パスでアクティビティを監視するように構成することができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０と、．ＮＥＴコンポーネント１２０との間のメッセージを傍受して、傍受したメッセージが、ＷＣＦコンポーネント１１０を含む特定の実行パスに沿ったアクティビティを表しているかどうかを決定する。
【００１５】
また、テクノロジー固有のインターセプターのそれぞれは、分散アプリケーション１０２で発生する特定のイベント（たとえば、ソフトウェア例外または報告されたエラーなど）を追跡するように構成することができる。特定の実施形態では、特定のイベントは特定の期間追跡される。たとえば、ＷＣＦインターセプター１１２は、１分間にＷＣＦコンポーネント１１０で発生するソフトウェア例外の数を追跡し、これによって、ＷＣＦコンポーネント１１０で１分間に生じる例外の割合を計算することができる。あるいは、特定のイベントを連続的に追跡することができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０と．ＮＥＴコンポーネント１２０との間のメッセージを傍受して、ＷＣＦコンポーネント１１０または．ＮＥＴコンポーネント１２０のいずれかでソフトウェア例外（たとえばイベントなど）が発生したことを傍受したメッセージから決定することができる。
【００１６】
テクノロジー固有のインターセプターはそれぞれ、テクノロジー固有のインターセプターで傍受するメッセージに基づいてワークアイテムを生成し、生成したワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信するように構成することができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０のソース操作と、．ＮＥＴコンポーネント１２０のターゲット操作との間で検出された依存関係を格納する命令を含むワークアイテムを生成して、ワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信することができる。別の例として、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０を含む特定の実行パスに関連するアクティビティ情報を格納し、ワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信するための命令を含むワークアイテムを生成することができる。さらに別の例としては、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０または．ＮＥＴコンポーネント１２０のいずれかでのソフトウェア例外の発生を報告する命令を含むワークアイテムを生成して、ワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信することができる。．ＮＥＴインターセプター１２２も同様に、ワークアイテムを生成することができる。あるいは、ＷＣＦインターセプター１１２は、３つのタスクすべてに対する命令を含む単一のワークアイテムを生成することができる。
【００１７】
また、複数のインターセプターを単一のコンポーネントに取り付けることができることに注意されたい。たとえば、Ｗｅｂサーバーに．ＮＥＴテクノロジーおよびＷＣＦテクノロジーの両方が含まれている場合は、図１の．ＮＥＴインターセプター１２２などの．ＮＥＴインターセプターおよび図１のＷＣＦインターセプター１１２などのＷＣＦインターセプターの両方を分散アプリケーション１０２のＷｅｂサーバーに取り付けることができる。
【００１８】
テクノロジーに依存しないインターセプターマネージャー１３０は、分散アプリケーション１０２のＷｅｂサービスまたは分散アプリケーション１０２の管理アプリケーションに配置することができる。テクノロジーに依存しないインターセプターマネージャー１３０は、複数のワークアイテムマネージャーを含むことができ、複数のワークアイテムマネージャーはそれぞれ、特定のテクノロジー固有のインターセプターからワークアイテムを受信するように構成される。たとえば、図１に示す実施形態では、テクノロジーに依存しないインターセプターマネージャーは、ＷＣＦインターセプター１１２からワークアイテムを受信するように構成されたＷＣＦワークアイテムマネージャー１４０および．ＮＥＴインターセプター１２２からワークアイテムを受信するように構成された．ＮＥＴワークアイテムマネージャー１５０を含む。また、各ワークアイテムマネージャーは、ワークアイテムキューにワークアイテムを格納するように構成することができる。たとえば、ＷＣＦワークアイテムマネージャー１４０は、ＷＣＦワークアイテムキュー１４２にワークアイテムを格納することができ、．ＮＥＴワークアイテムマネージャーは、．ＮＥＴワークアイテムキュー１５２にワークアイテムを格納することができる。特定の実施形態では、ワークアイテムは、ワークアイテムがテクノロジーに依存しないインターセプターマネージャー１３０によって受信された順にワークアイテムキューに格納される。たとえば、第２のワークアイテムより前に第１のワークアイテムがテクノロジーに依存しないインターセプターマネージャー１３０によって受信された場合、ＷＣＦインターセプター１１２から受信された第１のワークアイテムは、ＷＣＦインターセプターから受信された第２のワークアイテムの前に、ＷＣＦワークアイテムキュー１４２に格納することができる。また、各ワークアイテムマネージャーは、ワークアイテムキューが満杯のときに、受信したワークアイテムを破棄するように構成することができる。たとえば、ＷＣＦワークアイテムキュー１４２が満杯であるとＷＣＦワークアイテムマネージャー１４０が決定したときに、ＷＣＦワークアイテムマネージャー１４０は受信したワークアイテムを破棄することができる（たとえば、ＷＣＦワークアイテムキュー１４２のサイズが、ＷＣＦワークアイテムマネージャー１４０に認識されているワークアイテムキューの最大サイズの変数と等しいとき）。
【００１９】
各ワークアイテムマネージャーは、キューに入れられたワークアイテムの実行をスケジューリングするように構成されたワークアイテムスケジューリングロジックを含むことができる。たとえば、ＷＣＦワークアイテムマネージャー１４０は、ＷＣＦワークアイテムスケジューリングロジック１４４を含むことができ、．ＮＥＴワークアイテムマネージャー１５０は、．ＮＥＴワークアイテムスケジューリングロジック１５４を含むことができる。特定の実施形態では、分散アプリケーション１０２のパフォーマンスに対する特定のワークアイテムによる予測される影響に基づいて、ＷＣＦワークアイテムスケジューリングロジック１４４または．ＮＥＴワークアイテムスケジューリングロジック１５４は、特定のワークアイテムの実行をスケジューリングするかどうかを決定することができる。たとえば、ＷＣＦワークアイテムスケジューリングロジック１４４は、特定のワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスに対する影響のしきい値未満であるときに、特定のワークアイテムの実行をスケジューリングすることができる（たとえば、受け入れ可能なプロセッサ使用率への影響が１％、受け入れ可能なメッセージ待機時間への影響が１秒、または受け入れ可能な実行キューの長さへの影響が３つの実行可能な動作など）。あるいは、ＷＣＦワークアイテムスケジューリングロジック１４４は、ＷＣＦコンポーネント１１０に対する特定のワークアイテムによる予測される影響に基づいて、特定のワークアイテムの実行をスケジューリングするかどうかを決定することができる。
【００２０】
特定の実施形態では、テクノロジー固有のインターセプターは、ワークアイテムマネージャーに空のワークアイテムを要求し、空のワークアイテムに情報および実行命令を格納することにより、ワークアイテムを生成するように構成される。そのような実施形態では、ワークアイテムマネージャーは、空のワークアイテムに対する要求を拒否することによって、特定の分散アプリケーションコンポーネントで監視することによるパフォーマンスに対する影響を軽減できることを理解されたい。たとえば、．ＮＥＴコンポーネント１２０の依存関係を検出すると、．ＮＥＴインターセプター１２２は、．ＮＥＴワークアイテムマネージャー１５０に空のワークアイテムを要求することができる。．ＮＥＴワークアイテムマネージャー１５０が要求を許可し、．ＮＥＴインターセプター１２２に空のワークアイテムを送信すると、．ＮＥＴインターセプター１２２は、空のワークアイテムに検出された依存関係を格納することによりワークアイテムを生成し、生成したワークアイテムを．ＮＥＴワークアイテムマネージャー１５０に送信することができる。特定の実施形態では、ワークアイテムには有効期間があり、有効期間内に実行がスケジューリングされない場合は、ワークアイテムキューから破棄される。たとえば、．ＮＥＴワークアイテムマネージャー１５０によって空のワークアイテムが生成されてから１０秒以内にスケジューリングされない場合は、．ＮＥＴインターセプター１２２によって生成されたワークアイテムは、期限が切れて破棄することができる。
【００２１】
特定の実施形態では、ワークアイテムマネージャー１４０およびワークアイテムマネージャー１５０などのワークアイテムマネージャーは、以下に示す代表的なＣ＃クラステンプレートおよびインターフェイスに従って実装することができる。
【００２２】
【表１】
0005474177.tif 000002
【００２３】
動作中に、テクノロジー固有のインターセプターは、分散アプリケーション１０２のコンポーネントに取り付けることができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０に取り付けることができ、．ＮＥＴインターセプター１２２は、．ＮＥＴコンポーネント１２０に取り付けることができる。テクノロジー固有のインターセプターのそれぞれは、分散アプリケーション１０２で、関数呼び出しを追跡し、アクティビティ情報を追跡し、パフォーマンスイベントを追跡するか、または、それらを任意に組み合わせるように構成することができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０で特定のＷＣＦ関数の呼び出しを追跡し、ＷＣＦコンポーネント１１０を含む分散アプリケーション１０２の特定の実行パスでアクティビティ情報を追跡し、ＷＣＦコンポーネント１１０で発生するソフトウェア例外を追跡するように構成することができる。同様に、．ＮＥＴインターセプター１２２は、．ＮＥＴコンポーネント１２０で特定の．ＮＥＴ関数の呼び出しを追跡し、．ＮＥＴコンポーネント１２０を含む分散アプリケーション１０２の特定の実行パスに関連するアクティビティ情報を追跡し、．ＮＥＴコンポーネント１２０で発生するソフトウェア例外を追跡するように構成することができる。
【００２４】
動作している間に、テクノロジー固有のインターセプターは、分散アプリケーション１０２の様々なコンポーネント間で１つまたは複数のメッセージを傍受し、１つまたは複数の傍受したメッセージに基づいてワークアイテムを生成することができる。また、テクノロジー固有のインターセプターは、生成したワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信することができる。たとえば、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０によって．ＮＥＴコンポーネント１２０に送信されるメッセージを傍受して、傍受したメッセージに基づいてワークアイテムを生成し、ワークアイテムをテクノロジーに依存しないインターセプターマネージャー１３０に送信することができる。特定の実施形態では、傍受したメッセージは、ＷＣＦコンポーネント１１０のソース操作と、．ＮＥＴコンポーネント１２０のターゲット操作との間の依存関係を示すものであり、ワークアイテムは、依存関係を格納する命令を含む。別の特定の実施形態では、傍受したメッセージは、追跡するようにＷＣＦインターセプター１１２が構成された分散アプリケーション１０２の実行パスに関連するアクティビティ情報を含み、ワークアイテムは、アクティビティ情報を格納する命令を含む。別の特定の実施形態では、傍受したメッセージは、ＷＣＦコンポーネント１１０または．ＮＥＴコンポーネント１２０のいずれかでソフトウェア例外が発生したことを示し、ワークアイテムは、ソフトウェア例外の発生を報告する命令を含む。
【００２５】
テクノロジーに依存しないインターセプターマネージャー１３０がテクノロジー固有のインターセプターからワークアイテムを受信すると、ワークアイテムマネージャー（たとえば、ＷＣＦワークアイテムマネージャー１４０または．ＮＥＴワークアイテムマネージャー１５０など）は、受信したワークアイテムをアイテムキュー（たとえば、ＷＣＦワークアイテムキュー１４２または．ＮＥＴワークアイテムキュー１５２など）に追加することができる。
【００２６】
ＷＣＦワークアイテムキュー１４２の潜在的な各ワークアイテムに対して、分散アプリケーション１０２のパフォーマンスに対する潜在的なワークアイテムによる予測される影響に基づいて、ＷＣＦワークアイテムスケジューリングロジック１４４は、潜在的なワークアイテムの実行をスケジューリングするかどうかを決定することができる。潜在的なワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満の場合、ＷＣＦワークアイテムスケジューリングロジック１４４は、潜在的なワークアイテムの実行をスケジューリングすることができる。たとえば、分散アプリケーション１０２でのメッセージ待機時間に対する潜在的なワークアイテムによる予測される影響が１秒未満の場合は、潜在的なワークアイテムをスケジューリングすることができる。特定のワークアイテムによる潜在的な影響が、受け入れ可能なパフォーマンスへの影響のしきい値を超えている場合は、ＷＣＦワークアイテムスケジューリングロジック１４４は、ＷＣＦワークアイテムキュー１４２から潜在的なワークアイテムを破棄することができる。たとえば、分散アプリケーションのメッセージ待機時間に対する潜在的なワークアイテムによる予測される影響が１秒を超える場合、潜在的なワークアイテムを破棄することができる。同様に、．ＮＥＴワークアイテムキュー１５２の潜在的な各ワークアイテムに対して、分散アプリケーション１０２のパフォーマンスに対する潜在的なワークアイテムによる予測される影響に基づいて、．ＮＥＴワークアイテムスケジューリングロジックは、潜在的なワークアイテムを選択的にスケジューリングすることができる。
【００２７】
図１のシステム１００は、様々なコンポーネントを横断して分散され、様々なテクノロジーを含む分散アプリケーションを監視するために使用することができることを理解されたい。図１のシステム１００は、分散アプリケーションに対する、そのような監視による全体的なパフォーマンスへの影響を軽減するために、調整機能（たとえば、空のワークアイテムに対する要求を拒否する、ワークアイテムキューのサイズを制限する、パフォーマンスに対する予測される影響が大きいワークアイテムを破棄する、有効期間後にワークアイテムを自動的に期限切れにするなど）を含むことをさらに理解されたい。したがって、図１のシステム１００は、必要に応じて、パフォーマンスのために監視精度を犠牲にすることができるため、リアルタイム、ほぼリアルタイム、または重要な役割を担う分散アプリケーションの動作は、図１のシステム１００によって妨害されないことを理解されたい。
【００２８】
図２は、分散アプリケーション２０１を監視するシステム２００の他の特定の実施形態を示すブロック図である。分散アプリケーション２０１は、．ＮＥＴコンポーネント２０５に取り付けられた．ＮＥＴインターセプター２０２、ＷＣＦコンポーネント２０６に取り付けられたＷＣＦインターセプター２０３、およびJavaコンポーネント２０７に取り付けられたJavaインターセプター２０４など、複数のテクノロジー固有のインターセプターを含む。テクノロジー固有のインターセプターはそれぞれ、ワークアイテムをテクノロジーに依存しないインターセプターマネージャー２３０に送信するように構成することができる。例示的実施形態では、．ＮＥＴインターセプター２０２は、図１の．ＮＥＴインターセプター１２２を含み、ＷＣＦインターセプター２０３は、図１のＷＣＦインターセプター１１２を含み、テクノロジーに依存しないインターセプターマネージャー２３０は、図１のテクノロジーに依存しないインターセプターマネージャー１３０を含む。
【００２９】
テクノロジー固有のインターセプターによって生成され、テクノロジーに依存しないインターセプターマネージャー２３０に送信されるワークアイテムは、分散アプリケーション２０１の検出された依存関係を格納する命令、分散アプリケーション２０１の特定の実行パスに関連するアクティビティ情報を格納する命令、分散アプリケーション２０１で発生したイベントを報告する命令、またはそれらを任意に組み合わせた命令を含むことができる。テクノロジーに依存しないインターセプターマネージャー２３０は、ワークアイテムマネージャー２４０など複数のワークアイテムマネージャーを含むことができ、各ワークアイテムマネージャーは、ワークアイテムキュー２４２などのワークアイテムキューに、特定のテクノロジー固有のインターセプターから受信したワークアイテムを格納するように構成することができる。たとえば、ワークアイテムマネージャー２４０は．ＮＥＴワークアイテムマネージャーでもよく、．ＮＥＴインターセプター２０２から受信したワークアイテムをワークアイテムキュー２４２に格納することができる。別の例として、ワークアイテムマネージャー２４０は、ＷＣＦワークアイテムマネージャーでもよく、ＷＣＦインターセプター２０３から受信したワークアイテムをワークアイテムキュー２４２に格納することができる。別の例として、ワークアイテムマネージャー２４０は、Javaワークアイテムマネージャーでもよく、Javaインターセプター２０４から受信したワークアイテムをワークアイテムキュー２４２に格納することができる。
【００３０】
また、ワークアイテムマネージャー２４０は、ワークアイテムキュー２４２でワークアイテムの実行をスケジューリングし、実行がスケジューリングされたら、ワークアイテムキュー２４２からワークアイテムを削除するように構成されたワークアイテムスケジューリングロジック２４４を含むことができる。特定の実施形態では、ワークアイテムスケジューリングロジック２４４は、分散アプリケーション２０１のパフォーマンスに対する特定のワークアイテムによる予測される影響に基づいて、特定のワークアイテムの実行をスケジューリングするかどうかを決定する。たとえば、ワークアイテムスケジューリングロジック２４４は、特定のワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満であるときに、特定のワークアイテムの実行をスケジューリングすることができる。
【００３１】
ワークアイテムスケジューリングロジック２４４は、スレッドプール２２０にアクセスすることができ、スレッドプール２２０は、１つまたは複数のフォアグラウンドのスレッド２２２および１つまたは複数のバックグラウンドのスレッド２２４を含む。ワークアイテムスケジューリングロジック２４４がスレッドプール２２０にアクセスできる場合、ワークアイテムスケジューリングロジック２４４は、スレッドプール２２０のフォアグラウンドのスレッド２２２の１つまたはバックグラウンドのスレッド２２４の１つにおいて、ワークアイテムの実行をスケジューリングすることができる。また、ワークアイテムスケジューリングロジック２４４は、同時に実行するワークアイテムの数を制限し、スレッドプール２２０の同時に実行するスレッドの数を制限するように構成することができる。
【００３２】
テクノロジーに依存しないインターセプターマネージャー２３０の依存関係マネージャー２７２は、検出された依存関係を格納する命令を含むワークアイテムを実行するように構成することができる。特定の実施形態では、依存関係マネージャー２７２は、検出した依存関係を依存関係キャッシュ２８２に一時的に収集し、収集した依存関係をバッチで格納する。たとえば、依存関係マネージャー２７２は、検出した依存関係を依存関係キャッシュ２８２に収集し、依存関係キャッシュ２８２のサイズが固定バッチサイズ（たとえば２０）に達するたびに、依存関係キャッシュ２８２から、検出し収集した依存関係を格納することができる。あるいは、依存関係マネージャー２７２は、検出した依存関係を依存関係キャッシュ２８２に収集し、依存関係キャッシュ２８２から、検出し収集した依存関係を固定された時間間隔（たとえば１２０秒）で格納することができる。有効期間内に格納されなければ、依存関係キャッシュ２８２によって収集された依存関係は期限が切れる場合がある。依存関係マネージャー２７２は、１つまたは複数の保存場所にアイテムを格納することを担当する記憶域サービス２９０に、検出した依存関係のバッチを送信することによって、検出した依存関係のバッチを格納することができる。たとえば、記憶域サービス２９０は、データベースまたは他の何らかのデータストアに、検出した依存関係を格納することができる。特定の実施形態では、記憶域サービス２９０は、特定の依存関係が以前に格納されていないと決定することに応じて特定の依存関係を格納することができる。また、依存関係マネージャー２７２は、分散アプリケーション２０１のテクノロジー固有のインターセプターごとに、依存関係検出をオンまたはオフにするように構成することができる。たとえば、依存関係マネージャー２７２は、．ＮＥＴインターセプター２０２、ＷＣＦインターセプター２０３、およびJavaインターセプター２０４のそれぞれで、依存関係検出をオンまたはオフにすることができる。
【００３３】
テクノロジーに依存しないインターセプターマネージャー２３０のアクティビティマネージャー２７０は、分散アプリケーション２０１の特定の実行パスに関連するアクティビティ情報を格納する命令を含むワークアイテムを実行するように構成することができる。特定の実施形態では、アクティビティマネージャー２７０は、そのようなワークアイテムをアクティビティキュー２８０に入れ、アクティビティキュー２８０が満杯の場合は、受信したそのようなワークアイテムを破棄する。アクティビティマネージャー２７０は、アクティビティ情報をアクティビティキュー２８０から記憶域サービス２９０に転送することによって、アクティビティ情報を格納することができる。特定の実施形態では、アクティビティマネージャー２７０は、特定のテクノロジー固有のインターセプターでアクティビティ情報コレクションを初期化するように構成される。たとえば、Javaコンポーネント２０７がJava Database Connectivity（ＪＤＢＣ）を介してデータベースとインターフェイスされると、アクティビティマネージャー２７０は、Javaインターセプター２０４に、Javaコンポーネント２０７でＪＤＢＣ呼び出しを含むすべてのメッセージを追跡するように指示することによって、データベースの動作を追跡することができる。
【００３４】
図２に示す特定の実施形態は、１つの記憶域サービスしか示していないが（つまり記憶域サービス２９０）、テクノロジーに依存しないインターセプターマネージャー２３０によって複数の記憶域サービスにアクセスできることに注意されたい。たとえば、依存関係マネージャー２７２は、第１の記憶域サービスを使用して、検出した依存関係を格納し、アクティビティマネージャー２７０は、第２の記憶域サービスを使用して、アクティビティ情報を格納することができる。第１の記憶域サービスおよび第２の記憶域サービスは、同じ保存場所または異なる保存場所にデータを格納することができる。
【００３５】
テクノロジーに依存しないインターセプターマネージャー２３０のＩＤモニター２６０は、分散アプリケーション２０１のコンポーネントごとにＩＤモニターを含むことができる。たとえば、ＩＤモニター２６０は、分散アプリケーション２０１のＷｅｂサービスのエンドポイントモニターを含むことができる。特定の実施形態では、特定のコンポーネントのＩＤモニターは、特定のコンポーネントに取り付けられたテクノロジー固有のインターセプターによって検出されたイベント（たとえばソフトウェア例外またはエラーなど）に関連するデータを格納する。各ＩＤモニターは１つまたは複数のクライアントを保持することができ、各ＩＤモニターは、１つまたは複数のクライアントに特定のイベントの発生を報告することによって、特定のイベントの発生を報告する命令を含むワークアイテムを実行することができる。たとえば、．ＮＥＴインターセプター２０２が、．ＮＥＴコンポーネント２０５でのエラーを報告する命令を含むワークアイテムを生成すると、．ＮＥＴコンポーネント２０５のＩＤモニターは、．ＮＥＴコンポーネント２０５のＩＤモニターのクライアントにエラーを報告することによって、ワークアイテムを実行することができる。各ＩＤモニターは、コンポーネントモニター、エンドポイントモニター、アクティビティモニター、ビジネス展望モニター、操作呼び出しモニター、機器モニター、またはこれらの任意の組み合わせなど、割り当てられたモニターを含む監視ツリーにイベントデータを格納することができる。監視ツリーについては、図３を参照しながら本明細書にさらに記述する。また、テクノロジーに依存しないインターセプターマネージャー２３０は、ガベージコレクター２８４を含むことができる。ガベージコレクター２８４は、固定された時間間隔で実行し、固定された時間間隔中に使用されなかったモニターの割り当てを解除するように構成することができる。
【００３６】
特定の実施形態では、テクノロジーに依存しないインターセプターマネージャー２３０は、１つまたは複数の構成設定２１２を含むことができる。構成設定２１２は、構成ファイル２１０を介して設定することができる。構成ファイル２１０は、任意の形式（たとえばＸＭＬ）で格納することができ、依存関係マネージャー２７２、アクティビティマネージャー２７０、ワークアイテムマネージャー２４０、およびガベージコレクター２８４の設定を含むことができる。たとえば、構成ファイル２１０はＸＭＬに格納することができ、以下に示す代表的なＸＭＬセクションを含むことができる。
【００３７】
【表２】
0005474177.tif 000003
【００３８】
特定の実施形態では、テクノロジー固有のインターセプターは、以下に示す代表的なＣ＃インターフェイスに従って実装することができる。
【００３９】
【表３】
0005474177.tif 000004
【００４０】
テクノロジー固有のインターセプターが上記のように実装されると、テクノロジー固有のインターセプターの依存関係検出は、メソッドProcess Dependency Discovery（）を呼び出すことによってオンまたはオフにすることができ、アクティビティ監視は、メソッドProcess Activity Monitoring（）によってオンまたはオフにすることができることを理解されたい。さらに、イベント追跡は、メソッドSetup Instrument（）によって設定することができ、関数呼び出し追跡は、メソッドSetup Operation Call Instrument（）によって設定することができ、アクティビティ追跡は、メソッドSetup Activity Instrument（）によって設定することができる。
【００４１】
特定の実施形態では、テクノロジーに依存しないインターセプターマネージャー２３０は、分散アプリケーション２０１の外部にあるエージェント２０８に配置することができる。そのような実施形態では、テクノロジー固有のインターセプター２０２〜２０４など、分散アプリケーションのテクノロジー固有のインターセプターは、外部エージェント２０８によって関数呼び出しを追跡し、アクティビティ情報を追跡し、イベントを追跡するように構成することができる。
【００４２】
動作中に、テクノロジーに依存しないインターセプターマネージャー２３０は、構成ファイル２１０を介して構成することができる。テクノロジーに依存しないインターセプターマネージャー２３０は、．ＮＥＴコンポーネント２０５、ＷＣＦコンポーネント２０６、およびJavaコンポーネント２０７など、分散アプリケーション２０１のコンポーネントを識別することができる。テクノロジーに依存しないインターセプターマネージャー２３０は、１つまたは複数コンポーネントに関連する特定のテクノロジーをさらに識別し、テクノロジー固有のインターセプターを１つまたは複数のコンポーネントに取り付けることができる。たとえば、テクノロジーに依存しないインターセプターマネージャー２３０は、．ＮＥＴインターセプター２０２を．ＮＥＴコンポーネント２０５に取り付け、ＷＣＦインターセプター２０３をＷＣＦコンポーネント２０６に取り付け、Javaインターセプター２０４をJavaコンポーネント２０７に取り付けることができる。テクノロジーに依存しないインターセプターマネージャー２３０は、テクノロジー固有のインターセプターを構成して、依存関係を検出し、アクティビティ情報を追跡して、分散アプリケーション２０１のイベントを追跡することができる。たとえば、依存関係マネージャー２７２は、．ＮＥＴインターセプター２０２で依存関係検出を作動させ、．ＮＥＴインターセプター２０２を構成し、．ＮＥＴコンポーネント２０５で特定の．ＮＥＴ関数の呼び出しを追跡することができる。別の例として、アクティビティマネージャー２７０は、Javaコンポーネント２０７とデータベースとの間のＪＤＢＣ呼び出しを追跡するようにJavaコンポーネント２０４に指示することができる。さらに別の例としては、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦインターセプター２０３を構成して、ＷＣＦコンポーネント２０６でソフトウェア例外の各発生を報告することができる。
【００４３】
テクノロジー固有のインターセプターは、分散アプリケーション２０１の様々なコンポーネント間の１つまたは複数のメッセージを傍受して、１つまたは複数の傍受したメッセージに基づいて、１つまたは複数のワークアイテムを生成することができる。たとえば、．ＮＥＴインターセプター２０２は、特定の．ＮＥＴ関数の呼び出しに関連するメッセージを傍受し、ＷＣＦコンポーネント２０６のソース操作と、．ＮＥＴコンポーネント２０５のターゲット操作との間の依存関係を検出することができる。．ＮＥＴインターセプター２０２は、関連する依存関係ワークアイテムをテクノロジーに依存しないインターセプターマネージャー２３０に送信することができる。別の例として、Javaインターセプター２０４は、Javaコンポーネント２０７がＪＤＢＣ呼び出しを行ったことを検出し、関連するアクティビティワークアイテムをテクノロジーに依存しないインターセプターマネージャー２３０に送信することができる。さらに別の例としては、ＷＣＦインターセプター２０３は、ＷＣＦコンポーネント２０６でソフトウェア例外の発生を検出し、関連するイベントワークアイテムをテクノロジーに依存しないインターセプターマネージャー２３０に送信することができる。
【００４４】
テクノロジーに依存しないインターセプターマネージャー２３０が．ＮＥＴインターセプター２０２から依存関係ワークアイテムを受信すると、．ＮＥＴワークアイテムマネージャー（たとえば、ワークアイテムマネージャー２４０が．ＮＥＴワークアイテムマネージャーのときはワークアイテムマネージャー２４０）は、依存関係ワークアイテムをワークアイテムキューに追加することができる（たとえば、ワークアイテムマネージャー２４０が．ＮＥＴワークアイテムマネージャーのときはワークアイテムキュー２４２）。ワークアイテムマネージャーのワークアイテムスケジューリングロジック（たとえば、ワークアイテムマネージャー２４０が．ＮＥＴワークアイテムマネージャーのときはワークアイテムスケジューリングロジック２４４）は、分散アプリケーション２０１のパフォーマンスに対する依存関係ワークアイテムの予測される影響に基づいて、依存関係ワークアイテムの実行をスケジューリングするかどうかを決定することができる。依存関係ワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満の場合、ワークアイテムスケジューリングロジック２４４は、スレッドプール２２０のフォアグラウンドのスレッド２２２またはバックグラウンドのスレッド２２４の１つにおいて、依存関係ワークアイテムの実行をスケジューリングすることができる。依存関係マネージャー２７２は、ＷＣＦコンポーネント２０６のソース操作と、．ＮＥＴコンポーネント２０５のターゲット操作との間の検出された依存関係を依存関係キャッシュ２８２に追加することによって、依存関係ワークアイテムを実行することができる。検出した依存関係を依存関係キャッシュ２８２に追加した後に、依存関係マネージャー２７２は、検出した依存関係を記憶域サービス２９０を介して格納することができる。あるいは、依存関係ワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値を超えている場合は、依存関係ワークアイテムを破棄することができる。
【００４５】
テクノロジーに依存しないインターセプターマネージャー２３０がJavaインターセプター２０４からアクティビティワークアイテムを受信すると、Javaワークアイテムマネージャー（たとえばワークアイテムマネージャー２４０がJavaワークアイテムマネージャーのときはワークアイテムマネージャー２４０）は、アクティビティワークアイテムをワークアイテムキューに追加することができる（たとえばワークアイテムマネージャー２４０がJavaワークアイテムマネージャーのときにワークアイテムキュー２４２）。ワークアイテムマネージャーのワークアイテムスケジューリングロジック（たとえばワークアイテムマネージャー２４０がJavaワークアイテムマネージャーのときはワークアイテムスケジューリングロジック２４４）は、分散アプリケーション２０１のパフォーマンスに対するアクティビティワークアイテムによる予測される影響に基づいて、アクティビティワークアイテムの実行をスケジューリングするかどうかを決定することができる。アクティビティワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満の場合、ワークアイテムスケジューリングロジック２４４は、スレッドプール２２０のフォアグラウンドのスレッド２２２またはバックグラウンドのスレッド２４４の１つにおいて、アクティビティワークアイテムの実行をスケジューリングすることができる。アクティビティマネージャー２７０は、Javaコンポーネント２０７によって行われたＪＤＢＣ呼び出しをアクティビティキュー２８０に追加することによって、アクティビティワークアイテムを実行することができる。ＪＤＢＣ呼び出しをアクティビティキュー２８０に追加した後に、アクティビティマネージャー２７０は、ＪＤＢＣ呼び出しを記憶域サービス２９０を介して格納することができる。あるいは、アクティビティワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値を超える場合は、アクティビティワークアイテムを破棄することができる。
【００４６】
テクノロジーに依存しないインターセプターマネージャー２３０がＷＣＦインターセプター２０３からイベントワークアイテムを受信すると、ＷＣＦワークアイテムマネージャー（たとえばワークアイテムマネージャー２４０がＷＣＦワークアイテムマネージャーのときはワークアイテムマネージャー２４０）は、イベントワークアイテムをワークアイテムキューに追加することができる（たとえばワークアイテムマネージャー２４０がＷＣＦワークアイテムマネージャーのときはワークアイテムキュー２４２）。ワークアイテムマネージャーのワークアイテムスケジューリングロジック（たとえばワークアイテムマネージャー２４０がＷＣＦワークアイテムマネージャーのときにワークアイテムスケジューリングロジック２４４）は、分散アプリケーション２０１のパフォーマンスに対するイベントワークアイテムによる予測される影響に基づいて、イベントワークアイテムの実行をスケジューリングするかどうかを決定することができる。イベントワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満の場合、ワークアイテムスケジューリングロジック２４４は、スレッドプール２２０のフォアグラウンドのスレッド２２２またはバックグラウンドのスレッド２４４の１つにおいて、イベントワークアイテムの実行をスケジューリングすることができる。次に、ＷＣＦコンポーネント２０６のＩＤモニター（たとえばＩＤモニター２６０の１つ）は、ＷＣＦコンポーネント２０６のＩＤモニターの１つまたは複数のクライアントにソフトウェア例外を報告することによって、イベントワークアイテムを実行することができる。あるいは、イベントワークアイテムによる予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値を超えている場合は、イベントワークアイテムを破棄することができる。
【００４７】
図２のシステム２００は、分散アプリケーション２０１を監視することによる全体的なパフォーマンスへの影響を軽減する調整機能を含むことを理解されたい。たとえば、依存関係マネージャー２７２は、検出した依存関係を依存関係キャッシュ２８２に入れ、検出された依存関係をバッチに格納することによって、それぞれ時間がかかる可能性がある、依存関係記憶操作の数を減らすことができる。アクティビティマネージャー２７０は、分散アプリケーション２０１が比較的アイドル状態のときに（たとえば夜または週末）、アクティビティ情報をアクティビティキュー２８０に入れ、キューされたアクティビティ情報を格納することによって、アクティビティ記憶操作によるパフォーマンスに対する影響を軽減することができる。ガベージコレクター２８４は、使用されていないモニターの割り当てを解除することによって、図２のシステム２００におけるメモリの占有領域を減らすことができる。ワークアイテムスケジューリングロジック２４４は、同時に実行するワークアイテムの数を制限することができる。また、ワークアイテムスケジューリングロジック２４４は、分散アプリケーション２０１の他のスレッドより優先度が低いスレッドプール２２０のバックグラウンドのスレッドにおいて、ワークアイテムの実行をスケジューリングすることができる。すなわち、バックグラウンドのスレッドは、スケジューリングされたワークアイテムを実行するために、他のスレッドの実行を中断しない。
【００４８】
図３は、図１のシステム１００または図２のシステム２００など、分散アプリケーションを監視するシステムと共に使用できるＩＤモニター３２０の特定の実施形態を示すブロック図３００である。ＩＤモニター３２０は、コンポーネントモニター３３０などの１つまたは複数のコンポーネントモニター３２２を含む監視ツリーのルートでもよい。また、監視ツリーは、ビジネス展望モニター３４０、操作呼び出しターゲットエンドポイントモニター３７０、カウンターモニター３５０、および機器モニター３６０の１つまたは複数のインスタンスを含むことができる。例示的実施形態では、ＩＤモニター３２０は、図２のＩＤモニター２６０の１つである。
【００４９】
ＩＤモニター３２０は、分散アプリケーションの特定のコンポーネントに関連していてもよい。たとえば、ＩＤモニター３２０は、図１のコンポーネント１１０もしくは１２０の１つ、または図２のコンポーネント２０５、２０６、もしくは２０７に関連していてもよい。ＩＤモニター３２０は、ＩＤモニター３２０が関連するコンポーネントのアドレス３２１を含むことができる。アドレス３２１は、インターネットプロトコル（ＩＰ）アドレスまたは他のアドレスでもよい。たとえば、ＩＤモニター３２０は、図１の．ＮＥＴコンポーネント１２０のＩＰアドレスを含むことができる。また、ＩＤモニター３２０は、コンポーネントモニター３３０など、１つまたは複数のコンポーネントモニター３２２を含むことができる。
【００５０】
コンポーネントモニター３３０は、ビジネス展望モニター３４０など、１つまたは複数のアクティビティのビジネス展望モニター３３１および１つまたは複数のビジネス展望モニター３３２を含むことができる。また、コンポーネントモニター３３０は、操作呼び出しターゲットエンドポイントモニター３７０など、１つまたは複数の操作呼び出しモニター３３３を含むことができる。
【００５１】
ビジネス展望モニター３４０など、各ビジネス展望モニターは、特定のビジネス展望、つまり特定のメッセージソースのカウンターおよび計器データを格納することができる。たとえば、ビジネス展望モニター３４０は、図１のＷＣＦコンポーネント１１０から図１の．ＮＥＴコンポーネント１２０に送信されたメッセージを追跡することによって生成されるカウンターおよび計器データを格納することができる。メッセージがＸＭＬメッセージの場合は、ビジネス展望モニター３４０は、特定のメッセージソースを識別するためにメッセージに対して実行可能なＸＭＬパス言語（ＸＰＡＴＨ）操作３４１を含むことができる。また、ビジネス展望モニター３４０は、特定のメッセージソースに関連する名前空間３４２を含むことができる。また、ビジネス展望モニター３４０は、カウンターモニター３５０など、１つまたは複数のカウンターモニター３４３を含むことができる。
【００５２】
カウンターモニター３５０は、分散アプリケーションで特定のイベントの発生を追跡することができる。カウンターモニター３５０は、特定のイベントを追跡するカウンターの名前３５１およびカウンターに関連する構成３５２を含むことができる。たとえば、カウンターモニター３５０は、図２の．ＮＥＴコンポーネント２０５で発生し、図２のＷＣＦコンポーネント２０６によって引き起こされる例外を追跡することができ、名前３５１「ＷＣＦ−＞．ＮＥＴ Exception Counter」を含むことができる。また、カウンターモニター３５０は、機器モニター３６０など、１つまたは複数の機器モニター３５３を含むことができる。
【００５３】
機器モニター３６０などの各機器モニターは、特定の時点で特定のカウンターの値を格納するように構成することができる。たとえば、機器モニター３６０は、特定の時点で「ＷＣＦ−＞．ＮＥＴ Exception Counter」の値を格納するように構成することができる。特定の実施形態では、機器モニター３６０は、特定のカウンターの現在値３６１、特定のカウンターの現在値の状態３６２、および特定のカウンターに関連する現在のウィンドウ３６３を含む。また、機器モニター３６０は前回の値３６４、前回の値の状態３６５、および前回のウィンドウ３６６を含むことができる。現在値の状態３６２および前回の値の状態３６５は、特定のカウンターが初期化されていないことを示す状態、特定のカウンターが初期化されたが読み込まれていないことを示す状態、特定のカウンターが有効な値を含むことを示す状態、または特定のカウンターがオーバフローにより不正確な値を含むことを示す状態を含むことができる。特定の実施形態では、特定のカウンターの値が変わるたびに、新しい機器モニターが割り当てられる。
【００５４】
操作呼び出しターゲットエンドポイントモニター３７０は、特定の操作呼び出し（たとえば関数呼び出しなど）に関連するデータを格納するように構成することができる。特定の実施形態では、操作呼び出しは、分散アプリケーションのコンポーネント内部にある。たとえば、操作呼び出しは、図１の．ＮＥＴコンポーネント１２０の内部関数呼び出しでもよい。あるいは、操作呼び出しは、分散アプリケーションの２つのコンポーネント間の操作呼び出しでもよい。たとえば、操作呼び出しは、図１のＷＣＦコンポーネント１１０のソース操作および図１の．ＮＥＴコンポーネント１２０のターゲット操作を保持する関数呼び出しでもよい。特定の実施形態では、操作呼び出しターゲットエンドポイントモニター３７０は、エンドポイントモニター３２０に対応するソフトウェアクラスから継承するソフトウェアクラスのオブジェクトであるため、各操作呼び出しターゲットエンドポイントモニターは、エンドポイントアドレス３２１および１つまたは複数の操作モニター３２２など、エンドポイントモニター３２０の機能を含む。
【００５５】
図３に示す特定の監視ツリーは、ＷＣＦテクノロジーに固有であることに注意されたい。監視ツリーは、異なるテクノロジーに対して異なる階層のモニターを含むことができる。
【００５６】
図３の監視ツリーは、テクノロジー固有のインターセプターによって生成されるワークアイテムからのデータを整理するために使用して、そのようなデータの取得を促進できることを理解されたい。たとえば、傍受した特定のメッセージからのデータは、操作によって、ビジネス展望によって、またはカウンターによって整理することができる。傍受したメッセージが操作呼び出しを示す場合、データは操作呼び出しによっても整理することができる。
【００５７】
図４は、分散アプリケーションを監視するメッセージ傍受機能を図示するブロック図４００である（たとえば、図１の分散アプリケーション１０２または図２の分散アプリケーション２０１など）。図４に示す特定の実施形態において、メッセージは、．ＮＥＴコンポーネント４１０とJavaコンポーネント４４０との間で傍受される。メッセージは、．ＮＥＴコンポーネント４１０に取り付けられた．ＮＥＴインターセプター４２０、およびJavaコンポーネント４４０に取り付けられたJavaインターセプター４３０で傍受される。例示的実施形態では、．ＮＥＴコンポーネント４１０は、図１の．ＮＥＴコンポーネント１１０または図２の．ＮＥＴコンポーネント２０５を含み、Javaコンポーネント４４０は、図２のJavaコンポーネント２０７を含む。
【００５８】
．ＮＥＴインターセプター４２０は、．ＮＥＴコンポーネント４１０に取り付けることができるため、．ＮＥＴコンポーネント４１０のすべての受信および送信のメッセージは、．ＮＥＴインターセプター４２０を通過する。たとえば、．ＮＥＴインターセプター４２０は、．ＮＥＴコンポーネント４１０の．ＮＥＴネットワークインターフェイス４１２に取り付けることができる。．ＮＥＴコンポーネント４１０の受信および送信のメッセージは、ＸＭＬメッセージでもよく、または他のメッセージ形式でもよい。
【００５９】
同様に、Javaインターセプター４３０は、Javaコンポーネント４４０に取り付けることができるため、Javaコンポーネント４４０のすべての受信および送信のメッセージは、Javaインターセプター４３０を通過する。たとえば、Javaインターセプター４３０は、Javaコンポーネント４４０のJavaネットワークインターフェイス４４２に取り付けることができる。Javaコンポーネント４４０の受信および送信のメッセージは、ＸＭＬメッセージでもよく、または他のメッセージ形式でもよい。
【００６０】
動作中に、．ＮＥＴコンポーネント４１０は、Javaコンポーネント４４０にメッセージ４６０を送信することができる。メッセージ４６０は、．ＮＥＴネットワークインターフェイス４１２からＮＥＴコンポーネント４１０を離れ、．ＮＥＴネットワークインターフェイス４１２に取り付けられた．ＮＥＴインターセプター４２０によって傍受されうる。メッセージ４６０を傍受すると、．ＮＥＴインターセプター４２０は、．ＮＥＴコンポーネント４１０の依存関係を検出する試みにおいて、．ＮＥＴコンポーネント４１０を含む特定の実行パスでアクティビティ情報を追跡するため、または．ＮＥＴコンポーネント４１０で特定のイベントの発生を追跡するために、メッセージ４６０を検査することができる。傍受したメッセージ４６０を検査した後、．ＮＥＴインターセプター４２０は、傍受したメッセージ４６０をJavaコンポーネント４４０に送信することができる。
【００６１】
Javaコンポーネント４４０に到着する前に、メッセージ４６０をもう一度傍受することができる。このときは、Javaインターセプター４３０によって傍受する。Javaインターセプター４３０は、．ＮＥＴインターセプター４２０に関して上に記述したように、傍受したメッセージ４６０に対して同様の操作を実行することができる。また、たとえば、Javaインターセプター４３０は、Javaコンポーネント４４０の依存関係を検出する試みにおいて、Javaコンポーネント４４０を含む特定の実行パスでアクティビティ情報を追跡するために、またはJavaコンポーネント４４０で特定のイベントの発生を追跡するために、メッセージ４６０を検査することができる。
【００６２】
どちらの方向に送信されたメッセージも傍受および検査できることに注意されたい。たとえば、Javaコンポーネント４４０から．ＮＥＴコンポーネント４１０に送信される第２のメッセージ４７０も、依存関係を検出するため、アクティビティ情報を追跡するため、およびイベント発生を追跡するために傍受および検査することができる。図４に示す特定の実施形態は、両方のコンポーネントに取り付けられたインターセプターを示しているが、１つのインターセプターだけが２つのコンポーネント間のメッセージパスにある場合でも、依存関係は２つのコンポーネント間で検出できることに注意されたい。たとえば、Javaインターセプター４３０が存在しない場合でも、．ＮＥＴコンポーネント４１０とJavaコンポーネント４４０との間の依存関係は、．ＮＥＴインターセプター４２０によって検出することができる。同様に、．ＮＥＴインターセプター４２０が存在しない場合でも、．ＮＥＴコンポーネント４１０とJavaコンポーネント４４０との間の依存関係は、Javaインターセプター４３０によって検出することができる。
【００６３】
図４に示すように、メッセージ傍受機能は異なるテクノロジー（たとえば．ＮＥＴとJavaなど）に関連する分散アプリケーションのコンポーネントを監視するために使用できることを理解されたい。
【００６４】
図５は、分散アプリケーションを監視する方法５００の特定の実施形態を示す流れ図である。例示的実施形態では、方法５００は、図１のシステム１００または図２のシステム２００によって実行することができる。方法５００は、参照番号５０２において、分散アプリケーションの複数のコンポーネントを識別するステップを含む。たとえば、図１において、テクノロジーに依存しないインターセプターマネージャー１３０は、ＷＣＦコンポーネント１１０および．ＮＥＴコンポーネント１２０を識別することができる。また、方法５００は、参照番号５０４において、複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップを含む。たとえば、図１において、テクノロジーに依存しないインターセプターマネージャー１３０は、ＷＣＦコンポーネント１１０がＷＣＦテクノロジーに関連することを識別することができる。
【００６５】
方法５００は、参照番号５０６において、識別した特定のテクノロジーに基づいて特定のコンポーネントにテクノロジー固有のインターセプターを取り付けるステップと、取り付けられたテクノロジー固有のインターセプターを使用して、特定のコンポーネントによって送信または受信されるメッセージを傍受するステップとをさらに含む。たとえば、図１において、テクノロジーインターセプターマネージャー１３０は、ＷＣＦインターセプター１１２をＷＣＦコンポーネント１１０に取り付けることができ、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０によって送信または受信されるメッセージを傍受することができる。また、方法５００は、参照番号５０８において、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成するステップを含む。たとえば、図１において、ＷＣＦインターセプター１１２は、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成することができる。
【００６６】
また、方法５００は、参照番号５１０において、少なくとも１つの潜在的なワークアイテムをスケジューリングするかどうかを決定するステップを含む。決定は、分散アプリケーションのパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて行われる。たとえば、図１において、ＷＣＦワークアイテムスケジューリングロジック１４４は、分散アプリケーション１０２のパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて、少なくとも１つの潜在的なワークアイテムをスケジューリングするかどうかを決定することができる。
【００６７】
図５の方法５００は、様々なコンポーネントを横断して分散され、様々なテクノロジーを含む分散アプリケーションを監視するために使用することができることを理解されたい。さらに、図５の方法５００は、分散アプリケーションのパフォーマンスに対する予測される影響が大きいワークアイテムをスケジューリングしないことによって、そのような監視による全体的なパフォーマンスに対する影響を軽減できることを理解されたい。たとえば、図５の方法５００は、キューに入れられるワークアイテムの数を制限することによって、そのような監視による全体的なパフォーマンスに対する影響を軽減することができる。そのため、図５の方法５００は、必要に応じて、パフォーマンスのために監視精度を犠牲にすることができるため、リアルタイム、ほぼリアルタイム、または重要な役割を担う分散アプリケーションの動作は妨害されないことを理解されたい。
【００６８】
図６は、分散アプリケーションを監視する方法６００の他の特定の実施形態を示す流れ図である。例示的実施形態では、方法６００は、図１のシステム１００または図２のシステム２００によって実行することができる。方法６００は、参照番号６０２において、分散アプリケーションの複数のコンポーネントを識別するステップを含む。たとえば、図１において、テクノロジーに依存しないインターセプターマネージャー１３０は、ＷＣＦコンポーネント１１０および．ＮＥＴコンポーネント１２０を識別することができる。また、方法６００は、参照番号６０４において、複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップを含む。たとえば、図１において、テクノロジーに依存しないインターセプターマネージャー１３０は、ＷＣＦコンポーネント１１０がＷＣＦテクノロジーに関連することを識別することができる。
【００６９】
方法６００は、参照番号６０６において、識別した特定のテクノロジーに基づいて、テクノロジー固有のインターセプターを特定のコンポーネントに取り付けるステップと、取り付けられたテクノロジー固有のインターセプターを使用して、特定のコンポーネントによって送信または受信されるメッセージを傍受するステップとをさらに含む。たとえば、図１において、テクノロジーインターセプターマネージャー１３０は、ＷＣＦインターセプター１１２をＷＣＦコンポーネント１１０に取り付けることができ、ＷＣＦインターセプター１１２は、ＷＣＦコンポーネント１１０によって送信または受信されたメッセージを傍受することができる。また、方法６００は、参照番号６０８において、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成するステップを含む。たとえば、図１において、ＷＣＦインターセプター１１２は、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成することができ、少なくとも１つの潜在的なワークアイテムをテクノロジー固有のインターセプターマネージャーに送信することができる。ここで、少なくとも１つの潜在的なワークアイテムは、ＷＣＦワークアイテムキュー１４２に挿入される。
【００７０】
また、方法６００は、参照番号６１０において、分散アプリケーションのパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響を計算するステップを含む。予測される影響は、プロセッサ使用率に対する影響、メッセージ待機時間に対する影響、または実行キューの長さに対する影響でもよい。たとえば、図１において、ワークアイテムスケジューリングロジック１４４は、少なくとも１つの潜在的なワークアイテムによる予測される影響を計算することができる。ここで、予測される影響は、分散アプリケーション１０２のプロセッサ使用率に対する影響、分散アプリケーション１０２のメッセージ待機時間に対する影響、または分散アプリケーション１０２の実行キューの長さに対する影響である。また、方法６００は、参照番号６１２において、予測される影響が受け入れ可能なパフォーマンスへの影響のしきい値未満かどうかを決定するステップを含む。たとえば、図１において、ワークアイテムスケジューリングロジック１４４は、少なくとも１つの潜在的なワークアイテムによる予測されるパフォーマンスに対する影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満かどうかを決定することができる。
【００７１】
参照番号６１４において、予測される影響が受け入れ可能なパフォーマンスへの影響のしきい値未満であると決定された場合、方法は、少なくとも１つの潜在的なワークアイテムの実行をスケジューリングするステップと、少なくとも１つの潜在的なワークアイテムを実行するステップとを含む。たとえば、予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満であると決定された場合、ＷＣＦワークアイテムスケジューリングロジック１４４は、少なくとも１つの潜在的なワークアイテムの実行をスケジューリングすることができ、少なくとも１つの潜在的なワークアイテムを実行することができる。予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満ではないと決定された場合、方法は、参照番号６１６において、少なくとも１つの潜在的なワークアイテムを破棄するステップを含む。たとえば、予測される影響が、受け入れ可能なパフォーマンスへの影響のしきい値未満ではないと決定された場合、ＷＣＦワークアイテムスケジューリングロジック１４４は、少なくとも１つの潜在的なワークアイテムの実行をスケジューリングすることなく、ワークアイテムキュー１４２から削除することによって、少なくとも１つの潜在的なワークアイテムを破棄することができる。あるいは、図１において、ＷＣＦワークアイテムスケジューリングロジック１４４は、少なくとも１つの潜在的なワークアイテムがＷＣＦワークアイテムキュー１４２に残ることを許可し、ここで、少なくとも１つの潜在的なワークアイテムは自動的に期限が切れる。
【００７２】
図６の方法６００は、分散アプリケーションのパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて、少なくとも１つの潜在的なワークアイテムの実行を選択的にスケジューリングするために使用することができることを理解されたい。さらに、パフォーマンスに対する予測される影響が大きいワークアイテムは、ワークアイテムキューから削除して、続いて受信するワークアイテムのためにワークアイテムキューの空間を解放できることを理解されたい。
【００７３】
図７は、分散アプリケーションを監視する方法７００の他の特定の実施形態を示す流れ図である。例示的実施形態では、方法７００は、図１のシステム１００または図２のシステム２００によって実行することができる。方法７００は、参照番号７０２において、分散アプリケーションの複数のコンポーネントを識別するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、．ＮＥＴコンポーネント２０５、ＷＣＦコンポーネント２０６、Javaコンポーネント２０７、またはそれらの任意の組み合わせを識別することができる。また、方法７００は、参照番号７０４において、複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦコンポーネント２０６がＷＣＦテクノロジーに関連することを識別することができる。
【００７４】
方法７００は、参照番号７０６において、識別した特定のテクノロジーに基づいて、テクノロジー固有のインターセプターを特定のコンポーネントに取り付けるステップと、取り付けられたテクノロジー固有のインターセプターを使用して、特定のコンポーネントによって送信または受信されるメッセージを傍受するステップとを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦインターセプター２０３をＷＣＦコンポーネント２０６に取り付けることができ、ＷＣＦインターセプター２０３は、ＷＣＦコンポーネント２０６によって送信または受信されたメッセージを傍受することができる。また、方法７００は、参照番号７０８において、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成するステップを含む。たとえば、ＷＣＦインターセプター２０３は、傍受したメッセージに基づいて、少なくとも１つの潜在的なワークアイテムを生成することができる。また、方法７００は、参照番号７１０において、少なくとも１つの潜在的なワークアイテムの実行をスケジューリングするかどうかを決定するステップを含む。決定は、分散アプリケーションのパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて行われる。たとえば、図２において、ＷＣＦワークアイテムスケジューリングロジック２４４は、分散アプリケーション２０１のパフォーマンスに対する少なくとも１つの潜在的なワークアイテムによる予測される影響に基づいて、少なくとも１つの潜在的なワークアイテムをスケジューリングするかどうかを決定することができる。
【００７５】
また、方法７００は、参照番号７１２において、発生した例外の数または報告されるエラーの数など、分散アプリケーションに関連する少なくとも１つのメトリックを計算するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦインターセプター２０３からＷＣＦコンポーネント２０６での例外を示すワークアイテムを受信して、受信したそのようなワークアイテムの数を計算することができる。特定の実施形態では、例外は、図３のＩＤモニター３２０など、ＩＤモニターによって計算することができる。方法７００は、参照番号７１４において、分散アプリケーションの障害状態を検出するステップをさらに含む。たとえば、図２の分散アプリケーション２０１の障害状態を検出することができる。また、方法７００は、参照番号７１６において、少なくとも１つのメトリックに基づいて、障害状態の潜在的な原因として特定のコンポーネントを識別するステップを含む。たとえば、図２において、ＷＣＦコンポーネント２０６は、ＷＣＦコンポーネント２０６の例外の数に基づいて、分散アプリケーション２０１の障害状態の潜在的な原因として識別されうる。
【００７６】
図７の方法７００は、特定のコンポーネントを監視する間に生成されるメトリックに基づいて、分散アプリケーションのコンポーネントを監視するため、および分散アプリケーションの障害の潜在的な原因として特定のコンポーネントを識別するために使用できることを理解されたい。このため、図７の方法７００は、分散アプリケーションの障害状態を分析し応答するためにかかる時間を短縮することができる。さらに、分散アプリケーションのコンポーネントを監視する間に計算されるメトリック（たとえば例外またはエラーの数など）は、将来的な障害イベントを予測して防ぐために使用できることを理解されたい。たとえば、特定のコンポーネントによって発生した例外の数が増加すると、ＩＴ管理者は例外の増加を告げる通知を受けられるため、特定のコンポーネントに障害が発生する前に、ＩＴ管理者は特定のコンポーネントの問題を解決することができる。
【００７７】
図８は、分散アプリケーションを監視する方法８００の他の特定の実施形態を示す流れ図である。例示的実施形態では、方法８００は、図１のシステム１００または図２のシステム２００によって実行することができる。方法８００は、参照番号８０２において、分散アプリケーションの複数のコンポーネントを識別するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、．ＮＥＴコンポーネント２０５、ＷＣＦコンポーネント２０６、Javaコンポーネント２０７、またはそれらの任意の組み合わせを識別することができる。また、方法８００は、参照番号８０４において、複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦコンポーネント２０６がＷＣＦテクノロジーに関連することを識別することができる。
【００７８】
方法８００は、参照番号８０６において、識別した特定のテクノロジーに基づいて、テクノロジー固有のインターセプターを特定のコンポーネントに取り付けるステップをさらに含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦインターセプター２０３をＷＣＦコンポーネント２０６に取り付けることができる。方法８００は、参照番号８０８、８１０、８１２、および８１４を含むイベント監視のパス、ならびに参照番号８１６、８１８、８２０、８２２、および８２４を含むアクティビティ監視のパスという２つのパスを含む。
【００７９】
イベント監視のパスにおいて、方法８００は、参照番号８０８において、特定のイベントの発生を追跡するためにカウンターモニターを割り当てるステップを含む。たとえば、図２において、カウンターモニターは、ＷＣＦコンポーネント２０６で例外を追跡するために割り当てられうる。ここで、カウンターモニターは、ＷＣＦコンポーネント２０６のＩＤモニター（たとえばＩＤモニター２６０の１つなど）の監視ツリーに配置される。特定の実施形態では、割り当てられるカウンターモニターは、図３のカウンターモニター３５０を含む。また、方法８００は、参照番号８１０において、テクノロジー固有のインターセプターで特定のイベントに関連するメッセージを傍受するステップを含む。たとえば、図２において、ＷＣＦインターセプター２０３は、ＷＣＦコンポーネント２０６での例外の発生を示すメッセージを傍受することができる。方法８００は、参照番号８１２において、特定のイベントの発生を示すワークアイテムを生成するステップをさらに含む。たとえば、図２において、ＷＣＦインターセプター２０３は、ＷＣＦコンポーネント２０６での例外の発生を示すワークアイテムを生成することができる。また、方法８００は、参照番号８１４において、カウンターモニターの１つまたは複数のクライアントに特定のイベントの発生を報告するステップを含む。特定の実施形態では、１つまたは複数のクライアントがカウンターモニターをポーリングするときに、特定のイベントの発生を報告することができる。たとえば、図２において、ＷＣＦコンポーネント２０６での例外の発生は、ＷＣＦコンポーネント２０６のＩＤモニター（たとえばＩＤモニター２６０の１つなど）の１つまたは複数のクライアントに報告することができる。
【００８０】
アクティビティ監視のパスにおいて、方法８００は、参照番号８１６において、特定の実行パスに沿ってアクティビティを追跡するためにアクティビティモニターを割り当てるステップを含む。たとえば、図２において、アクティビティのビジネス展望モニターは、ＷＣＦコンポーネント２０６を含む分散アプリケーション２０１の特定の実行パスに沿ってアクティビティを追跡するために割り当てられうる。ここで、アクティビティのビジネス展望モニターは、ＷＣＦコンポーネント２０６のエンドポイントモニター（たとえばエンドポイントモニター２６０の１つなど）の監視ツリーに配置される。特定の実施形態では、アクティビティのビジネス展望モニターは、図３のビジネス展望モニター３４０を含む。また、方法８００は、参照番号８１８において、テクノロジー固有のインターセプターで特定の実行パスに関連するメッセージを傍受するステップを含む。たとえば、図２において、ＷＣＦインターセプター２０３は、分散アプリケーション２０１の特定の実行パスに沿ってアクティビティを示すメッセージを傍受することができる。方法８００は、参照番号８２０において、特定の実行パスに関連するアクティビティ情報を含むワークアイテムを生成するステップをさらに含む。たとえば、図２のＷＣＦインターセプター２０３は、特定の実行パスに関連するアクティビティ情報を含むワークアイテムを生成することができる。また、方法８００は、参照番号８２２において、アクティビティ情報をアクティビティキューに格納するステップと、参照番号８２４において、アクティビティキューから保存場所に記憶域サービスを介してアクティビティ情報を転送するステップとを含む。たとえば、図２において、アクティビティマネージャー２７０は、アクティビティ情報をアクティビティキュー２８０に格納することができ、続いてアクティビティキュー２８０から保存場所に記憶域サービス２９０を介してアクティビティ情報を転送することができる。
【００８１】
図８の方法８００は、分散アプリケーションで発生する可能性がある例外やエラーなどのイベントを監視するために使用できることを理解されたい。さらに、図８の方法８００は、分散アプリケーションの特定の実行パスに沿ってアクティビティを追跡するために使用できることも理解されたい。たとえば、図８の方法８００は、誤ってまたは非効率的に実行している分散アプリケーションの実行パスに沿ってアクティビティをトレースするために、ＩＴ管理者が使用することができる。
【００８２】
図９は、分散アプリケーションを監視する方法９００の他の特定の実施形態を示す流れ図である。例示的実施形態では、方法９００は、図１のシステム１００または図２のシステム２００によって実行することができる。方法９００は、参照番号９０２において、分散アプリケーションの複数のコンポーネントを識別するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、．ＮＥＴコンポーネント２０５、ＷＣＦコンポーネント２０６、Javaコンポーネント２０７、またはそれらの任意の組み合わせを識別することができる。また、方法９００は、参照番号９０４において、複数のコンポーネントの特定のコンポーネントに関連する特定のテクノロジーを識別するステップを含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦコンポーネント２０６がＷＣＦテクノロジーに関連することを識別することができる。
【００８３】
方法９００は、参照番号９０６において、識別された特定のテクノロジーに基づいて、テクノロジー固有のインターセプターを特定のコンポーネントに取り付けるステップをさらに含む。たとえば、図２において、テクノロジーに依存しないインターセプターマネージャー２３０は、ＷＣＦインターセプター２０３をＷＣＦコンポーネント２０６に取り付けることができる。また、方法９００は、参照番号９０８において、特定のコンポーネントで特定の関数の呼び出しを追跡するために操作呼び出しモニターを割り当てるステップを含む。たとえば、操作呼び出しモニターは、ＷＣＦコンポーネント２０６で特定の関数の呼び出しを追跡するために割り当てられうる。ここで、操作呼び出しモニターは、ＷＣＦコンポーネント２０６のエンドポイントモニター（たとえばエンドポイントモニター２６０の１つなど）の監視ツリーに配置される。特定の実施形態では、割り当てられる操作呼び出しモニターは、図３の操作呼び出しターゲットエンドポイントモニター３７０を含むことができる。
【００８４】
方法９００は、参照番号９１０において、特定の関数に関連する特定のコンポーネントによって送信および受信されるメッセージを傍受するステップを含む。たとえば、図２において、ＷＣＦインターセプター２０３は、ＷＣＦコンポーネント２０６によって送信および受信されたメッセージを傍受することができる。ここで、傍受するメッセージは、特定の関数に関係する。また、方法９００は、参照番号９１２において、特定の関数のソース操作と、特定の関数のターゲット操作との間の依存関係を識別するステップを含む。たとえば、図２において、ＷＣＦインターセプター２０３は、特定の関数のソース操作と、特定の関数のターゲット操作との間の依存関係を識別することができる。特定の実施形態では、ソース操作とターゲット操作は、分散アプリケーション２０１の異なるコンポーネントに配置される（たとえばソース操作はＷＣＦコンポーネント２０６に配置され、ターゲット操作は．ＮＥＴコンポーネント２０５に配置される）。
【００８５】
方法９００は、参照番号９１６において、依存関係を依存関係キャッシュに入れるステップをさらに含む。たとえば、図２において、依存関係マネージャー２７２は、依存関係を依存関係キャッシュ２８２に入れることができる。また、方法９００は、参照番号９１８において、依存関係が以前に格納されたかどうかを決定するステップを含む。たとえば、図２の依存関係マネージャー２７２は、依存関係が以前に格納されたかどうかを決定することができる。
【００８６】
依存関係が以前に格納されていない場合、方法９００は、参照番号９２０において、記憶域サービスを介して保存場所に依存関係を転送するステップを含む。たとえば、図２において、依存関係マネージャー２７２が、依存関係を依存関係キャッシュ２８２から保存場所に記憶域サービス２９０を介して転送することができる場合である。依存関係が以前に格納された場合、方法９００は、参照番号９２２において、依存関係を格納しないステップを含む。たとえば、図２において、依存関係マネージャー２７２は、依存関係を格納せずに、依存関係キャッシュ２８２から依存関係を削除することができる。
【００８７】
図９の方法９００は、コンポーネント間の依存関係など、分散アプリケーションの様々なソース操作と、ターゲット操作との間の依存関係を検出するために使用できることを理解されたい。さらに、図９の方法９００は、以前に格納されていない検出された依存関係のみを格納することによって、そのような依存関係の検出によるパフォーマンスに対する影響を軽減できることを理解されたい。
【００８８】
図１０は、テクノロジーに依存しないインターセプターマネージャーでワークアイテムを選択的にスケジューリングする方法１０００の特定の実施形態を示す流れ図である。例示的実施形態では、方法１０００は、図１のテクノロジーに依存しないインターセプターマネージャー１３０または図２のテクノロジーに依存しないインターセプターマネージャー２３０によって実行することができる。方法１００は、参照番号１００２において、テクノロジーに依存しないインターセプターマネージャーで、分散アプリケーションの第１のコンポーネントに取り付けられた第１のテクノロジー固有のインターセプターから第１のワークアイテムを受信するステップを含む。第１のテクノロジー固有のインターセプターは第１のテクノロジーに固有であり、第１のコンポーネントは第１のテクノロジーに関連する。たとえば、図１において、テクノロジーに依存しないインターセプターマネージャー１３０は、分散アプリケーション１０２のＷＣＦコンポーネント１１０に取り付けられたＷＣＦインターセプター１１２から第１のワークアイテムを受信することができる。
【００８９】
また、方法１０００は、参照番号１００４において、テクノロジーに依存しないインターセプターマネージャーで、分散アプリケーションの第２のコンポーネントに取り付けられた第２のテクノロジー固有のインターセプターから第２のワークアイテムを受信するステップを含む。第２のテクノロジーインターセプターは、第２のテクノロジーに固有であり、第２のコンポーネントは、第２のテクノロジーに関連し、第２のテクノロジーは、第１のテクノロジーとは異なる。たとえば、図１において、テクノロジーに依存しないインターセプターマネージャー１３０は、分散アプリケーション１０２の．ＮＥＴコンポーネント１２０に取り付けられた．ＮＥＴインターセプター１２２から第２のワークアイテムを受信することができる。
【００９０】
方法１０００は、参照番号１００６において、第１のワークアイテムおよび第２のワークアイテムの実行をスケジューリングするかどうかを決定するステップをさらに含む。決定は、分散アプリケーションに対する第１のワークアイテムによる第１の影響に基づいて、および分散アプリケーションに対する第２のワークアイテムによる予測される影響に基づいて行われる。たとえば、図１において、ＷＣＦワークアイテムスケジューリングロジック１４４は、分散アプリケーション１０２に対する第１のワークアイテムによる第１の影響に基づいて、第１のワークアイテムをスケジューリングするかどうかを決定することができ、．ＮＥＴワークアイテムスケジューリングロジック１５４は、分散アプリケーション１０２に対する第２のワークアイテムによる第２の影響に基づいて、第２のワークアイテムをスケジューリングするかどうかを決定することができる。
【００９１】
図１０の方法１０００は、ワークアイテムの予測される影響に基づいて、ワークアイテムの実行を選択的にスケジューリングするために、テクノロジーに依存しないインターセプターマネージャーによって使用できることを理解されたい（たとえば図１のテクノロジーに依存しないインターセプターマネージャー１３０または図２のテクノロジーに依存しないインターセプターマネージャー２３０など）。したがって、図１０の方法１０００は、リアルタイム、ほぼリアルタイム、または重要な役割を担う分散アプリケーションの通常のパフォーマンスを妨げることを避けるために、テクノロジーに依存しないインターセプターマネージャーによって使用することができる。テクノロジーに依存しないインターセプターマネージャーは、リアルタイム、ほぼリアルタイム、または重要な役割を担う分散アプリケーションに対する予測される影響が大きいワークアイテムをスケジューリングしなくてよい。
【００９２】
図１１は、分散コンピューティング環境１１００の特定の実施形態を図示する一般的な図である。分散コンピューティング環境１１００は、監視されたＷｅｂクライアント１１１１、監視されたＷｅｂサーバー１１１２、監視されたアプリケーションサーバー１１１３、および監視されたデータベースサーバー１１１４など、１つまたは複数の監視されたアプリケーションコンポーネントを含む分散アプリケーション１１１０を含むことができる。また、分散コンピューティング環境１１００は、分散アプリケーション１１１０のコンポーネントとルート管理サーバー１１３０、運用データベースサーバー１１４０、およびデータウェアハウスサーバー１１５０に結合された管理サーバー１１２０を含むことができる。特定の実施形態では、分散コンピューティング環境１１００は、分散アプリケーション１１１０の監視レポートを生成するように構成されたレポートサーバー１１６０も含む。例示的実施形態では、分散アプリケーション１１１０は、図１の分散アプリケーション１０２または図２の分散アプリケーション２０１を含むことができる。
【００９３】
管理サーバー１１２０は、図１のテクノロジーに依存しないインターセプターマネージャー１３０または図２のテクノロジーに依存しないインターセプターマネージャー２３０など、テクノロジーに依存しないインターセプターマネージャーを含む。また、管理サーバー１１２０は、ルート管理サーバー１１３０と通信することができる。管理サーバー１１２０は、運用データベースサーバー１１４０およびデータウェアハウスサーバー１１５０から、依存関係データおよびアクティビティデータなどの情報を格納し取得することができる。特定の実施形態では、管理サーバー１１２０は、レポートサーバー１１６０を介して検出データおよび依存関係データを含む監視レポートを生成するように構成される。
【００９４】
動作中に、監視されたＷｅｂクライアント１１１１、監視されたＷｅｂサーバー１１１２、監視されたアプリケーションサーバー１１１３、および監視されたデータベースサーバー１１１４は、１つまたは複数の取り付けられたテクノロジー固有のインターセプターによって監視することができる。テクノロジー固有のインターセプターは、ワークアイテムを生成し、管理サーバー１１２０のテクノロジーに依存しないインターセプターマネージャーに送信することができる。次に、管理サーバー１１２０のテクノロジーに依存しないインターセプターマネージャーは、分散アプリケーション１１１０に対する予測される影響に基づいて、または特定の分散アプリケーションコンポーネントに対する予測される影響に基づいて（たとえばコンポーネント１１１１〜１１１４の１つなど）、受信したワークアイテムの実行を選択的にスケジューリングすることができる。
【００９５】
管理サーバー１１２０は、異なる種類の分散アプリケーションコンポーネントで、関数呼び出し、アクティビティ、およびイベントを監視できることを理解されたい（たとえばＷｅｂクライアント、Ｗｅｂサーバー、アプリケーションサーバー、およびデータベースサーバーなど）。
【００９６】
図１２は、本開示に従って、コンピュータに実装された方法、コンピュータプログラム製品、およびシステムコンポーネントの実施形態をサポートするように動作可能なコンピューティングデバイス１２１０を含むコンピューティング環境１２００のブロック図である。
【００９７】
コンピューティングデバイス１２１０は、典型的には、少なくとも１つのプロセッサ１２２０およびシステムメモリ１２３０を含む。コンピューティングデバイスの正確な構成および種類に基づいて、システムメモリ１２３０は、揮発性（ＲＡＭ（random access memory）など）、不揮発性（ＲＯＭ（read-only memory）、フラッシュメモリ、および電力が提供されていないときでも格納されているデータを維持する同様のメモリデバイスなど）、または２つの組み合わせでもよい。システムメモリ１２３０は、典型的には、オペレーティングシステム１２３２、１つまたは複数のアプリケーションプラットフォーム１２３４、１つまたは複数のアプリケーション１２３６を含み、プログラムデータ１２３８を含むことができる。たとえば、システムメモリ１２３０は、図１のＷＣＦコンポーネント１１０、図２のＷＣＦコンポーネント２０６、図１の．ＮＥＴコンポーネント１２０、図２の．ＮＥＴコンポーネント２０５、または図２のJavaコンポーネント２０７など、分散アプリケーションの１つまたは複数のコンポーネントを含むことができる。コンピューティングデバイス１２１０がコンポーネントを含む場合、コンピューティングデバイス１２１０は、コンポーネントに取り付けられた１つまたは複数のテクノロジー固有のインターセプターも含むことができる。たとえば、コンピューティングデバイス１２１０は、図１のＷＣＦインターセプター１１２、図２のＷＣＦインターセプター２０３、図１の．ＮＥＴインターセプター１２２、図２の．ＮＥＴインターセプター２０２、または図２のJavaインターセプター２０４を含むことができる。別の例として、システムメモリ１２３０は、図１のテクノロジーに依存しないインターセプターマネージャー１３０または図２のテクノロジーに依存しないインターセプターマネージャー２３０を含むことができる。
【００９８】
特定の実施形態では、分散アプリケーション（たとえば図１の分散アプリケーション１０２または図２の分散アプリケーション２０１など）は、複数のコンピューティングデバイス（たとえばコンピューティングデバイス１２１０など）を含むことができ、そのようなコンピューティングデバイスはそれぞれ、分散アプリケーションの１つまたは複数のコンポーネントを含むことができる。
【００９９】
また、コンピューティングデバイス１２１０は、追加の特徴または機能を持つことができる。たとえば、磁気ディスク、光ディスク、テープ、および標準サイズまたは小型のフラッシュメモリカードなど、コンピューティングデバイス１２１０は、リムーバブルおよび／または非リムーバブルの追加のデータ記憶装置を含むこともできる。そのような追加の記憶域は、リムーバブル記憶域１２４０および非リムーバブル記憶域１２５０によって図１２に示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムコンポーネント、または他のデータなど、情報を記憶するための任意の方法またはテクノロジーに実装された、揮発性および／または不揮発性記憶域およびリムーバブルおよび／または非リムーバブル媒体を含むことができる。システムメモリ１２３０、リムーバブル記憶域１２４０、および非リムーバブル記憶域１２５０はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ（electrically erasable programmable read-only memory）、フラッシュメモリもしくは他のメモリテクノロジー、ＣＤ（compact disk）、ＤＶＤ（digital versatile disk）、もしくは他の光学的記憶域、磁気カセット、磁気テープ、磁気ディスク記憶域、もしくは他の磁気記憶装置、または希望する情報を格納するために使用することができ、コンピューティングデバイス１２１０によってアクセスすることができる他の媒体を含むが、これらに限定されるものではない。そのような任意のコンピュータ記憶媒体がコンピューティングデバイス１２１０の一部となりうる。また、コンピューティングデバイス１２１０は、キーボード、マウス、ペン、音声入力機器、タッチ入力装置などの入力装置１２６０（複数可）を装備することができる。ディスプレイ、スピーカー、プリンタなどの出力装置１２７０（複数可）も含めることができる。
【０１００】
また、コンピューティングデバイス１２１０は、１つまたは複数のクライアントコンピューティングシステムまたは他のサーバーなど、有線ネットワークまたは無線ネットワークを介して、コンピューティングデバイス１２１０が他のコンピューティングデバイス１２９０と通信することを可能にする１つまたは複数の通信接続１２８０を含む。たとえば、１つまたは複数の通信接続１２８０は、図５のネットワークインターフェイス５１２または５４２を含むことができる。１つまたは複数の通信接続１２８０は通信媒体の例である。限定のためではなく、例を挙げると、通信媒体は、有線ネットワークまたは直接的な有線接続などの有線媒体、ならびにアコースティック、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。しかし、図１２に示した、または前の段落に記述したコンポーネントまたは装置のすべてが、本明細書に記述する実施形態をサポートするのに必要だとは限らないことを理解されたい。
【０１０１】
本明細書に記述した実施形態の実例は、様々な実施形態の構造についての一般的な理解を得ることを意図するものである。実例は、本明細書に記述した構造または方法を利用する装置およびシステムのすべての要素および特徴の完全な記述としての役割を果たすことを意図するものではない。当業者であれば、開示を見ると他の多くの実施形態が可能なことは自明であろう。開示から他の実施形態を利用し派生させることができるため、本開示の範囲から逸脱することなく、構造的および論理的な置換ならびに変更を行うことができる。したがって、開示および図面は限定的なものではなく実例と見なされるものである。
【０１０２】
本明細書に開示した実施形態に関して記述し様々な実例となる論理ブロック、構成、モジュール、回路、およびアルゴリズムのステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組み合わせとして実装できることは当業者には自明であろう。ハードウェアおよびソフトウェアの互換性を明白に図示するために、様々な実例となるコンポーネント、ブロック、構成、モジュール、回路、またはステップを、それらの機能の点から一般的に記述した。そのような機能をハードウェアまたはソフトウェアのどちらとして実装するかは、特定の用途および全体的なシステムに課された設計制約に依存している。当業者であれば、記述された機能を特定の用途ごとに様々な方法で実装することができるが、そのような実装の決定は、本開示の範囲から逸脱するものと解釈するべきではない。
【０１０３】
本明細書に開示した実施形態に関して記述した方法のステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、または２つの組み合わせに直接組み込むことができる。ソフトウェアモジュールは、ＲＡＭ（random access memory）、フラッシュメモリ、ＲＯＭ（read-only memory）、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または技術的に既知の他の任意の形式の記憶媒体など、コンピュータ可読媒体に存在することができる。代表的な記憶媒体は、プロセッサが記憶媒体から情報を読み込んだり、情報を書き込んだりできるように、プロセッサに結合される。代替案では、記憶媒体はプロセッサに内蔵されるか、またはプロセッサおよび記憶媒体は、コンピュータシステムの個別部品として存在することができる。
【０１０４】
本明細書では、特定の実施形態を図示して記述したが、同一または類似の目的を達成するために設計された、いかなる後続の機構も、示された特定の実施形態の代わりとなるものであることを理解されたい。本開示は、様々な実施形態のあらゆる後続の修正または変形形態を包含することを意図するものである。
【０１０５】
本開示の要約書は、請求項の範囲または意味を解釈または限定するために使用されないことを理解したうえで提供される。これに加えて、前述の発明を実施するための形態では、開示を簡素化するために、様々な特徴をまとめたり、または単一の実施形態に記述したりしていることがある。本開示は、請求された実施形態が、各請求項に明示的に列挙したより多くの特徴を必要とするという意図を示すものと解釈してはいけない。むしろ、以下の請求項が示すように、本発明の主題は、開示した実施形態のすべての特徴を示すものではない。
【０１０６】
開示した実施形態に関する前の記述は、開示した実施形態を任意の当業者が構成または使用できるように提供するものである。これらの実施形態に様々な変更が可能なことは当業者には明白であり、本明細書に定義した一般的な原理は、本開示の範囲から逸脱することなく他の実施形態に適用することができる。このため、本開示は、本明細書に示した実施形態に限定することを意図するものではなく、添付の特許請求の範囲に定義する原理および新規な特徴に矛盾しない最大限の範囲を認めることを意図するものである。
【図１】
0005474177.tif 000005
【図２】
0005474177.tif 000006
【図３】
0005474177.tif 000007
【図４】
0005474177.tif 000008
【図５】
0005474177.tif 000009
【図６】
0005474177.tif 000010
【図７】
0005474177.tif 000011
【図８】
0005474177.tif 000012
【図９】
0005474177.tif 000013
【図１０】
0005474177.tif 000014
【図１１】
0005474177.tif 000015
【図１２】
0005474177.tif 000016