キャッシュは、サーバーの始動時に cachespec.xml ファイルを構文解析し、 個々の cache-entry エレメントから構成パラメーターのセットを抽出します。 新規サーブレットやその他のキャッシュ可能オブジェクトが初期化されるごとに、 キャッシュは各 cache-entry エレメントを突き合わせて、そのオブジェクトの構成情報を検索します。
cache-entry エレメントは、ルート・キャッシュ・エレメント内か、cache-instance エレメント内にあります。 ルート・エレメント内にあるキャッシュ・エントリーはデフォルトのキャッシュ・インスタンスでキャッシュされます。 <cache-instance> エレメント内にあるキャッシュ・エントリーは、その特定のキャッシュ・インスタンス内でキャッシュされます。 キャッシュ可能オブジェクトごとに、クラス・エレメントが異なります。 name エレメントを使用して、キャッシュ・ポリシーが参照する特定のオブジェクトを定義できます。
cachespec.xml ファイルを デプロイメント・モジュールと共に配置します。 アセンブリー・ツールを使用して、キャッシュ可能なオブジェクトを定義します。 アプリケーションのアセンブルについて詳しくは、 アプリケーションのアセンブル を参照してください。 グローバル cachespec.xml ファイルは、アプリケーション・サ ーバーのプロパティー・ディレクトリーにも配置できます。
cachespec.dtd ファイルは、 アプリケーション・サーバーの properties ディレクトリーに入っています。cachespec.dtd ファイルは、 cachespec.xml ファイルに存在することができる正当な構造およびエレ メントを定義します。
Cachespec.xml エレメント
cachespec.xml ファイルのルート・エレメントは cache であり、cache-instance エレメントおよび cache-entry エレメントが含まれます。 cache-entry エレメントを cache-instance エレメント内に配置して、そのキャッシュ・エントリーをデフォルトではないキャッシュ・インスタンスの一部とすることができます。
cache-instance
<cache-instance name="cache_instance_name"></cache-instance>
名前属性 は、管理コンソール内で設定されたキャッシュ・インスタンスの Java Naming and Directory Interface (JNDI) 名です。
cache-instance エレメントごとに、少なくとも 1 つの cache-entry エレメントを含んでいなければなりません。 cache-instance エレメント内で付き合わせたキャッシュ・エントリーを、name 属性で指定したサーブレット・キャッシュ・インスタンス内にキャッシュします。 同一の cache-entry エレメントが複数の cache-instance エレメントに存在する場合は、 最初に一致した cache-entry エレメントが使用されます。
cache-entry
WebSphere Application Server の現行バージョンでは、 1 つのサーブレットに複数のキャッシュ・ポリシーを定義できます。 例えば、web.xml ファイルで 1 つのサーブレットに複数のマッピングを定義する場合は、 それぞれのマッピングごとにキャッシュ・エントリーを作成できます。
class
<class>command | servlet | webservice | JAXRPCClient | static</class>
このエレメントは必須であり、 アプリケーション・サーバーが残存キャッシュ・ポリシー定義を解釈する方法を指定します。 値 servlet は、WebSphere Application Server サーブレット・エンジン内にデプロイされた、 サーブレットおよび JavaServer Pages (JSP) ファイルを参照します。 webservice クラスは、 Web サービス要求の特別なコンポーネント・タイプを用いてサーブレットを拡張します。 JAXRPCClient は 、Web サービス・クライアント・キャッシュのキャッシュ・エントリーを定義する際に使用されます。値 command は、WebSphere Application Server コマンド・プログラミング・モデルを使用するクラスを参照します。 値 static は、静的コンテンツが含まれたファイルを参照します。 次に示すのは class エレメントの例です。
<class>command</class> <class>servlet</class> <class>webservice</class><class>JAXRPCClient</class><class>static</class>
name
<name>name</name>
同一のサーブレットを参照する別のマッピングが複数ある場合は、cache-entry 内に複数の name エレメントを指定できます。
<name>com.mycompany.MyCommand.class</name> <name>default_host:/servlet/snoop</name> <name>com.mycompany.beans.MyJavaBean</name> <name>mywebapp/myjsp.jsp</name><name>/soap/servlet/soaprouter</name> <name>http://remotecompany.com:9080/service/getquote</name><name>mywebapp/myLogo.gif</name>
sharing-policy
<sharing-policy> not-shared | shared-push | shared-pull | shared-push-pull</sharing-policy>
分散キャッシュを持つクラスター内で作業する場合、これらの値で、このオブジェクトから作成されたエントリーの共用特性を決定します。 このエレメントが存在しない場合は、not-shared 値が使用されます。 単一サーバー環境では、not-shared だけが有効な値です。 複製を使用可能にする場合のデフォルト値は not-shared です。このプロパティーは、Edge フラグメント・キャッシング・プロパティーによる Edge Side Include プロセッサーへの分散に影響を及ぼしません。
値 | 説明 |
not-shared | このオブジェクトに対するキャッシュ・エントリーは、 異なるアプリケーション・サーバー間では共用されません。 これらのエントリーには、シリアライズ不可データを含めることができます。 例えば、 キャッシュされたサーブレットは、 シリアライズ不可オブジェクトを要求属性の中に配置することができます (<class> タイプがこれをサポートしている場合)。 |
shared-push | このオブジェクトに対するキャッシュ・エントリーは、 他のアプリケーション・サーバーまたは連携 Java 仮想マシン (JVM) 内の動的キャッシュに自動的に配布されます。 各キャッシュにおいて、エントリーが作成された時点でそのコピーが作成されます。 これらのエントリーには、シリアライズ不可データを保管できません。 |
shared-pull | このオブジェクトに対するキャッシュ・エントリーは、 要求に応じて、複数のアプリケーション・サーバー間で共用されます。 アプリケーション・サーバーが、このオブジェクトのキャッシュの不在を認識した場合、 連携アプリケーション・サーバーに照会して、そのオブジェクトがあるかどうかを調べます。 このオブジェクトのキャッシュされたコピーがどのアプリケーション・サーバーにもない場合、 元のアプリケーション・サーバーは要求を実行してオブジェクトを生成します。 これらのエントリーには、シリアライズ不可データを保管できません。この共用モードはお勧めしません。 |
shared-push-pull | このオブジェクトに対するキャッシュ・エントリーは、 要求に応じて、複数のアプリケーション・サーバー間で共用されます。 アプリケーション・サーバーは、キャッシュ・エントリーを生成すると、 作成したエントリーのキャッシュ ID をすべての連携アプリケーション・サーバーにブロードキャストします。 これにより個々のサーバーは、特定のキャッシュ ID に対するエントリーが存在しているかどうかを認識します。 このようにしてアプリケーション・サーバーは、このエントリーに対する特定の要求に対して、 エントリーを生成するか、どこかほかの場所から取得するかを判別します。 これらのエントリーには、シリアライズ不可データを保管できません。 |
<sharing-policy>not-shared</sharing-policy>
property
<property name="key">value</property>
ここで、key はこのキャッシュ・エントリー・エレメント用の プロパティーの名前であり、value は対応する値です。
プロパティー | 有効なクラス | 値 |
ApplicationName | すべて | 複数のアプリケーションが共通キャッシュ ID ネーム・スペースを共用できるように、 J2EEName アプリケーション ID をオーバーライドします。 |
EdgeCacheable | Servlet | true または false。デフォルトは false です。このプロパティーが true であれば、指定したサーブレットまたは JSP ファイルが Edge Side Include プロセッサーから外部要求されます。サーブレットまたは JSP ファイルがキャッシュ可能であるかどうかは、残りのキャッシュ指定によって決まります。 |
ExternalCache | サーブレット | 外部キャッシュ名を指定します。 外部キャッシュ名は、外部キャッシュ・グループ名と一致しなければなりません。 |
consume-subfragments | サーブレット、Web サービス | true または false。デフォルトは false です。サーブレットがキャッシュされる場合は、このサーブレットの内容のみが格納され、 インクルードまたは転送される他のフラグメント のプレースホルダーが含まれます。サブフラグメント消費 (CSF) によって、子サーブレットが含まれる場合は内容の保管 を停止しないよう、キャッシュに通知します。親エントリー (CSF とマークされている) には、キャッシュ・エントリーのすべてのフラグメントのすべての内容が含まれるため、インクルードまたは転送は含まれないがエントリーのツリー全体の内容が含まれる、大きいキャッシュ・エントリーが作成されます。 Consume-subfragments により、アプリケーション・サーバーの処理のかなりの量が節約できますが、 通常、外部 HTTP 要求に、組み込まれたフラグメントのツリー全体の決定に必要なすべての情報が含まれる場合にのみ役立ちます。 |
do-not-consume | サーブレット、Web サービス | true または false。デフォルトは false です。フラグメントの親が true に設定された消費サブフラグメント・プロパテ ィーを持つとき、子フラグメント・コンテンツは、親のキャッシュ・エントリーに保管されます。 Do-not-consume (DNC) はキャッシュに、親キャッシュ・エントリー内のこ のフラグメントのコンテンツを保管するのを停止して、インクルードまたは フォワードの代わりにプレースホルダーを作成するようにと伝えます。 |
alternate_url | Servlet | サーブレットまたは JSP ファイルの呼び出しに使用される代替 URL を指定します。 プロパティーは、EdgeCacheable プロパティーもキャッシュ・エントリーに設定されている場合にのみ有効です。 |
persist-to-disk | すべて | true または false。デフォルトは true です。 このプロパティーが false に設定されている場合、オーバーフローまたはサーバー停止が発生してもキャッシュ・エントリーはディスクに書き込まれません。 |
save-attributes | サーブレット | true または false。デフォルトは true です。
このプロパティーが false に設定されている場合、要求属性はキャッシュ・エントリーと一緒に保管されません。
<exclude> エレメントを使用して、保管属性プロパティーには適用されない要求属性を指定します。
例えば、attr1 属性のみをキャッシュ・エントリーと一緒に保管するには、以下を行います。
<property name="save-attributes">false <exclude>attr1</exclude> </property> キャッシュ・エントリー内の attr1 属性 以外のすべての属性を保管するには、先の例でプロパティーを true に設定します。 <exclude> エレメントを使用しない場合は、すべての要求属性がキャッシュ・エントリーで保管されるか、または全く保管されません。 |
delay-invalidations | コマンド | true または false。このプロパティーが true に設定されている場合、 このキャッシュ・エントリー内の無効化規則に基づいてキャッシュされたオブジェクトを無効にするコマンドが、 実行後にキャッシュ・エントリーを無効にします。 デフォルトでは、無効化はコマンド実行の前に発生します。 |
store-cookies | サーブレット | 引数として 1 つ以上の Cookie (クッキー) 名をとります。 この名前はキャッシュ・オブジェクトと一緒に保管され、サーブレット・キャッシュによって set-cookie ヘッダー 付きの応答時に復元されます。 |
ignore-get-post | サーブレット | true または false。デフォルトは false です。このプロパティーが true に設定されていると、requestType コンポーネントのサブエレメントが定義されていない限り、GET 要求および POST 要求の cache-id には要求タイプが追加されません。 デフォルトで、要求タイプは自動的に GET 要求および POST 要求の cache-id に追加されます。 |
cache-id
<cache-id> component*| timeout? | inactivity? | priority? | property* | idgenerator? | metadatagenerator? </cache-id>
component サブエレメント
component サブエレメントは、キャッシュ ID の一部を生成するために使用します。 component サブエレメントは、属性 id、type、ignore-value と、エレメント index、method、field、required、value、および not-value から構成されます。
タイプ | 有効なクラス | 意味 |
---|---|---|
method | コマンド | 指示されたメソッドをコマンドまたはオブジェクトで呼び出します |
field | コマンド | 指定されたフィールドをコマンドまたはオブジェクトで検索します |
parameter | サーブレット | 指定されたパラメーター値を要求オブジェクトから検索します |
parameter-list | サーブレット | 指定されたパラメーターの値のリストを検索します |
session | サーブレット | HTTP セッションから名前値を検索します。 |
cookie | Servlet | 指定された Cookie 値を検索します |
attribute | Servlet | 指定された要求属性を検索します |
header | サーブレットと Web サービス | 指定された要求ヘッダーを検索します |
pathInfo | Servlet | pathInfo エレメントを要求から検索します |
servletpath | Servlet | サーブレット・パスを検索します |
locale | サーブレット | 要求ロケールを検索します |
requestType | サーブレット | 要求から HTTP 要求数メソッドを検索します。 |
tiles_attribute | Servlet | タイルから属性の値を検索します。 |
SOAPEnvelope | Web サービスおよび Web サービス・クライアント・キャッシュ | Web サービス要求から SOAPEnvelope エレメントを検索します。Literal が受け取った SOAPEnvelope エレメントを使用するのに対して、Hash の ID 属性は SOAPEnvelope エレメントの Hash を使用します。 |
SOAPAction | Web サービス | Web サービス要求の SOAPAction ヘッダー (使用可能になっている場合) を検索します。 |
serviceOperation | Web サービス | Web サービス要求に対するサービス・オペレーションを検索します |
serviceOperationParameter | Web サービス | 指定されたパラメーターを Web サービス要求から検索します |
operation | Web サービス・クライアント・キャッシュ | Web サービス記述言語 (WSDL) ファイル内の操作タイプを示します。 id 属性は無視され、値はオペレーションまたはメソッドの名前になります。 オペレーションのネーム・スペースが指定されている場合は、この値を namespaceOfOperation:nameOfOperation とフォーマット設定します。 |
part | Web サービス・クライアント・キャッシュ | WSDL ファイル内、または要求パラメーターの入力メッセージ・パーツを示します。 id 属性はパーツまたはパラメーター名で、値はパーツまたはパラメーターの値です。 |
SOAPHeaderEntry | Web サービス・クライアント・キャッシュ | Web サービス要求の Simple Object Access Protocol (SOAP) ヘッダー内の特定の情報を検索します。
id 属性はエントリーの名前を指定します。
また、SOAP 要求内の SOAP ヘッダーのエントリーには actor 属性 (com.ibm.websphere.cache など) が含まれている必要があります。
以下に例を示します。<soapenv:Header> <getQuote soapenv:actor="com.ibm.websphere.cache">IBM</getQuote> </soapenv:Header> |
<component id="getUser" type="method"><method>getUserInfo <method>getName</method></method></component>
このメソッドは、 getUser().getUserInfo().getName() と同等です。
<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry>キャッシュ ID はストリング users: a,b を含みます。 依存関係 ID は dep: a,b です。
<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute" multipleIDs="true"> <required>true</required> </component> </dependency-id> </cache-entry>キャッシュ・ポリシーは以下の依存関係 ID を生成します。
<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> <index>1</index> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute" multipleIDs="true"> <required>true</required> </component> </dependency-id> </cache-entry>前述のキャッシュ・ポリシーは、キャッシュ ID users: b 内で使用する次のコンポーネントを生成します。 <method> エレメントを使用して、戻されたオブジェクトで void メソッドを呼び出します。
<component id="getUser" type="method"><method>getUserInfo <field>name</field></method></component>
このメソッドは getUser().getUserInfo().name メソッドと同等です。
<required>true</required>
<component id="getUser" type="method"><value>blue</value> <value>red</value> </component>
<component id="getUser" type="method"> <required>true</required> <not-value>blue</not-value> <not-value>red</not-value></component>
<component id="isValid" type="method" ignore-value="true"><component>
timeout サブエレメント
<timeout>value</timeout>
value は、キャッシュ・エントリーを保持する秒単位の時間の長さです。 メモリー内にある限り、キャッシュ・エントリーは無限に保持されます。 ディスクに保管されるキャッシュ・エントリーは、24 時間アクセスを受けなかった場合は除去されます。
inactivity サブエレメント
<inactivity>value</inactivity>ここで、value は、最終のキャッシュ・ヒット後の、キャッシュ内でキャッシュ・エントリーを保持する秒単位の時間の長さです。
priority サブエレメント
<priority>value</priority>
value は、1 から 255 の正整数です。
サンプル
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <inactivity>35</inactivity> <priority>1</priority> </cache-id>
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <inactivity>600</inactivity> <priority>1</priority> </cache-id>
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <inactivity>600</inactivity> <priority>1</priority> </cache-id>
property サブエレメント
<property name="key">value</property>
key は、定義されるプロパティーの名前であり、value は対応する値です。
<property name="description">The Snoop Servlet</property>
プロパティー | 有効なクラス | 意味 |
sharing-policy/timeout/priority | すべて | 要求がこのキャッシュ ID と一致すると、 収容キャッシュ・エントリーの設定値をオーバーライドします。 |
EdgeCacheable | Servlet | 要求がこのキャッシュ ID と一致すると、 収容キャッシュ・エントリーの設定値をオーバーライドします。 |
<idgenerator> class name </idgenerator>ここで、class name は使用するクラスの完全修飾名です。 このジェネレーター・クラスを共用ライブラリーに定義します。
<metadatagenerator> classname </metadatagenerator>この例では、クラス名は使用するクラスの完全修飾名です。 このジェネレーター・クラスを共用ライブラリーに定義します。
dependency-id エレメントを使用して、 追加のキャッシュ ID を指定します。 この ID は、複数のキャッシュ・エントリーを同じグループ ID に関連付けます。
dependency-id エレメントの値は、依存関係 ID 基本ストリングと、そのコンポーネント・エレメントが戻す値を連結して生成されます。 必須のコンポーネントがヌル値を戻す場合、依存関係全体は生成も使用もされません。 動的キャッシュ API を使用して依存関係 ID を明示的に妥当性検査をしたり、 無効化エレメントを使用したりすることができます。 複数の依存関係 ID 規則が、1 つのキャッシュ・エントリー・エレメント内に存在する場合があります。 すべての依存関係規則は、個別に実行されます。
<invalidation>component* | invalidationgenerator? </invalidation>
<invalidationgenerator>class name</invalidationgenerator>この例では、class name には com.ibm.websphere.cache.webservices.InvalidationGenerator インターフェースを実装するクラスの完全修飾名を指定します。 このジェネレーター・クラスを共用ライブラリーに定義します。