第14章

データのキャッシュ操作

この章では、exteNd Directorアプリケーションでデータのキャッシュを扱う方法について説明します。この章は、次の節から構成されています。

 
Top of page

データのキャッシュについて

データのキャッシュによって、一時的に保存されたアプリケーションデータを管理できます。 データのキャッシュを管理する一般的な目的は、次のとおりです。

exteNd Directorは、HTTP要求、アプリケーションセッション、ポートレットアプリケーション、およびサーバライフタイム(サーバクラスタの場合)などの、さまざまなレベルでデータのキャッシュをサポートします。

 
Top of section

キャッシュマネージャについて

EbiCacheManagerインターフェースでは、セッションレベルおよびサーバライフタイムのデータを管理できます。 次の2つのキャッシュメカニズムが利用できます。

Object cache container

オブジェクトキャッシュコンテナによって、コンテンツのサイズにかかわらず、メモリ内のすべてのオブジェクトが保存されます。 オブジェクトキャッシュコンテナは、putObjectInCache()メソッドがキャッシュホルダオブジェクトから呼び出されたときに称されます(次の節、キャッシュホルダについてを参照)。 オブジェクトキャッシュでは、キャッシュされたオブジェクトをシリアル化する必要はありません。

キャッシュされたコンテンツのサイズが大きな問題とならない場合やシリアル化されていないオブジェクトの保存機能が必要な場合、あるいはその両方の場合に、オブジェクトキャッシュコンテナを使用します。

動作   オブジェクトキャッシュコンテナは、キャッシュ設定で指定された最大数のオブジェクトを使用して、使用頻度の最も低いオブジェクトをキャッシュから削除する時期を決定します。 オブジェクトが最大数に達していなくてもメモリが不足している場合は、オブジェクトキャッシュコンテナによって、使用頻度の最も低いオブジェクトがキャッシュから削除されます。

メモリキャッシュコンテナおよびディスクキャッシュコンテナ

メモリキャッシュおよびディスクキャッシュコンテナのメカニズムによって、オブジェクトはそのサイズに応じてメモリまたはディスク上に保存されます。 このキャッシュメカニズムでは、キャッシュされたオブジェクトがシリアル化されていることが必要です。 putValueInCache()メソッドがキャッシュホルダオブジェクトから呼び出されたときに使用されます (キャッシュホルダについてを参照してください)。

この機能は、オブジェクトのシリアル化が必要であることに注意した上で、大きなオブジェクトをメモリから削除してディスク上にキャッシュする場合に使用します。

動作   メモリおよびディスクキャッシュコンテナは、最大バイトサイズ数を使用して、メモリ内の項目またはディスク上の大きな項目をキャッシュするかどうかを決定します。 この値は、キャッシュマネージャを使用して決定できます。

注記:   オブジェクトキャッシュおよびメモリキャッシュではそれぞれ、メモリ内に独自のキャッシュが保持され、個別に管理されます。

キャッシュマネージャの設定

次のメソッドの中の1つを使用して、デフォルトのキャッシュマネージャ設定を再設定できます。

DACのキャッシュ設定   Director管理コンソール(DAC)でキャッシュ設定を使用して、Cache Mangerを設定できます。 DACで設定した値は、現在のサーバセッションを越えて保存されることはありません。

For more information    詳細については、を参照してください。

config.xmlでのContentCache設定   永久的な変更を行うには、プロジェクトのFrameworkService-confディレクトリに格納されたconfig.xmlでContentCache設定を編集します。 この設定の説明については、を参照してください。

 
Top of section

キャッシュホルダについて

EbiCacheHolderインタフェースでは、セッション実行期間キャッシュホルダ(EbiSession)およびサーバ実行期間キャッシュホルダ(EbiSrvLifetimeCacheHolder)のキャッシュ方法が定義できます。 キャッシュホルダでは、オブジェクトキャッシュコンテナ内、または結合して管理されるメモリおよびディスクキャッシュコンテナ内のコンテンツを保存できます。前の節の説明を参照してください。 (キャッシュマネージャについて)

セッションキャッシュにアクセスするには、EbiSessionの該当するメソッドを呼び出します。 サーバ実行期間キャッシュにアクセスするには、EbiSrvLifetimeCacheHolderの該当するメソッドを呼び出します。 これらのオブジェクトの両方のメソッド(EbiCacheHolderから継承)のいくつかを次に示します。

キャッシュホルダの方法

用途

putObjectInCache()

getObjectInCache()

removeObjectInCache()

オブジェクトキャッシュからオブジェクトを配置、取得、および削除します。 キャッシュされたオブジェクトは、シリアル化する必要はありません。

putValueInCache()

getValueInCache()

removeValueInCache()

メモリおよびディスクキャッシュコンテナからオブジェクトを配置、取得、および削除します。 キャッシュされたオブジェクトは、シリアル化する必要があります。

 
Top of page

オブジェクトのキャッシュ要求

アプリケーションの要求オブジェクトから直接要求パラメータにアクセスするか、コンテキストオブジェクトの一次値を使用することができます。

注記:    たとえばセッションレベルのフェイルオーバーなど、セッションに対する要求値をキャッシュする必要がある場合は、その値をホワイトボードに保存することが必要です。詳細については、ホワイトボードの使用を参照してください。

 
Top of section

オブジェクト属性の要求

要求属性は、関連するサーブレットまたはポートレットの要求オブジェクト、つまり、 HttpServletRequest、ActionRequest、またはRenderRequestに保存されます。 これらの属性は、該当する要求オブジェクトのgetAttribute()およびsetAttribute()を使用してアクセスできます。 要求オブジェクトに保存されたオブジェクトは、1つの要求の実行期間にわたり使用できます。 次の要求のために値を保持する場合は、コンテキストオブジェクトを使用します(次の節の説明を参照)。

各要求タイプのラッパオブジェクトを提供する基盤の要求オブジェクトに、EbiRequestインタフェースからアクセスできます。

For more information    詳細については、APIヘルプシステムのEbiRequestを参照してください。

 
Top of section

一時値

EbiContextのget/setTemporaryValue()を使用して、一時値としての要求属性にアクセスすることもできます。 一時値のライフタイムは、EbiContextオブジェクトの一時値のライフタイムと同じです。

たとえば、このコードは要求パラメータを取得し、それを使用して一時値を設定します。 キーは定数USER_CHOICEに保存されます。

  String userChoice =
     context.getEbiRequest().getParameter(USER_CHOICE);
  if (userChoice != null)
     context.setTemporaryValue(USER_CHOICE, userChoice);

このメソッドは値を取得します。

  String choice = (String) context.getTemporaryValue(USER_CHOICE);

 
Top of page

セッションレベルのキャッシュ

この節では、セッションレベルデータをキャッシュする方法について説明します。

 
Top of section

キャッシュマネージャの使用

キャッシュマネージャおよびセッションキャッシュホルダを使用すると、メモリやディスクにあるシリアル化可能なあるいはシリアル化不可能なオブジェクトをキャッシュできます。 EbiSessionの該当するメソッドを使用して、オブジェクトキャッシュまたはメモリとディスクを統合したキャッシュのいずれかの中に、データをキャッシュできます。

For more information    詳細については、キャッシュマネージャについておよびキャッシュホルダについてを参照してください。

 
Top of section

ホワイトボードの使用

ホワイトボードは、シリアル化されたオブジェクトを保存するためのセッションレベルキャッシュです。 ホワイトボードは、共通に使用される値へのアクセスやセッションレベルフェイルオーバーのために使用できます。 ホワイトボードは、EbiContextの次のメソッドを使用してアクセスできます。

ホワイトボードのアクセス方法

用途

get/setValue()

キーの指定によってホワイトボード値を取得します。 キーおよびオブジェクトの指定によって値を設定します。

removeValue()

ホワイトボードから指定された値を削除します。

removeAllValues()

ホワイトボードから現在のすべての値を削除します。

getAttributeNames()

現在使用されているホワイトボード値を列挙します。

セッションレベルフェイルオーバー   セッションレベルフェイルオーバーのために保持するセッション値は、ホワイトボード上にキャッシュする必要があります。 セッションレベルフェイルオーバーとは、クラスタ内のサーバが故障している間に、一時的なユーザデータ(状態)をアプリケーションで保持する機能のことです。 データは、サーバが故障した際にクラスタの任意のサーバによって復元できるように、持続的な記憶リポジトリ(クラスタのサーバで共有されるデータベースまたはファイルシステムなど)に保存されます。

重要:   ホワイトボードにキャッシュされたオブジェクトに、java.io.Serializableが実装されていることを確認してください。実装されていなければ、セッションが失敗しても回復できません。

各アプリケーションサーバでは、独自のレベルでセッションレベルフェイルオーバーがサポートされています。 詳細については、アプリケーションサーバのマニュアルを参照してください。

For more information    exteNd Application Serverを使用したセッションレベルフェイルオーバーに関する詳細については、Application Server 機能ガイドのサーバ実装ノートに関する章を参照してください。

 
Top of section

ポートレットセッションの範囲

ポートレットアプリケーションデータは、javax.Portlet規格で定義されているように、PortletSessionオブジェクトまたはPortletContextオブジェクトにキャッシュできます。

ポートレットセッション属性

PortletSessionインタフェースでは、オブジェクトのキャッシュに対して、次の2つのスコープが定義されます。

スコープを渡してPortletSessionのsetAttribute()およびgetAttribute()を使用すれば、いずれのスコープでも値にアクセスできます。

For more information    詳細については、PortletSessionのAPIマニュアルを参照してください。

注記:   exteNd Directorスコープパス機能を使用してこれらのスコープにアクセスすることもできます。詳細については、を参照してください。

ポートレットコンテキスト属性

コンテキストにキャッシュされた属性は、すべてのユーザおよびポートレットアプリケーションのすべてWebコンポーネントに対してグローバルとなります。 これらの値は、PortletContextオブジェクトのsetAttribute()およびgetAttribute()を使用してアクセスできます。 詳細については、PortletContextのAPIマニュアルを参照してください。

 
Top of page

サーバ実行期間キャッシュ

サーバ実行期間キャッシュに保存されたオブジェクトは、パフォーマンス強化のためにキャッシュでき、サーバクラスタ環境の他のサーバと同期させることができます。 この機能は、exteNd Director キャッシュマネージャおよびキャッシュコーディネータを合わせて使用することによって、操作できます。

 
Top of section

サーバ実行期間キャッシュについて

サーバ実行期間キャッシュホルダ(EbiSrvLifetimeCacheHolder)からputObjectInCache()を呼び出すことによって、サーバ実行期間キャッシュにオブジェクトをキャッシュできます。 キャッシュされたオブジェクトを、javax.io.Serializableとして実装する必要はありません。

サーバ実行期間キャッシュは、各サーバのキャッシュマネージャによって管理されます。 キャッシュされたオブジェクトは、クラスタ環境のデータベースに保存された最新データと同期化されます。 この機能は、「キャッシュコーディネータ」によって操作されます。

For more information    詳細については、を参照してください。

 
Top of section

組み込みキャッシュホルダ

exteNd Directorでは、異なるタイプのサブシステムランタイムデータに対する、次のような組み込みサーバ実行期間キャッシュホルダが利用できます。

これらのキャッシュは、Director管理コンソールの「キャッシュホルダ」セクションにリスト表示されています。

For more information    詳細については、を参照してください。



Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.  more ...