4.3. グループ化 API の設定
JBoss Data Grid でグループ化 API を使用するには、最初にグループを有効にします。
プログラミングによる設定
プログラミング可能な API を使用して JBoss Data Grid を設定するには、以下を呼び出します。
Configuration c = new ConfigurationBuilder().clustering().hash().groups().enabled().build();
XML 設定
XML を使用して JBoss Data Grid を設定するには、以下を使用します。
<clustering>
<hash>
<groups enabled="true" />
</hash>
</clustering>
キーのクラス定義が変更可能であり、グループの決定がキークラスに対して直交した関心事でない場合は、組み込みグループを使用します。メソッド内で
@Group アノテーションを使用して組み込みグループを指定する場合は、以下のようになります。
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;
}
}
注記
グループは
String である必要があります。
キークラスコントロールがない場合や、グループの決定がキークラスに対して直交した関心事である場合は、外部グループを使用します。外部グループは、
Grouper インターフェースを実装して指定します。Grouper インターフェース内の computeGroup メソッドはグループを返します。
Grouper はインターセプターとして動作し、以前に計算された値を computeGroup() メソッドに渡します。定義された場合、@Group は、最初の Grouper に渡されるグループを決定し、組み込みグループを使用したときに改善されたグループコントロールを提供します。
grouper を使用してキーのグループを決定するには、ターゲットキーからその keyType を割り当てることができる必要があります。
以下は
Grouper の例です。
public class KXGrouper implements Grouper<String> {
// A pattern that can extract from a "kX" (e.g. k1, k2) style key
// The pattern requires a String key, of length 2, where the first character is
// "k" and the second character is a digit. We take that digit, and perform
// modular arithmetic on it to assign it to group "1" or group "2".
private static Pattern kPattern = Pattern.compile("(^k)(<a>\\d</a>)$");
public String computeGroup(String key, String group) {
Matcher matcher = kPattern.matcher(key);
if (matcher.matches()) {
String g = Integer.parseInt(matcher.group(2)) % 2 + "";
return g;
} else
return null;
}
public Class<String> getKeyType() {
return String.class;
}
}
この例では、単純な
grouper がクラスキーを使用して、パターンでキーからグループを抽出します。キークラスで指定された情報は無視されます。各 grouper は登録して使用する必要があります。
プログラミングによる設定
プログラミングにより JBoss Data Grid を設定する場合:
Configuration c = new ConfigurationBuilder().clustering().hash().groups().addGrouper(new KXGrouper()).build();
XML 設定
または、XML を使用して JBoss Data Grid を設定する場合:
<clustering>
<hash>
<groups enabled="true">
<grouper class="com.acme.KXGrouper" />
</groups>
</hash>
</clustering>