package org.radargun.service; import java.util.ArrayList; import java.util.List; import org.infinispan.client.hotrod.configuration.ClusterConfigurationBuilder; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.radargun.Service; import org.radargun.config.DefinitionElement; import org.radargun.config.Property; import org.radargun.utils.ReflexiveConverters; /** * @author Matej Cimbora */ @Service(doc = Infinispan60HotrodService.SERVICE_DESCRIPTION) public class Infinispan81HotrodService extends Infinispan80HotrodService { @Property(doc = "Configuration of backup clusters used for XSite failover of HotRod client.", complexConverter = BackupClusterConfigurationConverter.class) protected List<BackupClusterConfiguration> backupClusters = new ArrayList<>(0); @Override protected ConfigurationBuilder getDefaultHotRodConfig() { ConfigurationBuilder hotRodConfigBuilder = super.getDefaultHotRodConfig(); for (BackupClusterConfiguration clusterConfig : backupClusters) { ClusterConfigurationBuilder clusterConfigBuilder = hotRodConfigBuilder.addCluster(clusterConfig.name); for (ClusterNode clusterNode : clusterConfig.nodes) { clusterConfigBuilder.addClusterNode(clusterNode.host, clusterNode.port); } } return hotRodConfigBuilder; } @DefinitionElement(name = "cluster", doc = "Holder for cluster configuration of HotRod client.") private static class BackupClusterConfiguration { @Property(doc = "Cluster name.", optional = false) private String name; @Property(doc = "List of nodes in the cluster.", optional = false, complexConverter = ClusterNodeConverter.class) private List<ClusterNode> nodes = new ArrayList<>(); } @DefinitionElement(name = "node", doc = "Representation of a single cluster node.") private static class ClusterNode { @Property(doc = "Hostname. Default is 127.0.0.1") private String host = "127.0.0.1"; @Property(doc = "Port. Default is 11222.") private int port = 11222; } private static class BackupClusterConfigurationConverter extends ReflexiveConverters.ListConverter { public BackupClusterConfigurationConverter() { super(new Class[] {BackupClusterConfiguration.class}); } } private static class ClusterNodeConverter extends ReflexiveConverters.ListConverter { public ClusterNodeConverter() { super(new Class[] {ClusterNode.class}); } } }