(57)【特許請求の範囲】
【請求項１】
コンピュータ化された環境におけるシグナリングを行うシステムにおいて、前記シグナリングを行うシステムは、依存性の連鎖を通じてデータを或るところから別のところへ中継する複数のコンポーネントを備え、競合条件を避ける方法において前記依存性の連鎖における１または複数の値の一貫性のあるセットを処理する方法であって、前記方法は、
依存性の連鎖において順序付けられる、１または複数のソースコンポーネントおよび１または複数の依存コンポーネントを含む複数のコンポーネントに対応する複数のノードを生成することと、
ノードごとに、バイナリインジケータを、１または複数のソースコンポーネントが開始状態を備えることを示す第１の設定に設定することと、
前記１または複数のソースコンポーネントにおいて後続状態への変更を識別すると、関連するノードの各バイナリインジケータを第２の設定に設定するために、前記依存性の連鎖における各ノードに信号を送信することと、
ノードごとの前記バイナリインジケータを前記第２の設定に設定した後、前記生成された複数のノードに対応する１または複数のリスナーを呼び出すことであって、前記１または複数のソースコンポーネントにおける前記後続状態に基づいて、前記依存性の連鎖において識別された順序で前記１または複数のリスナーを呼び出すことを実行する、ことと
の動作を備えることを特徴とする方法。
【請求項２】
前記第２の設定は、前記１または複数のソースコンポーネントが後続状態に変更されたことのみを示し、前記１または複数のソースコンポーネントが前記後続状態に変更された更新値を直接示さない設定であることを特徴とする請求項１に記載の方法。
【請求項３】
各バイナリインジケータを第２の設定に設定する前記動作は、前記各バイナリインジケータの開始設定を後続設定に更新する信号を前記依存性の連鎖に在る各ノードに送る動作を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記依存性の連鎖に在る前記ノードの１つに在る対応するバイナリインジケータを前記第２の設定に設定した後に、続いて前記信号を繰り返し受信することと、
前記続いて受信された信号を無視することであって、前記バイナリインジケータが前記第２の設定に設定されたままである、ことと
の動作をさらに備えることを特徴とする請求項３に記載の方法。
【請求項５】
前記依存性の連鎖に在る前記複数のノードを生成する時に、前記１または複数のリスナーを識別する動作をさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記識別された１または複数のリスナーを、少なくとも各バイナリインジケータが前記第２の設定に変更されるまで、リスナーレジストリ内に格納する動作をさらに備え、
前記１または複数のリスナーは、各バイナリインジケータが前記第２の設定に変更された後にのみ呼び出されることを特徴とする請求項５に記載の方法。
【請求項７】
前記１または複数のリスナーを、前記依存性の連鎖におけるコンポーネントの前記順序付けに対応する順序で、リスナーレジストリ内に格納する動作をさらに備えることを特徴とする請求項５に記載の方法。
【請求項８】
前記依存性の連鎖に登録されている１または複数のリスナーを呼び出す前記動作は、前記１または複数のリスナーを、前記リスナーレジストリに在る前記１または複数のリスナーが格納される順序で呼び出す動作を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記生成されたノードのすべてを表し、かつ前記依存性の連鎖における依存性に対応する、ノードグラフを備えるインメモリデータ構造を作成することと、
前記後続状態への変更を識別すると、前記１または複数のソースコンポーネントの更新値をキャッシュすることと
の動作をさらに備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記ノードグラフの後続状態への変更に基づく新しいバージョンを備える新しいインメモリデータ構造を作成することと、
前記１または複数のソースコンポーネントの後続状態への変更に基づく新しい変更を識別すると、前記１または複数のソースコンポーネントの後続状態への変更に基づく新しい値をキャッシュすることと
の動作をさらに備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記１または複数のソースコンポーネントの前記キャッシュされた更新値を前記ノードグラフを備える前記インメモリデータ構造と関連付けることと、
前記１または複数のソースコンポーネントの前記キャッシュされた新しい値を前記ノードグラフの前記新しいバージョンを備える前記新しいインメモリデータ構造と関連付けることと
の動作をさらに備えることを特徴とする請求項１０に記載の方法。
【請求項１２】
ノードグラフを備える前記インメモリデータ構造のいずれかに対応する前記呼び出された１または複数のリスナーのすべてを処理し終えたことを識別することと、
前記特定のインメモリデータ構造を廃棄することと
の動作をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
コンピュータ化された環境におけるシグナリングを行うシステムにおいて、前記シグナリングを行うシステムは依存性の連鎖を通じてデータを或るところから別のところへ中継する複数のコンポーネントを備え、保証された値のセットのみに基づいて前記依存性の連鎖を表すインメモリデータ構造を生成および更新する方法であって、前記方法は、
１または複数のソースコンポーネントに従属する１または複数の依存コンポーネントを含む複数のコンポーネントに対応する開始ノードグラフを生成することであって、前記開始ノードグラフの各ノードが第１の設定に設定される、ことと、
前記１または複数のソースコンポーネントの既定値が更新値に変更されたことを識別すると、前記更新値に基づいて前記更新値をキャッシュし、および信号を前記ノードグラフ上に在る
すべてのノードに送ることであって、前記信号が各ノードを前記第１の設定から第２の設定に変更する、ことと
前記ノードグラフ上に在る各ノードが前記第１の設定から第２の設定に変更された後、前記開始ノードグラフにあるすべてのリスナーを開始して処理を実行することと、
前記更新値に基づいて開始されたすべてのリスナーを処理し終えた後に、前記開始ノードグラフを廃棄することと、
前記１または複数のコンポーネントの１または複数の後続状態への変更に基づいて後続のノードグラフを生成することと
の動作を備えることを特徴とする方法。
【請求項１４】
前記複数のコンポーネントに対応するすべての前記リスナーを、前記依存性の連鎖におけるコンポーネントの順序でリスナーレジストリに格納する動作をさらに備えることを特徴とする請求項１３に記載の方法。
【請求項１５】
前記リスナーは、前記リスナーレジストリに格納された前記順序で開始されることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記１または複数のソースコンポーネントに対応する１または複数のリスナーの新しいセットをリスナーレジストリに格納する動作をさらに備え、前記１または複数のリスナーの新しいセットが前記後続の依存性ノードグラフに対応することを特徴とする請求項１３に記載の方法。
【請求項１７】
前記後続のノードグラフに在る各ノードが前記第１の設定に設定されることであって、前記方法は、
前記対応する１または複数のソースコンポーネントが後続状態への変更に基づく新しい値に変更したことを識別することと、
信号を前記後続のノードグラフ上に在るすべてのノードに送ることであって、前記信号が各ノードを前記第１の設定から第２の設定に変更する、ことと
の動作をさらに備えることを特徴とする請求項１３に記載の方法。
【請求項１８】
前記新しい値をキャッシュすることと、
前記新しい値を前記後続のノードグラフと関連付けることであって、続いて前記後続のノードグラフ上で呼び出されたすべてのリスナーが前記新しい値に基づいて処理を実行する、ことと
の動作をさらに備えることを特徴とする請求項１７に記載の方法。
【請求項１９】
コンピュータ化された環境におけるシグナリングを行うシステムにおいて、前記シグナリングを行うシステムは、依存性の連鎖を通じてデータを或るところから別のところへ中継する複数のコンポーネントを備え、コンピュータ実行可能命令が実行されると前記システムにおける１または複数のプロセッサが１つの方法を遂行する、前記命令を含むコンピュータプログラムが格納されたコンピュータ読み取り可能記録媒体であって、前記方法は、
依存性の連鎖において順序付けられる、１または複数のソースコンポーネントおよび１または複数の依存コンポーネントを含む複数のコンポーネントに対応する複数のノードを生成することと、
ノードごとに、バイナリインジケータを、１または複数のソースコンポーネントが開始状態を備えることを示す第１の設定に設定することと、
前記１または複数のソースコンポーネントにおいて後続状態への変更を識別すると、関連するノードの各バイナリインジケータを第２の設定に設定するために、前記依存性の連鎖における各ノードに信号を送信することと、
ノードごとの前記バイナリインジケータを前記第２の設定に設定した後、前記生成された複数のノードに対応する１または複数のリスナーを呼び出すことであって、前記１または複数のソースコンポーネントにおける前記後続状態に基づいて、前記依存性の連鎖において識別された順序で前記１または複数のリスナーを呼び出すことを実行する、ことと
を備えることを特徴とするコンピュータ読み取り可能記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一貫性を有するシグナリング状態の変化に関する。
【背景技術】
【０００２】
コンピュータ化されたシステムにおいて使用されるアプリケーションプログラムは、典型的には、さまざまな異なる理由から互いに依存する複数の異なるコンポーネントまたはモジュールを含む。例えば、単一の計算アプリケーションプログラムは、計算モジュールからの１または複数の出力値を識別する度に即座にリフレッシュする（即ち、新しい出力を表示する）出力表示コンポーネントを含むことがある。計算モジュールは、今度は、１または複数の入力コンポーネントから１または複数の数値および関数入力を受信する度に計算を実行するように構成されることがある。このように、表示コンポーネントは、計算モジュールだけでなく、最終的に計算アプリケーション内のさまざまな入力コンポーネントの各々に依存するであろう。
【０００３】
このような依存性をソフトウェアレベルで構成することができる多くの異なる方法がある。例えば、上述の計算モジュールは、それで計算された値を「公開する」ことによってその値を「待ち受ける(listening)」その他の表示コンポーネントが、公開された時にその値を識別して一部の動作を実行できるようにすることがある。値が公開されたときを識別するために、表示コンポーネントは、今度は、最終的に公開された値を識別するおよび／または受信するリスナーを確立することがある（例えば、「イベント」を確立する）。他の場合、計算モジュールは、新しく計算された任意の値をその計算モジュールに登録された特定の他のコンポーネントに渡す（例えば、「シグナリング」）ようにそれ自体が構成されることがある。このように、或るソフトウェアコンポーネントから別のソフトウェアコンポーネントにデータを転送するための複数の「プッシュ」・「プル」形式構造があることを認識されたい。
【０００４】
このように、プログラマがモジュールまたはコンポーネント間で依存性を生成することを望む度に、プログラマは、典型的には、依存性を符号にして書き込む必要があり、時にはその関係性のリスナーを生成することさえあるだろう。例えば、プログラマは、或るコンポーネントによって値が公開された時にそれを読み出すだけでなくその値を依存性の連鎖に在る別のコンポーネントに送る、リスナーを書くことがある。プログラマは、その上、または、あるいは他の論理を書き込むことがあり、それによって一部の特定の条件が満たされた場合（例えば、値を特定のサイズにする）のみ、コンポーネントがその値を進ませる。その結果、コンポーネントの連鎖に在る各リスナーが異なる方法、および異なる速度で値を処理できることを認識されたい。
【０００５】
論理を各リスナーに書き込むこの能力は、プログラミングの柔軟性をある程度提供することができるが、依存性の連鎖を過度に複雑にすることにもなりかねず、および／または、過度の複雑さのため精度を保障することが困難である。例えば、複雑な依存性の連鎖は、各リスナーが１または複数のソースノードの事実上同じ変更に対してそれぞれに、異なるレートで応答する多くの異なるリスナーを有し得る。これは、依存性の連鎖に在る後続コンポーネントの競合条件になりかねない。具体的には、同じソースからの値を受信した２つのコンポーネントに依存しているディペンデントチャイルド（ｄｅｐｅｎｄｅｎｔ  ｃｈｉｌｄ）は、１つのペアレントコンポーネント（ｐａｒｅｎｔ  ｃｏｍｐｏｎｅｎｔ）から正しく更新された値を処理し得るが、古い値を使用して再度実行し得る。あるいは、そのディペンデントチャイルドのコンポーネントは、決して起こりそうにない条件のために無制限なハングアップになることがある。これは、依存性の連鎖にさらに連鎖反応をもたらし得る。
【０００６】
上述に加えて、標準のシステムを用いて、情報を受信するためのより直接的な経路が好適である場合でさえもソフトウェアコンポーネント間の同じ依存性を使用できる。例えば、１つの依存性の連鎖は、ソースノードＡから中間ノードＣ、次いでエンドノードＤまでの依存性に関わることがある。しかしながら他の場合では、ノードＡは、エンドノードＤからの値のみを必要とする場合がある。例えば、第２の実行コンテキストにおいて、エンドノードＤは、必ずしもソースノードＡの値をすぐに必要とするわけではなく、ソースノードＡが変更されたことのみを知りさえすればよい。ほとんどの場合、第２の実行コンテキストでさえも、ノードＤはノードＡが変更されたことのみを知る必要があるとしても、ノードＡからＣ、次いでＤまでの実値のリレーになおも関わるであろう。長い依存性の連鎖、特にいくつかの異なる条件に関わる１つにおいて、エンドノードＤがソースノードＡが変更されたことを単純に見つけ出すだけでも多大で不必要な遅延になるであろう。
【０００７】
このような問題を克服する一部の標準機構は、頻繁なリフレッシュレートを異なるリスナーの各々に単純に符号化することを含む。一部の場合において効果的であるが、これは計算コストが高く、特に多数のリスナーと関わることがあるところでは不必要であることを認識されたい。例えば、依存性の連鎖内の一部の基本的なソースコンポーネントがしばしば変更し、一方で他の基本的なコンポーネントはまれにしか変更しない場合がある。さらに、また別のコンポーネントは、特定の出力さえ含むことができないので、そのエンドノードにおいてわざわざ値を渡す（および計算する）ことは、特に不必要となるであろう。例えば、最終値のみを表示し、他には表示画面上に現在表示しているものがないスプレッドシート上のセルは、これらのセルが表示されている間は更新される必要がない。
【０００８】
万能の手法を実行することは、従って、不必要になることが多い。さらに、依存性が２回登録されることと、他のダウンストリームのリスナーより先にアップストリームのリスナーが一部のデータを必ず取り扱うという保証がほとんどないことが多いために、現在のシステムには非効率が多い傾向にある。この種の論点は、まれにしか変更しない小規模のコンポーネントにとっては問題にならないかもしれないが、この種の論点は、継続的に変更する多くの表示データを有するシステム（例えば、証券データの処理）を不必要に遅くするまたはハングアップさせかねない。さらに、このような論点は、反応しないコンポーネント、または他の不必要な処理の遅延になりかねない。
【０００９】
従って、対処することができる複雑なソフトウェアの依存性において値変更をレポートすることに関連する困難が多くある。
【発明の概要】
【００１０】
本発明の実施は、複雑なソフトウェアの依存性の連鎖において配信、レポートティング、および／またはその他の処理状態／値変更に対する同期手法を確保するシステム、方法、およびコンピュータプログラム製品を提供する。特に、本発明の実施は、システムがソフトウェアコンポーネントの依存性の連鎖に対応するノードグラフを確立して、すべてのノードに信号が送られた後でノードグラフに在るすべてのリスナーを呼び出す２段階手法を含む。このように、リスナーを依存性の連鎖の順序で呼び出すことができるため、本発明の実施は、すべてのリスナーが、関連するソースコンポーネントと事実上同じ状態に基づいた、適切な順序で値を受信することを確保することによって一貫性を確保することができる。
【００１１】
例えば、依存性の連鎖に在る一貫性のある１または複数の値のセットを処理する本発明の実施に従った方法は、１または複数のソースノードと依存性の連鎖において順序付けられる１または複数の依存コンポーネントとを含む複数のコンポーネントに対応する複数のノードの生成に関わることができる。その方法は、ノードごとに、バイナリインジケータを１または複数のソースコンポーネントが開始状態を備えることを示す第１の設定に設定することを含むこともできる。さらに、その方法は、１または複数のソースコンポーネントにおいて後続状態の変更を識別すると、ノードごとの各バイナリインジケータを第２の設定に設定することに関わることができる。さらに、その方法は、生成された複数のノードに登録されている１または複数のリスナーを呼び出すことに関わることができる。この場合、１または複数のリスナーは、１または複数のソースコンポーネントにおける後続状態に基づいて実行するために同期される。
【００１２】
さらに、保証された値のセットのみに基づいてインメモリデータ構造を生成および更新する本発明の実施に従った別の方法は、開始ノードグラフの生成を含むことができる。開始ノードグラフは、１または複数のソースコンポーネントに従属する１または複数の依存コンポーネントを含む複数のコンポーネントに対応する。この場合、開始ノードグラフの各ノードは、第１の設定に設定される。この方法は、１または複数のソースコンポーネントが更新値に変更したことを識別すると、更新値をキャッシュして、更新値に基づいて開始ノードグラフを登録したすべてのリスナーを開始して処理を実行することを含むこともできる。さらに、この方法は、更新値に基づいて開始されたすべてのリスナーを処理し終えた後にその開始ノードグラフを廃棄することを含むことができる。さらに、この方法は、１または複数のソースコンポーネントへの１または複数の後続変更に基づいて後続のノードグラフを生成することを含むことができる。
【００１３】
本発明の概要は、以下の発明の詳細な説明でさらに説明される概念の選択されたものを簡易な形式で導入するために与えられた。本発明の概要は、特許請求の範囲の対象事項での重要な特徴または不可欠な特徴を特定することを意図せず、または特許請求の範囲の対象事項の範囲を決めるのに役立つものとして用いられることを意図しない。
【００１４】
本発明の付加的な特徴および利点は、以下の説明に示されるが、その一部においては説明によって明らかになるであろうし、または本発明の実施によって知得することもできる。本発明の特徴および利点を、添付の特許請求の範囲において特に指摘された手段およびその組み合わせによって実現して得ることができる。本発明のこれらと他の特徴は、以下の説明および添付の特許請求の範囲によってより完全に明白になるであろうし、以下に示された本発明の実施によって知得することもできる。
【００１５】
本発明の上記に列挙したものと他の利点および特徴を得ることができる方法を説明するために、簡単に上述した本発明のより詳細な説明は、添付図面に示されたその具体的な実施形態を参照することによって示されるであろう。これらの図面は本発明の典型的な実施形態のみを表し、従って、その範囲が限定されるものと見なされないことを理解した上で、本発明は、添付図面の使用を通じて付加的な具体性を用いて説明されるであろう。
【図面の簡単な説明】
【００１６】
【図１Ａ】本発明の実施に係る、シグナリングシステムが依存性の連鎖のノードを識別する図式的外観図である。
【図１Ｂ】本発明の実施に係る、シグナリングシステムが依存性の連鎖に在る各ノードを信号で送る図式的概略図である。
【図１Ｃ】本発明の実施に係る、シグナリングシステムが依存性の連鎖に在るノードを信号で送った後にリスナーを呼び出す図式的概略図である。
【図２】依存性の連鎖において依存ノード間の一貫性を確実なものにするための本発明の実施に係る方法のフローチャートである。
【図３】本発明の実施に係る、ノード間の一貫性を確実なものにするために異なる依存性の連鎖構造を生成する方法のフローチャートである。
【発明を実施するための形態】
【００１７】
本発明の実施は、複雑なソフトウェアの依存性の連鎖において配信、レポートティング、および／またはその他の処理状態／値変更に対する同期手法を確保するシステム、方法、およびコンピュータプログラム製品にまで及ぶ。特に、本発明の実施は、システムがソフトウェアコンポーネントの依存性の連鎖に対応するノードグラフを確立して、すべてのノードに信号が送られた後でノードグラフに在るすべてのリスナーを呼び出す２段階手法を含む。このように、リスナーを依存性の連鎖の順序で呼び出すことができるため、本発明の実施は、すべてのリスナーが、関連するソースコンポーネントと事実上同じ状態に基づいた、適切な順序で値を受信することを確保することによって一貫性を確保することができる。
【００１８】
本明細書でより完全に理解されるように、これらと他の利点を、少なくとも一部において２段階通知、および一度に最大の配信通知を使用して実現させることができる。さらに、対象とする通知グラフは、本明細書で説明するように、（グラフの形で表示したような）依存順序によって状態変更通知を提供する。特に状態変更の通知は（変更された値を必ずしも渡す必要なく）、すべての古いノードは古いとプログラムが正しく判定することができた後にのみ生じる。このように、通知は、与えられたノードに対して１回のみ生じる（サイクルと呼ぶ）。この結果、本発明のこれらと他の態様は、依存状態についての合理的な仮定を提供するために理解されて、マルチスレッド環境におけるシステムの保証を維持管理するのに役立つことができる。
【００１９】
図１Ａは、依存性の連鎖においてシグナリングシステム１００が、一貫性のあるシグナリングを確保するために少なくとも１セットの依存ソフトウェアコンポーネントに対してノードグラフを準備する図式的外観図を示す。例えば、図１Ａは、システム１００がコンポーネントＡ１１０、Ｂ１２０、Ｃ１３０、Ｄ１４０、Ｅ１５０、およびＦ１６０を備えることを示す。さらに、図１Ａは、コンポーネントＡ１１０がコンポーネントＢ１２０およびコンポーネントＣに依存し、一方でコンポーネントＢ１２０がコンポーネントＤ１４０に依存して、コンポーネントＣがコンポーネントＥ１５０に従属することを示す。さらに、図１Ａは、コンポーネントＤ１４０がコンポーネントＦ１６０に従属し、コンポーネントＤおよびコンポーネントＥは、条件付きで互いに関連することを示す。例えば、コンポーネントＥは、コンポーネントＤから得られる値が或るサイズまたは長さである場合にのみ値を計算することがある。
【００２０】
このように、このソフトウェアコンポーネントＡ−Ｆのセットを、複数の、ソースノード、依存ノード、およびエンドノードまたはそれらのいずれかを備える「依存性の連鎖」を形成するものとして一般的に考えることができる。この特定の例において、コンポーネントＦ１６０を、基本的には依存性の連鎖におけるソースノードとして理解することができる。これとは対照的に、コンポーネントＢ、Ｃ、Ｄ、およびＥを中間ノードとして基本的に理解することができ、コンポーネントＡを依存性の連鎖の依存ノードとして理解することができる。
【００２１】
もちろん、しかしながら、依存性の連鎖における別のノードに対しては依存性の連鎖における任意のノードを依存ノード、中間ノード、またはソースノードとして見なすことができることも認識されたい。例えば、コンポーネントＤ１４０を、コンポーネントＢ１２０にとってのソースノードおよび／またはコンポーネントＥ１５０にとってのソースノードと見なすことができる。同様にコンポーネントＥ１５０を、コンポーネントＣ１３０にとってのソースノードと見なすことができる等である。さらに、さまざまな実行コンテキストに実際に依存するいかなる時でも図示された依存性の連鎖を長くし、短くし、多少複雑にし得ることを認識されたい。例えば、コンポーネントＡは、一度の計算にコンポーネントＢ−Ｆが関わるが、他の計算においてこれよりも多いまたは少ないコンポーネントノードを含む一つの特定の計算のための出力モジュールを備え得る。
【００２２】
図１Ａは、システム１００がソフトウェアコンポーネントの依存性の連鎖に対応する（あるいは表す）ノードグラフ１１３を準備することができることを示す。一般的に、ノードグラフ１１３は、関連のあるソフトウェアコンポーネント（例えば、１１０、１２０、１３０、１４０、１５０、１６０）の状態変更に基づいて生成されて廃棄されるリンクノード（１１０ａ、１２０ａ、１３０ａ、１４０ａ、１５０ａ、および１６０ａ）を有するインメモリデータ構造のセットを備える。例えば、コンポーネントＡによって一部の処理が要求されると、処理モジュール１０５は、その特定の要求に対して依存性の連鎖に或る各ソフトウェアコンポーネント１１０、１２０、１３０、１４０、１５０、１６０をトラバースして、対応するノードグラフ１１３を準備する。特に、図１Ａは、処理モジュール１０５がノード１１０ａ、１２０ａ、１３０ａ、１４０ａ、１５０ａ、および１６０ａを備えるノードグラフ１１３を準備することを示し、これらのノードはコンポーネント１１０、１２０、１３０、１４０、１５０、１６０にそれぞれが対応する。
【００２３】
ノードグラフ１１３に加えて、図１Ａは、処理モジュール１０５がさらにリスナーレジストリ１７０に在るソフトウェアコンポーネントごとに異なるリスナーの各々を登録することを示す。例えば、さまざまなコンポーネント１１０、１２０、１３０等をトラバースして依存性を識別すると、各コンポーネントは、特定のリスナーに表示を与えることもできる。処理モジュール１０５は、次に、識別した時に識別された各リスナーをリスナーレジストリに登録することができ、このようにして依存性の連鎖において近似したまたは全く同じ順序で登録することができる。例えば、図１Ａは、コンポーネントＢ１２０、Ｄ１４５、Ｅ１５５の各々が、リスナーＢ１２５、Ｄ１４５、Ｅ１５５等のリスナーをそれぞれ使用することを示す。従って、図１Ａは、リスナーレジストリ１７０が、関連する依存性の連鎖の順序においてリスナーＤ１４５、リスナーＥ１５５、およびリスナーＢ１２５の表示を備えることを示す。
【００２４】
どのイベントにおいても、システム１００は、ソフトウェアコンポーネントの状態の変更を反映させて管理するためにノードグラフ１１３を生成して廃棄することができる。例えば、処理モジュール１０５は、ソースノードＦが或る値（例えば、「０」または「状態１」１６５）に等しい時にこの特定のノードグラフ１１３を生成した可能性がある。ソースノードＦが第１の状態から後続の別の状態または値に変更（例えば、「０」から「１０」に−図示せず）する時、システム１００は、（例えば、処理モジュール１０５を経由して）ノードグラフ１１３を更新して、単に変更が起きたという事実でも反映させることができる。システム１００は、次に、すべてのコンポーネントが何らかの望ましい処理をし終える機会が得られる時間までこの特定の状態でノードグラフ１１３を保持することができる。いったんさまざまなコンポーネント１１０、１２０、１３０が最初にノードグラフ１１３を変更させたソースノードの変更を処理し終えると、処理モジュール１０５は、ノードグラフ１１３を廃棄して、必要な新しいノードグラフと共に再び開始することができる。その結果、システム１００は、基本的に、コンポーネント１１０、１２０、１３０が以前の変更（例えば、「０」から「１０」への変更）を処理する間、対応するノードが新しく更新された状態で受信するのを禁止する。
【００２５】
ソフトウェアコンポーネントの処理におけるこのような一貫性および統一性は、本発明の実施に従った１または複数のシグナリング機能を使用して、少なくとも一部において可能になる。例えば、図１Ａは、ノードグラフ１１３のさまざまなノード１１０ａ、１２０ａ等の各々は、バイナリインジケータ１１７ａ、１２７ａ、１３７ａ、１４７ａ、１５７ａ、および１６７ａ等のバイナリインジケータを備える（または準備する）ことを示す。この特定の例示において、バイナリインジケータは、特定の開始設定または第１の設定を識別する「＋」記号として示される。具体的には、例示された「＋」記号の例は、与えられたソフトウェアソースコンポーネントのデフォルト値（例えば、コンポーネント１６０の状態１６５）を意味し、任意の変更が処理される前の依存性の連鎖がその値に基づく。
【００２６】
このように、本明細書でより完全に認識されるように、ノードグラフ１１３を構成して、バイナリインジケータの変更が元のソースノードの特定の状態とリンクされるようにすることができる。例えば、コンポーネントＦ１６０の状態の変更が受信（即ち、メッセージ１８０）されるとすぐに、システム１００は、新しい値（例えば、「０」から「１０」に変更された値）をキャッシュすることができ、ソースコンポーネントＦ１６０に起きることがあるその他の後続変更の有無にかかわらず、その新しい値をノードグラフ１１３に自動でリンクさせることができる。さらに、システム１００は、ソースコンポーネントの値（例えば、コンポーネントＦ１６０）の後続変更を、要求された時間に新しい（またはリフレッシュされた）ノードグラフ（図示せず）に任意にリンクさせることができる。
【００２７】
従って、この線に沿って、「バイナリ」インジケータは、本明細書で論じるように、もう一つの値にのみ、一度だけ変更することができる。このように、処理モジュール１０５が特定のソフトウェアソースコンポーネント（例えば、１６０）に対する値の変更を識別した時、バイナリインジケータ１１７ａ、１２７ａ等は、その変更を反映するために１回のみ更新される。例えば、図１Ａは、処理モジュール１０５が、コンポーネントＦ１６０が更新されたことを表示するメッセージ１８０を受信することを示す。図１Ｂに示すように、処理モジュール１０５は、次に、異なるノード１１０ａ、１２０ａ等の各々を通じて信号１８５を送る。信号１８５は今度、バイナリインジケータの「＋」状態から「−」状態への変更の表記を含み、このようにしてバイナリインジケータの開始設定を後続設定に単純に更新する。
【００２８】
さらに、信号１８５は、基本的にソースノードＦ１６０ａから開始される依存性の連鎖の順序で送られる。例えば、図１Ｂは、信号１８５が最初にノードＦ１６０ａに送られ、次にノードＤ１４０ａに、次にノードＥ１５０ａ等に送られることを示し、この結果１６７ａ、１５７ａ、１４７ａの設定（即ち、「＋」）から、それぞれ１６７ｂ、１５７ｂ、１４７ｂの設定（即ち、「−」）にバイナリインジケータが変更される。最後に、信号１８５は、ノードグラフ１１３内のすべてのノードが信号１８５を受信するまで各依存性を通じて信号を渡す。ほとんどの場合、各ノードは、信号を一度しか受信しない。しかしながら本発明の実施は、この他の理由でノードが信号（またはその他の信号）を繰り返し受信する場合でも、各バイナリインジケータがそれでもなお「最大限でも１回」しか変更しないため、この場合に適応することができる。
【００２９】
具体的には、各バイナリインジケータ１４７を一度しか（即ち、「最大限でも１回」）変更することができないため、他の信号（または繰り返しの信号）は、変更された／更新されたノードのバイナリインジケータを変更することができない。つまり、これらの図で使用された具体的な用語を参照すると、いったん図示された「−」記号に設定されると、与えられたバイナリインジケータを「＋」記号に戻して変更することができない。このように、図示されたノードグラフ１１３のシグナリング経路は、イベントにおいて或るノードが何かの事情で特定の信号１８５をあちこちに循環させたとしても機能するであろう。当然、「最大限でも１回」の変更に対するバイナリインジケータの構成とは別に、ノード自体もこの種の問題を避けるように構成することができる。少なくとも一実施において、例えば、ノードグラフ１１３の各ノードは、生成時に別のノードへのバックチャネルを用いずに構成される。このように、ノードＦ１６０ａは信号１８５を少なくともノードＤ１４０ａにリレーするが、ノードＦ１６０ａは、ノードＤ１４０ａから帰還信号を受信することができない。
【００３０】
システム１００は、与えられたノードグラフに在るすべてのノードが（信号１８５を経由して）更新されるまでこの特定の依存性の連鎖における処理を起こすことができないことをさらに確保する。少なくとも一つの実施において、例えば、システム１００は、すべてのバイナリインジケータが設定されて更新されるまで、または信号１８５が少なくとも１回はノードグラフ１１３に在るすべてのノードに到達するまでリスナー１２５、１４５、または１５５の呼び出しを保留することによってこの一貫性を確保する。このような実施において、従って、ノードグラフの生成の開始（例えば、図１Ａ）は、単にリスナー１２５．１４５、および１５５を発見することなので、結果として何の処理も行われないだろう。システム１００がコンポーネントＦの更新（例えば、メッセージ１８０）を受信する時点においても、システム１００は、ソースノードの開始変更を反映させるためにバイナリインジケータが更新されるまでリスナー１２５、１４５、または１５５のいずれも呼び出さないであろう。
【００３１】
すべてのバイナリインジケータを更新した後のリスナーの呼び出しに加えて、システム１００は、特定の順序でリスナーを呼び出すことによって一貫性をさらに向上させることができる。例えば、図１Ａ−１Ｃは、リスナーレジストリ１７０が、リスナー１２５、１４５、および１４５の参照を、基本的には処理モジュール１０５によってそれらが識別された順序で格納することを示す。特に、図１Ａ−１Ｃは、リスナーレジストリ１７０が、これらの特定のリスナーの順序を、最初はリスナーＤ１４５、次にリスナーＥ１５５、そして次にリスナーＢ１２５の順序で格納することを示す。その結果、処理モジュール１０５が最終的にこれらの特定のリスナーを呼び出す時、処理モジュール１０５は、近似した処理順序でしかそれを行なわない。例えば、図１Ｃは、処理モジュールがノードグラフ１１３を通じてメッセージ１９０に近似した依存性の連鎖の順序を適用して、ノードＤ１４０ａおよびＥ１５０ａに対応するリスナーＤ１４５およびＥ１５５を、ノードＢ１２０ａに対応するリスナーＢ１２５の前に呼び出すことができることを示す。
【００３２】
システム１００はこれらのリスナーの各々を呼び出すので、対応する各ソフトウェアコンポーネントは、ソースコンポーネントの値変更に基づいて処理を実行することができる。例えば、いったんリスナー１４５が呼び出されると、ソフトウェアコンポーネントＤ１４０は、このノードグラフ１１３と関連付けされたキャッシュ値（例えば、ソースコンポーネントＦ１６０に提示された値）で処理を任意に実行することができる。いったんリスナーＥ１５５およびＢ１２５が呼び出されると、コンポーネントＥ１５０およびＢ１２０は、すでに処理された、および／またはメッセージ１８０からのコンポーネントＦの最新の更新に基づいてノードＤから提供された値を任意に読み出すことができる。
【００３３】
システム１００は、このように各リスナーを呼び出すことだけでなく、依存性の連鎖に沿って連続する値を処理することも順序付けることを認識されたい。これにより、特定のソフトウェアコンポーネントが別のソース／中間ノードから読み出す各値が、すでに処理された、最新の値のみに基づくという見込みが増加する。さらに、いったんすべてのリスナーがコンポーネントＦ１６０に割り当てられた状態に基づいて呼び出されて、すべての処理が完了すると、処理モジュール１５０は、ノードグラフ１１３を廃棄する。必要に応じて、システム１００は、コンポーネントＦのさらに別の変更に対応する別のノードグラフを準備することができる。
【００３４】
従って、図１Ａ、１Ｂ、および１Ｃは、依存性の連鎖内のコンポーネントが一度にソースノードの１つの状態変更のみを効率的に、基本的に正しい順序で処理することを確保するための１または複数の図式またはコンポーネントを提供する。これにより、多くの重要な保証を提供することができ、このような特定の場合における競合条件（同じ連鎖内の現在の値と古い値との間の処理）に対して時々生じる懸念を軽減するあるいは無くすことができる。
【００３５】
上述に加えて、本発明の実施を、特定の結果を達成するための１または複数の動作を備える方法において説明することもできる。例えば、図２は、依存性の連鎖に在る１または複数の値の一貫性のあるセットを処理する方法のフローチャートを示す。さらに、図３は、保証された値のセットのみに基づいて依存性の連鎖を表すインメモリデータ構造を生成して更新する付加的または代替的方法を示す。図２および図３のフローチャートの動作は、図１Ａ−図１Ｃのコンポーネントおよび図式に対して以下で説明される。
【００３６】
例えば、図２は、依存性の連鎖に在る１または複数の値の一貫性のあるセットを処理する方法が、依存性の連鎖に在るノードを識別する動作２００を備えることができることを示す。動作２００は、依存性の連鎖において順序付けられる１または複数のソースコンポーネントおよび１または複数の依存コンポーネントを含む複数のコンポーネントに対応する複数のノードを生成することを含む。例えば、処理モジュール１０５は、コンポーネントＡ１１０から処理の要求を受信して、それに対応する依存性の連鎖をトラバース（ｔｒａｖｅｒｓｅ）して、コンポーネントＡが依存する異なるコンポーネントの各々を識別する。処理モジュール１０５は、次に、Ａが依存する識別されたコンポーネントと相関する依存性の連鎖に在る１または複数のノードを備えた対応するノードグラフ１１３のデータ構造を生成する。
【００３７】
図２は、バイナリインジケータをノードごとに設定する動作２１０を備えることができる方法も示す。動作２１０は、ノードごとに、バイナリインジケータを、１または複数のソースコンポーネントが開始状態を備えることを示す第１の設定に設定することを含む。例えば、図１Ａは、処理モジュール１０５が、ノードグラフ１１３に在るノードごとにバイナリインジケータ１１７ａ、１２７ａ、１３７ａ、１４７ａ、１５７ａ、および１６７ａを生成して設定することを示す。一実施において、この特定のバイナリインジケータを開始状態（１６５）に設定して、１または複数のソースコンポーネント（例えば、コンポーネントＦ１６０）の値を、ノードグラフの構成がまだ変更されていない時間から効率的に明確にする。
【００３８】
さらに、図２は、この方法が、ソースノードが変更した後にすべてのバイナリインジケータを第２の設定に設定する動作２２０を備えることができることを示す。動作２２０は、１または複数のソースコンポーネントにおいて後続状態の変更を識別すると、ノードごとに各バイナリインジケータを第２の設定に設定することを含む。例えば、図１Ｂに示すように、ノードグラフ１１３内のバイナリインジケータの各々を、別の後続の表示にする第１の変更等、いったん処理モジュール１０５がノードＦの変更を識別すると、処理モジュール１０５は即座にその変更のシグナリングを開始する。具体的に、図１Ｂは、処理モジュール１０５が信号１８５をノードグラフ１１３に在る各ノードに渡してその「＋」設定を「−」設定にすることを示す。
【００３９】
さらに、図２は、この方法が、依存性の連鎖においてすべてのリスナーを呼び出す動作２３０を備えることができることを示す。動作２３０は、生成された複数のノードに登録されている１または複数のリスナーを呼び出すことを含み、１または複数のソースコンポーネントにおける後続状態に基づいて実行するために１または複数のリスナーが同期される。例えば、バイナリインジケータの各々がマイナス記号に変更されると、図１Ｃは、システム１００がコンポーネントごとの各リスナーを呼び出して、リスナーが依存性の連鎖において元々識別された順序で（例えば、ソースノードに最も近いリスナーからエンドノードに最も近いリスナーへ進む）この方法を行うことを示す。例えば、図１Ｃは、システム１００が最初にリスナーＤ１４５を呼び出し、次にリスナーＥ１５５、次にリスナーＢ１２５等を呼び出すことを示す。
【００４０】
上述に加えて、図３は、保証された値のセットのみに基づいて依存性の連鎖を作成する本発明に従った付加的または代替的方法が、第１の状態に基づいてノードグラフを生成する動作３００を備えることができることを示す。動作３００は、１または複数のソースコンポーネントに従属する１または複数の依存コンポーネントを含む複数のコンポーネントに対応する開始ノードグラフを生成することを含み、そこで開始ノードグラフの各ノードが第１の設定に設定される。例えば、図１Ａは、処理モジュール１０５が、処理要求１８０を識別するとコンポーネント１１０、１２０、１３０、１４０、１５０、１６０をトラバースして、対応するノード１１０ａ、１２０ａ等を含むノードグラフ１１３を生成することを示す。この場合、処理モジュール１０５は、各ノードに在るバイナリインジケータ（１１７ａ、１２７ａ等）を開始状態（即ち、「＋」）にさらに設定して、ノードグラフ１１３が、ソースノードコンポーネントＦ１６０の開始状態（１６５）に基づくことを示す。
【００４１】
図３は、この方法が、状態変更が複製された後にすべてのリスナーを呼び出す動作３１０を備えることができることも示す。動作３１０は、１または複数のソースコンポーネントが更新値に変更されたことを識別すると、その更新値をキャッシュすることと、開始ノードグラフを登録したすべてのリスナーを開始して更新値に基づいた処理を実行することを含む。例えば、図１Ｂおよび１Ｃは、コンポーネントノードＦを更新するメッセージ１８０を受信すると、処理モジュール１０５は、すべてのバイナリインジケータを、例えば、ノードグラフ１１３に在る１４７ｂ、１５７ｂ、１６７ｂ等の別の記号表示に変更して（即ち、「−」に変更する）、レジストリ１７０に在るすべてのリスナーをさらに呼び出すことを示す。
【００４２】
さらに、図３は、この方法が、ノードグラフを廃棄する動作３２０を備えることができることを示す。動作３２０は、開始されたすべてのリスナーが更新値に基づいて処理し終えた後に開始ノードグラフを廃棄することを含む。例えば、図３に示した各リスナーがノードグラフ１１３が利用可能な最新値にアクセスした後に処理モジュール１０５は、ノードグラフ１１３を廃棄する。異なるバイナリインジケータ１４７ｂ、１５７ｂ等の各々を一回しか変更することができないので、呼び出された他リスナーのいずれによっても、異なるコンポーネントまたはノードに変わる他の後続変更が複製されることができず、取り扱うこともできない。よって、システム１００は依存ノードグラフ１１３を廃棄する。
【００４３】
さらに、図３は、その方法が、更新状態に基づいて新しいノードグラフを生成する動作３３０を備えることができることを示す。動作３３０は、１または複数のソースコンポーネントに変わる１または複数の後続変更に基づいて後続のノードグラフを生成することを含む。このように、例えば、コンポーネントＡ１１０によって新しい処理要求が受信されると、処理モジュール１０５は、この特定の要求に関する依存性の連鎖のセットを再度トラバース（ｔｒａｖｅｒｓｅ）して、新しいノードグラフに関するノードの新しいセットを識別（図示せず）し得る。ノードグラフ１１３と同様に、この新しいノードグラフも、対応するソースノードの最新の変更に基づくにもかかわらずインメモリデータ構造になるであろう。特に、このノードグラフは、図１Ａに示したものと同じ表示を備えることができるが、この実行コンテキストが異なり、異なる依存性を有する場合があるので、異なるコンポーネントまたはノードも備え得る。
【００４４】
このような新しいノードグラフおよび新しい依存性の連鎖の生成を継続的にリフレッシュし、再生し、そして必要に応じて廃棄することができることを認識されたい。いずれにしても、本発明の実施はこのように、ソースノード値の変更が、依存性の連鎖を通じて特定のノードグラフのコンテキストにおいて、一貫性のある方法で一度のみ処理されることを確保する。従って、本発明の実施は、ソフトウェアコンポーネントが非常に複雑な依存性の連鎖になっていても、値の処理において高度な精度および一貫性を確保することができる。
【００４５】
本発明の実施形態は、以下により詳細に論じられるように、さまざまなコンピュータハードウェアを含む専用または汎用コンピュータを備えることができる。本発明の範囲における実施形態は、コンピュータ可読媒体も含み、その上に格納されるコンピュータ実行可能命令またはデータ構造を搭載または有する。このようなコンピュータ可読媒体は、汎用または専用コンピュータがアクセスすることができる利用可能な任意の媒体にすることができる。
【００４６】
例を挙げると、このようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、または他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、またはコンピュータ実行可能命令またはデータ構造の形式において望ましいプログラムコード手段を搭載または格納するために使用することができて、汎用または専用コンピュータによってアクセスすることができるその他の媒体を備えることができるが、これに限らない。情報が、ネットワークまたは別の通信接続（有線、無線、または有線もしくは無線の組み合わせのいずれか）を経由してコンピュータに転送または提供される場合、そのコンピュータは、適切にその接続をコンピュータ可読媒体と見なす。このように、こうした接続はいずれも適切に、コンピュータ可読媒体と呼ばれる。上記の組み合わせも、コンピュータ可読媒体の範囲内に含めなければならない。
【００４７】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに、或る機能または機能群を実行させる命令およびデータを備える。発明の対象事項を、構造的特徴または方法論的動作に特有の言語で説明しているが、添付の特許請求の範囲で定義された本発明の対象事項は、上述した具体的な特徴または動作に必ずしも限定されないことを理解されたい。むしろ上述した具体的な特徴および動作は、特許請求の範囲を実装する例示的な形態として開示される。
【００４８】
本発明を、その精神または不可欠な特性から逸脱することなく、他の具体的な形態に実施してもよい。説明した実施形態は、あらゆる点において単に例示的と見なされ、限定されるものではない。本発明の範囲は、従って、上述の説明よりはむしろ添付の特許請求の範囲によって示される。特許請求の範囲と同等の意味および範囲に入るすべての変更は、それらの範囲内に含まれるものとする。
【図１Ａ】
0005129351.tif 000002
【図１Ｂ】
0005129351.tif 000003
【図１Ｃ】
0005129351.tif 000004
【図２】
0005129351.tif 000005
【図３】
0005129351.tif 000006