Chapter 3. Annotating Objects and Querying

Once indexing has been enabled, custom objects being stored in Red Hat JBoss Data Grid need to be assigned appropriate annotations.
As a basic requirement, all objects required to be indexed must be annotated with
  • @Indexed
In addition, all fields within the object that will be searched need to be annotated with @Field.

Example 3.1. Annotating Objects with @Field

@Indexed
public class Person
	implements Serializable {
		@Field(store = Store.YES)
		private String name;
		@Field(store = Store.YES)
		private String description;
		@Field(store = Store.YES)
		private int age;
...
}
For more useful annotations and options, see Chapter 4, Mapping Domain Objects to the Index Structure

3.1. Registering a Transformer via Annotations

The key for each value must also be indexed, and the key instance must then be transformed in a String.
Red Hat JBoss Data Grid includes some default transformation routines for encoding common primitives, however to use a custom key you must provide an implementation of org.infinispan.query.Transformer.
The following example shows how to annotate your key type using org.infinispan.query.Transformer:

Example 3.2. Annotating the Key Type

@Transformable(transformer = CustomTransformer.class)
public class CustomKey {
   ...
}
 
public class CustomTransformer implements Transformer {
   @Override
   public Object fromString(String s) {
      ...
      return new CustomKey(...);
   }
 
   @Override
   public String toString(Object customType) {
      CustomKey ck = (CustomKey) customType;
      return ...
   }
}
The two methods must implement a biunique correspondence.
For example, for any object A the following must be true:

Example 3.3. Biunique Correspondence

A.equals( transformer.fromString( transformer.toString( A ) )
This assumes that the transformer is the appropriate Transformer implementation for objects of type A.