この章では、WebCenter Sitesのキャッシングの仕組みについて説明します。Webページをキャッシュすると、サイトのパフォーマンスを向上させることができます。サイトが静的か動的かに関係なく、指定されたページの一部または全体がキャッシュされるようにサイトをデザインする必要があります。
この章には次の項が含まれます。
Webページのデザインには、モジュラ・ページ・デザイン戦略をとることをお薦めします。モジュラ・ページ・デザイン戦略とは、Webサイトの訪問者に表示される各Webページが複数のエレメントで構成されるというものです。モジュラ・ページ・デザインには次のようないくつかの利点があります。
効率的なキャッシュ戦略を策定可能にすることで、システム・パフォーマンスを向上させます。
ナビゲーション・バーのような一般的なデザイン・エレメントを1回コーディングするのみで、複数のWebページで利用できます。
次の図では、シンプルなモジュラ・ページを示しています。
それぞれの四角形は、1つ以上のエレメントの出力として生成されたページレットを表しています。これらのページレットは、格納ページによってコールされます。格納ページは、完成ページ上でこれらのページレットがどのように表示されるかというレイアウトを決定し、その格納ページが表示されるたびに評価される必要のあるコードを含んでいます(カスタムのACLチェック・コードなど)。この戦略を使用すると、エレメントを1回コーディングのみで、そのエレメントをWebサイトの様々な場所で利用できます。
WebCenter Sitesでは、Webページ全体をキャッシュしたり、それらのWebページを構成しているコンポーネントをキャッシュしたりできます。効率的なページ・キャッシング戦略を使用すると、負荷を軽減してシステム・パフォーマンスを向上させることができます。
WebCenter Sites製品ファミリの次の2つのメンバーではページ・キャッシングが実装されています。
WebCenter Sitesでは、WebCenter Sitesシステム上でページがキャッシュされます。
Satellite Serverは、WebCenter Sitesシステム用の第2レベルのキャッシングを提供し、Webページのリモート・キャッシュとしても使用できます。
WebCenter Sitesは、WebCenter SitesとSatellite Serverの両方のキャッシュを利用して、効率的なキャッシュ戦略を実現します。
ContentServerサーブレットへの要求によって生成されたページレットは、ディスク上でキャッシュできます。アクセス頻度の高いページのコンテンツが少数のパラメータに依存している場合は、そのページはディスクにキャッシュする対象の有力な候補です。
ページレットをディスクにキャッシュするには、次のタグのいずれかを使用します。
キャッシュしようとしているページレットがまだディスク・キャッシュ内にない場合は、ContentServerはそのページレットをキャッシュに追加してから、そのページレットを処理します。指定されたページレットがすでにディスク・キャッシュ内にある場合は、ContentServerは単にそのページレットを処理します。
ディスクにキャッシュされたページレットの有効期限は時間ベースであり、futuretense.iniファイル内のプロパティと、SiteCatalog表のcscacheinfo列とsscacheinfo列で設定された値によって制御されます(cscacheinfoはWebCenter Sitesサーブレットに対応し、sscacheinfoはSatellite Serverサーブレットに対応します)。キャッシュ済ページが要求されると、その有効期限(キャッシュ・タイムアウト)がSystemPageCache表のetime列に格納されます。WebCenter Sitesサーブレットを通じて要求されたキャッシュ済ページの有効期限は、cscachinfoの値に基づいて計算され、Satellite Serverサーブレットを通じて要求されたキャッシュ済ページの有効期限は、sscacheinfoの値に基づいて計算されます。キャッシュ内のアイテムは、キャッシュされていないページと同じセキュリティ・ルールの制約を受けます。WebCenter SitesのACLは、エレメントに対して適用されるのとまったく同じように、キャッシュされたページレットにも適用されます。
BLOBという用語は、Binary Large OBject(バイナリ・ラージ・オブジェクト)の頭字語です。BLOBは通常はイメージ・ファイルですが、Microsoft Wordファイルやスプレッドシートを含むどのようなバイナリ・オブジェクトであってもかまいません。ほとんどのWebサイトではいくつかのBLOBが処理されます。
BLOBを処理するために、WebCenter Sitesには、BlobServerという特殊なサーブレットが用意されています。BlobServerは、表からBLOBを収集して、すべての関連するセキュリティ・チェックを実行します。
BlobServerにアクセスするには、次に示すBlobServerのタグを使用します。
satellite:blob
render:satelliteblob
これらのタグはどちらも、WebCenter SitesとSatellite ServerのキャッシュにBLOBを格納します。BlobServerのタグの詳細は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。
WebCenter Sitesのメモリー・キャッシュからのBLOBの削除
WebCenter Sitesのキャッシュから特定のBLOBを削除するには、BlobServerのURLで次のことを実行する必要があります。
blobtableパラメータの名前をflushblobtableに変更します
authusernameパラメータとpasswordパラメータを通じて資格証明を渡すことで、SiteGod権限を持つユーザーとして認証を受けます
例:
http://hostname:port/servlet/BlobServer?blobcol=urlpicture&blobheader=image%2Fgif&blobkey=id&flushblobtable=NewPortalImage&blobwhere=22&authusername=username&authpassword=password
すべてのBLOBを削除するには、blobtableパラメータの名前をflushblobtables(語尾のsに注意)に変更して、その値をtrueに設定します。
Satellite Serverは、WebCenter Sitesとともに自動的にインストールされて、追加のキャッシング層を提供します。WebCenter Sitesシステムのパフォーマンスを向上させるために、リモートのSatellite Serverシステムを追加して、コンテンツの配置場所を対象ユーザーに近づけることができます。
Satellite Serverは、ページ、ページレットおよびBLOBをディスクやメモリーにキャッシュします。Inventoryサーブレットを使用すると、メモリー・キャッシュやディスク・キャッシュのコンテンツを、様々な度合いで詳細に確認できます。Satellite Server上でキャッシュされたアイテムは、WebCenter SitesのAPIによって保護されないことに注意してください。この制限に対処するには、第5.4.1.1項「ページレットのキャッシュ戦略」で概述しているキャッシュ戦略を使用します。
Satellite Serverは、小さいアイテムをメモリーにキャッシュして、大きいアイテムをディスクにキャッシュします。大小の定義は、file_sizeプロパティで制御します。Satellite Serverのプロパティの設定の詳細は、『Oracle Fusion Middleware WebCenter Sitesプロパティ・ファイル・リファレンス』を参照してください。
訪問者が多いサイトでは、各Satellite Serverシステムのキャッシュは、アクセス頻度の高いページによってすぐに一杯になります。キャッシュが一杯になると、Satellite Serverは古いページを削除して、新しいページ用のスペースを確保します。Satellite Serverは、最低使用頻度アルゴリズム(LRU)を使用して、キャッシュから削除するアイテムを決定します。つまり、新しいページをキャッシュする必要がある場合は、Satellite Serverは最も長い時間にわたってアクセスされていないページを削除します。たとえば、キャッシュ内に、36時間アクセスされていないページと2時間アクセスされていないページの2つがあるとします。この場合、Satellite Serverは36時間アクセスされていないページを削除します。
Satellite Server上のページとページレットの有効期限は、SiteCatalog表のsscacheinfo列で指定します。ページまたはページレットがSatellite Serverを通じて呼び出されるたびに、Satellite Serverはsscacheinfoフィールドの値を処理して、そのページまたはページレットの有効期限を特定します。sscacheinfoフィールドの詳細は、第7章「ページ・キャッシングの高度な手法」の第7.4項「CacheInfo文字列の構文」を参照してください。
|
注意: 非推奨に関する注意点: |
Satellite Server上でキャッシュされているBLOBは、次のアルゴリズムに基づいて失効します。
Satellite Serverのタグを使用して、BLOBごとにデフォルトの有効期限をオーバーライドできます。
デフォルトの有効期限をオーバーライドするためのSatelliteのタグが存在しない場合は、Satellite Serverは、satellite.blob.cachecontrol.defaultプロパティの値から有効期限を取得します。このプロパティについては、第5.3.4.1項「WebCenter Sitesページのキャッシングのプロパティ」を参照してください。
satellite.blob.cachecontrol.defaultプロパティの値が設定されていない場合は、Satellite Serverは、expirationプロパティの値から有効期限を取得します。このプロパティについては、第5.3.4.2項「Satellite Serverのプロパティ」を参照してください。
次の各項では、SatelliteサーブレットによるWebページのキャッシュ方法と、サイトでSatellite Serverのキャッシングを実装する方法を説明しています。Satelliteサーブレットによるキャッシングをモジュラ・ページ・デザインと組み合せて使用すると、高速で効率的なWebサイトを作成できます。
Satelliteサーブレットによるページのキャッシュ方法
Satelliteサーブレットを使用すると、ページレット・レベルのキャッシングが可能になります。Satelliteサーブレットを使用したキャッシングを実装するには、Satellite ServerのXMLタグまたはJSPタグをWebCenter Sitesページで使用して、Satelliteの特殊なURLを使用してページにアクセスします。
たとえば、Satelliteサーブレットを使用して、myPageという名前のWebページ上にページレットレベルのキャッシングを実装したとします。図5-2で示すように、このページは、格納ページと3つのページレットA、BおよびCで構成されています。格納ページとページレットAおよびBは、Satellite Serverシステム上ですでにキャッシュされていますが、ページレットCはキャッシュされていません。
ユーザーがmyPageを要求すると、次の手順が実行されます。
Satellite ServerがそのURLを調べます。それがSatelliteのURLである場合は、Satelliteサーブレットは格納ページのキャッシュされたコピーを取得します。次にサーブレットは、現在自身のキャッシュ内にないページレットへのポインタを検索して、それらのページレットをWebCenter Sitesに対して要求します。したがって、この例では、Satelliteサーブレットは格納ページを取得して、ページレットAおよびBを自身のキャッシュから取得します。
Satelliteサーブレットが、WebCenter Sitesに対してページレットCを要求します。
WebCenter Sitesが、適切なXMLを解析して、ページレットCを作成してSatelliteサーブレットに送信します。
Satelliteサーブレットが、ページレットA、BおよびCを組み合せてページを作成して、作成したページを要求元に送信します。同時に、このサーブレットはページレットCをキャッシュします。
Satelliteサーブレットを使用したキャッシングの実装
Satelliteサーブレットを使用したページレットレベルのキャッシングを実装するには、WebCenter SitesのテンプレートにSatelliteのタグを追加します。Satellite Serverシステム上では、XML、JSPおよびJavaのコードはまったく記述しません。実際には、Satellite ServerはXMLを解析できません。
エレメント内のSatelliteタグは、Satellite Serverの一部としてインストールしたJavaコードによって解釈されます。このコードがSatellite URLを使用してコールされる場合は、このコードによって、Satelliteサーブレットがページレットをキャッシュおよび作成するために使用する情報が生成されます。Satelliteタグが含まれたエレメントを、SatelliteのURLを使用してコールしない場合は、作成されるページは、これらのSatelliteのタグがWebCenter Sitesのタグであるかのように機能します。
SatelliteのURLは、次の例のような形式になります。
http://host_name:port/servlet/Satellite?pagename=page
ここで、host_nameとportは、ご使用のSatellite Serverコンピュータのホスト名とポート番号であり、pageは、要求するページの名前です。SatelliteのURLには、コール対象のページに渡す名前と値のペアを含めることもできます。
ページレットのキャッシング
この後に示しているサンプル・コードでは、render:satellitepageタグを使用してページレットをコールしています。このページレットがSatellite Serverのキャッシュ内にまだない場合は、Satelliteサーブレットはそのページをロードしてキャッシュします。このページレットの処理時にエラーが発生して、このページレットを評価できない場合は、このページレットはキャッシュされません。
render:satellitepageタグ(およびsatellite:pageタグとこれらと同等の機能を持つXMLタグ)は、このタグに渡された名前と値のペアおよびページ名に基づいてキャッシュ済ページレットを識別します。パラメータや名前と値のペアが呼出し間で異なる場合は、生成されるコンテンツが同じであっても、異なるページレットがキャッシュされます。これらのタグを通じてページレットに引数を渡すために、名前と値のペアを使用することが重要です。
ICSオブジェクト・プール、ICSリスト・プール、ページ属性コンテキストおよびセッション(セッション変数を含む)を通じて渡された値は、すべてのキャッシュ済ページレットで使用できるとはかぎりません。ネストされたページレットが、常に親と同時にコールされるとはかぎらないからです。さらに、セッションやコンテキストのデータに依存しているページレットは、いずれにしてもキャッシュ可能であることはまれなため、これらのページレットをキャッシュしようとすると、不確定的な動作が生じる可能性があります。
render:satellitepageタグ(およびsatellite:pageタグとこれらと同等の機能を持つXMLタグ)を通じてネストされたページレットに渡されるすべてのパラメータは、SiteCatalog内でページ基準として指定される必要があります。WebCenter Sitesでは、このようにして、キャッシュ対象のページレットを作成する際に該当するパラメータが特定されます。SiteCatalogにリストされているもの以外のパラメータは使用できません(このことを示すエラーがログに書き込まれます)。
<cs:ftcs>
<html>
<body>
<render:satellitepage pagename="My/Sample/Page" />
</body>
</html>
</cs:ftcs>
BLOBのキャッシング
Satelliteタグを使用したBLOBのロードとキャッシュは、Satelliteタグを使用してページレットをロードおよびキャッシュする方法と似ています。次のサンプル・コードでは、BLOBとページレットをコールすることで、前述の例を拡張しています。
7行目では、ics:selecttoタグを使用して、データベースからBLOBを取得するシンプルなSQL問合せを実行します。結果は、imagelistという名前のIListの形式で返されます。
12行目では、satellite:blobタグを使用して、データベースから取得されたBLOBをロードします。satellite.pageタグの場合と同様に、このBLOBがSatelliteのキャッシュ内にない場合は、SatelliteはこのBLOBをロードした後にキャッシュします。cachecontrolパラメータは、このBLOBが、指定された時刻(この例では30分ごと)に失効するように設定されています。
<html>
<body>
<!-- NOTE: This will fail if list has no content (== null) -->
<ics:setvar name="category" value="logo"/>
<ics:setvar name="errno" VALUE="0"/>
<ics:selectto from="SmokeImage" list="imagelist" where="category" limit="1"/>
<ics:then>
<!-- Test a blob -->
<render:satelliteblob service="img src"blobtable="SmokeImage" blobkey="id" blobwhere="imagelist.id" blobcol="urlpicture" blobheader="image/gif"cachecontrol="*:30:0 */*/*"alt="imagelist.alttext" border="0" />
<ics:then>
<render:satellitepage pagename="QA/Satellite/Functional/xml/"pagelet1"cachecontrol="never"/>
</body>
</html>
有効期限のないBLOB
会社のロゴなど、ほとんどまたはまったく変化しないバイナリ・ファイル(BLOB)がサイト上に存在していて、Satelliteサーブレットを使用してページレット・レベルでキャッシュしている場合は、代替の方法を使用してこれらのBLOBを処理することで、パフォーマンスを向上させることができます。
有効期限のないBLOBを処理するには:
有効期限のないイメージをすべてのSatellite Serverホストにコピーします。これらは、Webサーバーのdocルートの下に配置します。
これらのイメージには、satellite:blobというSatelliteタグではなく、<img src="pathname">というHTMLタグを通じてアクセスします。
たとえば、CorporateLogo.gifという名前の、有効期限のない会社のロゴ・ファイルがあるとします。BLOBを処理するための代替方法を使用するには、まずこのファイルをすべてのSatellite Serverホスト上のWebサーバーのdocルートにコピーします。次に、satellite.blobタグを通じてこのロゴを処理するかわりに、エレメントで単に次のようなタグを使用できます。
<img src="CorporateLogo.gif">
|
注意: このメカニズムを使用して有効期限のないイメージを処理する場合は注意してください。たとえば、いずれかのSatellite Serverホストに他のホストと同じイメージ・ファイルが保持されていない場合でも、Satellite Serverはそのことを警告できません。 |
http://myloadbalancer:1234/servlet/ContentServer?pagename=myPage
ページの有効期限は、expirationプロパティによって制御されます。expirationプロパティの詳細は、『Oracle Fusion Middleware WebCenter Sitesプロパティ・ファイル・リファレンス』を参照してください。
Inventoryサーブレットを使用すると、キャッシュに格納された様々なアイテムを表示できます。Inventoryサーブレットを呼び出すには、次のURLを使用します。
http://host:port/servlet/Inventory?username=username&password=passwordword&detail=value
ここで:
表5-2 Inventoryサーブレットのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
キャッシュを表示するSatellite Serverホストのホスト名とポート番号。 |
|
|
そのSatellite Serverホストにログインするために入力するユーザー名。 |
|
|
そのSatellite Serverホストにログインするために入力するパスワード。 |
|
|
Inventoryサーブレットによって表示する情報のタイプ。有効な値は次のとおりです。
|
ヘッダーには次の情報が含まれています。
表5-3 情報タイプ
| 情報タイプ | 説明 |
|---|---|
|
リモート・ホスト |
このSatellite Serverシステムが要求を転送する先となるホスト。 |
|
最大キャッシュ・オブジェクト数 |
キャッシュに格納できるアイテムの最大数。 |
|
現在のサイズ |
キャッシュに現在格納されているアイテムの数。 |
|
キャッシュのチェック間隔 |
失効したアイテムがキャッシュに格納されているかどうかをチェックする間隔(分単位)。 |
|
デフォルトのキャッシュ有効期限 |
|
|
最小ファイル・サイズ(バイト単位) |
この値より大きいアイテムはファイルに格納されます。この値より小さいアイテムはRAMに格納されます。 |
WebCenter Sites CacheManagerオブジェクトは、WebCenter SitesとSatellite Serverの両方のキャッシュを管理します。CacheManagerの役割は次のとおりです。
ページレットをキャッシュ追跡表に記録します。
キャッシュ依存性アイテムをキャッシュ追跡表に記録することで、ページやページレットに含まれたコンテンツ(アセット)の記録を保持します。キャッシュ依存性アイテムとは、そのアイテムが変更されると、そのアイテムが格納されているキャッシュ内のページやページレットを無効化するアイテムのことです。キャッシュ依存性アイテムは、現在のページとそのページのすべての親ページの依存要素としてログに記録されます。
無効なアイテムが含まれたページやページレットをWebCenter SitesとSatellite Serverのキャッシュから削除します。
無効なページが削除された後に、更新されたページやページレットを使用してWebCenter SitesとSatellite Serverのキャッシュを再構築します。
WebCenter SitesのSiteCatalog表には、WebCenter Sitesによって生成されたページとページレットが一覧表示されます。エレメントがWebCenter SitesやSatellite Serverでキャッシュされるためには、そのエレメントのエントリがSiteCatalog表に含まれている必要があります。
SiteCatalog表内のフィールドは、WebCenter Sitesのページのデフォルト動作(デフォルトのキャッシング動作を含む)を設定します。SiteCatalog表とそのフィールドの詳細は、第23.4項「テンプレート・アセットの作成」および第23.6項「SiteEntryアセットの作成」を参照してください。
WebCenter SitesやSatellite Serverのキャッシュに格納されたアイテムには、キャッシュ・キーと呼ばれる名前が付与されます。キャッシュ・キーは、キャッシュ内の各アイテムを一意に識別します。CacheManagerは、キャッシュ・キーを使用してキャッシュ内のアイテムを検索します。WebCenter SitesとSatellite Serverは、SiteCatalog表のpagename、resargs、pagecriteriaの各フィールドの値と他の内部データに基づいて、自動的にキャッシュ・キーを生成します。
ページで使用される変数をキャッシュ・キーに含めるには、SiteCatalog表のpagecriteriaフィールドでそれらの値をカンマ区切りリストの形で指定します。たとえば、redとblueという値が使用されるmyPageという名前のページがあるとします。redとblueをmyPageのキャッシュ・キーに含めるには、次のように入力します。
pagecriteria列にはfavoritecolor,second_favoritecolor、resargsl列にはfavoritecolor=red&second_favoritecolor=blue。
WebCenter SitesとSatellite Serverでは、キャッシュされたページに渡されたパラメータおよびpagecriteriaに基づいてキャッシュ・キーを生成します。これらのパラメータが呼出し間で異なる場合は、生成されるコンテンツが同じであっても、異なるページがキャッシュされます。例:
http://mysatellite:1234/servlet/ContentServer?pagename=myPage&favoritecolor=red
このアドレスでは、次のアドレスとは異なるページがコールされます。
http://mysatellite:1234/servlet/ContentServer?pagename=myPage&second_favoritecolor=blue
このことは、生成されるコンテンツが同じかどうかに関係なく当てはまります。URLを通じて渡された値は、pagecriteriaで設定された値をオーバーライドします。たとえば、myPageのpagecriteriaをred,blueに設定した場合は、次のようになります。
URLを通じてgreenという値が渡された場合は、(red,blueでなく)green,blueがmyPageのキャッシュ・キーに組み込まれます。
URLを通じてgreen,violetという値が渡された場合は、(red,blueでなく)green,violetがmyPageのキャッシュ・キーに組み込まれます。
URLを通じてgreen,violet,yellowという値が渡された場合は、エラーが発生します。
ページにpagecriteriaが設定されていない場合は、resargsフィールドの値がキャッシュ・キーに組み込まれます。pagecriteriaの場合と同様に、URLを通じて渡された値はresargsフィールドで指定された値をオーバーライドします。
WebCenter SitesとSatellite Serverのデフォルトのキャッシュ設定は、futuretense.iniファイルに含まれています。追加のSatellite Serverプロパティは、satellite.propertiesに含まれています。すべてのプロパティは、プロパティ・エディタを使用して変更できます。
この項では、WebCenter SitesとSatellite Serverのキャッシングのプロパティについて概述します。プロパティとプロパティ・エディタの詳細は、『Oracle Fusion Middleware WebCenter Sitesプロパティ・ファイル・リファレンス』を参照してください。
futuretense.ini内の次のプロパティは、WebCenter Sites上のディスク・キャッシングを制御します。
cs.pgCacheTimeout: WebCenter Sitesのキャッシュ内のページのデフォルト・タイムアウトを指定します。
cs.freezeCache: 失効したエントリをキャッシュから削除するためにキャッシュ削除スレッドを実行するかどうかを制御します。
cs.nocache: WebCenter Sitesページのキャッシュ全体を無効にします。
cc.SystemPageCacheTimeout: キャッシュされたページがメモリー内に保持される時間を分単位で指定します。
cs.alwaysUseDisk: SiteCatalog内で、キャッシュ・オーバーライドのプロパティが指定されていないページ・エントリのデフォルト動作を指定します。
cc.SystemPageCacheCSz: メモリー内にキャッシュできるページの最大数を指定します。
Satellite Serverには、2つのプロパティ・セットが用意されています(詳細は、『Oracle Fusion Middleware WebCenter Sitesプロパティ・ファイル・リファレンス』を参照)。
1つ目のプロパティ・セットは、WebCenter Sitesシステム上のfuturetense.iniファイルに含まれており、このセットに含まれるものは次のとおりです。
satellite.page.cachecontrol.default: satellite.pageタグとRENDER.SATELLITEPAGEタグ(およびこれらと同等の機能を持つJSPタグ)のcachecontrolパラメータのデフォルト値を指定する非推奨のプロパティです。
satellite.blob.cachecontrol.default: satellite.blobタグとRENDER.SATELLITEBLOBタグ(およびこれらと同等の機能を持つJSPタグ)のcachecontrolパラメータのデフォルト値を指定します。
もう1つのプロパティ・セットは、各Satellite Serverホスト上のsatellite.propertiesファイルに含まれており、このセットを構成するものは次のとおりです。
cache_folder: Satellite Serverがページレットをディスクにキャッシュする際のキャッシュ先ディレクトリを指定します。
file_size: 指定されたサイズを基準にして、ディスクにキャッシュされるページレットおよびBLOBを、メモリーにキャッシュされるページレットおよびBLOBから分離します。
expiration: BLOBがSatellite Serverのキャッシュ内に保持される期間のデフォルト値を設定します。
cache_check_interval: キャッシュ・クリーナ・スレッドの実行間隔を制御します。これにより、失効したオブジェクトがキャッシュから削除されるタイミングが制御されます。
cache_max: 一度にキャッシュできるオブジェクト(ページレットとBLOB)の最大数を指定します(メモリー・キャッシュとディスク・キャッシュの合計)。
WebCenter SitesとEngageでは、ライブWebサイト上でWebCenter SitesとSatellite Serverのキャッシュを同時に使用するという二重バッファ・キャッシュ戦略が実装されます。この二重バッファ・キャッシュ戦略により、WebCenter SitesまたはSatellite Server上で、ページが常にキャッシュ内に保持されます。
他のCSモジュールやCS製品を使用せずに、WebCenter SitesコアおよびSatellite Serverを実行している場合は、CacheManager Java APIを使用して同様のキャッシュ戦略を実装できます。CacheManager Java APIの詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。
WebCenter SitesコアとSatellite Serverのキャッシュはどちらも、WebCenter SitesのCacheManagerオブジェクトによって管理されます。CacheManagerは、エレメントとこれらのエレメントによってコールされるアセットをキャッシュ追跡表に記録することで、コンテンツが変化するタイミングを追跡管理します。
アセットが更新およびパブリッシュされると、WebCenter SitesとSatellite Serverのキャッシュは次の順序で自動的にフラッシュおよび更新されます。

コンテンツ・プロバイダは、更新されたアセットを配信システムにパブリッシュします。CacheManagerは、キャッシュ追跡表をチェックして、どのキャッシュ済アイテムがこれらの更新されたアセットの影響を受けるのかを確認します。

CacheManagerは、古いPage1をWebCenter Sitesのキャッシュからフラッシュして、更新されたPage1をWebCenter Sitesのキャッシュに再ロードします。
Page1が要求された場合は、Satellite Serverのキャッシュ内にある古いバージョンのPage1がその要求元に渡されます。これにより、WebCenter Sitesコンピュータでは、キャッシュを削除して再構築する際の過剰な負荷が防止されます。

CacheManagerは、古いアイテムをSatellite Serverのキャッシュからフラッシュします。訪問者がこのWebサイトにアクセスしてPage1を要求すると、Satellite Serverは検索を実行して、Page1が自身のキャッシュに存在するかどうかを確認します。Page1はSatellite Serverのキャッシュ内には存在しないため、この要求はWebCenter Sitesに転送されます。

Satellite Serverシステムのキャッシュは、WebCenter Sitesのキャッシュから取得された更新バージョンのPage1で一杯になります。この更新されたページは、要求元に提供されます。Page1が再び要求された場合は、このページはSatellite Serverのキャッシュから提供されます。
二重バッファ・キャッシングを実装するため最初のステップは、第5.1項「モジュラ・ページ・デザイン」の説明に従ってモジュラ・ページをデザインすることです。モジュラ・ページ・デザインが完成したら、次の3つのステップによって二重バッファ・キャッシュ戦略を実装します。
ページレットのキャッシュ戦略を策定します。
SiteCatalog表のpagecriteriaフィールドを使用して、個別のページとページレットのキャッシング方法を設定します。
Satelliteのタグを使用してエレメントをコーディングします。
モジュラ・ページ・デザインでは、キャッシングはページレット・レベルで行われます。格納ページは一切キャッシュされないため、すべてのキャッシュ済ページレットは常にACLによって保護されます。ページレットの更新頻度に基づいて、キャッシュ対象にするページレットを選択します。
次の表では、ページレットのキャッシングに関するガイドラインを要約しています。
表5-4 ページレットのキャッシングに関するガイドライン
| ページレットをキャッシュすべきケース | ページレットをキャッシュすべきでないケース |
|---|---|
|
|
次の図では、モジュラ・ページの例を示しています。
格納ページは絶対にキャッシュしないでください。キャッシュしないことにより、キャッシングのパフォーマンス上の利点を通常どおり得られるとともに、WebCenter Sitesによる評価を必要とするロジックをページに配置することが可能になります。また、WebCenter SitesのACLによってページを保護することも可能になります。
この例のヘッダーとフッターのページレットは、ディスクにキャッシュされる必要があります。これらのページレットはめったに更新されないため、そのことを考慮してデザインする必要があります。ヘッダーとフッターは、テンプレート内に書き込まれた静的HTMLであっても、WebCenter Sitesのディスクにキャッシュされたコンテンツであってもかまいません。
サイドバーもディスク・キャッシング対象の有力な候補です。サイドバーにはわずかなバリエーションしかなく、そのコンテンツは少数のパラメータによって決定されるからです。
本文ページレットのキャッシュ方法を決定することはさらに複雑です。本文ページレットのコンテンツは、多くの場合、Webサイトの訪問者がサイト内のどこにいるのかによって変化します。本文ページレットのコンテンツとしては、次の3つのタイプが考えられます。
Webサイトの訪問者が実行する検索の結果
頻繁に実行される問合せの結果
記事
キャッシュ戦略は次のような内容にする必要があります。
本文ページレットのコンテンツが、Webサイトの訪問者が入力するパラメータに基づいた検索の結果である場合は、そのコンテンツをキャッシュしないでください。このようなページは訪問者ごとに変化するため、これらをキャッシュすることの利点はほとんどありません。
コンテンツが訪問者によって頻繁に使用される標準問合せの結果である場合は、結果セットのキャッシングを使用してください。頻繁に実行される問合せをメモリーにキャッシュすると、パフォーマンスが向上します。結果セットのキャッシングの詳細は、第14章「結果セットのキャッシングと問合せ」を参照してください。
本文ページレットのコンテンツが記事のテキストである場合は、そのページレットをディスクにキャッシュしてください。
SiteCatalog表のcscacheinfoフィールドの値によって、WebCenter Sites上のページのキャッシュ方法をページごとに制御できます。
これらのプロパティは、Webサイト内のページごとおよびページレットごとに変更できます。たとえば、格納ページのエレメントがWebCenter Sitesでキャッシュされないようにするには、cscacheinfoの値をfalseに設定します。
cscacheinfoフィールドの詳細は、第23.4項「テンプレート・アセットの作成」を参照してください。
二重バッファ・キャッシングを実装するには、Satellite Serverのタグを使用してエレメントをコーディングします。WebCenter SitesとSatellite Serverのみを実行している場合は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスのSatellite Serverに関する項に記載されているSatelliteタグを使用してください。
自動キャッシュ・メンテナンスが機能するためには、アセットがキャッシュ追跡表に記録される必要があります。ASSET.LOADタグを使用してアセットをロードする場合は、そのアセットは自動的にキャッシュ追跡表に記録されます。ASSET.LOADタグが使用されないセクションについては、RENDER.LOGDEPタグを使用してコンテンツをキャッシュ追跡表に記録してください。
|
注意: キャッシュの依存関係がログに記録されるのは、ページまたはページレットがWebCenter Sites上でキャッシュされている場合のみです。あるページが、WebCenter SitesではキャッシュされていないがSatellite Serverではキャッシュされている場合は、そのページのコンテンツが更新されたときに、そのページはキャッシュから自動的にフラッシュされません。 |
キャッシュされるページレットについては、サイトを設計してキャッシュ戦略を策定する際に、セキュリティに関して特別な考慮が必要となります。次の各項では、WebCenter SitesとSatellite Serverでキャッシュされるページのセキュリティ考慮事項を概述しています。
WebCenter Sitesでディスクにキャッシュされるページレットは、WebCenter SitesのACLによって制約されるため、これらのACLを使用してページへの不正なアクセスを防止できます。
ただし注意点として、WebCenter Sitesは格納ページのACLをチェックしますが、格納ページによってコールされるページレットのACLはチェックしません。たとえば、Open、Secret、TopSecretの3つのACLをサイトで使用しているとします。格納ページはOpen ACLのメンバーが表示できますが、格納ページによってコールされるページレットは、Secret ACLとTopSecret ACLのメンバーのみが表示できるようにする必要があります。WebCenter Sitesでは、訪問者の格納ページのACLのみがチェックされるため、Open ACLのメンバーである訪問者は、Secret ACLとTopSecret ACLのメンバー向けのコンテンツを表示できます。
関連するACLがすべてチェックされるようにするには:
次のサンプル・コードに示すように、保護するページのACLをそのページのキャッシュ基準に含めます。
<render.satellitepage pagename="innerwrapper" userAcl="SessionVariables.member" c="Article" cid="123">
次のサンプルに示すように、ページレット内で、ACLをチェックするコードを挿入します。
<asset.load name="art" type="Variables.c" OBJECTID="Variables.cid"/> <ASSET.GET NAME="art" FIELD="myACL"/> <!-- note you need a column in your db to support this --> <IF COND="Variables.userACL=Variables.myACL"> <THEN> <render.satellitepage pagename="protected_art_tmpl1" c="Variables.c" cid="Variables.cid"/> </THEN> <ELSE> <render.satellitepage pagename="accessDenied"/> </ELSE> </IF>
Satellite Server上でキャッシュされるページレットは、次の場合にのみWebCenter SitesのACLによって制約されます。
WebCenter Sitesのキャッシュから取得された場合
ページ要求に応えるために、WebCenter Sitesによって生成される必要がある場合
ページレットがSatellite Serverのキャッシュから提供される場合は、そのページレットはWebCenter SitesのACLによって保護されなくなります。
Satellite Serverページのコンテンツのセキュリティを確保するには、格納ページをいっさいキャッシュせずに、キャッシュされないコンテナにACLチェック・メカニズムを必ず組み込んでください。
エレメントがSatelliteのタグを使用してコーディングされているが、
Satellite Serverをまだインストールしていない場合は、第5.4.4.1項「WebCenter Sitesのセキュリティ」で概述されているページ・デザイン考慮事項が当てはまります。ただし、Satellite Serverをインストールしたら、WebCenter Sitesは、格納ページからコールされるキャッシュ対象外ページレットのACLをチェックします。Satellite Server上でキャッシュされるページレットのACLはチェックされません。