(57)【特許請求の範囲】
【請求項１】
クライアントコンピュータシステムにウェブページを供給するサーバコンピュータシステムであって、前記ウェブページは前記サーバコンピュータシステムの外部からのコンテンツを含み、前記サーバコンピュータシステムは前記サーバコンピュータシステムの外部から前に受け取ったキャッシングされるコンテンツを保管するキャッシュを含む、サーバコンピュータシステムにおいて、キャッシュエントリが有効であるかを判定する方法であって、
システムメモリに記憶されカスタマイズされたキャッシュ依存関係を派生する拡張可能キャッシュ依存関係ベースクラスに処理ユニットがアクセスする動作であって、前記拡張可能キャッシュ依存関係ベースクラスは、前記カスタマイズされたキャッシュ依存関係に対応する１つまたは複数のキャッシュエントリが有効であるかを判定するために、前記拡張可能キャッシュ依存関係ベースクラスから派生したカスタマイズされたキャッシュ依存関係により使用される複数のキャッシュ管理のメソッドを含む、アクセスする動作と、
前記システムメモリに記憶され拡張可能キャッシュ依存関係ベースクラスからカスタマイズされたキャッシュ依存関係クラスを前記処理ユニットが派生させる動作であって、前記カスタマイズされたキャッシュ依存関係クラスは、前記拡張可能キャッシュ依存関係ベースクラスからの複数のキャッシュ管理のメソッドを含み、前記拡張可能キャッシュ依存関係ベースクラスに含まれる複数のキャッシュ管理のメソッドを拡張するカスタマイズされたキャッシュ依存関係の機能を実施するよう構成され、前記カスタマイズされたキャッシュ依存関係の機能は、カスタマイズされたキャッシュ依存関係に関連付けられたキャッシュエントリが有効であるかを判定するカスタマイズされた機能を提供する、派生させる動作と、
前記クライアントコンピュータシステムに配信されるキャッシュされたコンテンツに前記処理ユニットがアクセスする動作と、
前記カスタマイズされたキャッシュ依存関係を前記処理ユニットによってアクセスされキャッシュされたコンテンツに関連付けるキャッシュエントリを前記処理ユニットが作成する動作であって、前記カスタマイズされたキャッシュ依存関係の機能は前記キャッシュエントリが有効であるかを判定するカスタマイズされた機能を含む、作成する動作と、
前記キャッシュエントリが有効であるかを判定するカスタマイズされた機能によって前記キャッシュエントリが有効であることを前記処理ユニットが判定する動作と、
前記キャッシュエントリが有効か無効かの判定によって前記キャッシュエントリをさらに処理することを前記処理ユニットが開始する動作と
を含むことを特徴とする方法。
【請求項２】
前記さらに処理することを処理ユニットが開始する動作は、前記クライアントコンピュータシステムへの配信用キャッシュへ前記判定された有効であるキャッシュエントリを前記処理ユニットが挿入する動作を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記拡張可能キャッシュ依存関係ベースクラスに処理ユニットがアクセスする動作は、前記システムメモリに記憶され拡張可能キャッシュ依存関係ベースクラスから派生されるクラスが、前記システムメモリに記憶される依存関係変更通知メソッドを呼び出すことによって拡張可能キャッシュ依存関係ベースクラスの消去機能を実施できるように、前記依存関係変更通知メソッドを含む拡張可能キャッシュ依存関係ベースクラスに前記処理ユニットがアクセスする動作を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記拡張可能キャッシュ依存関係ベースクラスに処理ユニットがアクセスする動作は、前記システムメモリに記憶され拡張可能キャッシュ依存関係ベースクラスから派生されるクラスが、前記システムメモリに記憶される依存関係処置メソッドを呼び出すことによってキャッシュエントリによって占められたリソースを解放できるように、前記依存関係処置メソッドを含む拡張可能キャッシュ依存関係ベースクラスに前記処理ユニットがアクセスする動作を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記拡張可能キャッシュ依存関係ベースクラスからカスタマイズされたキャッシュ依存関係クラスを処理ユニットが派生させる動作は、キャッシュエントリを前記サーバコンピュータシステムの外部のデータベースサーバに格納されたデータベーステーブルに従属させるために実施することができるカスタマイズされたキャッシュ依存関係クラスを派生する動作を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記拡張可能キャッシュ依存関係ベースクラスからカスタマイズされたキャッシュ依存関係クラスを処理ユニットが派生させる動作は、キャッシュエントリを前記ウェブページに含まれるコンテンツに従属させるために実施することができるカスタマイズされたキャッシュ依存関係クラスを派生する動作を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記クライアントコンピュータシステムに配信されるキャッシュされたコンテンツに処理ユニットがアクセスする動作は、ウェブページに含まれるコンテンツにアクセスする動作を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記クライアントコンピュータシステムに配信されるキャッシュされたコンテンツに処理ユニットがアクセスする動作は、前記サーバコンピュータシステムの外部のデータベースサーバに格納されたデータベーステーブルからのコンテンツにアクセスする動作を含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記カスタマイズされたキャッシュ依存関係をアクセスされキャッシュされたコンテンツに関連付けるキャッシュエントリを処理ユニットが作成する動作は、前記サーバコンピュータシステムの外部のデータベースサーバに格納されたデータベーステーブルからのコンテンツを前記データベーステーブルに従属させるキャッシングされたエントリを作成する動作を含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記カスタマイズされたキャッシュ依存関係をアクセスされキャッシュされたコンテンツに関連付けるキャッシュエントリを処理ユニットが作成する動作は、前記サーバコンピュータシステムの外部のデータベースサーバに格納されたデータベーステーブルからのコンテンツを集約依存関係に従属させるキャッシングされたエントリを作成する動作を含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記カスタマイズされたキャッシュ依存関係をアクセスされキャッシュされたコンテンツに関連付けるキャッシュエントリを処理ユニットが作成する動作は、ウェブページに含まれるコンテンツを前記ウェブページに従属させるキャッシングされたエントリを作成する動作を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記キャッシュエントリを処理ユニットが挿入する動作は、前記サーバコンピュータシステムの外部のデータベースサーバに格納されたデータベーステーブルに従属させるキャッシュエントリを挿入する動作を含むことを特徴とする請求項２に記載の方法。
【請求項１３】
前記キャッシュエントリを処理ユニットが挿入する動作は、キャッシュエントリが複数のイベントに依存する集約依存関係に従属させるキャッシュエントリを挿入する動作を含むことを特徴とする請求項１に記載の方法。
【請求項１４】
前記さらに処理することを処理ユニットが開始する動作は、
前記システムメモリのキャッシュエントリが有効であるかを判定するカスタマイズされた機能に関連付けられた１つまたは複数のカスタム依存関係条件を前記処理ユニットが監視する動作と、
前記１つまたは複数のカスタム依存関係条件が満足されたかどうかを前記処理ユニットが判定する動作と、
前記１つまたは複数のカスタム依存関係条件が満足されたことの指示を前記処理ユニットが受け取る動作と、
前記システムメモリのキャッシュエントリが有効であるかを判定するカスタマイズされた機能によって、前記１つまたは複数のカスタム依存関係条件に関連付けられたキャッシュエントリが無効であることを前記処理ユニットが判定する動作と
を含むことを特徴とする請求項１に記載の方法。
【請求項１５】
前記さらに処理することを処理ユニットが開始する動作は、前記１つまたは複数のカスタム依存関係条件に関連付けられたキャッシュエントリが無効であると判定すると前記サーバコンピュータシステムのキャッシュエントリを前記処理ユニットが消去する動作を含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記処理ユニットが監視する動作は、データベーステーブル依存関係を監視する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記処理ユニットが監視する動作は、ウェブサービス依存関係を監視する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
前記処理ユニットが監視する動作は、集約依存関係を監視する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項１９】
前記１つまたは複数のカスタム依存関係が満足されたかどうかを処理ユニットが判定する動作は、フラグエントリが増分されたかどうかを判定する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項２０】
前記１つまたは複数のカスタム依存関係が満足されたかどうかを処理ユニットが判定する動作は、集約依存関係に関連する依存関係条件が満足されたかどうかを判定する動作を含むことを特徴とする請求項１５に記載の方法。
【請求項２１】
前記１つまたは複数のカスタム依存関係が満足されたかどうかを処理ユニットが判定する動作は、カスタマイズされたキャッシュ依存関係クラスのインスタンスによって指定されるイベントの発生時に依存関係変更通知メソッドを呼び出すことを含むことを特徴とする請求項１５に記載の方法。
【請求項２２】
前記１つまたは複数のカスタム依存関係が満足されたことの指示を処理ユニットが受け取る動作は、前記１つまたは複数のカスタム依存関係条件が満足されたことの表示を依存関係変更通知メソッドから受け取る動作を含むことを特徴とする請求項１５に記載の方法。
【請求項２３】
クライアントコンピュータシステムにウェブページを供給するサーバコンピュータシステムに、キャッシュエントリが有効であるかの判定を実行させるためのコンピュータプログラムであって、
カスタマイズされたキャッシュ依存関係を派生する拡張可能キャッシュ依存関係ベースクラスにアクセスする手順であって、前記拡張可能キャッシュ依存関係ベースクラスは、前記カスタマイズされたキャッシュ依存関係に対応する１つまたは複数のキャッシュエントリが有効であるかを判定するために、前記拡張可能キャッシュ依存関係ベースクラスから派生したカスタマイズされたキャッシュ依存関係により使用される複数のキャッシュ管理のメソッドを含む、アクセスする手順と、
前記拡張可能キャッシュ依存関係ベースクラスからカスタマイズされたキャッシュ依存関係クラスを前記処理ユニットが派生させる手順であって、前記カスタマイズされたキャッシュ依存関係クラスは、前記拡張可能キャッシュ依存関係ベースクラスからの複数のキャッシュ管理のメソッドを含み、前記拡張可能キャッシュ依存関係ベースクラスに含まれる複数のキャッシュ管理のメソッドを拡張するカスタマイズされたキャッシュ依存関係の機能を実施するよう構成され、前記カスタマイズされたキャッシュ依存関係の機能は、カスタマイズされたキャッシュ依存関係に関連付けられたキャッシュエントリが有効であるかを判定するカスタマイズされた機能を提供する、派生させる手順と、
前記クライアントコンピュータシステムに配信されるキャッシュされたコンテンツにアクセスする手順と、
前記カスタマイズされたキャッシュ依存関係を前記アクセスされキャッシュされたコンテンツに関連付けるキャッシュエントリを作成する手順であって、前記カスタマイズされたキャッシュ依存関係の機能は前記キャッシュエントリが有効であるかを判定するカスタマイズされた機能を含む、作成する手順と、
前記キャッシュエントリが有効であるかを判定するカスタマイズされた機能によって前記キャッシュエントリが有効であることを判定する手順と、
前記キャッシュエントリが有効か無効かの判定によって前記キャッシュエントリをさらに処理することを開始する手順と
を実行させることを特徴とするコンピュータプログラム。
【請求項２４】
前記さらに処理することを開始する手順は、前記クライアントコンピュータシステムへの配信用キャッシュへ前記判定された有効であるキャッシュエントリを挿入する手順を含むことを特徴とする請求項２３に記載のコンピュータプログラム。
【請求項２５】
前記さらに処理することを開始する手順は、前記サーバコンピュータシステムのキャッシュエントリを消去する手順を含むことを特徴とする請求項２３に記載のコンピュータプログラム。
【請求項２６】
前記カスタマイズされた機能は、前記キャッシュエントリが有効であるかに従属させる要素のセットを含むことを特徴とする請求項１に記載の方法。
【請求項２７】
前記要素のセットは、ウェブページ、データベーステーブル、ローカルファイルの変更、前記拡張可能キャッシュ依存関係ベースクラスから派生される依存関係、通知フラグおよびソフトウェアアプリケーションに関する要素の１つまたは複数を含むことを特徴とする請求項１に記載の方法。
【請求項２８】
前記カスタマイズされたキャッシュ依存関係の機能は、前記拡張可能キャッシュ依存関係ベースクラスの機能がオーバーライドされることを特徴とする請求項１に記載の方法。
【請求項２９】
前記カスタマイズされたキャッシュ依存関係は、ファイルとデータベーステーブルとの両方に従属することを特徴とする請求項１に記載の方法。
【請求項３０】
前記カスタマイズされた機能は、データベースクエリに変更があると通知されることを含むことを特徴とする請求項１に記載の方法。
【請求項３１】
前記カスタマイズされたキャッシュ依存関係は、別のキャッシュ依存関係に従属することを特徴とする請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはキャッシングされたコンテンツの管理に関する。具体的には、本発明は、開発者がカスタムキャッシュ依存関係（ｃａｃｈｅ  ｄｅｐｅｎｄｅｎｃｙ）を作成できるようにキャッシュ依存関係クラスを拡張することに関する。
【背景技術】
【０００２】
近代のコンピュータシステムおよびネットワークシステムでは、データキャッシングが、データのそれを要求する人への配信を高速化する効果的なツールである。一般に、データキャッシングは、頻繁に要求されるデータを、そのデータをすばやく取り出せる記憶位置に保管することが含まれる。１例で、コンピュータシステムの物理メモリに保管されたデータを、コンピュータシステムのハードドライブに保管されたデータよりすばやく取り出すことができる。これは、部分的に、ハードドライブが通常は物理メモリと比較してより大きいデータ検索待ち時間を有することに起因する。同様に、サーバコンピュータシステムのハードドライブまたはメモリ内に保管されたデータには、リモートデータベースに保管されたデータより効率的にアクセスすることができる。さらに、キャッシングされたデータの使用によって、要求するクライアントコンピュータシステムへの配信のためにコンテンツを生成するのに必要な計算の数を減らすことができる。
【０００３】
近代ネットワークによって、さまざまな記憶位置との間でディジタル情報をあまねく転送する能力が実現された。トランスポートのためにデータを使用可能にする形の１つが、ＨＴＭＬファイルなどの、サーバからそれを表示できるクライアントコンピュータシステムにダウンロードすることができる静的ファイルを作成することによるものである。静的ファイルは、サーバコンピュータシステム、地域データベースを含むさまざまな記憶位置でまたはクライアントコンピュータシステムでローカルにキャッシングすることができる。コンピュータシステム静的ファイルがクライアントコンピュータシステムに保管される時に、すべての実用目的に関するクライアントコンピュータによる取り出しおよび表示は、瞬間的である。静的ファイルが、クライアントコンピュータシステムに接続されたサーバコンピュータシステムに直接に保管される時であっても（一般に出力キャッシングと称する）、キャッシングされたコンテンツの取出は、比較的すばやく行うことができる。さらに、この静的な性質のゆえに、静的ファイルを、長期間、本質的に無期限にキャッシングすることができる。
【０００４】
残念ながら、静的ファイルに、リアルタイムコンテンツまたはカスタムコンテンツを含めることはできない。しばしば、周期的に変化するか他のコンテンツの計算または操作から形成されるコンテンツを提示することが望ましい。そのようなコンテンツをキャッシングすることはできるが、コンテンツのキャッシングされる値は、限られた持続時間の間に限って有効である。したがって、キャッシュをリフレッシュして、データが有効であることを保証しなければならない。
【０００５】
ウェブページおよびウェブサイトの作成でウェブ開発者を助けた技術の１つが、たとえばＩｎｔｅｒｎｅｔ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｅｒｖｅｒなどのウェブページサーバで動作する、スクリプトまたはコンピュータ実行可能コードのモジュール的部分である。スクリプトを、他のＨＴＭＬタグの間に埋め込んで、ダイナミックでカスタマイズ可能なウェブページを作成することができる。Ｖｉｓｕａｌ  Ｂａｓｉｃ、Ｊａｖａ（登録商標）Ｓｃｒｉｐｔ、およびＣ＃などで記述されたプログラム内でオブジェクトを呼び出すことができるのと同様に、同一のオブジェクトをこれらおよび他の言語に基づくスクリプトで呼び出すことができる。
【０００６】
クラスは、ＡＳＰ．ＮＥＴフレームワークなどのプログラミングフレームワーク内のオブジェクトである。ＡＳＰ．ＮＥＴフレームワークに、ウェブページ開発者がウェブページを開発するのに使用できる数千個のクラスが含まれる。ディレクトリパスを介するファイルのアクセスに似た形で、特定の名前空間への参照によってクラスにアクセスすることができる。たとえば、名前空間Ｓｙｓｔｅｍ．ＷｉｎＦｏｒｍｓ．Ｆｏｒｍへの参照によって、特定のクラスの記憶位置の表示がもたらされる。クラスは、プロパティ、イベント、およびメソッドに関連付けることができる。プロパティは、変数割当または対応するクラスでの設定（たとえば、ｘ＝５）と見なすことができる。イベントは、イベントの発生時に発生するフラグである。イベントを、他のクラスまたは他のアプリケーションによって読み取って、ある動作を行うことができる。メソッドによって、対応するクラスの機能を呼び出して、動作を実行することができる（たとえば、表示デバイスにデータを出力する）。メソッドによって、その機能を外部コンポーネントに提供する方法が定義される。
【０００７】
コンテンツのキャッシングを実現し、したがってウェブページサーバの性能を改善するために、プログラミングフレームワークに、たとえばファイル、データベース、およびウェブサーバなどのさまざまな記憶位置からデータを取り出すクラスおよびさまざまな動作を介してデータを操作するクラスを含めることができる。一部の環境で、これらのクラスにアクセスできるウェブページサーバコンピュータシステム（たとえばＡＳＰサーバ）によって、リアルタイムコンテンツに基づいてＨＴＭＬコードを作成し、保管することができ、このＨＴＭＬコードは、出力キャッシングシナリオでクライアントコンピュータシステムに送信される。他の環境で、ウェブページサーバコンピュータシステムは、ＸＭＬファイルなどのコンテンツをウェブページサーバコンピュータシステムでローカルにキャッシングでき、その結果、そのコンテンツを含むウェブページが要求されるたびにそのコンテンツを取り出すか再計算する必要がなくなる。
【０００８】
一部のプログラミングフレームワークでは、ウェブ開発者が、実行される時にコンテンツをキャッシュに保管させる命令を作成することが許可される。たとえば、エントリをキャッシュに挿入するために、下記の命令を実行することができる：Ｃａｃｈｅ．Ｉｎｓｅｒｔ（［ｋｅｙ］、［ｖａｌｕｅ］、［ｄｅｐｅｎｄｅｎｃｙ］）。ここで、ｋｅｙは、キャッシュエントリの参照識別子、ｖａｌｕｅは、キャッシュエントリに置かれる値（またはコンテンツ）、ｄｅｐｅｎｄｅｎｃｙは、キーの値をキャッシュから消去しなければならない時を定義するオプション引数である。ｄｅｐｅｎｄｅｎｃｙは、たとえばＣａｃｈｅＤｅｐｅｎｄｅｎｃｙ（キャッシュ依存関係）クラスなど、キャッシュ値を特定のイベントの発生に依存させるのに使用することができるクラスのインスタンスである。
【０００９】
一部のプログラミングフレームワークは、キャッシュ値を時刻、ファイル、またはキーのいずれかに依存するものにするキャッシュ依存関係をサポートする。時間キャッシュ依存関係によって、特定の依存関係に関連するエントリが、指定された時間期間の満了の後に消去される。たとえば、Ｃａｃｈｅ．Ｉｎｓｅｒｔ命令を次のように実施して、データを時間依存にすることができる：
Cache.Insert(strCacheKey、dataset、nothing、DateTime.Now.AddMinutes(60)、
TimeSpan.Zero、CacheItemPriority.High)。
【００１０】
具体的に言うと、DateTime.Now.AddMinutes(60)命令によって、キャッシュ内のエントリが、６０分後にキャッシュから消去される。あまりに短くセットされる時間キャッシュ依存関係によって、キャッシュの頻繁すぎる消去と、データベースからの頻繁なデータフェッチの追加コストまたはキャッシュに保管されるデータの計算のコストがもたらされる可能性がある。時間値が長すぎる場合には、キャッシュに保管されたデータが、要求元のクライアントコンピュータシステムに配信された時に無効になる危険性がある。
【００１１】
Cache.Insert命令を使用して、特定のファイルに変更がある場合にキャッシュエントリを消去させるファイルキャッシュ依存関係を実施することもできる。さらに、Cache.Insert命令を使用して、メモリに保管された他のキャッシュ値が変化する時に１つまたは複数のキャッシュエントリを消去させるキー依存関係を実施することができる。キー依存関係を使用すると、あるキャッシュ値の変化によって、複数の依存キャッシュ値をキャッシュから消去させることができる。
【００１２】
上で説明した３つのキャッシュ依存関係：時間、ファイル、およびキーは、キャッシュに保管される値を新鮮に保つのに有用であるが、これらの依存関係を実施するクラスは、通常は封印（ｓｅａｌｅｄ）されている。したがって、ウェブ開発者は、通常は、キャッシュエントリを他のタイプのイベント依存にする手だてを持たない。これによって、キャッシュの管理をより効率的にすることができるさまざまな他のタイプのキャッシュ依存関係を使用できなくなる。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
したがって、キャッシュエントリを無効化するのに使用できる依存関係のタイプを拡張する機構を有することが有利である。
【課題を解決するための手段】
【００１４】
従来技術の状態に関する上述の課題は、本発明の原理によって克服される。本発明の原理は、開発者がカスタムキャッシュ依存関係を作成できるようにキャッシュ依存関係クラスを拡張する、方法、システム、およびコンピュータプログラムを対象とする。サーバコンピュータシステム（たとえば、ウェブページサーバを含む）によって、拡張可能キャッシュ依存関係ベースクラスにアクセスし、拡張可能キャッシュ依存関係ベースクラスから、カスタマイズされたキャッシュ依存関係を派生させる。カスタマイズされたキャッシュ依存関係によって、たとえば、データベーステーブル（たとえばＳＱＬテーブル）またはウェブサービスの変化に依存するキャッシュエントリをもたらすことができる。
【００１５】
カスタマイズされたキャッシュ依存関係に、キャッシュエントリが複数のイベントに依存するように、集約依存関係（ａｇｇｒｅｇａｔｅ  ｄｅｐｅｎｄｅｎｃｙ）を含めることができる。いくつかの実施形態で、カスタマイズされたキャッシュ依存関係の機能によって、拡張可能キャッシュ依存関係ベースクラスの機能がオーバーライドされる。拡張可能キャッシュ依存関係ベースクラスに、イベント（たとえばデータベーステーブルの変更）を監視し、イベントが発生した時にサーバコンピュータシステムに通知する、依存関係変更通知（ｎｏｔｉｆｙ  ｄｅｐｅｎｄｅｎｃｙ  ｃｈａｎｇｅｄ）メソッドを含めることができる。拡張可能キャッシュ依存関係ベースクラスに、キャッシュエントリがキャッシュから除去される時にリソースを解放する、依存関係処置（ｄｅｐｅｎｄｅｎｃｙ  ｄｉｓｐｏｓｅ）メソッドも含めることができる。
【００１６】
サーバコンピュータシステムによって、たとえばデータベースまたはウェブサービスから、クライアントコンピュータシステムに配信されるコンテンツがアクセスされる。サーバコンピュータシステムによって、カスタマイズされたキャッシュ依存関係をアクセスされるコンテンツに関連付けるキャッシュエントリが作成される。サーバコンピュータシステムによって、キャッシュにキャッシュエントリが挿入され、キャッシュエントリ（したがってアクセスされるコンテンツ）の有効性が、カスタマイズされた依存関係に依存するようになる。サーバコンピュータシステムによって、カスタマイズされたキャッシュ依存関係のインスタンスである依存関係を指定するＣａｃｈｅ．Ｉｎｓｅｒｔメソッドを使用してキャッシュにキャッシュエントリが挿入される。
【００１７】
キャッシュエントリが、カスタマイズされたキャッシュ依存関係に基づいて無効化される場合がある。サーバコンピュータシステム（たとえば、ウェブページサーバを含む）によって、監視されるイベントが発生したことの通知が受け取られる。この通知は、カスタマイズされたキャッシングされる依存関係の作成の結果として実行され、カスタマイズされたキャッシングされる依存関係に関連するイベントの発生を監視する依存関係変更通知メソッドから発する可能性がある。この通知に応答して、サーバコンピュータシステムによって、そのキャッシュエントリが無効化される（かつ、除去される）。サーバコンピュータシステムによって、依存関係処置メソッドが呼び出されて、キャッシュエントリによって使用されたすべてのリソースが解放される。
【００１８】
本発明の追加の特徴および長所は、以下の説明で示され、部分的にこの説明から明白であり、あるいは、本発明の実践によって習得することができる。本発明の特徴および長所は、請求項で特に指摘される機器及び組合せによって実現し、得ることができる。
【００１９】
本発明の上記および他の長所および特徴を得ることができる方法を説明するために、上で短く説明した本発明のより具体的な説明を、添付図面に示された特定の実施形態に関して説明する。これらの図面が、本発明の典型的な実施形態を示すのみであり、したがって、本発明の範囲を制限すると解釈してはならないことを理解して、本発明を、添付図面の使用を介してさらに具体的かつ詳細に説明する。
【発明を実施するための最良の形態】
【００２０】
本発明によって、カスタムキャッシュ依存関係を開発者が作成できるように、キャッシュ依存関係クラスを拡張するシステム、方法、およびコンピュータプログラムが拡張される。本発明の実施形態によって、開発者が開発者自体のカスタムキャッシュ依存関係を開発できるように、キャッシュ依存関係が拡張可能な形に拡張される。サーバコンピュータシステム（たとえば、ウェブページサーバを含む）によって、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスがアクセスされ、このクラスから、他のカスタマイズ可能なＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスを派生させることができる。カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスによって、とりわけ、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスのキャッシュ管理機能を使用することができる。拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生したカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙＣｌａｓｓを作成することによって、開発者は、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスの有利な特徴を使用するために、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスがどのように実施されるかの知識を、あるとしてもほとんど必要としない。拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスによって、実装の詳細が開発者から抽象化される。
【００２１】
さらに、開発者は、キャッシュ同期化およびキャッシュリソース管理を扱うことができる拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスのメソッドにアクセスすることができる。さらに、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスは、下位互換性を有することができ、その結果、既存のＡＰＩを、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスおよびこれから派生するすべてのクラスと共に使用することができる。そのようなＡＰＩの例に、Ｃａｃｈｅ．Ｉｎｓｅｒｔ、Ｃａｃｈｅ．Ａｄｄ、およびＢａｓｅＰａｒｔｉａｌＣａｃｈｉｎｇＣｏｎｔｒｏｌ．Ｄｅｐｅｎｄｅｎｃｙが含まれる。さらに、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙ（キャッシュ依存関係）ベースクラスから派生するカスタムキャッシュ依存関係の実装によって、キャッシュの監視を開始しなければならない時を合図するのにＳｔａｒｔＴｉｍｅプロパティ（属性）を指定する必要から開発者が解放される。開発者は、このプロパティを実施することができるが、これは必須ではない。
【００２２】
拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスには、パブリックに使用可能な２つの追加メソッドが含まれ、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙの開発者が、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスの消去機能を呼び出すことができる。第１のメソッドが、ＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄ（依存関係変更通知）メソッドである。このメソッドは、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生したクラスによって、依存関係アイテムが変化したことを拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスに知らせるために呼び出される。第２の新しいメソッドが、ＤｅｐｅｎｄｅｎｃｙＤｉｓｐｏｓｅメソッドである。このメソッドは、派生クラスに固有のロケーションクリーンアップを提供する仮想メソッドである。具体的に言うと、このメソッドによって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙでない場合に拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスのＤｉｓｐｏｓｅ（処置）メソッドが普通に配置される命令の記憶位置が提供される。したがって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙによって使用されるリソースを、そのリソースにアクセスする必要を有する他のモジュールによる使用のために解放することができる。
【００２３】
ＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄメソッドは、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから依存するカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙによって呼び出すことができる。したがって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスによって、キャッシュエントリを、データベースの変化、ウェブサービスのデータ、または他の理由に依存するようにすることができる。この形で、キャッシュによって、無効化キャッシュエントリキーを認識でき、そのキー（および対応するコンテンツ）をキャッシュから除去することができる。
【００２４】
１つの例示的な例では、開発者が、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生するカスタムクラス「ＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙ」を作成して、データベースに対する変更が行われたかどうかを判定するためにＳＱＬデータベースをポーリングする。ＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙは、プログラミングフレームワーク内に存在する拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生される。したがって、クラスＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙによって、サーバコンピュータシステムが依存キャッシュエントリを消去させるように、ＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄのメソッドを呼び出すことができる。
【００２５】
本発明の一実施形態を使用すると、下記の命令を使用して、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙのインスタンスを実装することができる。
10  If  (Cache  [''Product'']  ==  null  )｛
20      SqlConnection  Connection  =  new  SqlConnection  ([connection  
details]);
...
30      SqlDataAdapter  ds  =  new  SqlDataAdapter  (''Product_GetProducts'',  
connection);
40      SqlCacheDependency  dep  =  new  SqlCacheDependency  (''NorthWind'',  
''Products'');
50      Cache.Insert(''Product",  ds,  dep);
｝
【００２６】
上のコードの行１０で、エントリ「Ｐｒｏｄｕｃｔ」が既にキャッシュ内にあるかどうかを調べている。エントリがキャッシュにない場合には、「ｉｆ」ステートメントの関数が実行される。行２０で、データベースへの接続を確立し、このデータベースからコンテンツを取り出す。行３０で、メソッド「Ｐｒｏｄｕｃｔ＿ＧｅｔＰｒｏｄｕｃｔｓ」を使用してデータベースからデータを取り出し、変数「ｄｓ」にデータを保管する。行４０で、変数「ｄｓ」を、「ＮｏｒｔｈＷｉｎｄ」データベースの「Ｐｒｏｄｕｃｔｓ」テーブルに対する依存関係として割り当てる。この依存関係は、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生したカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙである。行５０で、変数「ｄｓ」のデータが、キー「Ｐｒｏｄｕｃｔ」によって参照されるキャッシュエントリに挿入され、このキャッシュエントリが、「ｄｅｐ」に依存するようになる。
【００２７】
この例では、ＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙが、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生されたカスタマイズされたキャッシュ依存関係である。拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生されるクラスが、依存関係として使用される時に、サーバコンピュータシステムは、そのクラスを、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙのインスタンスであるかのように処理する。したがって、サーバコンピュータシステムは、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスによって示される類似する挙動に応答することができると同時に、内部的に、派生クラスによって、データベース照会が変化する時に通知を受けるなど、それ自体の独自の機能を実施することができる。カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙ、この例ではＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙによって、所望の機能を達成するのに必要な、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスの任意のメソッドをオーバーライドすることができる。この例では、ＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙが、データベース照会変化について通知される時に、ｂａｓｅ．Ｎｏｔｉｆｙ．ＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄメソッドを呼び出して、サーバコンピュータシステムに、キー「Ｐｒｏｄｕｃｔ」によって参照されるキャッシュエントリを除去させる。
【００２８】
この例を、データベース変更依存関係に関して説明したが、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスの拡張可能性によって、ウェブ設計者が想像できる事実上すべてのキャッシュ依存関係の作成が許可されることに留意することが重要である。拡張可能なモデルがあれば、ウェブ開発者は、複数の依存関係に基づく集約依存関係を含むあらゆる種類のカスタム依存関係を構築することができる。たとえば、キャッシュエントリを、ファイルとＳＱＬテーブルの両方に依存するものとすることができる。下記の命令に、集約依存関係の実施形態を示す。
70  if  (Cache  [''(Product-List'']  ==  null)  ｛
80      SqlConnection  Connection  =  new  SqlConnection  ([connection  
details]);
90      SqlDataAdapter  ds  =  new  SqlDataAdapter  (''Product_GetProducts'',  
connection);
100    SqlCacheDependency  sqlDep  =  new  SqlCacheDependency  (''NorthWind'',  
''Products'');
120    CachDependency  dep  =  new  AggregateCacheDependency(
Server.MapPath(''sales.xml''),  sqlDep);
130    Cache.Insert(''Product-List,  ds,  dep);
｝
【００２９】
このコードは、行１２０を除いて、行１０から５０という符号を付された上のコードに類似する。総合キャッシュ依存関係は、ＡｇｇｒｅｇａｔｅＣａｃｈｅＤｅｐｅｎｄｅｎｃｙという名のＣａｃｈＤｅｐｅｎｄｅｎｃｙの派生クラスによって実装される。これは、キャッシュ内のエントリを、ファイル（ｓａｌｅｓ．ｘｍｌ）および、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生したカスタマイズされたＳｑｌＣａｃｈｅＤｅｐｅｎｄｅｎｃｙの両方に依存するようにするのに使用することができる。拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスから派生されるクラスによって、追加のカスタマイズ機能も提供することができる。すなわち、派生クラスを開発して、カスタマイズされた機能を実装するのに使用されるイベント、メソッド、およびプロパティを処理することができる。たとえば、開始時刻（たとえば、ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙが変化について監視を開始しなければならない時を指定する）、依存関係の総合をサポートする能力、コールバック機構のサポートなどに対する派生クラスを開発することができる。したがって、開発者は、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスに固有のイベント、メソッド、およびプロパティに制限されない。
【００３０】
図１を参照すると、本発明の諸態様を実施できる適切な環境が示されている。図１には、それぞれ対応するリンク１２１および１２２によってネットワークに接続されたサーバ１００およびクライアント１０２が示されている。サーバ１００およびクライアント１０２は、ＨＴＴＰを含むさまざまなプロトコルを使用して、ネットワーク１０４を介して通信することができる。サーバ１００は、ＡＳＰ．ＮＥＴサーバとすることができ、ダイナミックウェブページの形のダイナミックコンテンツをクライアント１０２に配信することができる。サーバには、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１０６およびカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙ１１４を含むさまざまなクラスおよびモジュールが含まれる。サーバ１００には、サーバ１００の物理メモリ内または他の普通の記憶位置に配置することができるキャッシュ１１０も含まれる。
【００３１】
サーバ１００は、リンク１２３によってデータベース１１２に結合される。データベース１１２は、たとえばＳＱＬデータベースまたはＯｒａｃｌｅデータベースなどの適切なデータベースとすることができる。本発明の他の実施形態では、データベース１１２によって、ＸＭＬサービスまたは他のデータの供給源を表すことができる。
【００３２】
実例として、クライアント１０２によって、あるコンテンツをサーバ１００に要求する。たとえば、クライアント１０２は、サーバ１００にウェブページを要求するＵＲＬにアクセスすることができる。サーバ１００は、キャッシュ１１０を調べて、要求されたコンテンツ（たとえば、ウェブページ内のデータ）がキャッシュ１１０にあるかどうかを判定する。コンテンツがキャッシュ１１０にない場合には、データベースインターフェースモジュール１０８によって、データベース１１２にそのコンテンツが要求される。適当な時に、たとえばコンテンツ１３２などのコンテンツが、取り出され、データベースインターフェースモジュール１０８に返される。
【００３３】
代替案では、要求されたコンテンツを、ある計算される値またはデータベース１１２などのデータベースから取り出されたコンテンツのある操作とすることができる。データベースインターフェースモジュール１０８によって、適当にコンテンツが計算または操作される場合がある。その後、コンテンツは、たとえば１つまたは複数のＨＴＴＰメッセージで、クライアント１０２に送信される。コンテンツを、Ｃａｃｈｅ．Ｉｎｓｅｒｔメソッドを使用してキャッシュ１１０に追加することもできる。Ｃａｃｈｅ．Ｉｎｓｅｒｔメソッドでは、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラス１０６から派生されたカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４によって定義されるカスタム依存関係を指定する。
【００３４】
コンテンツがキャッシュ１１０に残っている間は、そのコンテンツを要求するすべてのクライアントに、そのコンテンツをより効率的に配信することができる。コンテンツは、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４によってＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄメソッドなどのメソッドが呼び出されるまで、キャッシュ１１０内に残っている。コンテンツは、ＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄメソッドの呼出し時にキャッシュから消去される。クライアントによるそのコンテンツに関する後続の要求は、そのコンテンツが、データベース１１２から再フェッチされ、かつ／またはデータベースインターフェースモジュール１０８によって再計算されることを必要とする。
【００３５】
カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４によって、データベース１１２に変更がある時に、キャッシュ１１０を消去させることができる。この例では、データベース１１２からのデータのフェッチがリソース集中型になる可能性があるが、その一方で、変更に関するデータベース１１２のポーリングでは、より少ないリソースが使用される。データベース１１２に、データベーステーブル１１６などのデータベース１１２内の情報を保管するデータベーステーブルを含めることができる。もう１つのデータベーステーブル１１７に、さらに、データベーステーブル１１６内の情報に対する変更が行われたかどうかを示すフラグエントリ１１８を含めることができる。データベーステーブル１１７に、データベース内の、カスタム依存関係を有する他のテーブルのフラグを含めることができる。一実施形態で、フラグエントリ１１８を増分式とし、データベーステーブル１１６内の各変更によって、フラグエントリ１１８の値が増分式に増やされるようにすることができる。フラグエントリ１１８の増加が検出される時にキャッシュエントリを除去するように、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙ１１４を設計することができる。
【００３６】
図２を参照すると、依存関係エントリを挿入する方法を示す流れ図が示されている。図２の方法には、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスにアクセスする動作が含まれる（動作２０２）。動作２０２に、サーバコンピュータシステムによって拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラス１０６にアクセスすることを含めることができる。たとえば、サーバ１００によって、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１０６にアクセスすることができる。サーバ１００は、ウェブページ開発者によって開発された命令実行の結果として、他のソフトウェア開発者によって開発された命令の実行の結果として、またはあるプログラムモジュールの一部として、ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１０６にアクセスすることができる。
【００３７】
図２の方法には、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスからカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスを派生することが含まれる（動作２０４）。動作２０４に、サーバコンピュータシステムによって拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙベースクラスからカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスを派生することを含めることができる。たとえば、サーバ１００によって、拡張可能ＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１０６からカスタマイズされたキャッシュ依存関係１１４を派生することができる。サーバ１００は、ウェブページ開発者によって開発された命令実行の結果として、他のソフトウェア開発者によって開発された命令の実行の結果として、またはあるプログラムモジュールの一部として、カスタマイズされたキャッシュ依存関係１１４を派生させて、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙを作成することができる。サーバ１００によって、温度計など、条件が変化した時に必ずイベントをトリガする、コンピュータに接続された外部センサ、試合の得点が変化する時に必ず変化をトリガするスポーツスコアボードプログラム、ネットワーク構成が変化する（コンピュータがネットワークに追加されるか除去されるなど）時にかならずイベントをトリガするネットワーク管理プログラム、ディレクトリが変化する（人が追加または除去されるなど）時にかならずイベントをトリガするディレクトリプログラムなどを含むがこれに制限されない複数のソースからカスタマイズされたキャッシュ依存関係１１４を派生させることもできる。
【００３８】
図２の方法に、コンテンツへのアクセスが含まれる（動作２０６）。動作２０６に、クライアントコンピュータシステムへの配信のためにウェブページに含まれるコンテンツにサーバコンピュータシステムによってアクセスすることを含めることができる。たとえば、サーバ１００によって、クライアント１０２に配信されるウェブページに含まれるコンテンツにアクセスすることができる。コンテンツのアクセスに、コンテンツの作成または操作を含めることができる。コンテンツは、たとえばデータベースおよびウェブサービスからなど、さまざまな異なる記憶位置からアクセスすることができる。たとえば、サーバによって、データベース１１２に保管されたデータにアクセスすることができる。データベースインターフェースモジュール１０８または他の適切なモジュールによって、ウェブページに含めるためにデータを適当にフォーマットすることができる。
【００３９】
図２の方法に、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙに関連するキャッシュエントリを作成する動作が含まれる（動作２０８）。動作２０８に、サーバコンピュータシステムによって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙに関連するキャッシングされるエントリを作成することを含めることができる。たとえば、サーバ１００によって、カスタマイズされたキャッシュ依存関係１１４に関連するキャッシュエントリを作成することができる。キャッシュエントリは、一実施形態で、サーバ１００によって行われる変数定義ステートメント（たとえば、上で説明した命令の行５０に似たもの）によって作成される。
【００４０】
図２の方法に、キャッシュエントリをキャッシュに挿入する動作が含まれる（動作２１０）。動作２１０に、サーバコンピュータシステムによって、キャッシングされるエントリをサーバコンピュータシステムに配置されたキャッシュに挿入することを含めることができる。たとえば、サーバ１００によって、キャッシュエントリをキャッシュ１１０に挿入することができる。キャッシュエントリをキャッシュに挿入し、キャッシングされるエントリ（したがって、キャッシングされるコンテンツ）の有効性が、カスタマイズされた依存関係に依存するようにすることができる。たとえば、サーバ１００によって、カスタマイズされたキャッシュ依存関係１１４から生ずる依存関係に依存するキャッシュエントリをキャッシュ１１０に挿入することができる。
【００４１】
図３を参照すると、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙを使用してキャッシュエントリを無効化する方法が示されている。図３の方法には、カスタマイズされたキャッシュ依存関係のインスタンスによってセットされたカスタム依存関係条件を監視する動作が含まれる（動作３０２）。動作３０２に、サーバコンピュータシステムによって、サーバコンピュータシステムで実装されるカスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラスのインスタンスによってセットされるカスタム依存関係条件を監視することを含めることができる。たとえば、サーバ１００によって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４のインスタンスによってセットされるカスタム依存関係条件を監視することができる。カスタマイズされた依存関係条件は、たとえばデータベースの内容の変化、ウェブサービスによって提供されるコンテンツの変化などのイベントの発生とすることができる。たとえば、サーバ１００によって、データベーステーブル１１６の内容の変化についてフラグエントリ１１８を監視することができる。カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４が、集約依存関係に関連する時には、複数のカスタム依存関係条件を監視することができる。
【００４２】
図３の方法には、カスタム依存関係条件が満足されたかどうかを判定する動作が含まれる（動作３０４）。動作３０４に、サーバコンピュータシステムによって、カスタマイズされたキャッシュ依存関係に関連するカスタム依存関係条件が満足されたかどうかを判定することを含めることができる。たとえば、サーバ１００によって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４に関連するカスタム依存関係条件が満足されたかどうかを判定することができる。カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４が、集約依存関係に関連する時には、サーバ１００によって、複数のカスタム依存関係条件の各カスタム依存関係条件が満足されたかどうかを判定することができる。
【００４３】
いくつかの実施形態で、サーバ１００によって、保管されたフラグエントリを現在のフラグエントリと比較することによって、カスタム依存関係条件が満足されたかどうかが判定される。たとえば、サーバ１００によって、フラグエントリ１１８の前に取り出され、保管された値を、フラグエントリ１１８の現在の値と比較することができる。フラグエントリ１１８が増分的である時に、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４によって、現在データベーステーブル１１７内にあるフラグエントリ１１８を、ある前の時にデータベーステーブル１１７に存在したフラグエントリと比較することができる。現在テーブル内にあるフラグエントリ１１８が、前の時にデータベーステーブル１１７に存在したフラグエントリより大きい場合に、カスタム依存関係条件（データベーステーブル１１６の内容の変化）が満足される。
【００４４】
カスタム依存関係条件が満足されない場合（動作３０４のＮＯ）、サーバ１００によって、カスタム依存関係条件をもう一度監視することができる。カスタム依存関係条件の監視は、指定された間隔（たとえば、５秒ごと）で、カスタム依存関係条件が満足されるまで、たとえば監視されるイベントが発生するまで（動作３０４のＹＥＳ）繰り返すことができる。
【００４５】
図３の方法には、カスタム依存関係条件が満足されたことを示すことが含まれる（動作３０６）。動作３０６に、カスタム依存関係条件が満足されたことをサーバコンピュータシステムに示すＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄメソッドを含めることができる。たとえば、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４のＮｏｔｉｆｙＤｅｐｅｎｄｅｎｃｙＣｈａｎｇｅｄメソッドによって、データベーステーブル１１６の内容が変化した時をサーバ１００に通知することができる。カスタム依存関係条件が満足されたことの通知によって、キャッシュエントリを消去しなければならないことをサーバ１００に示すことができる。
【００４６】
図３の方法に、キャッシュを消去することが含まれる（動作３０８）。動作３０８に、サーバコンピュータシステムによって、サーバコンピュータシステムでキャッシュエントリを消去することを含めることができる。たとえば、サーバ１００によって、キャッシュ１１０からキャッシュエントリを消去することができる。キャッシングされたエントリは、カスタマイズされたキャッシュ依存関係に関連するカスタム依存関係条件が満足されたことの通知の受け取りに応答して消去することができる。たとえば、サーバ１００によって、フラグエントリ１１８が増分されたことの通知の受け取りに応答して、データテーブル１１６に依存するキャッシュエントリを消去することができる。キャッシュエントリが消去される時に、コンピュータシステム１００によって、そのキャッシュエントリを維持するために消費されていたリソース（たとえば、システムメモリ）を解放することができる。たとえば、サーバコンピュータシステム１００によって、カスタマイズされたＣａｃｈｅＤｅｐｅｎｄｅｎｃｙクラス１１４に関連するＤｅｐｅｎｄｅｎｃｙＤｉｓｐｏｓｅメソッドを呼び出して、データベーステーブル１１６からの内容が保管されたキャッシュエントリに関するリソースを解放することができる。
【００４７】
本発明の実施形態に、下で詳細に述べるように、さまざまなコンピュータハードウェアを含む特殊目的または汎用のコンピュータを含めることができる。本発明の範囲内の実施形態に、コンピュータ実行可能命令またはデータ構造を担持するかこれを保管されたコンピュータ可読媒体も含めることができる。そのようなコンピュータ可読媒体は、汎用コンピュータまたは特殊目的コンピュータによってアクセス可能な使用可能な媒体とすることができる。たとえば、制限ではなく、そのようなコンピュータ可読媒体に、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光学ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは、コンピュータ実行可能命令の形の所望のプログラムコード手段またはデータ構造を担持するか保管するのに使用することができ、汎用コンピュータまたは特殊目的コンピュータによってアクセス可能な任意の他の媒体を含めることができる。情報が、ネットワークまたは別の通信接続（ハードワイヤド、無線、あるいはハードワイヤドまたは無線の組合せのいずれか）を介してコンピュータに転送または供給される時に、コンピュータは、その接続をコンピュータ可読媒体と正しく見なす。したがって、そのような接続のすべてを、正しくコンピュータ可読媒体と称する。上記の組合せも、コンピュータ可読媒体の範囲に含まれなければならない。コンピュータ実行可能命令に、たとえば、汎用コンピュータ、特殊目的コンピュータ、または特殊目的処理デバイスに、ある機能または機能の群を実行させる命令およびデータが含まれる。
【００４８】
図４および以下の説明は、本発明を実施できる適切なコンピューティング環境の短い全般的な説明を提供することを意図されたものである。必要ではないが、本発明を、ネットワーク環境内のコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の全般的な文脈で説明する。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。コンピュータ実行可能命令、関連するデータ構造、およびプログラムモジュールによって、本明細書で開示される方法のステップを実行するプログラムコード手段が表される。そのような実行可能命令の特定のシーケンスまたは関連するデータ構造によって、そのようなステップで説明された機能を実施する対応する動作の例が表される。
【００４９】
本発明を、パーソナルコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルな家庭電化、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、および類似物を含む多数のタイプのコンピュータシステム構成と共にネットワークコンピューティング環境で実践できることを、当業者は諒解するであろう。本発明は、通信ネットワークを介してリンクされた（ハードワイヤドリンク、無線リンク、またはハードワイヤドリンクと無線リンクの組合せのいずれかによって）ローカルおよびリモートの処理デバイスによってタスクが実行される分散コンピューティング環境で実践することもできる。分散コンピューティング環境では、プログラムモジュールを、ローカルとリモートの両方のメモリストレージデバイスに配置することができる。
【００５０】
図４に関して、本発明を実施する典型的システムに、普通のコンピュータ４２０の形の汎用コンピューティングデバイスが含まれ、コンピュータ４２０には、処理ユニット４２１、システムメモリ４２２、およびシステムメモリ４２２を含むさまざまなシステム構成要素を処理ユニット４２１に結合するシステムバス４２３が含まれる。システムバス４２３は、メモリバスまたはメモリコントローラ、周辺バス、およびさまざまなバスアーキテクチャのいずれかを使用するローカルバスを含む、複数のタイプのバス構造のいずれかとすることができる。システムメモリに、読取専用メモリ（ＲＯＭ）４２４およびランダムアクセスメモリ（ＲＡＭ）４２５が含まれる。起動中などにコンピュータ４２０内の要素の間での情報転送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）４２６を、ＲＯＭ４２４に保管することができる。
【００５１】
コンピュータ４２０に、磁気ハードディスク４３９から読み取り、これに書き込む磁気ハードディスクドライブ４２７、取外し可能磁気ディスク４２９から読み取るか、これに書き込む磁気ディスクドライブ４２８、ＣＤ−ＲＯＭまたは他の光学媒体などの取外し可能光ディスク４３１から読み取るか、これに書き込む光ディスクドライブ４３０も含めることができる。磁気ハードディスクドライブ４２７、磁気ディスクドライブ４２８、および光ディスクドライブ４３０は、それぞれハードディスクドライブインターフェース４３２、磁気ディスクドライブインターフェース４３３、および光ドライブインターフェース４３４によってシステムバス４２３に接続される。ドライブおよびそれに関連するコンピュータ可読媒体によって、コンピュータ４２０のコンピュータ実行可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージがもたらされる。本明細書に記載の典型的実施形態では、磁気ハードディスク４３９、取外し可能磁気ディスク４２９、および取外し可能光ディスク４３１が使用されるが、磁気カセット、フラッシュメモリカード、ディジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭ、および類似物を含む、データを保管する他のタイプのコンピュータ可読媒体を使用することができる。
【００５２】
オペレーティングシステム４３５、１つまたは複数のアプリケーションプログラム４３６、他のプログラムモジュール４３７、およびプログラムデータ４３８を含む１つまたは複数のプログラムモジュールを含むプログラムコード手段を、ハードディスク４３９、磁気ディスク４２９、光ディスク４３１、ＲＯＭ４２４、またはＲＡＭ４２５に保管することができる。ユーザは、キーボード４４０、ポインティングデバイス４４２、または、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナ、または類似物などの他の入力デバイス（図示せず）を介して、コンピュータ４２０にコマンドおよび情報を入力することができる。これらおよび他の入力デバイスは、しばしば、システムバス４２３に結合されたシリアルポートインターフェース４４６を介して処理ユニット４２１に接続される。代替案では、入力デバイスを、パラレルポート、ゲームポート、またはｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）などの他のインターフェースによって接続することができる。モニタ４４７または別のディスプレイデバイスも、ビデオアダプタ４４８などのインターフェースを介してシステムバス４２３に接続される。モニタのほかに、パーソナルコンピュータには、通常は、スピーカおよびプリンタなどの他の周辺出力デバイス（図示せず）が含まれる。
【００５３】
コンピュータシステム４２０は、たとえば、オフィス全体または会社全体のコンピュータネットワーク、イントラネット、および／またはインターネットなどのネットワークに接続可能である。コンピュータシステム４２０によって、そのようなネットワークを介して、たとえばリモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースなどの外部ソースとデータを交換することができる。
【００５４】
コンピュータシステム４２０に、ネットワークインターフェース４５３が含まれ、これを介して、コンピュータシステム４２０は、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。図４からわかるように、ネットワークインターフェース４５３によって、リンク４５１を介してリモートコンピュータ４８３とのデータの交換が実現される。リンク４５１は、ネットワークの一部を表し、リモートコンピュータ４８３は、ネットワークのノードを表す。たとえば、リモートコンピュータシステム４８３によって、コンピュータシステム４２０で構成されるウェブページのコンテンツを提供するデータベースを維持することができる。その一方で、コンピュータシステム４８３を、コンピュータシステム４２０で維持されるデータベースにコンテンツを要求したサーバコンピュータとすることができる。
【００５５】
同様に、コンピュータシステム４２０に、シリアルポートインターフェース４４６が含まれ、これを介して、コンピュータシステム４２０が、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。シリアルポートインターフェース４４６は、モデム４５４に接続され、これを介して、コンピュータシステム４２０が、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。その代わりに、モデム４５４を、適当なインターフェースを介してコンピュータシステム４２０に接続されるＤａｔａ  Ｏｖｅｒ  Ｃａｂｌｅ  Ｓｅｒｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（「ＤＯＣＳＩＳ」）モデムまたはディジタル加入者回線（「ＤＳＬ」）モデムとすることができる。しかし、図４からわかるように、シリアルポートインターフェース４４６およびモデム４５４によって、リンク４５２を介するリモートコンピュータシステム４９３とのデータの交換が実現される。リンク４５２は、ネットワークの一部を表し、リモートコンピュータシステム４９３は、ネットワークのノードを表す。たとえば、リモートコンピュータシステム４９３を、コンピュータシステム４２０にウェブページを要求するクライアントコンピュータシステムとすることができる。その一方で、コンピュータシステム４９３を、コンピュータシステム４２０にウェブページを供給するサーバコンピュータシステムとすることができる。
【００５６】
本発明を、その趣旨または本質的な特徴から逸脱せずに、他の特定の形で実施することができる。説明した実施形態は、すべての点で例示としてのみ解釈されねばならず、制限的に解釈されてはならない。したがって、本発明の範囲は、前述の説明によるのではなく、請求項によって示される。請求項の同等物の意味および範囲に含まれるすべての変更が、その範囲に含まれなければならない。
【図面の簡単な説明】
【００５７】
【図１】サーバサイドスクリプティングおよびカスタムキャッシュ依存関係を実施するウェブページサーバの例を示す図である。
【図２】キャッシュエントリをカスタム依存関係に依存させる方法の一実施形態を示す例の流れ図である。
【図３】カスタムキャッシュ依存関係に基づいてキャッシュエントリを消去する方法の一実施形態を示す例の流れ図である。
【図４】本発明の諸態様を実践することができる１つの適切な環境を示す絵図である。
【符号の説明】
【００５８】
１０２  クライアント
１０４  ネットワーク
１００  サーバ
１１０  キャッシュ
１１４  カスタムキャッシュ依存関係
１０６  キャッシュ依存関係
１０８  データベースインターフェースモジュール
４２４  ＲＯＭ
４２６  ＢＩＯＳ
４２５  ＲＡＭ
４３５  オペレーティングシステム
４３６  アプリケーションプログラム
４３７  他のプログラムモジュール
４３８  プログラムデータ
４２１  処理ユニット
４４８  ビデオアダプタ
４４７  モニタ
４２３  システムバス
４３２  ハードディスクドライブインターフェース
４３３  磁気ディスクドライブインターフェース
４３４  光ドライブインターフェース
４４６  シリアルポートインターフェース
４５３  ネットワークインターフェース
４３５  オペレーティングシステム
４３６  アプリケーションプログラム
４３７  他のプログラムモジュール
４３８  プログラムデータ
４４０  キーボード
４５４  モデム
４９３  リモートコンピュータ
４８３  リモートコンピュータ
【図１】
0004629371.tif 000002
【図２】
0004629371.tif 000003
【図３】
0004629371.tif 000004
【図４】
0004629371.tif 000005