| Oracle Application Server Web Cache 管理者ガイド 10gリリース2(10.1.2) B15770-04 |
|
この章では、OracleAS Web Cacheに無効化リクエストを送信する方法について説明します。
この章の項目は次のとおりです。
この項では、外部ソースから無効化リクエストを送信する方法を理解するために次の各項目について説明します。
キャッシュ内のオブジェクトを無効にするには、invalidator、ias_adminまたはadministratorアカウントから、無効化リスニング・ポートを介してHTTPのPOSTリクエストを送信します。
invalidatorアカウントは、無効化リクエストの送信を許可された管理者です。OracleAS Web Cacheサーバーのキャッシュ階層では、集中キャッシュまたはプロバイダ・キャッシュが、OracleAS Web Cacheのリモート・サーバーまたはサブスクライバ・サーバーのinvalidatorアカウント名およびパスワードを使用します。無効化リクエストは、無効にするオブジェクトおよびオブジェクトのサイト・ホスト名を指定します。サイト・ホスト名は、無効化リクエストの伝播元であるキャッシュのIPアドレスと比較されます。一致した場合、キャッシュは無効化リクエストを処理します。一致しなかった場合、リクエストは拒否されます。
ias_adminまたはadministratorアカウントは、通常、構成リクエストおよび管理リクエストをOracleAS Web Cacheに送信しますが、無効化リクエストの送信にも使用できます。ias_adminまたはadministratorアカウントは、invalidatorアカウントより多くの権限を許可されているため、ias_adminまたはadministratorアカウントが送信する無効化リクエストには、サイト・ホスト名の指定は不要です。Application Server Controlコンソールから送信する無効化リクエストにはadministratorアカウントを使用し、OracleAS Web Cache Managerから送信する無効化リクエストにはadministratorアカウントを使用します。
無効化メッセージを自動伝播する場合、OracleAS Web Cacheは、集中キャッシュとリモート・キャッシュまたはプロバイダ・キャッシュとサブスクライバ・キャッシュとの間のページ・リクエストの中で、階層登録プロセスの間に、エンコードされたinvalidatorパスワードを渡します。このHTTP通信は、ネットワーク傍受を受ける可能性が高くなります。保護されていない、セキュアでないネットワークの場合は、HTTPSポートを次のように構成してください。
関連項目
HTTP POSTリクエストは、eXtensible Markup Language構文で作成されます。XMLリクエストのボディの内容により、無効にするURLがキャッシュに指定されます。
OracleAS Web Cacheサーバーから別サーバーへの無効化メッセージの伝播は次のような配置において行われます。
OracleAS Web Cacheサーバーが階層化された構成をとっている場合、コンテンツが複数のサーバーでキャッシュされることもあります。
図13-1に、分散キャッシュ階層を示します。この例では、集中キャッシュが米国のオフィスに配置され、リモート・キャッシュが日本のオフィスに配置されています。集中キャッシュはWebアプリケーション・サーバーからコンテンツを格納し、リモート・キャッシュは集中キャッシュからコンテンツを格納します。すなわち、集中キャッシュは、日本のリモート・キャッシュに対してオリジナル・サーバーとして動作します。
コンテンツのリフレッシュのために、無効化メッセージが集中キャッシュに送信されると、一貫性を維持するために、無効化メッセージが集中キャッシュから日本のリモート・キャッシュに自動的に伝播されます。
図13-2に、ESIキャッシュ階層を示します。サブスクライバ・キャッシュがEdge Side Includesアセンブリを実行します。プロバイダ・キャッシュが、ESIプロバイダ・サイトwww.providersite1.comおよびwww.providersite2.com用のESIフラグメントをローカルにキャッシュします。ESIページ・アセンブリの間、サブスクライバ・キャッシュがESIフラグメント用のプロバイダ・キャッシュに接続します。
コンテンツのリフレッシュのために、無効化メッセージが集中(プロバイダ)キャッシュに送信されると、一貫性を維持するために、無効化メッセージが集中(プロバイダ)キャッシュからリモート(サブスクライバ)キャッシュに自動的に伝播されます。
集中(プロバイダ)キャッシュが該当コンテンツのみを無効にするように、リモート(サブスクライバ)キャッシュは、無効化メッセージの伝播元であるプロバイダ・キャッシュのIPアドレスを使用して、無効化メッセージに指定されているサイト・ホスト名を確認します。一致した場合、リモート(サブスクライバ)キャッシュは無効化リクエストを処理します。一致しなかった場合、リクエストは拒否されます。分散キャッシュ階層の場合、集中キャッシュおよびリモート・キャッシュのサイト・ホスト名は一意になるように構成し、不一致が発生しないようにする必要があります。
|
関連項目
|
キャッシュ・クラスタの場合、管理者は、無効化メッセージをすべてのキャッシュ・クラスタ・メンバーに伝播するか、各キャッシュ・クラスタ・メンバーに個別に送信するかを選択できます。
OracleAS Web Cacheが無効化メッセージを伝播すると、無効化リクエストを受信したキャッシュは、そのリクエストの無効化コーディネータとして動作します。コーディネータは、無効化メッセージを他のクラスタ・メンバーに伝播します。そして、コーディネータはすべてのクラスタ・メンバーからレスポンスが返されるのを待ちます。伝播が完了すると、コーディネータは各クラスタ・メンバーのメンバー名、無効化リクエストのステータス、無効になったオブジェクトの数を示すメッセージを送信元に返します。
通信できないクラスタ・メンバーがある場合には、OracleAS Web Cacheからエラー・メッセージが返され、無効化メッセージは伝播されません。
キャッシュ・クラスタのアップグレード時には、キャッシュ・クラスタ・メンバーを1つずつアップグレードします。キャッシュはリクエストに応答し続けます。ただし、その他のクラスタ・メンバーの構成のバージョンが異なるため、キャッシュは、異なるバージョンで動作しているキャッシュ・クラスタ・メンバーには無効化メッセージを転送しません。かわりに、リクエストされたオブジェクトがこのキャッシュか、構成のバージョンが同じクラスタ・メンバーによってキャッシュされない場合、OracleAS Web Cacheはリクエストをオリジナル・サーバーに転送します。
キャッシュ・クラスタ・メンバーが実行しているOracleAS Web Cacheのリリースが異なっても、オブジェクトを無効化し、無効化をその他のクラスタ・メンバーに伝播できますが、無効化メッセージは、旧リリースのOracleAS Web Cacheで動作しているキャッシュから送信される必要があります。
|
関連項目
|
図13-3に示すように、無効化リクエストは、次のいずれかの方法を使用して送信されます。
telnetを使用)
特に、次のいずれかの方法を使用できます。
HTTP POSTリクエストで無効化リクエストを送信する際、OracleAS Web Cacheのホスト名、無効化リスニング・ポート番号および無効化リクエストを指定します。
たとえば、telnetを使用している場合は、次の手順で無効化リクエストを送信します。
telnet web_cache_host invalidation_port
POSTメッセージ・ヘッダーを指定し、invalidatorアカウントを認証します。
POST /x-oracle-cache-invalidate http/1.0|1 Authorization: BASIC <base64 encoding of invalidator:invalidator_password> content-length:#bytes
次に、Authorization行の例を示します。
Authorization: BASIC aW52YWxpZGF0b3I6aW52YWxpZGF0b3I=
この例では、aW52YWxpZGF0b3I6aW52YWxpZGF0b3I=は、エンコードされたinvalidatorユーザー名とパスワード(invalidator:invalidator)です。
|
関連項目
|
無効化リクエストの構文は、次の各項で説明します。
次の構文を使用して、絶対パスおよびファイル名が含まれている絶対URL内のオブジェクトを無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECT> <BASICSELECTOR URI="URL"/> <ACTION REMOVALTTL="TTL"/> <INFO VALUE="value"/> </OBJECT> </INVALIDATION>
次の構文を使用して、より高度な無効化セレクタに基づいてオブジェクトを無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name:port" METHOD="HTTP_request_method" BODYEXP="HTTP_body"/> <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="TTL"/> <INFO VALUE="value"/> </OBJECT> </INVALIDATION>
有効な無効化リクエストのボディの先頭は、次のとおりです。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
最初の行ではXMLのリリース1.0が指定されます。2行目では、リクエストが、WCSinvalidation.dtdファイルをXML文書タイプとして使用する無効化リクエストであることを示します。WCSinvalidation.dtdは、無効化リクエストおよびレスポンスの文法を定義するDocument Type Definition(DTD)です。
次のことに注意してください。
<?xml」の前に空白を入れないでください。
"internal:///WCSinvalidation.dtd"のかわりに次のパスを使用します。
"http://www.oracle.com/webcache/90400/WCSinvalidation.dtd"
ルート要素INVALIDATIONには、表13-1で説明されている属性と要素が含まれます。
| 無効化処理用の要素/属性 | 説明 |
|---|---|
|
|
XML文書タイプとして使用する
リリース9.0. |
|
|
|
|
|
可能な
|
|
|
無効化リクエストの必須要素。リクエスト内で複数の |
|
|
|
|
|
接頭辞は、正規表現の予約語を含め、文字どおり解釈されます。予約語には、ピリオド( |
|
|
正規表現の使用が可能です。正規表現文字を文字どおり解釈するには、円記号( 注意:
|
|
|
|
|
|
|
|
|
注意: 無効化リクエストが送信されると、OracleAS Web Cacheは |
|
|
無効化リクエストのオプションの要素。次の属性を使用します。
複数のバージョンのオブジェクトとセッション・キャッシュ・ポリシーの両方に対して間違って指定されたCookieを指定する場合、無効化はこのCookieの発生に基づきます。過度の無効化を回避するには、複数のバージョンのオブジェクトとセッション・キャッシュ・ポリシーに対して異なるCookieを構成します。 関連項目
|
|
|
無効化リクエストのオプションの要素。次の属性を使用します。
関連項目: 複数バージョンのオブジェクトに対するキャッシュ・ルールの作成方法は、「作業1: キャッシュ・ルールの作成」を参照してください。 |
|
|
無効化リクエストのオプションの要素。次の属性を使用します。
関連項目:
|
|
|
|
|
|
[13/Jul/2005:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'INFO_comment' has returned with status 'status'; number of objects invalidated: 'number'. |
BASICSELECTOR無効化リクエストの無効化レスポンスは、次のフォーマットで返されます。
<?xml version="1.0"?>
<!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd">
<INVALIDATIONRESULT VERSION="WCS-1.1">
<SYSTEM>
<SYSTEMINFO NAME="name" VALUE="value"/>
</SYSTEM>
<OBJECTRESULT>
<BASICSELECTOR URI="URL">
</BASICSELECTOR>
<RESULT ID="ID" STATUS="status" NUMINV="number"/>
<INFO VALUE="value"/>
</OBJECTRESULT>
</INVALIDATIONRESULT>
ADVANCEDSELECTOR無効化リクエストの無効化レスポンスは、次のフォーマットで返されます。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name:port" METHOD="HTTP_request_method" BODYEXP="HTTP_body"/> <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> <RESULT ID="ID" STATUS="status" NUMINV="number"/> <INFO VALUE="value"/> </OBJECTRESULT> </INVALIDATIONRESULT>
有効な無効化レスポンスの先頭は、次のとおりです。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd">
最初の行ではXMLのリリース1.0が指定されます。2行目では、レスポンスが、WCSinvalidation.dtdファイルをXML文書タイプとして使用する無効化レスポンスであることが示されます。
ルート要素INVALIDATIONRESULTには、表13-2で説明されている属性と要素が含まれます。BASICSELECTORおよびADVANCEDSELECTORについては、表13-1で説明されています。
無効化をテストするには、次の構文を使用して、無効にするBASICSELECTORオブジェクトのリストをプレビューします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEW VERSION="WCS-1.1" STARTNUM="start_number" MAXNUM="max_number"> <BASICSELECTOR URI="URL"/> </INVALIDATIONPREVIEW>
無効にするADVANCEDSELECTORオブジェクトのリストをプレビューするには、次の構文を使用します。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEW VERSION="WCS-1.1" STARTNUM="start_number" MAXNUM="max_number"> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name:port" METHOD="HTTP_request_method" BODYEXP="HTTP_body" <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> </INVALIDATIONPREVIEW>
有効な無効化プレビュー・リクエストのボディの先頭は、次のとおりです。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd">
最初の行ではXMLのリリース1.0が指定されます。2行目では、リクエストが、WCSinvalidation.dtdファイルをXML文書タイプとして使用する無効化プレビュー・リクエストであることが示されます。
ルート要素INVALIDATIONPREVIEWには、表13-3で説明されている属性が含まれます。BASICSELECTORおよびADVANCEDSELECTORについては、表13-1で説明されています。
プレビュー・リクエストに対する無効化プレビュー・レスポンスは、次のフォーマットで返されます。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEWRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEWRESULT VERSION="WCS-1.1" STATUS="status" NUMURLS="number" TOTALNUMURLS="total_number"> <SELECTURL VALUE="URL"> </SELECTEDURL> </INVALIDATIONPREVIEWRESULT>
有効な無効化プレビュー・レスポンスの先頭は、次のとおりです。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEWRESULT SYSTEM "internal:///WCSinvalidation.dtd">
最初の行ではXMLのリリース1.0が指定されます。2行目では、レスポンスが、WCSinvalidation.dtdファイルをXML文書タイプとして使用する無効化プレビュー・レスポンスであることが示されます。
次のことに注意してください。
<?xml」の前に空白を入れないでください。
"internal:///WCSinvalidation.dtd"のかわりに次のパスを使用します。
"http://www.oracle.com/webcache/90400/WCSinvalidation.dtd"
ルート要素INVALIDATIONPREVIEWRESULTには、表13-4で説明されている属性と要素が含まれます。BASICSELECTORおよびADVANCEDSELECTORについては、表13-1で説明されています。
Application Server ControlコンソールまたはOracleAS Web Cache Managerの使いやすいインタフェースにより、キャッシュされたオブジェクトを簡単に無効にできます。メッセージの仕組みは、telnetの例とよく似ています。これら3つのインタフェースの1つを使用する場合の利点は、管理者が複雑なHTTPおよびXMLフォーマットを使用する必要がなく、その結果、エラーが減少するという点です。管理者が指定する必要があるのは、無効にするオブジェクトと、オブジェクトを無効にする方法のみです。
Application Server Controlコンソールには、無効化プロセスについて段階的に説明するウィザードが用意されています。はじめに、Web Cacheホーム・ページ→「管理」タブ→「操作」→「無効化」にナビゲートします。詳細は、ウィザード・ページのオンライン・ヘルプを参照してください。
OracleAS Web Cache Managerを使用すると、1つのオブジェクトに対する基本無効化リクエストか、複数のオブジェクトに対する拡張無効化リクエストのいずれかを送信できます。詳細は、次の各項目を参照してください。
「Basic Content Invalidation」ページまたは「Advanced Content Invalidation」ページから無効化リクエストを発行したときに次のエラーが発生した場合は、
無効化ポートのプロパティを変更した場合は、
再起動の方法は、第7章を参照してください。
注意
cacheサーバー・プロセスまたはadminサーバー・プロセスを再起動してください。
Internal error: can't connect to OracleAS Web Cache Invalidation Listening Port
cacheサーバー・プロセスを再起動してください。「Security」ページでadministratorアカウントのパスワードを変更した場合は、cacheサーバー・プロセスとadminサーバー・プロセスを再起動してください。いずれの構成変更の場合も、cacheサーバー・プロセスが再起動されるまで、無効化リクエストではエラーが返されます。
OracleAS Web Cache Managerを使用して基本無効化リクエストを送信するには、次の手順を実行します。
右ペインに「Basic Content Invalidation」ページが表示されます。
無効化基準を満たすオブジェクトが指定した数よりも少ない場合は、OracleAS Web Cacheには、基準を満たすオブジェクトのみのURLがリストされます。
無効化基準を満たすオブジェクトが指定した数よりも多い場合は、OracleAS Web Cacheにより、リクエストした数のオブジェクトのURLがリストされます。無効化基準を満たすオブジェクトの合計数も返されます。追加オブジェクトのURLリストを取得するには、次のオブジェクト・セットの開始を指定する異なる「From」数を含む別のプレビュー・リクエストを送信します。
無効化基準を満たすオブジェクトが「Invalidation Preview Results」メッセージ・ボックスにリスト表示されます。OracleAS Web Cache Managerでは、有効なオブジェクトのみがリストされます。キャッシュには、期限切れまたは無効にされたオブジェクトが含まれることもありますが、それらはリストされません。
無効にするオブジェクトがリストされている場合は、次の手順に進みます。リストされていない場合は、無効化基準を変更してもう一度プレビューします。
OracleAS Web Cacheにより、無効化リクエストが処理され、無効化ステータスおよび無効になったオブジェクト数が表示されている「Cache Cleanup Result」ダイアログ・ボックスが返されます。次の図はこのダイアログ・ボックスを示しています。
キャッシュ・クラスタ環境では、「Propagate Invalidation」が有効になっている場合、OracleAS Web Cacheは無効化コーディネータとして機能する1つのクラスタ・メンバーに、無効化リクエストを送信します。コーディネータは、無効化リクエストを他のクラスタ・メンバーに伝播します。すべてのクラスタ・メンバーに対する無効化が完了すると、OracleAS Web Cacheは「Cache Cleanup」ボックスを返します。このボックスには、クラスタ・メンバーごとに、キャッシュ名、無効化リクエストのステータスおよび無効にされたオブジェクト数がリストされます。
|
関連項目
|
OracleAS Web Cache Managerを使用して拡張無効化リクエストを送信するには、次の手順を実行します。
右ペインに「Advanced Content Invalidation」ページが表示されます。
http|https://host_name:port/path/filenameまたは"/"で始まり、"/"で終わる必要があります。 host_name:portはオプションです。「Host Name」フィールドで、サイトのホスト名とポートも指定できます。
接頭辞は、正規表現の予約語を含め、文字どおり解釈されます。予約語には、ピリオド(.)、疑問符(?)、アスタリスク(*)、大カッコ([])、中カッコ({})、カレット(^)、ドル記号($)および円記号(¥)が含まれます。
host_name:port)を指定します。HTTPのデフォルト・ポートはポート80です。「URL Path Prefix」にhttp|https://host_name:port/path/filenameが含まれていない場合、このフィールドは必須です。
GET」または「POST」)を選択します。デフォルト値はGETです。
値が入力されなかった場合、「URL Path Prefix」内のすべてのオブジェクトが無効になります。
POSTボディを入力し、次にサブストリング一致の場合は「substring」を、正規表現一致の場合は「regular expression」を選択します。
Surrogate-Key」レスポンス・ヘッダー・フィールドの検索キー名を「Key」フィールドに入力します。
無効化基準を満たすオブジェクトが指定した数よりも少ない場合は、OracleAS Web Cacheには、基準を満たすオブジェクトのみのURLがリストされます。
無効化基準を満たすオブジェクトが指定した数よりも多い場合は、OracleAS Web Cacheにより、リクエストした数のオブジェクトのURLがリストされます。無効化基準を満たすオブジェクトの合計数も返されます。追加オブジェクトのURLリストを取得するには、次のオブジェクト・セットの開始を指定する異なる「From」数を含む別のプレビュー・リクエストを送信します。
無効化基準を満たすオブジェクトが「Invalidation Preview Results」メッセージ・ボックスにリスト表示されます。OracleAS Web Cache Managerでは、有効なオブジェクトのみがリストされます。キャッシュには、期限切れまたは無効にされたオブジェクトが含まれることもありますが、それらはリストされません。
無効にするオブジェクトがリストされている場合は、次の手順に進みます。リストされていない場合は、無効化基準を変更してもう一度プレビューします。
OracleAS Web Cacheにより、無効化リクエストが処理され、無効化ステータスおよび無効になったオブジェクト数が表示されている「Cache Cleanup」ダイアログ・ボックスが返されます。
無効化リクエストは、Webサイトのアプリケーション・ロジックから、またはWebページの設計に使用するコンテンツ管理アプリケーションから送信することも可能です。
OracleAS Web Cacheには、次の実装可能なApplication Program Interface(API)が含まれています。
jawc.jar(Java無効化API)
wxvutil.sqlおよびwxvappl.sql(PL/SQL無効化API)これらのAPIは、UNIXの場合は$ORACLE_HOME/webcache/toolkit ディレクトリ、Windowsの場合はORACLE_HOME¥webcache¥toolkitディレクトリにあります。
また、OracleAS Web Cacheには、無効化リクエストを生成する次のサンプル・コードも付属されています。次の例に従って無効化ツールを作成し、自作のアプリケーションで使用できます。
EncodeBase64.java(Base 64エンコーディングを使用したパスワードのエンコード)
invalidate.c(Cソース)
Invalidate.javaまたはWCSInvalidate.java(Javaソース)
invalidate.sh(telnetセッションを使用してオブジェクトを無効にするシェル・スクリプト)
invalidate.pl(PERLソース)
Invalidate.sql(PL/SQLソース)
これらのファイルは、UNIXの場合は$ORACLE_HOME/webcache/examplesディレクトリ、Windowsの場合はORACLE_HOME¥webcache¥examplesディレクトリにあります。
データベース・トリガーは、表への行の追加など、特定の状況が発生した場合に実行される、データベースに格納されたプロシージャです。トリガーを使用して無効化リクエストを送信することが可能です。これを行うには、オラクル社が提供するUTL_TCPパッケージを使用して、データベース・トリガーによって無効化リクエストを送信します。
多くのWebサイトで、スクリプトを使用して、新しいコンテンツがデータベースやファイル・システムにアップロードされています。たとえば、大型のオンライン書店の場合、1日1回、PERLスクリプトを実行し、新刊の追加や価格変更をカタログ・データベースに一括してロードすることがあります。その書店では、価格変更および在庫状況を、現在OracleAS Web Cacheにキャッシュされているアイテム・ビューおよび検索結果にすぐ反映させるとします。これを実行するには、Perlスクリプトを変更して、一括ロード処理の完了後にすべてのカタログ・ビューおよび検索結果を無効にする無効化リクエストをスクリプトからキャッシュに送信するようにすることが可能です(無効化リクエストには、データ変更の影響を受ける検索ページまたはアイテム・ビューをすべて個別にリストする必要はありません)。OracleAS Web Cacheのパフォーマンス保証機能により、管理者が一度に大量のコンテンツを無効にすることが可能で、コンテンツの一部しか変更されていない場合にカタログのコンテンツすべてを無効にしてもパフォーマンスは低下しません。
この項には、次の無効化リクエストの例が含まれます。
この項の例ではPOSTメソッドを使用する必要があり、ヘッダーのcontent_length: #bytes部分でバイト数(文字数)を送信する必要があります。content_length: #bytes行の後、XMLリクエストまたはBODY情報の前に改行を1回入れる必要があるため、注意してください。
次のリクエストにより、ファイル/images/logo.gifを無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <ACTION/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT>
次のリクエストにより、BASICSELECTOR要素を使用して、/contacts/contacts.htmlに完全一致するオブジェクトを無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="http://www.company.com:80/contacts/contacts.html"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
このリクエストは、ADVANCEDSELECTOR要素を使用した次のリクエストと同じです。このリクエストでは、HOST属性でサイト情報が指定されています。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/contacts/" URIEXP="^/contacts/contacts¥.html$" HOST="www.company.com:80"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
2番目のリクエストでは、URIPREFIX属性でサイト情報が指定されています。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="http://www.company.com/contacts/" URIEXP="^/contacts/ contacts¥.html$"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
ADVANCEDSELECTOR要素では、URIPREFIX属性が使用されます。この属性は、ディレクトリ構造の横断に使用されます。無効化が正しいツリー・レベルに到達するのが早いほど、無効化プロセスは早く完了します。これら2つの例のうち、BASICSELECTOR要素を使用したリクエストではディレクトリ構造の横断が実行されないため、より効率的です。
次のリクエストにより、summary.jspおよびsummary.gifの2つのオブジェクトを無効にします。さらに、このリクエストにより、コメント"summary.jsp"および"summary.gif"が、無効化の結果およびイベント・ログに含まれます。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/global/sales/" URIEXP="summary.jsp¥?year=2001" HOST="www.company.com:80"/> <COOKIE NAME="group" VALUE="asia"/> </ADVANCEDSELECTOR> <ACTION /> <INFO VALUE="summary.jsp"/> </OBJECT> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/image/" URIEXP="summary.*¥.gif$" HOST="www.company.com:80"/> <INFO VALUE="summary.gif"/> <ACTION /> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/global/sales/" URIEXP="summary.jsp¥?year=2001" HOST="www.company.com:80"/> <COOKIE NAME="group" VALUE="asia" /> </ADVANCEDSELECTOR> <RESULT ID="1" STATUS="SUCCESS" NUMINV="2"/> <INFO VALUE="summary.jsp"/> </OBJECTRESULT> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/image/" URIEXP="summary.*¥.gif$" HOST="www.company.com:80"/> </ADVANCEDSELECTOR> <RESULT ID="2" STATUS="SUCCESS" NUMINV="14"/> <INFO VALUE="summary.gif"/> </OBJECTRESULT> </INVALIDATIONRESULT>
イベント・ログには、次のメッセージが書き込まれます。
[13/Jul/2005:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'summary.jsp' has returned with status 'SUCCESS'; number of objects invalidated: '2'. . . . [13/Jul/2005:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'summary.gif' has returned with status 'SUCCESS'; number of objects invalidated: '14'.
次のリクエストにより、/images/ディレクトリ内のオブジェクトをすべて無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/images/" HOST="www.company.com:80"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/images/" HOST="www.company.com:80"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="125"/> </OBJECTRESULT> </INVALIDATIONRESULT>
次のリクエストにより、/contacts/ディレクトリ内に存在し、ファイル名が.htmlで終了し、custという名前で値がoracleであるCookieを使用するオブジェクトをすべて無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/contacts/" URIEXP="¥.html$" HOST="www.company.com:80"/> <COOKIE NAME="cust" VALUE="oracle"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/contacts"/> URIEXP="¥.html$" HOST="www.company.com:80"/> <COOKIE NAME="cust" VALUE="oracle"/> </ADVANCEDSELECTOR> <RESULT ID="1" STATUS="SUCCESS" NUMINV="45"/> </OBJECTRESULT> </INVALIDATIONRESULT>
次のリクエストにより、/内のオブジェクトをすべて無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="17"/> </OBJECTRESULT> </INVALIDATIONRESULT>
URIPREFIXおよびURIEXP属性の関係を理解しやすいよう、次の例を使用して説明します。
次の構文は、/cec/cstage/graphic*ディレクトリ内のsample.gifファイルを無効にします。
<ADVANCEDSELECTOR URIPREFIX="/cec/cstage/"URIEXP="graphic.*/sample¥.gif"></ADVANCEDSELECTOR>
"graphic.*/sample¥.gif"で使用されている「.*」は、正規表現の文字で、graphicで始まるすべてのディレクトリに一致します。"sample¥.gif"で使用されている「.」は、文字どおり解釈されるよう、エスケープされています。
次の構文は、graphic*という名前のディレクトリを見つけるよう、OracleAS Web Cacheに指示します。
<ADVANCEDSELECTOR URIPREFIX="/cec/cstage/graphic*/" URIEXP="sample¥.gif"HOST="www.company.com:80"/></ADVANCEDSELECTOR>
次の構文は、/cec/cstage?ecaction=viewitem内に含まれているオブジェクトを無効にします。
<ADVANCEDSELECTOR URIPREFIX="/cec/" URIEXP="cstage¥?ecaction=viewitem" HOST="www.company.com:80"/></ADVANCEDSELECTOR>
「?」は円記号でエスケープされている点に注意してください。
/cec/cstage?ecaction=viewitem&zip=94405および/cec/cstage?ecaction=viewitem&zip=94305などのURLは一致し、無効になりますが、/usa/cec/cstage?ecaction=viewitem&zip=94209は一致せず、無効になりません。
次のリクエストは、サブストリング/post/およびhtmを一致させて、/の下にあるすべてのオブジェクトを無効にします。このリクエストは、さらに、コメント"remove-htm-under-all-post-dir"が無効化の結果とイベント・ログに含まれるようにします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/post/"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="htm"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0" /> <INFO VALUE="remove-htm-under-all-post-dir"/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/post/"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="htm"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="52"/> <INFO VALUE="remove-htm-under-all-post-dir"/> </OBJECTRESULT> </INVALIDATIONRESULT>
イベント・ログには、次のメッセージが書き込まれます。
[13/Jul/2005:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'remove-htm-under-all-post-dir has returned with status 'SUCCESS'; number of objects invalidated: '12'.
次のリクエストは、サブストリング/view_building.asp/と、埋め込まれているURLパラメータ値ペアbuilding=8およびfloor=10を一致させて、/corporate/asp/の下にあるすべてのオブジェクトを無効にします。このリクエストはさらに、コメント"remove-view-building8-10th-floor"が無効化の結果とイベント・ログに含まれるようにします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/corporate/asp/" HOST="www.company.com:80"> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/view_building.asp"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="building=8"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="floor=10"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0" /> <INFO VALUE="remove-view-building8-10th-floor"/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/view_building.asp"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="building=8"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="floor=10"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="3"/> <INFO VALUE="remove-view-building8-10th-floor"/> </OBJECTRESULT> </INVALIDATIONRESULT>
イベント・ログには、次のメッセージが書き込まれます。
[13/Jul/2005:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932 167,0] Invalidation with INFO 'remove-view-building8-10th-floor' has returned with status 'SUCCESS'; number of objects invalidated: '3'.
次のリクエストにより、次の項目に一致する/pls/publicuser/内のすべてのオブジェクトを無効にします。
/pls/publicuser/!MODULE.wwpob_page.show
x-oracle-cache-userおよび値PUBLICUSER
template_id=33,31345を含むSurrogate-Keyレスポンス・ヘッダー・フィールド
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/pls/publicuser/" HOST="www.company.com:80" METHOD="POST"> <OTHER NAME="SEARCHKEY" VALUE="template_id=33,31345"/> <HEADER NAME="x-oracle-cache-user" VALUE="PUBLICUSER"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/pls/publicuser/!MODULE.wwpob_page.show"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/pls/publicuser/" HOST="www.company.com:80" METHOD="POST"> <OTHER NAME="SEARCHKEY" VALUE="template_id=33,31345"/> <HEADER NAME="x-oracle-cache-user" VALUE="PUBLICUSER"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/pls/publicuser/!MODULE.wwpob_page.show"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="3"/> </OBJECTRESULT> </INVALIDATIONRESULT>
キャッシュ・クラスタで、すべてのクラスタ・メンバーへの無効化リクエストの伝播を有効または無効にできます。設定は、Application Server Controlコンソールの「クラスタ・メンバーとプロパティ」ページ(Web Cacheホーム・ページ→「管理」タブ→「クラスタ・プロパティ」→「メンバーとプロパティ」)またはOracleAS Web Cache Managerの「Clustering」ページ(「Properties」→「Clustering」)で指定します。
この設定を優先にするには、SYSTEMINFO要素の名前/値の属性ペアを使用します。NAMEがWCS_PROPAGATEに、VALUEがTRUEに設定されている場合は、OracleAS Web Cache Managerで設定された値は無視されます。NAMEがWCS_PROPAGATEに、VALUEがFALSEに設定されている場合は、OracleAS Web Cache Managerで設定されている値が使用されます。
次のリクエストは、ファイル/images/logo.gifを無効にし、リクエストをすべてのクラスタ・メンバーに伝播します。この例では、3つのクラスタ・メンバーがあります。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_PROPAGATE" VALUE="TRUE"/> </SYSTEM> <OBJECT> <BASICSELECTOR URI="/hostname:port/images/logo.gif"/> <ACTION/> </OBJECT> </INVALIDATION>
無効化レスポンス:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULTDETAIL SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULTDETAIL VERSION="WCS-1.1"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="Cache_A"/> </SYSTEM> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="Cache_B"/> </SYSTEM> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="Cache_C"/> </SYSTEM> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT> </INVALIDATIONRESULTDETAIL>
次のリクエストは、*.htmで終わるオブジェクトを、最大50個プレビューします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEW VERSION="WCS-1.1" STARTNUM="0" MAXNUM="50"> <ADVANCEDSELECTOR URIPREFIX="http://company-sun/" URIEXP=".*¥.htm" > </ADVANCEDSELECTOR> </INVALIDATIONPREVIEW>
無効化レスポンス:
"<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEWRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEWRESULT VERSION="WCS-1.1" STATUS="SUCCESS" STARTNUM="0" NUMURLS="2" TOTALNUMURLS="2"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="server-cache"/> </SYSTEM> <SELECTEDURL VALUE="/company-sun:80/index.htm "/> <SELECTEDURL VALUE="/company-sun:80/dtd.htm "/> </INVALIDATIONPREVIEWRESULT>
Edge Side Includesの一部として実装されるインライン無効化は、オリジナル・サーバーに対して、Web Cacheに送信されたトランザクション・レスポンスに無効化メッセージを組み合せる便利な方法を提供します。たとえば、顧客がE-Commerceサイトでベジタリアン用料理の本を購入したとします。確認レスポンスにその書籍、著者および野菜に関連するすべてのカタログ・ページを無効にするための指示を含めることができます。無効化メッセージをインラインで送信する機能によって、バンド外無効化の送信に関連する接続オーバーヘッドが軽減されるため、ESI開発者には便利なツールです。
インライン無効化を構成するには、次の手順を実行します。
content="ESI-INV/1.0"を含むSurrogate-Controlレスポンス・ヘッダー・フィールドを構成します。
Surrogate-Control: content="ESI-INV/1.0"
<esi:invalidate>タグを使用して、基本インライン無効化リクエストまたは拡張インライン無効化リクエストを挿入します。インライン無効化リクエストは、ESIテンプレートのどの部分にも挿入できます。複数のインライン無効化リクエストを挿入できますが、処理されるのは最初のリクエストのみです。インライン無効化の実行はブロック化します。つまり、ESIテンプレートに他のESI機能が含まれている場合は、インライン無効化が最初に実行されます。
基本無効化の構文を次に示します。
<esi:invalidate [output="yes"]> <?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECT> <BASICSELECTOR URI="URL"/> <ACTION REMOVALTTL="TTL"/> <INFO VALUE="value"/> </OBJECT> </INVALIDATION> </esi:invalidate>
拡張無効化の構文を次に示します。
<esi:invalidate [output="yes"]> <?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name:port" METHOD="HTTP_request_method" BODYEXP="HTTP_body"/> <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> </OBJECT> </INVALIDATION> </esi:invalidate>
次に、単純なWebアプリケーションでインライン無効化を使用したオンラインのバイク・ショップの例を示します。Perlには2つのCGIスクリプトが書き込まれています。show_bike.plによって、特定モデルのバイクの在庫数が表示されます。このスクリプトには、データベースへの問合せが含まれていて、購入が発生するまで問合せ結果が変更されないため、show_bike.plがキャッシュされます。buy_bike.plは、バイクを購入する顧客によって使用されます。このページがリクエストされると、show_bike.plは無効になります。つまり、無効化が必要です。
例13-1に、show_bike.plのコードを示します。
#!/usr/local/bin/perl # first, retrieve how many bikes are in stock # and assign it to $nBikes (omitted!) print <<END; Content-Type: text/html Cache-Control: private Surrogate-Control: max-age=3600 <html> <body> <h1>Bike: model 2005</h1> <p>There are $nBikes bike(s) in stock for purchase!</p> <p>Click <a href="/cgi/buy_bike.pl">here</a> to purchase a bike.</p> </body> </html> END
max-age=3600は、OracleAS Web Cacheに対してこのページのキャッシュ時間が最大1時間のみであることを通知します。
例13-2に、インライン無効化リクエストを含むbuy_bike.plのコードを示します。
#!/usr/local/bin/perl print <<END; Content-Type: text/html Cache-Control: private Surrogate-Control: content="ESI/1.0 ESI-INV/1.0" <html> <body> <h1>Thank you for purchasing bike model 2000.</h1> <p>Click <a href="/cgi/show_bike.pl">here</a> to read more about this model.</p><esi:invalidate><?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="/cgi/show_bike.pl"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION></esi:invalidate><p>Thanks again!</p> </body> </html> END
Surrogate-Control内のESI-INV/1.0トークンによって、OracleAS Web Cacheに<esi:invalidate>タグの処理を指示しています。
例13-3に、buy_bike.plのブラウザ・レスポンスを示します。OracleAS Web Cacheがインライン無効化リクエストをすでに処理済であるため、インライン無効化はレスポンス内に存在しません。
Content-Type: text/html Cache-Control: private Surrogate-Control: content="ESI/1.0 ESI-INV/1.0" <html> <body> <h1>Thank you for purchasing bike model 2000.</h1> <p>Click <a href="/cgi/show_bike.pl">here</a> to read more about this model.</p> <p>Thanks again!</p> </body> </html>
デバッグを容易にするために、アプリケーション開発者は、次を実行できます。
"ESI-INV/1.0"を含むSurrogate-Capabilityリクエスト・ヘッダーを追加します。
Surrogate-Capability: content="ESI-INV/1.0"
インライン無効化にSurrogate-Capabilityリクエスト・ヘッダーが追加されると、OracleAS Web Cacheでは、そのレスポンスに無効化リクエストが挿入されます。
<esi:invalidate>タグのoutput属性を有効化します。output属性が有効化されると、OracleAS Web Cacheでは、無効化の結果がコメント<!--result-->で囲まれて挿入されます。
例13-4に、buy_bike.plのブラウザ・レスポンスを示します。この場合、インライン無効化のSurrogate-Capabilityリクエスト・ヘッダーと<esi:invalidate>タグのoutput属性の両方が有効化されています。
Content-Type: text/html Cache-Control: private Surrogate-Control: content="ESI/1.0 ESI-INV/1.0" <html> <body> <h1>Thank you for purchasing bike model 2000.</h1> <p>Click <a href="/cgi/show_bike.pl">here</a> to read more about this model.</p><esi:invalidate output="yes"><?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="/cgi/show_bike.pl"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION></esi:invalidate><!--<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <BASICSELECTOR URI="/cgi/show_bike.pl/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT>--><p>Thanks again!</p> </body> </html>
OracleAS Web Cacheでは、拡張無効化リクエストを受信すると、無効にするオブジェクトを探すためにキャッシュの内容を横断します。キャッシュされているオブジェクトの構造と数によっては、OracleAS Web Cacheによる内容の無効化に時間がかかる場合があります。キャッシュ内容を効率よく横断検索するには、次の方法があります。
キャッシュ内の1つのオブジェクトを無効にする必要がある場合、キャッシュ内容の横断検索を回避するために、拡張無効化リクエストではなく、基本無効化リクエストを送信します。
基本無効化リクエストを送信するには、次のいずれかのオプションを使用します。
BASICSELECTOR要素を指定します。
たとえば、次のリクエストにより、BASICSELECTOR要素を使用し、/contacts/contacts.htmlに完全一致するオブジェクトを無効にします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="http://www.company.com:80/contacts/contacts.html"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
拡張無効化リクエストは、複数のオブジェクトを無効にする場合に使用します。拡張無効化リクエストの送信には、「Advanced Content Invalidation」ページを使用するか、またはADVANCEDSELECTOR要素を指定します。
拡張無効化リクエストを送信するには、次のいずれかのオプションを使用します。
ADVANCEDSELECTOR要素を指定します。
複数のオブジェクトで、共通のURL、リクエストPOSTボディまたは埋込みURLパラメータが共有されている場合は、次のような様々な方法で共通要素を指定できます。
ADVANCEDSELECTOR要素のURIEXP属性を使用します。
ADVANCEDSELECTOR要素のOTHER要素をNAME属性値にURIと指定し、使用します。
POSTボディ:
ADVANCEDSELECTOR要素のMETHODおよびBODYEXP属性を使用します。
ADVANCEDSELECTOR要素のOTHER要素をNAME属性値にBODYと指定し、使用します。
ADVANCEDSELECTOR要素のOTHER要素をNAME属性値にQUERYSTRING_PARAMETERと指定し、使用します。
最も速い無効化方法として、OTHER要素を使用して、正規表現のパターン一致ではなく、サブストリングの文字一致を指定することをお薦めします。
サブストリング一致を使用して拡張無効化リクエストを送信するには、次のいずれかのオプションを使用します。
たとえば、次のリクエストにより、http://www.company.com:1100/pls/portal/!PORTAL.wwpro_app_provider.execute_portlet/595897563/内に存在し、次の基準を満たすオブジェクトを検索します。
POSTリクエスト・メソッドであるオブジェクト
URIにサブストリングshowPortlet.Showが含まれているオブジェクト
POSTボディにサブストリング_language=EN-USが含まれているオブジェクト
x-oracle-cache-userおよびx-oracle-cache-subidで、それぞれの値がPORTALと1であるオブジェクト
_portlet_idおよび_provider_idと完全に一致するオブジェクト
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "http://www.oracle.com/webcache/90400/WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/pls/portal/!PORTAL.wwpro_app_provider.execute_portlet/595897563/" HOST="wc-cluster.company.com:1100" METHOD="POST"> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="_portlet_id=2"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="_provider_id=595897563"/> <HEADER NAME="x-oracle-cache-user" VALUE="PORTAL"/> <HEADER NAME="x-oracle-cache-subid" VALUE="1"/> <OTHER NAME="BODY" TYPE="SUBSTRING" VALUE="_language=EN-US"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="showPortlet.Show"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0"/> <INFO VALUE="Invalidate an old portlet based on portlet ID and provider ID"/> </OBJECT> </INVALIDATION>
無効化リクエストでQUERYSTRING_PARAMETERパラメータを使用している場合、OracleAS Web Cacheがオブジェクトを一致させ無効にするには、追加の処理時間がかかることがあります。
問合せ文字列指定による無効化の処理を最適化するには、次の手順を実行します。
webcache.xmlファイルを開きます。
SECURITYおよびWATCHDOG要素を探します。
... <SECURITY> <USER .../> <USER .../> <SECURESUBNET ...> </SECURESUBNET> <DEBUGINFO HEADER="YES" BODY="NO"/> </SECURITY> <WATCHDOG ENABLE="YES"/> ...
SECURITYおよびWATCHDOG要素の間に、次のフォーマットでINVALIDATIONINDEX要素を追加します。
<SECURITY> ... </SECURITY> <INVALIDATIONINDEX> <INDEXPARAM VALUE="NAME_OF_QUERYSTRING_PARAMETER"/> <INDEXPARAM VALUE="NAME_OF_QUERYSTRING_PARAMETER"/> </INVALIDATIONINDEX> <WATCHDOG ENABLE="YES|NO"/>
webcache.xmlを保存します。
opmnctl restartproc ias-component=WebCache
次の例のリクエストは、サブストリング/view_building.asp/と、埋め込まれているURLパラメータ値ペアbuilding=8およびfloor=10を一致させて、/corporate/asp/の下にあるすべてのオブジェクトを無効にします。このリクエストはさらに、コメント"remove-view-building8-10th-floor"が無効化の結果とイベント・ログに含まれるようにします。
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/corporate/asp/" HOST="www.company.com:80"> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/view_building.asp"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="building=8"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="floor=10"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0" /> <INFO VALUE="remove-view-building8-10th-floor"/> </OBJECT> </INVALIDATION>
この検索を最適化するには、webcache.xmlファイルを次のように更新します。
... <SECURITY> ... </SECURITY> <INVALIDATIONINDEX> <INDEXPARAM VALUE="building"/> <INDEXPARAM VALUE="floor"/> </INVALIDATIONINDEX> <WATCHDOG ENABLE="YES"/> ...
キャッシュ内のオブジェクトのSurrogate-Keyレスポンス・ヘッダー・フィールドで使用する1つ以上の検索キーに基づいて無効化を実行できます。この項では、次の項目について説明します。
Surrogate-Keyレスポンス・ヘッダー・フィールドを使用すると、アプリケーション開発者は、特定のレスポンス・オブジェクトの検索キー文字列を識別できます。検索キーは、オブジェクトのURL、CookieまたはHTTPリクエスト・ヘッダーに表示されない場合がある文字列です。検索キーの目的は、無効化に対して別の基準を提供することです。オブジェクトのURLの他に、OracleAS Web Cache管理者は、キャッシュ内のオブジェクトのSurrogate-Keyレスポンス・ヘッダー・フィールドで使用される1つ以上の検索キーに基づいて無効化を実行できます。
Surrogate-Keyレスポンス・ヘッダー・フィールドは次のような構文をサポートします。
Surrogate-Key: search-key=("key" "key" "key" ...)
search-keyが指定されている場合は、少なくとも1つ検索キーの値が存在している必要があります。
")で囲まれている必要があります。
"key_value"または"key_name=key_value"などです。
検索キーがレスポンスで置換される場合、OracleAS Web Cacheは検索キーが同じであるとみなします。
次の例は、有効なSurrogate-Keyフィールドを示しています。最初の例は、1つの検索キーtemplate_id=33,31345、および2番目の例は、検索キーtemplate_id=33,31345およびcategoryを示しています。
Surrogate-Key: search-key=( "template_id=33,31345" ) Surrogate-Key: search-key=("template_id=33,31345" "category")
次の例は、無効なSurrogate-Keyフィールドを示しています。最初の例は1つの検索キー348に終わりの引用符(")が記述されていません。2番目の例は、search-keyに検索キーの値が指定されていません。
Surrogate-Key: search-key=( "template_id=348 ) Surrogate-Key: search-key=( )
この機能を有効化するには、次の手順を実行します。
Surrogate-Keyレスポンス・ヘッダー・フィールドで、HTTPレスポンスを次のように設定します。
Surrogate-Key: search-key=("key" "key" "key" ...)
デフォルトでは、OracleAS Web Cacheは最大20個の検索キーをサポートしています。制限数を増加するには、次の手順を実行します。
webcache.xmlファイルを開きます。
SEARCHKEYOPTIONS要素内でMAXSEARCHKEYSPERDOC属性を探します。
<GLOBALCACHINGRULES> <SEARCHKEYOPTIONS ENABLE="YES" MAXSEARCHKEYSPERDOC="20"/> <ERRORPAGES>
次の例では、検索キーの制限を35に設定します。
<GLOBALCACHINGRULES> <SEARCHKEYOPTIONS ENABLE="YES" MAXSEARCHKEYSPERDOC="35"/> <ERRORPAGES>
webcache.xmlを保存します。
OTHER要素を指定してADVANCEDSELECTOR要素を使用し、NAME属性とVALUE属性を指定してSEARCHKEYと検索キーの値をそれぞれ使用します。
関連項目
|
![]() Copyright © 2002, 2006 Oracle. All Rights Reserved. |
|