DistributedMap または DistributedObjectCache インターフェースを使用すると、Java™ platform, Enterprise Edition (Java EE) アプリケーションおよびシステム・コンポーネントでは、
オブジェクトへの参照をキャッシュに保管することによって、Java オブジェクトをキャッシュに入れ、共有できるようになります。
このタスクについて
DistributedMap および DistributedObjectCache インターフェースは、
動的キャッシュ用の簡単なインターフェースです。これらのインターフェースを使用すると、Java EE アプリケーションおよびシステム・コンポーネントでは、
オブジェクトへの参照をキャッシュに保管することによって、Java オブジェクトをキャッシュに入れ、
共有できるようになります。管理コンソールで動的キャッシュ・サービスが使用可能である場合に、
デフォルトの動的キャッシュ・インスタンスが作成されます。
このデフォルト・インスタンスは、
services/cache/distributedmap という名前でグローバル Java Naming and Directory Interface (JNDI)
名前空間にバインドされます。
DistributedMap および DistributedObjectCache インターフェースの複数インスタンスが、
同一の Java
仮想マシン (JVM) 上に存在すると、必要に応じて、
アプリケーションでキャッシュ・インスタンスを個別に構成することができます。
DistributedMap インターフェースのインスタンスごとに、独自のプロパティーがあります。
重要: カスタム・オブジェクト・キーを使用している場合は、
共有ライブラリーにクラスを配置する必要があります。共有ライブラリーは、
セル、ノード、またはサーバーの各レベルで定義できます。各サーバーでクラス・ローダーを作成し、
ユーザーが定義した共有ライブラリーと関連付けます。
詳しくは、
共有ライブラリーの管理および
クラス・ローダーの設定を参照してください。
複製を使用可能にしてクラスター内にアプリケーションをデプロイする
場合、共有ライブラリー内に JAR ファイルを配置します。
単に複製をオンにする場合には共有ライブラリーを必要としませんが、
キャッシュ・キーまたはキャッシュ値などのアプリケーション固有の Java オブジェクトを使用する場合は、これらの Java クラスが共有ライブラリー内にあることが必要です。これらの値が共有ライブラリー内にない場合、データ複製サービス (DRS) が受信サイドでこれらのオブジェクトをデシリアライズしようとするとき、ClassNotFound 例外を入手します。
クラスター化された環境では、キャッシュに入れたコンテンツは、
クラスター内の他のサーバーと共有されます。また、そのコンテンツは、ディスクにオフロードされる場合もあります。
キャッシュに入れたオブジェクトを共有、
またはディスクにオフロードする場合は、その特定のオブジェクトをシリアライズ可能にする必要があります。
キャッシュに入れたオブジェクトがシリアライズ可能ではない場合、
そのオブジェクトの共有ポリシーを共有しないことを指定する必要があります。
DistributedMap インターフェース DistributedMap インターフェース には、
キャッシュ・オブジェクトの共有ポリシーを指定する方法に
関する情報が含まれています。
シリアライズ不可のオブジェクトに共有しない以外の共有ポリシーを指定すると、システム・パフォーマンスが低下する場合があります。
キャッシュ・インスタンスを構成して使用するには 4 つの方法があります。
- デフォルト・オブジェクト・キャッシュを構成する (手順の方法 1)
- カスタム・オブジェクト・キャッシュを作成および構成する (手順の方法 3)
- cacheinstances.properties ファイルを使用して、カスタム・オブジェクト・キャッシュを作成および構成する (手順の方法 4)
- リソース参照を使用する (手順の方法 5)
- 方法 1 - デフォルト・キャッシュ・インスタンスを構成する。
デフォルト・サーブレットのキャッシュ・インスタンス (JNDI 名: services/cache/basecache) は、サーブレットのキャッシュが有効な場合、サーバーが始動すると作成されます。
デフォルト・オブジェクトのキャッシュ・インスタンス (JNDI 名: services/cache/distributedmap) は、サーバーが始動すると必ず作成されます。
- 管理コンソールで、「サーバー (Servers)」>「サーバー・タイプ (Server Types)」>「WebSphere Application Server」>「server_name」>「コンテナー・サービス (Container services)」>「動的キャッシュ・サービス (Dynamic cache service)」を選択します。
- その他のキャッシュ設定を構成します。詳しくは、『動的キャッシュ・サービスの設定 (Dynamic cache service
settings)』の項目を参照してください。
- 「適用」または「OK」をクリックします。
- WebSphere® Application
Server を再始動します。
キャッシュ・インスタンスを検索するには、
以下のコードを使用します。
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- 方法 2 - サーブレット・キャッシュ・インスタンスを構成する。
サーブレット・キャッシュ・インスタンスは、デフォルトのサーブレット・キャッシュに加えて、動的キャッシュがデータを保管、配布、および共用できるロケーションです。サーブレット・キャッシュ・インスタンスを使用すると、アプリケーションの柔軟性が向上し、キャッシュ・リソースを調整しやすくなります。キャッシュ・インスタンスに対して指定された Java™ Naming and Directory Interface (JNDI) 名は、cachespec.xml 構成ファイルにある <cache instance> タグ内の名前属性にマップされます。
トラブルの回避 (Avoid trouble): サーブレット・キャッシュは、検索できません。
検索をしようとすると、失敗してヌルを戻します。
gotcha
- 管理コンソールで、「リソース」>「キャッシュ・インスタンス」>「サーブレット・キャッシュ・インスタンス」とクリックします。
- 以下のように、有効範囲を入力します。
- 「CELL SCOPE」を指定して、セル内のすべてのサーバーに使用可能なキャッシュ・インスタンスを表示および構成します。
- 「NODE SCOPE」を指定して、特定ノード内のすべてのサーバーに使用可能なキャッシュ・インスタンスを表示および構成します。
- 「SERVER SCOPE」を指定して、特定のサーバーでのみ使用可能なキャッシュ・インスタンスを表示および構成します。
- 「名前」フィールドに、リソースに必要な表示名を入力します。
- リソースの JNDI 名を入力します。この名前は、cachespec.xml 構成ファイル内の <cache-instance> タグ内の属性フィールドに指定します。このタグで、キャッシュ・エントリーを保管する特定のキャッシュ・インスタンスを見つけることができます。
- その他のキャッシュ設定を構成します。詳しくは、『動的キャッシュ・サービスの設定 (Dynamic cache service
settings)』の項目を参照してください。
- 「適用」または「OK」をクリックします。
- オプション: このインスタンスに対して別のカスタム・プロパティーを設定するには、「リソース (Resources)」>「キャッシュ・インスタンス (Cache instances)」>「サーブレット・キャッシュ・インスタンス (Servlet cache instances)」>「servlet_cache_instance_name」>「カスタム・プロパティー (Custom properties)」>「新規 (New)」をクリックします。
- オプション: 「名前」フィールドに、カスタム・プロパティーの名前を入力します。詳しくは、『動的キャッシュのカスタム・プロパティー (Dynamic cache custom properties)』の項目を参照してください。
重要: キャッシュ・インスタンスごとに示された有効範囲を持つカスタム・プロパティーのみを使用してください。例えば、「名前」フィールドで createCacheAtServerStartup と入力します。
- 「値」フィールドでプロパティーに有効な値を入力します。
- プロパティーを保存し、WebSphere
Application Server を再始動します。
- 方法 3 - オブジェクト・キャッシュ・インスタンスを構成する。
オブジェクト・キャッシュ・インスタンスは、デフォルトのオブジェクト・キャッシュに加えて、動的キャッシュが Java™ Platform、Enterprise Edition (Java EE) アプリケーションのデータを保管、配布、および共有できるロケーションです。
キャッシュ・インスタンスを使用すると、アプリケーションの柔軟性が向上し、キャッシュ・リソースを調整しやすくなります。DistributedObjectCache プログラミング・インターフェースを使用して、キャッシュ・インスタンスにアクセスします。
DistributedObjectCache アプリケーション・プログラミング・インターフェースについて詳しくは、API 資料を参照してください。
重要: 方法 3 は、「手順」セクションの先頭でリストされている、方法 1 または方法 2 を拡張したものです。
まずは、方法 1 または方法 2 のいずれかを使用してください。
以下のようにして、オブジェクト・キャッシュ・インスタンスを作成および構成します。
- 管理コンソールで、「リソース」>「キャッシュ・インスタンス」>「オブジェクト・キャッシュ・インスタンス」とクリックします。
- 以下のようにして、有効範囲を入力します。
- 「CELL SCOPE」を指定して、セル内のすべてのサーバーに使用可能なキャッシュ・インスタンスを表示および構成します。
- 「NODE SCOPE」を指定して、特定のノードを持つすべてのサーバーで使用可能なキャッシュ・インスタンスを表示および構成します。
- 「SERVER SCOPE」を指定して、特定のサーバーでのみ使用可能なキャッシュ・インスタンスを表示および構成します。
- 「名前」フィールドに、リソースに必要な表示名を入力します。
- リソースの JNDI 名を入力します。 このキャッシュ・インスタンスへの参照を検索する際に、この名前を使用します。
結果は、DistributedMap オブジェクトを戻します。
- その他のキャッシュ設定を構成します。 詳しくは、『動的キャッシュ・サービスの設定 (Dynamic cache service
settings)』の項目を参照してください。
- 「適用」または「OK」をクリックします。
- オプション: このインスタンスに対して別のカスタム・プロパティーを設定するには、「リソース (Resources)」>「キャッシュ・インスタンス (Cache instances)」>「オブジェクト・キャッシュ・インスタンス (Object cache instances)」>「servlet_cache_instance_name」>「カスタム・プロパティー (Custom properties)」>「新規 (New)」をクリックします。
- オプション: 「名前」フィールドに、カスタム・プロパティーの名前を入力します。
重要: キャッシュ・インスタンスごとに示された有効範囲を持つカスタム・プロパティーのみを使用してください。例えば、「名前」フィールドで createCacheAtServerStartup と入力します。
- 「値」フィールドでプロパティーに有効な値を入力します。
- プロパティーを保存し、WebSphere
Application Server を再始動します。
管理コンソールで、
services/cache/instance_one と services/cache/instance_two という JNDI 名の 2 つのオブジェクト・キャッシュ・インスタンスを定義した場合は、次のコードを使用して、キャッシュ・インスタンスを検索できます。
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- 方法 4 - cacheinstances.properties ファイルを使用して、キャッシュ・インスタンスを構成する。
cacheinstances.properties ファイルを使用してキャッシュ・インスタンスを作成し、
そのファイルを圧縮してエンタープライズ・アーカイブ (EAR) ファイルを作成することができます。cacheinstances.properties ファイル項目のテーブル情報は、名前、値、および説明の参照として使用してください。
最初の行は、キャッシュ・インスタンス名を定義します。
後続の行は、カスタム・プロパティーを定義します。フォーマットは、以下のとおりです。
cache.instance.x=InstanceName
cache.instance.x.customPropertyName=customPropertyValue
各部の意味は、次のとおりです。
以下は、cacheinstances.properties ファイルを使用して別のキャッシュ・インスタンスを作成する方法の例です。
cache.instance.0=/services/cache/instance_one
cache.instance.0.cacheSize=1000
cache.instance.0.enableDiskOffload=true
cache.instance.0.diskOffloadLocation=${app_server_root}/diskOffload
cache.instance.0.flushToDiskOnStop=true
cache.instance.0.useListenerContext=true
cache.instance.0.enableCacheReplication=false
cache.instance.0.disableDependencyId=false
cache.instance.0.htodCleanupFrequency=60
cache.instance.1=/services/cache/instance_two
cache.instance.1.cacheSize=1500
cache.instance.1.enableDiskOffload=false
cache.instance.1.flushToDiskOnStop=false
cache.instance.1.useListenerContext=false
cache.instance.1.enableCacheReplication=true
cache.instance.1.replicationDomain=DynaCacheCluster
cache.instance.1.disableDependencyId=true
上記の例では、
instance_one および instance_two という名前の 2 つのキャッシュ・インスタンスが作成されます。キャッシュ instance_one のキャッシュ・エントリーのサイズは 1,000 で、instance_two のキャッシュ・エントリーのサイズは 1,500 です。ディスク・オフロードは、instance_one で使用可能になり、
instance_two で使用不可になります。「リスナー・コンテキストの使用」は、instance_one で使用可能になり、
instance_two で使用不可になります。
停止時のディスクへのフラッシュは、instance_one で使用可能になり、instance_two で使用不可になります。
キャッシュ複製は、instance_two で使用可能になり、instance_one で使用不可になります。
instance_two のデータ複製ドメインの名前は DynaCacheCluster です。
依存関係 ID のサポートは、instance_two で使用不可になります。
cacheinstances.properties ファイルを、アプリケーション・サーバーかアプリケーション・クラスパスのいずれかに配置します。
例えば、
ご使用のアプリケーションの WAR ファイル、WEB-INF¥classes ディレクトリー、
または server_root¥classes ディレクトリーを使用できます。プロパティー・ファイル
(cache.instance.0) の最初のエントリーは、グローバル名前空間内のキャッシュ・インスタンスの
JNDI 名を指定します。
キャッシュ・インスタンスを検索するには、
以下のコードを使用します。
InitialContext ic = new InitialContext();
DistributedMap dm1 =
(DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 =
(DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- 方法 5: リソース参照。
重要: この方法は、「手順」セクションの先頭でリストされている、方法 3 および方法 4 を拡張したものです。
最初に、方法 3 または方法 4 のいずれかを使用してください。
モジュール・デプロイメント記述子
(web.xml ファイルおよび ibm-web-bnd.xmi ファイル) で resource-ref を定義し
、
java:comp 名前空間を使用してキャッシュを検索します。以下の resource-ref の例は、web.xml を使用します。
<resource-ref id="ResourceRef_1">
<res-ref-name>dmap/LayoutCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef_2">
<res-ref-name>dmap/UserCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
以下の resource-ref の例は、ibm-web-bnd.xmi を使用します。
<?xml version="1.0" encoding="UTF-8"?>
<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:webappbnd="webappbnd.xmi"
xmlns:webapplication="webapplication.xmi" xmlns:commonbnd="commonbnd.xmi"
xmlns:common="common.xmi"
xmi:id="WebApp_ID_Bnd" virtualHostName="default_host">
<webapp href="WEB-INF/web.xml#WebApp_ID"/>
<resRefBindings xmi:id="ResourceRefBinding_1"
jndiName="services/cache/instance_one">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1"/>
</resRefBindings>
<resRefBindings xmi:id="ResourceRefBinding_2"
jndiName="services/cache/instance_two">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_2"/>
</resRefBindings>
</webappbnd:WebAppBinding>
サポートされる構成: IBM® 拡張ファイル
およびバインディング・ファイルの場合、.xmi または .xml ファイル名拡張子は、Java EE 5 より前のアプリケーションまたはモジュールを使用しているか、
あるいは Java EE 5 以降のアプリケーションまたは
モジュールを使用しているかによって異なります。IBM 拡張
ファイルまたはバインディング・ファイルは、ibm-*-ext.xmi または ibm-*-bnd.xmi という名前です。
ここで * は拡張ファイルまたはバインディング・ファイルのタイプ (app、application、ejb-jar、
または web など) です。以下の条件が適用されます。
- バージョン 5 より前の Java EE バージョンを使用するアプリケーションまたはモジュールの場合、ファイル拡張子は .xmi でなければなりません。
- Java EE 5 以降を使用するアプリケーションまたはモジュールの場合、ファイル拡張子は .xml でなければなりません。.xmi ファイルがアプリケーションまたはモジュールに組み込まれている場合、.xmi ファイルは無視されます。
ただし、Java EE
5 以降のモジュールが、Java EE 5 より前のファイルを含み .xmi ファイル名拡張子を使用する
アプリケーション内に存在することは可能です。
ibm-webservices-ext.xmi、ibm-webservices-bnd.xmi、ibm-webservicesclient-bnd.xmi、ibm-webservicesclient-ext.xmi、
および ibm-portlet-ext.xmi ファイルは、引き続き .xmi ファイル拡張子
を使用します。
sptcfg
以下の例は、resource-ref の検索方法を示しています。
InitialContext ic = new InitialContext();
DistributedMap dm1a =(DistributedMap)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedMap dm2a =(DistributedMap)ic.lookup("java:comp/env/dmap/UserCache");
// or
DistributedObjectCache dm1a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedObjectCache dm2a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/UserCache");
上記の resource-ref の例では、java:comp/env/dmap/LayoutCache を
/services/cache/instance_one にマップし、java:comp/env/dmap/UserCache
を /services/cache/instance_two にマップしています。この例では、DistributedMap dm1 と dm1a が同じオブジェクトです。DistributedMap dm2 と dm2a が同じオブジェクトです。
- 方法 6: Java 仮想マシンのキャッシュ設定。
カスタム・プロパティーをすべてのキャッシュ・インスタンスに影響するようにグローバルに設定することができます。
これにより、方法 1、方法 2、および方法 3 の設定が上書きされますが、方法 4 の設定 (cacheinstances.properties) は上書きされません。以下のようにして、キャッシュ・インスタンスをグローバルに構成します。
- 管理コンソールで、「サーバー (Servers)」>「サーバー・タイプ (Server
Types)」>「WebSphere Application Server」>「server_name」>「Java およびプロセス管理 (Java and process management)」>「プロセス定義 (Process definition)」>「Java 仮想マシン (Java virtual
machine)」>「カスタム・プロパティー (Custom properties)」>「新規 (New)」をクリックします。
- 「名前」フィールドに、カスタム・プロパティーの名前を入力します。詳しくは、『動的キャッシュのカスタム・プロパティー (Dynamic cache custom properties)』の項目を参照してください。
カスタム・プロパティーの名前を見つけたら、com.ibm.ws.cache.CacheConfig 接頭部をカスタム・プロパティー名の先頭に追加します。
例えば、カスタム・プロパティー名が createCacheAtServerStartup の場合、「名前」フィールドに com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup と入力します。
- 「値」フィールドでプロパティーに有効な値を入力します。
- プロパティーを保存し、WebSphere
Application Server を再始動します。