É possível configurar o HashIndex integrado, a classe com.ibm.websphere.objectgrid.plugins.index.HashIndex, com um arquivo XML, programaticamente ou com uma anotação de entidade em um mapa de entidade.
Sobre Esta Tarefa
Configurar um índice composto é o mesmo que configurar um índice regular com XML, exceto para o valor da propriedade attributeName. Em um índice composto, o valor da propriedade attributeName é uma lista de atributos delimitados por vírgulas. Por exemplo, a classe de valor Endereço tem três atributos: cidade, estado e CEP. Um índice composto pode ser definido com o valor da propriedade attributeName como "city,state,zipcode" indicando que a cidade, estado e CEP são incluídos no índice composto.
Também, note que o HashIndexes composto não suporta consultas de intervalo e, portanto, não pode ter a propriedade RangeIndex configurada para true.
Procedimento
- Configure um índice composto no arquivo descritor XML do ObjectGrid.
Use o elemento backingMapPluginCollections para definir o
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>
- Configure um índice composto programaticamente.
O seguinte código de exemplo cria o mesmo índice composto:
HashIndex mapIndex = new HashIndex();
mapIndex.setName("Address.CityStateZip");
mapIndex.setAttributeName(("city,state,zipcode"));
mapIndex.setRangeIndex(true);
BackingMap bm = objectGrid.defineMap("mymap");
bm.addMapIndexPlugin(mapIndex);
- Configure um índice composto com notações de entidade.
Se você estiver usando mapas de entidade, será possível usar uma abordagem de anotação para definir um índice composto. É possível definir uma lista de CompositeIndex dentro da anotação CompositeIndexes no nível da classe de entidade.
O CompositeIndex possui um nome e a propriedade attributeNames.
Cada CompositeIndex é associado a uma instância do HashIndex aplicada ao mapa de apoio que é associado à entidade. O HashIndex é configurado como um índice de não-intervalo.
@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;
}
A propriedade nomeada para cada índice composto deve ser exclusiva dentro do mapa de entidade e de apoio. Se o nome não for especificado, um nome gerado será usado. A propriedade attributeName é usada para preencher o HashIndex attributeName com a lista de atributos delimitados por vírgulas. Os nomes de atributos coincidem com os nomes de campo persistente quando as entidades são configuradas para usar acesso à campo, ou o nome da propriedade como definida para as convenções de nomenclatura JavaBeans para entidades de acesso à propriedade. Por exemplo: Se o nome do atributo for street, o método getter da propriedade será denominado getStreet.
Exemplo: Incluindo HashIndex
no BackingMap
No exemplo a seguir, o plug-in HashIndex é configurado ao incluir plug-ins de índice estáticos no arquivo 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>
Neste exemplo de configuração XML, a classe HashIndex integrada é usada como o plug-in de índice. O HashIndex suporta propriedades que os usuários podem configurar, como Name, RangeIndex e AttributeName.
- A propriedade Name é configurada como CODE, uma sequência que identifica este plug-in de índice. O valor de propriedade Name deve ser exclusivo dentro do escopo do mapa de apoio. O nome pode ser usado para recuperar o objeto do índice pelo nome a partir da instância do ObjectMap do BackingMap.
- A propriedade RangeIndex é configurada como true,
o que significa que o aplicativo pode efetuar cast do objeto do índice recuperado
para a interface MapRangeIndex. Se a propriedade RangeIndex for configurada como false, o aplicativo poderá apenas efetuar cast do objeto do índice recuperado para a
interface MapIndex.
Um MapRangeIndex suporta funções para localizar dados usando funções de intervalo, como maior que, menor que, ou ambas, enquanto um MapIndex suporta apenas funções iguais. Se o índice
for por consulta, a propriedade RangeIndex deverá ser configurada para
true em índices de atributo único.
Para um índice de relacionamento e um índice composto, a propriedade RangeIndex deverá ser configurada para false.
- A propriedade AttributeName é configurada como employeeCode, o que significa que o atributo employeeCode do objeto em cache é usado para construir um índice de atributo único. Se um aplicativo precisar procurar por objetos em cache com diversos atributos, a propriedade AttributeName poderá ser configurada para uma lista de atributos delimitados por vírgula, rendendo um índice composto.
Em resumo, o exemplo anterior define um HashIndex do intervalo
de atributo único. Ele é um HashIndex de atributo único porque o valor da propriedade AttributeName employeeCode inclui apenas um nome de atributo. É também um
HashIndex de intervalo.