package org.infinispan.distribution.group; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * <p> * Identifies the key for a group. * </p> * * <p> * <code>@Group</code> should be used when you have control over the key class. For example: * </p> * * <pre> * class User { * * ... * String office; * ... * * int hashCode() { * // Defines the hash for the key, normally used to determine location * ... * } * * // Override the location by specifying a group, all keys in the same * // group end up with the same owner * @Group * String getOffice() { * return office; * } * * } * </pre> * * <p> * If you don't have control over the key class, you can specify a {@link Grouper} (in your configuration) which can be used to * specify the group externally. * </p> * * <p> * You must set the <code>groupsEnabled<code> property to true in your configuration in order to use groups. * </p> * * @see Grouper * * @author Pete Muir * */ @Target(METHOD) @Retention(RUNTIME) public @interface Group { }