Vous pouvez configurer le plug-in HashIndex intégré, la classe com.ibm.websphere.objectgrid.plugins.index.HashIndex avec un fichier XML à l'aide d'un programme ou d'une annotation d'entité dans une mappe d'entité.
Pourquoi et quand exécuter cette tâche
La configuration d'un index composite est identique à la configuration d'un index standard avec XML, à l'exception de la valeur de la propriété attributeName. Dans un index composite, la valeur de la propriété nomAttribut est une liste d'attributs séparés par une virgule. Par exemple, la classe de valeur Address a trois attributs : city, state et zipcode. Un index composite peut être défini avec la valeur de la propriété attributeName "city,state,zipcode" indiquant que la ville, l'état et le code postal sont inclus dans l'index composite.
Notez
également qu'un index HashIndexes composite ne prend pas en charge les recherches
de plages et que sa propriété RangeIndex ne peut pas être associée à true.
Procédure
- Configurez un index composite dans le fichier XML de descripteur d'ObjectGrid.
Utilisez l'élément backingMapPluginCollections pour définir le plug-in :
<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>
- Configurez un index composite à l'aide d'un programme.
L'exemple de code suivant crée le même index composite :
HashIndex mapIndex = new HashIndex();
mapIndex.setName("Address.CityStateZip");
mapIndex.setAttributeName(("city,state,zipcode"));
mapIndex.setRangeIndex(true);
BackingMap bm = objectGrid.defineMap("mymap");
bm.addMapIndexPlugin(mapIndex);
- Configurez un index composite avec des notations d'entité.
Si vous utilisez des mappes d'entité, vous pouvez utiliser une approche d'annotation pour définir un index composite. Vous pouvez définir une liste de CompositeIndex dans l'annotation CompositeIndex au niveau de la classe d'entité.
CompositeIndex a un nom et une propriété attributeNames.
Chaque CompositeIndex est associé à une instance HashIndex appliquées à la mappe de sauvegarde associées à l'entité. L'index HashIndex est configuré
en tant qu'index ne contenant pas de plage.
@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;
}
La propriété de nom de chaque index composite doit être unique dans la mappe d'entité et de sauvegarde. Si
aucun nom n'est indiqué, un nom généré est utilisé. La propriété nomAttribut est utilisée
pour remplir l'attribut HashIndex avec la liste d'attributs séparés par une virgule. Les noms d'attribut coïncident
avec les noms de zone persistante lorsque les entités sont configurées pour utiliser l'accès par zone, ou le nom de propriété
tel qu'il est défini pour les conventions de dénomination JavaBeans pour les entités
d'accès par propriété. Par exemple, si le nom d'attribut est street, la méthode getter de la propriété est getStreet.
Exemple : Ajout de HashIndex à BackingMap
Dans l'exemple suivant, vous configurez le plug-in HashIndex en ajoutant des plug-in d'index au fichier XML :
<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>
Dans cet exemple de configuration XML, la classe intégrée HashIndex est utilisée comme plug-in d'indexation. HashIndex prend en charge les propriétés que les utilisateurs peuvent configurer, telles que Name, RangeIndex et AttributeName.
- La propriété Name a la valeur CODE, une chaîne qui identifie ce plug-in d'index. La valeur de la propriété Name doit être unique dans la portée de la mappe de sauvegarde. Le nom peut être utilisé pour extraire l'objet d'index par nom à partir de l'instance ObjectMap pour la mappe de sauvegarde.
- La propriété RangeIndex a la valeur true, ce qui signifie que l'application peut transtyper l'objet d'index extrait vers l'interface MapRangeIndex. Si la propriété RangeIndex a la valeur false, l'application peut transtyper uniquement l'objet d'index extrait vers l'interface MapIndex.
Une interface MapRangeIndex prend en charge
des fonctions de recherche de données à l'aide des fonctions de plage (range) telles que greater than,
less than ou les deux, alors qu'un index MapIndex prend uniquement en charge les fonctions d'égalité (equals). Si l'index repose sur la requête, la propriété RangeIndex doit avoir la valeur true dans les index à un seul attribut.
Dans le cas d'un index de relations ou d'un index composite, la propriété RangeIndex doit avoir la valeur false.
- La propriété AttributeName a la valeur employeeCode, ce qui implique que l'attribut employeeCode de l'objet en cache est utilisé pour créer un index à un seul attribut. Si une application doit rechercher des objets mis en cache avec plusieurs attributs, la propriété AttributeName peut être affectée d'une liste d'attributs séparés par une virgule pour produire un index composite.
Pour résumer, l'exemple précédent définit un HashIndex de plage à attribut unique. Il s'agit d'un index HashIndex à un seul attribut, car la valeur de la propriété AttributeName est employeeCode qui inclut un seul nom d'attribut. Il s'agit également d'une plage HashIndex.