Commit dc05965c authored by terrymanu's avatar terrymanu
Browse files

For #673: remove build() from MasterSlaveRuleConfiguration

parent 1ef429b7
Loading
Loading
Loading
Loading
+1 −40
Original line number Diff line number Diff line
@@ -17,12 +17,7 @@

package io.shardingjdbc.core.api.config;

import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithm;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType;
import io.shardingjdbc.core.exception.ShardingConfigurationException;
import io.shardingjdbc.core.rule.MasterSlaveRule;
import lombok.Getter;
import lombok.Setter;

@@ -44,39 +39,5 @@ public class MasterSlaveRuleConfiguration {
    
    private Collection<String> slaveDataSourceNames = new LinkedList<>();
    
    private MasterSlaveLoadBalanceAlgorithmType loadBalanceAlgorithmType;
    
    private String loadBalanceAlgorithmClassName;
    
    /**
     * Build master-slave rule.
     *
     * @return master-slave rule
     */
    public MasterSlaveRule build() {
        Preconditions.checkNotNull(name, "name cannot be null.");
        Preconditions.checkNotNull(masterDataSourceName, "masterDataSourceName cannot be null.");
        Preconditions.checkNotNull(slaveDataSourceNames, "slaveDataSourceNames cannot be null.");
        Preconditions.checkArgument(!slaveDataSourceNames.isEmpty(), "slaveDataSourceNames cannot be empty.");
        return new MasterSlaveRule(name, masterDataSourceName, slaveDataSourceNames, getLoadBalanceAlgorithm());
    }
    
    private MasterSlaveLoadBalanceAlgorithm getLoadBalanceAlgorithm() {
        if (null == loadBalanceAlgorithmType) {
            return Strings.isNullOrEmpty(loadBalanceAlgorithmClassName) ? null : newInstance(loadBalanceAlgorithmClassName);
        }
        return loadBalanceAlgorithmType.getAlgorithm();
    }
    
    private MasterSlaveLoadBalanceAlgorithm newInstance(final String masterSlaveLoadBalanceAlgorithmClassName) {
        try {
            Class<?> result = Class.forName(masterSlaveLoadBalanceAlgorithmClassName);
            if (!MasterSlaveLoadBalanceAlgorithm.class.isAssignableFrom(result)) {
                throw new ShardingConfigurationException("Class %s should be implement %s", masterSlaveLoadBalanceAlgorithmClassName, MasterSlaveLoadBalanceAlgorithm.class.getName());
            }
            return (MasterSlaveLoadBalanceAlgorithm) result.newInstance();
        } catch (final ReflectiveOperationException ex) {
            throw new ShardingConfigurationException("Class %s should have public privilege and no argument constructor", masterSlaveLoadBalanceAlgorithmClassName);
        }
    }
    private MasterSlaveLoadBalanceAlgorithm loadBalanceAlgorithm;
}
+9 −0
Original line number Diff line number Diff line
@@ -35,4 +35,13 @@ public final class ShardingConfigurationException extends RuntimeException {
    public ShardingConfigurationException(final String errorMessage, final Object... args) {
        super(String.format(errorMessage, args));
    }
    
    /**
     * Constructs an exception with cause exception. 
     *
     * @param cause cause exception
     */
    public ShardingConfigurationException(final Exception cause) {
        super(cause);
    }
}
+7 −10
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ package io.shardingjdbc.core.rule;
import com.google.common.base.Preconditions;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithm;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType;
import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import lombok.Getter;

import java.util.Collection;
@@ -38,20 +39,16 @@ public final class MasterSlaveRule {
    
    private final Collection<String> slaveDataSourceNames;
    
    private final MasterSlaveLoadBalanceAlgorithm strategy;
    private final MasterSlaveLoadBalanceAlgorithm loadBalanceAlgorithm;
    
    public MasterSlaveRule(final String name, final String masterDataSourceName, final Collection<String> slaveDataSourceNames) {
        this(name, masterDataSourceName, slaveDataSourceNames, null);
    }
    
    public MasterSlaveRule(final String name, final String masterDataSourceName, final Collection<String> slaveDataSourceNames, final MasterSlaveLoadBalanceAlgorithm strategy) {
    public MasterSlaveRule(final MasterSlaveRuleConfiguration config) {
        this.name = config.getName();
        this.masterDataSourceName = config.getMasterDataSourceName();
        this.slaveDataSourceNames = config.getSlaveDataSourceNames();
        this.loadBalanceAlgorithm = null == config.getLoadBalanceAlgorithm() ? MasterSlaveLoadBalanceAlgorithmType.getDefaultAlgorithmType().getAlgorithm() : config.getLoadBalanceAlgorithm();
        Preconditions.checkNotNull(name);
        Preconditions.checkNotNull(masterDataSourceName);
        Preconditions.checkNotNull(slaveDataSourceNames);
        Preconditions.checkState(!slaveDataSourceNames.isEmpty());
        this.name = name;
        this.masterDataSourceName = masterDataSourceName;
        this.slaveDataSourceNames = slaveDataSourceNames;
        this.strategy = null == strategy ? MasterSlaveLoadBalanceAlgorithmType.getDefaultAlgorithmType().getAlgorithm() : strategy;
    }
}
+20 −2
Original line number Diff line number Diff line
@@ -17,8 +17,11 @@

package io.shardingjdbc.core.yaml.masterslave;

import com.google.common.base.Strings;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithm;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType;
import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.core.exception.ShardingConfigurationException;
import lombok.Getter;
import lombok.Setter;

@@ -58,8 +61,23 @@ public class YamlMasterSlaveRuleConfiguration {
        result.setName(name);
        result.setMasterDataSourceName(masterDataSourceName);
        result.setSlaveDataSourceNames(slaveDataSourceNames);
        result.setLoadBalanceAlgorithmType(loadBalanceAlgorithmType);
        result.setLoadBalanceAlgorithmClassName(loadBalanceAlgorithmClassName);
        if (null != loadBalanceAlgorithmType) {
            result.setLoadBalanceAlgorithm(loadBalanceAlgorithmType.getAlgorithm());
        } else if (!Strings.isNullOrEmpty(loadBalanceAlgorithmClassName)) {
            result.setLoadBalanceAlgorithm(newInstance(loadBalanceAlgorithmClassName));
        }
        return result;
    }
    
    private MasterSlaveLoadBalanceAlgorithm newInstance(final String masterSlaveLoadBalanceAlgorithmClassName) {
        try {
            Class<?> result = Class.forName(masterSlaveLoadBalanceAlgorithmClassName);
            if (!MasterSlaveLoadBalanceAlgorithm.class.isAssignableFrom(result)) {
                throw new ShardingConfigurationException("Class %s should be implement %s", masterSlaveLoadBalanceAlgorithmClassName, MasterSlaveLoadBalanceAlgorithm.class.getName());
            }
            return (MasterSlaveLoadBalanceAlgorithm) result.newInstance();
        } catch (final ReflectiveOperationException ex) {
            throw new ShardingConfigurationException("Class %s should have public privilege and no argument constructor", masterSlaveLoadBalanceAlgorithmClassName);
        }
    }
}
+3 −7
Original line number Diff line number Diff line
@@ -83,13 +83,9 @@ public class YamlShardingRuleConfiguration {
        result.setDefaultKeyGeneratorClass(defaultKeyGeneratorClass);
        Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigs = new LinkedList<>();
        for (Entry<String, YamlMasterSlaveRuleConfiguration> entry : masterSlaveRules.entrySet()) {
            MasterSlaveRuleConfiguration msRuleConfig = new MasterSlaveRuleConfiguration();
            msRuleConfig.setName(entry.getKey());
            msRuleConfig.setMasterDataSourceName(entry.getValue().getMasterDataSourceName());
            msRuleConfig.setSlaveDataSourceNames(entry.getValue().getSlaveDataSourceNames());
            msRuleConfig.setLoadBalanceAlgorithmType(entry.getValue().getLoadBalanceAlgorithmType());
            msRuleConfig.setLoadBalanceAlgorithmClassName(entry.getValue().getLoadBalanceAlgorithmClassName());
            masterSlaveRuleConfigs.add(msRuleConfig);
            MasterSlaveRuleConfiguration each = entry.getValue().getMasterSlaveRuleConfiguration();
            each.setName(entry.getKey());
            masterSlaveRuleConfigs.add(each);
        }
        result.setMasterSlaveRuleConfigs(masterSlaveRuleConfigs);
        return result;
Loading