組み込み HashIndex である com.ibm.websphere.objectgrid.plugins.index.HashIndex クラスを構成するには、XML ファイルを使用するか、
プログラマチックに行うか、またはエンティティー・マップのエンティティー・アノテーションを使用できます。
このタスクについて
複合索引の構成は、XML を使用した
通常の索引の構成と同じですが、attributeName プロパティー値は例外です。複合索引の場合、attributeName プロパティーの
値は、コンマ区切りの属性のリストです。
例えば、値クラス Address は、city、state、および zipcode の 3 つの
属性を持つとします。この場合、"city,state,zipcode" という attributeName プロパティー値を
使用して複合索引を定義し、複合索引に city、state、および zipcode が含まれていることを
示すことができます。
また、複合 HashIndexes は、範囲検索を
サポートしないため、RangeIndex プロパティーを true に設定しないよう
注意してください。
手順
- ObjectGrid 記述子 XML ファイルで複合索引を構成します。
backingMapPluginCollections エレメントを使用してプラグインを定義します。
<bean id="MapIndexPlugin" className="com.ibm.websphere.objectgrid.plugins.index.HashIndex">
<property name="Name" type="java.lang.String" value="Address.CityStateZip"/>
<property name="AttributeName" type="java.lang.String" value="city,state,zipcode"/>
</bean>
- プログラムで複合索引を構成します。
次のサンプル・コードも同じ複合索引を作成します。
HashIndex mapIndex = new HashIndex();
mapIndex.setName("Address.CityStateZip");
mapIndex.setAttributeName(("city,state,zipcode"));
mapIndex.setRangeIndex(true);
BackingMap bm = objectGrid.defineMap("mymap");
bm.addMapIndexPlugin(mapIndex);
- エンティティー表記で複合索引を構成します。
エンティティー・マップを使用する場合は、アノテーションを使用する方法で
複合索引を定義できます。エンティティー・クラスのレベルで、CompositeIndexes アノテーション内に
CompositeIndex のリストを定義できます。CompositeIndex には name と attributeNames プロパティーがあります。各 CompositeIndex は、エンティティーに関連付けられた
バックアップ・マップに適用される HashIndex インスタンスに関連付けられます。HashIndex は、非範囲索引として構成されます。
@Entity
@CompositeIndexes({
@CompositeIndex(name="CityStateZip", attributeNames="city,state,zipcode"),
@CompositeIndex(name="lastnameBirthday", attributeNames="lastname,birthday")
})
public class Address {
@Id int id;
String street;
String city;
String state;
String zipcode;
String lastname;
Date birthday;
}
各複合索引の name プロパティーは、
エンティティーおよびバックアップ・マップ内で固有でなければなりません。名前が指定されない場合は、
生成された名前が使用されます。attributeName プロパティーを
使用して、HashIndex attributeName のデータ (コンマ区切りの属性のリスト) が
設定されます。属性名は、エンティティーがフィールド・アクセスを使用するように構成されているときは、
パーシスタント・フィールド名と一致します。そのように構成されていない場合は、
プロパティー・アクセス・エンティティーに対する JavaBeans 命名規則の定義に従い
プロパティー名と一致します。例えば、属性名が street だった場合、
プロパティー getter メソッドの名前は getStreet です。
例: BackingMap への HashIndex の追加
次の例では、静的索引プラグインを
XML ファイルに追加して HashIndex プラグインを構成します。
<backingMapPluginCollection id="person">
<bean id="MapIndexPlugin"
className="com.ibm.websphere.objectgrid.plugins.index.HashIndex">
<property name="Name" type="java.lang.String" value="CODE"
description="index name" />
<property name="RangeIndex" type="boolean" value="true"
description="true for MapRangeIndex" />
<property name="AttributeName" type="java.lang.String" value="employeeCode"
description="attribute name" />
</bean>
</backingMapPluginCollection>
この XML 構成例では、
組み込み HashIndex クラスが索引プラグインとして使用されています。HashIndex は、Name、RangeIndex、AttributeName などの、
ユーザーが構成できるプロパティーをサポートしています。
- Name プロパティーは、この索引プラグインを識別するストリングである CODE と構成されています。Name プロパティーの値は、
バックアップ・マップのスコープ内で固有でなければなりません。この名前を使用して、BackingMap の
ObjectMap インスタンスから名前ごとの索引オブジェクトを取得できます。
- RangeIndex プロパティーは true と構成されています。これが意味するのは、取り出された索引オブジェクトをアプリケーションが MapRangeIndex インターフェースにキャストできるということです。RangeIndex プロパティーが false と構成されている場合は、アプリケーションは取り出された索引オブジェクトを MapIndex インターフェースにしかキャストできません。MapRangeIndex は、
範囲関数 greater than や less than、あるいは両方を使用するデータ検出をサポートしますが、MapIndex は equals 関数
のみをサポートします。索引が照会によって使用される場合、単一属性索引の RangeIndex プロパティーは、true と構成されていなければなりません。リレーションシップ索引および複合索引に対しては、RangeIndex プロパティーは false と構成される必要があります。
- AttributeName プロパティーは employeeCode と構成されています。これは、キャッシュに入れられたオブジェクトの employeeCode 属性を使用して、単一属性索引が構築されることを意味しています。複数の属性を持つ、キャッシュに入れられたオブジェクトをアプリケーションが
検索する必要がある場合、AttributeName プロパティーには、属性をコンマで区切ったリストを設定
でき、そうすると複合索引が生成されます。
つまり、上記の例では、単一属性範囲 HashIndex を定義しています。 単一属性 HashIndex である理由は、AttributeName プロパティーの値が
employeeCode であり、1 つの属性名しか含まれていないためです。また、範囲 HashIndex でもあります。