ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

7 ページ・キャッシングの高度な手法

キャッシングにより、WebCenter Sitesのページ提供のパフォーマンスが向上します。レンダリングされたコンテンツをキャッシュすることにより、コンテンツが要求されるたびにレンダリングする必要がなくなります。これにより、WebCenter Sitesシステムのハードウェア要件が軽減され、キャッシュされていないコンテンツをクライアントが要求する回数が減り、最終的に応答時間が短縮します。

キャッシング・システムには複数のレイヤーがあります。これにより、キャッシュされたオブジェクトの再生成を1つのキャッシュ・レベルで実行でき、その一方で、別のキャッシュ・レベルにキャッシュされたコンテンツがクライアントに提供されます。WebCenter Sitesは内部レベルのキャッシュで構成され、Satellite Serverは外部レイヤーのキャッシュで構成されます。

この章では、レンダリングされたオブジェクトのキャッシングがWebCenter Sitesプラットフォームでどのように行われるかについて説明します。ページとBLOBがどのようにキャッシュされるか、どこにキャッシュされるか、WebCenter SitesとSatellite Server両方のシステムでどのようにキャッシュから取得されるかについて説明します。

この章には次の項が含まれます。

7.1 WebCenter Sitesキャッシュの構成

WebCenter SitesとSatellite Serverでは両方とも、ページ、ページレットおよびBLOBがキャッシュされます。WebCenter Sitesには、CSページ・キャッシュ、BlobServerキャッシュ、SSキャッシュという3種類のレンダリング・エンジン・キャッシュが用意されています。これらのキャッシュはみな制御可能です。次のように構成したり、空にしたりできます。

WebCenter Sitesページ・キャッシュには、2つのレベルのキャッシングがあります。

この項では、各キャッシュの主な構成設定について説明します。この項は、次のトピックで構成されています。

7.1.1 キャッシュの最大サイズの構成

  • WebCenter Sitesのデータベース・キャッシュには、最大サイズ構成オプションはありません。

  • ページ・キャッシュのメモリー・サブセットにより、futuretense.iniファイルのcs.SystemPageCacheCSzプロパティを使用して、キャッシュできるエントリの最大数を指定できます。正の整数を設定すると、キャッシュ二存在できるエントリの最大数が指定されます(キャッシュでは、最大サイズに達したときに削除されるエントリを特定するために、最低使用頻度(LRU)アルゴリズムが使用されます)。


    注意:

    値を0に設定すると、すべてのエントリが追加され、即座に削除されます。ただし、これは避ける必要があります。

    cs.SystemPageCacheCSzプロパティは-1に設定しないでください。


    最大サイズは、キャッシュに格納される総バイト数とは関係ありません。

7.1.2 個々のエントリの有効期限の設定

WebCenter Sitesページ・キャッシュ内での個々のエントリのライフタイムは、各エントリのcscacheinfo設定により決定されます。CacheInfoオブジェクトは、cscacheinfoフィールドに明示的に設定されていなければ、構成ファイルから値が取得されます。CacheInfoの構文については、第7.4項「CacheInfo文字列の構文」を参照してください。

7.1.3 キャッシュからのエントリの明示的削除

WebCenter Sitesには、キャッシュからエントリを削除する方法が2つ用意されています。1つは手動、もう1つはCacheManagerを使用した自動的な方法です。

手動削除

ページ・キャッシュからエントリを手動で削除できます。CacheServerサーブレットを使用できます。CacheServerには、次の2つのオプションが用意されています。

  • キャッシュ全体をフラッシュします。

  • 有効期限が切れた時点で、すべてのページのフラッシュを強制フラッシュします。CacheServerのすべてフラッシュする機能を起動するためには、SiteCatalog表を破棄する権限を持つユーザーとしてログインし、CacheServerサーブレットの起動時にパラメータall=trueを指定する必要があります。パラメータを指定しないと、有効期限が切れたエントリ(有効期限が過去であるエントリ)がすべて、キャッシュからただちにクリアされます。有効期限がまだ切れていないエントリはクリアされません。


    注意:

    有効期限が切れたエントリは、たとえまだデータベース表の中にあったとしても、キャッシュから提供されることはありません。WebCenter Sitesでは、ページを表示する前に、キャッシュから取得されたすべてのページの有効期限がチェックされます。有効期限が切れたページをWebCenter Sitesが表示しようとすると、そのページはただちにキャッシュから削除され、新しいページが生成されます。


自動削除

CacheManagerは、WebCenter SitesのページおよびBLOBのキャッシュ・メカニズム内部と密接に結びついているモジュールです。このツールにより、ページにロードされたアイテム、ページの有効期限、またはページに渡されるパラメータに基づいて、すべてのレンダリング・キャッシュのコンテンツを管理できるようになります。

CacheManager自体は、完全に独立したドキュメントの対象になる場合もあります。ただし、その機能の概要はここで説明します。CacheManagerのメソッドおよび必要な引数の詳細は、COM.FutureTense.Cache.CacheManager Javadocを参照してください。

  1. CacheManagerは、2つのコンストラクタのうちのいずれかを使用してインスタンス化されます。そのうちの1つのコンストラクタは、現在登録されているすべてのSatellite ServerでCacheManagerを設定します。もう1つのコンストラクタでは、このCacheManagerのインスタンスが実際に管理するSatellite Serverを指定できます。

  2. 次に、ページとBLOBをCacheManagerに移入する必要があります。これは、次のメソッドのいずれかを使用して実行します。

    setByCachedDate(ICS ics, boolean before, String timestamp)
    setByItemDate(ICS ics, boolean before, String timestamp)
    setPagesByArg(ICS ics, String paramName, String paramValue)
    setPagesByID(ICS ics, String[] ids)
    

    ページ・キャッシュ、BLOBキャッシュおよびSatelliteキャッシュのコンテンツは、互いに密接に結びついています。構成エラーがないかぎりは、Satellite Serverにキャッシュされたオブジェクトは、WebCenter Sitesキャッシュにも常に存在します。つまり、WebCenter Sitesでは、すべてのレンダリング・エンジン・キャッシュにすべてのエントリのレコードがあります。CacheManagerは、各キャッシュに直接情報を明示的に問い合せることなく、各キャッシュのコンテンツを管理できるようにするために、このレコードを使用します。

    setByCachedDate(ICS ics, boolean before, String timestamp)
    

    このメソッドでは、エントリが最後にキャッシュに追加された日付に基づいて、CacheManagerにエントリを移入できます。指定された日の前または後に変更されたエントリのすべてを移入するかどうかを選択できます。

    setByItemDate(ICS ics, boolean before, String timestamp)
    

    このメソッドでは、エントリのアイテムが最後に変更された日付に基づいて、CacheManagerにエントリを移入できます。setByCachedDate(ICS, boolean, String)と同様、指定された日の前または後にアイテムが変更されたエントリのすべてを移入するかどうかを選択できます。

    setPagesByArg(ICS ics, String paramName, String paramValue)
    

    このメソッドでは、(pagenameを含む)キャッシュ・キーにある名前と値のペアに基づいて、CacheManagerにエントリを移入できます。

    setPagesByID(ICS ics, String[] ids)
    

    このメソッドでは、キャッシュ内のページまたはBLOBに格納されたアイテムの正確なアイテムIDに基づいて、CacheManagerにエントリを移入できます。

    完全に移入されると、CacheManagerはキャッシュのコンテンツを管理できるようになります。これは、次の4つの主なサービス・メソッドのうちのいずれかを使用して実行します。

    • flushCSEngine(ICS ics, int mode)

      このメソッドでは、WebCenter Sitesのページ・キャッシュとBLOBキャッシュから、CacheManagerに現在移入されているページとBLOBのすべてをフラッシュします。

    • flushSSEngines(ICS ics)

      このメソッドでは、Satellite Serverキャッシュから、CacheManagerに現在移入されているページとBLOBのすべてをフラッシュします。これは、適切な<page>タグおよび<blob>タグが埋め込まれたHTTPリクエストを、FlushServerサーブレットに送信することにより実行されます。Satellite Serverはこれらのタグを解釈し、キャッシュ・キーに変換して、対応するページをキャッシュからフラッシュします。

    • refreshCSEngine(ICS ics, int mode)

      このメソッドでは、オブジェクトを再生成してキャッシュに自動的に再移入するリクエストを、(ICS.ReadPageまたはICS.BlobServerを使用して)送信します。

    • refreshSSEngines(ICS ics)

      このメソッドでは、HTTP経由でSatellite Serverにリクエストを送信して、ページを読み込ませます。返されたバイトは無視されますが、結果として、Satellite Serverキャッシュに再移入されます。

これらのメソッドを使用すると、パフォーマンスがきわめて高い動的サイトを可能にするツールである、二重バッファ・キャッシングを利用できます。二重バッファ・キャッシングの詳細は、第5章「ページのデザインとキャッシング」を参照してください。

7.2 BlobServerキャッシュの構成

BlobServerキャッシュは、オール・オア・ナッシングのキャッシュです。つまり、エントリはグローバルにキャッシュされるか、グローバルにキャッシュされないかのどちらかです。

セキュリティが有効な場合は、BlobServerキャッシングが無効になります。したがって、bs.security=trueである場合、キャッシングは無効化されます。

この項の内容は、次のとおりです。

7.2.1 キャッシュの最大サイズの構成

futuretense.ini内のプロパティbs.bCacheSizeは、BLOBキャッシュが収容するエントリの数を指定します。サイズに負の数が設定されると、BLOBキャッシュを無制限に増大することが許可されます。

7.2.2 個々のエントリの有効期限の設定

BlobServerは、キャッシュされたエントリに対して、個々のエントリの有効期限をサポートしていません。キャッシュされたオブジェクトはすべて、futuretense.ini内のbs.bCacheTimeoutプロパティで決められたタイムアウトの期間、キャッシュ内に存在します。負のタイムアウト値は、エントリがタイムアウトしないことを示します。正の整数は、オブジェクトがキャッシュ内に存在する期間(単位は分)を指定します。

7.2.3 キャッシュからのエントリの明示的削除

BlobServerは、個々のエントリおよびすべてのエントリのキャッシュからのフラッシュをサポートします。

手動削除

キャッシュからエントリを手動で削除するには、blobtableパラメータの名前をflushblobtableに変更するのみです。これにより、残りのパラメータに対応するエントリがキャッシュから削除されます。

キャッシュからすべてのエントリを手動で削除するには、2つのオプションがあります。1つは、パラメータflushblobtables (sに注意)でBlobServerサーブレットを起動する方法です。もう1つは、前述のようにCacheServerサーブレットを起動する方法です。ただし、すべてのページとすべてのBLOBがキャッシュからフラッシュされます。

自動削除

BLOB依存アイテムはBLOBリンクが生成されたときに記録されるため、ページと同様に、BLOBを管理するためにCacheManagerを起動できます。(実際、CacheManagerは常にBLOBとページを一緒に管理します)。CacheManagerの使用の詳細は、CacheManagerおよびWebCenter Sitesに関する項を参照してください。


注意:

BLOBを提供する前に、開発者はアセットのステータスをチェックする必要があります。これにより、アセットが無効化された後に、BlobServerによってBLOBが提供されるという問題を回避できます(この動作は、ベーシック・アセットでのみ発生します)。


7.3 Satellite Serverキャッシュの構成

Satellite Serverの汎用キャッシュ構成は、satellite.propertiesファイルで行います。ただし、キャッシュ構成は通常、オブジェクトごとにオーバーライドされます。

この項では、キャッシュの最大サイズの構成方法と、キャッシュからのエントリの明示的な削除方法(手動削除および自動削除)について説明します。

キャッシュの最大サイズの構成

一度にキャッシュに格納できるエントリの最大数は、satellite.propertiesファイルのcache_maxプロパティを使用して構成できます。このプロパティに負の整数を設定すると、キャッシュのサイズは制限されません。正の整数は、キャッシュに格納できるエントリの最大数を指定します。

キャッシュからのエントリの明示的削除

この項で説明しているように、個々のエントリは、手動で、またはCacheManagerを使用して、Satellite Serverキャッシュから削除できます。

7.4 CacheInfo文字列の構文

SiteCatalogのcscacheinfoフィールドおよびsscacheinfoフィールドには、CacheInfo文字列が移入されます。この項では、文字列のフォーマットについて説明します。これは、2つの部分をカンマで区切った文字列です。最初の部分は、ページがキャッシュされるかどうかを示します。2番目の部分は、有効期限を記述します。

サンプル値:

false
true
true,*
true,~4
true,@1987-06-05 04:32:10
true,#00:00:00 */*/*
*
(blank)

CacheInfo文字列: 最初の部分

CacheInfoの最初の部分は、次の値のいずれかである必要があります。

false
true
(blank)*

CacheInfo文字列: 2番目の部分

CacheInfoの2番目の部分は、キャッシュされるページをキャッシュからいつ削除するかを記述します。最初のエレメントがfalseの場合(またはfalseと解釈される場合)、2番目のエレメントは無視されます。

ページの有効期限を指定する方法には、次の3つがあります。

page timeout (in minutes)
instant in time expiration
cron-like TimePattern expiration

有効な値は次のとおりです。

~<number of minutes>
@<date in JDBC format>
#<COM.FutureTense.Util.TimePattern format>
*
(blank)

ページ・タイムアウト

2番目のエレメントがチルダ(~)で始まる場合、チルダ記号(~)の次の値は整数である必要があります。この整数の値は、ページが最初に作成されてからキャッシュ内に残る期間(単位は分)です。負の値または0は、ページの有効期限が切れない(ページが永久にキャッシュ内に残る)ことを示します。

絶対時間

2番目のエレメントがアット記号(@)で始まる場合、アット記号(@)に続く値はJDBC日付文字列フォーマット、つまりYYYY-MM-DD HH:MM:SSのフォーマットで表現される日付である必要があります。その日付が過ぎると、キャッシュされたページはキャッシュからフラッシュされ、そのページはキャッシュされていない状態になります。

TimePattern

TimePatternフォーマットは、ページ・キャッシュの有効期限の記述のためにサポートされています。2番目のエレメントがハッシュタグ(#)で始まる場合、ハッシュタグ(#)に続く値は、パブリック・クラスCOM.FutureTense.Util.TimePatternで定義された有効なTimePattern文字列である必要があります。

一般的に、TimePattern構文は、ほとんどのUNIX cron表で使用されるフォーマットに対応しています。これにより、特定の時間または毎日、毎月、毎週、毎曜日および毎年で、有効期限を指定できます。

TimePatternフォーマットは、ページ有効期限のために最も広く使用されるフォーマットになると考えられています。

ワイルドカード

2番目のエレメントが*である場合、前のタイムアウトで記述したように、ページはタイムアウトによる有効期限切れの動作になります。タイムアウト値は、futuretense.iniファイルのcs.pgCacheTimeoutプロパティから読み込まれます。

空白

2番目のエレメントが空白の場合、*と同じ動作が適用されます。