Commit 0bb27709 authored by haocao's avatar haocao
Browse files

Fixed #477.

parent 95347384
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package io.shardingjdbc.orchestration.spring.namespace.parser;

import io.shardingjdbc.orchestration.api.config.OrchestrationConfiguration;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.w3c.dom.Element;

/**
 * Abstract orchestration parser for spring namespace.
 * 
 * @author caohao
 */
public abstract class AbstractOrchestrationBeanDefinitionParser extends AbstractBeanDefinitionParser {
    
    protected BeanDefinition parseOrchestrationConfiguration(final Element element) {
        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(OrchestrationConfiguration.class);
        factory.addConstructorArgValue(element.getAttribute("id"));
        factory.addConstructorArgReference(element.getAttribute("registry-center-ref"));
        factory.addConstructorArgValue(Boolean.parseBoolean(element.getAttribute("overwrite")));
        return factory.getBeanDefinition();
    }
}
+8 −13
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType;
import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringMasterSlaveDataSource;
import io.shardingjdbc.orchestration.internal.OrchestrationMasterSlaveDataSource;
import io.shardingjdbc.orchestration.spring.datasource.SpringMasterSlaveDataSource;
import io.shardingjdbc.orchestration.spring.namespace.constants.MasterSlaveDataSourceBeanDefinitionParserTag;
import io.shardingjdbc.orchestration.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag;
@@ -29,7 +29,6 @@ import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
@@ -44,7 +43,7 @@ import java.util.Map;
 * @author caohao
 * @author zhangliang
 */
public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends AbstractBeanDefinitionParser {
public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends AbstractOrchestrationBeanDefinitionParser {
    
    @Override
    //CHECKSTYLE:OFF
@@ -54,7 +53,7 @@ public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends Abst
        if (Strings.isNullOrEmpty(regCenter)) {
            return getSpringMasterSlaveDataSourceBean(element, parserContext);
        }
        return getOrchestrationSpringMasterSlaveDataSourceBean(element, parserContext, regCenter);
        return getOrchestrationSpringMasterSlaveDataSourceBean(element, parserContext);
    }
    
    private AbstractBeanDefinition getSpringMasterSlaveDataSourceBean(final Element element, final ParserContext parserContext) {
@@ -73,14 +72,14 @@ public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends Abst
        return factory.getBeanDefinition();
    }
    
    private AbstractBeanDefinition getOrchestrationSpringMasterSlaveDataSourceBean(final Element element, final ParserContext parserContext, final String regCenter) {
        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(OrchestrationSpringMasterSlaveDataSource.class);
        factory.addConstructorArgValue(parseId(element));
        factory.addConstructorArgValue(parseOverwrite(element));
        factory.addConstructorArgReference(regCenter);
    private AbstractBeanDefinition getOrchestrationSpringMasterSlaveDataSourceBean(final Element element, final ParserContext parserContext) {
        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(OrchestrationMasterSlaveDataSource.class);
        factory.addConstructorArgValue(parseDataSources(element, parserContext));
        factory.addConstructorArgValue(parseMasterSlaveRuleConfig(element, parserContext));
        factory.addConstructorArgValue(parseConfigMap(element, parserContext, factory.getBeanDefinition()));
        factory.addConstructorArgValue(parseOrchestrationConfiguration(element));
        factory.setInitMethodName("init");
        factory.setDestroyMethodName("close");
        return factory.getBeanDefinition();
    }
    
@@ -88,10 +87,6 @@ public class OrchestrationMasterSlaveDataSourceBeanDefinitionParser extends Abst
        return element.getAttribute(ID_ATTRIBUTE);
    }
    
    private boolean parseOverwrite(final Element element) {
        return Boolean.parseBoolean(element.getAttribute("overwrite"));
    }
    
    private String parseRegistryCenterRef(final Element element) {
        return element.getAttribute("registry-center-ref");
    }
+5 −7
Original line number Diff line number Diff line
@@ -21,14 +21,13 @@ import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import io.shardingjdbc.core.api.config.ShardingRuleConfiguration;
import io.shardingjdbc.core.api.config.TableRuleConfiguration;
import io.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringShardingDataSource;
import io.shardingjdbc.orchestration.internal.OrchestrationShardingDataSource;
import io.shardingjdbc.orchestration.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
@@ -45,20 +44,19 @@ import java.util.Properties;
 * @author caohao
 * @author zhangliang
 */
public class OrchestrationShardingDataSourceBeanDefinitionParser extends AbstractBeanDefinitionParser {
public class OrchestrationShardingDataSourceBeanDefinitionParser extends AbstractOrchestrationBeanDefinitionParser {
    
    @Override
    //CHECKSTYLE:OFF
    protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
    //CHECKSTYLE:ON
        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(OrchestrationSpringShardingDataSource.class);
        factory.addConstructorArgValue(element.getAttribute("id"));
        factory.addConstructorArgValue(Boolean.parseBoolean(element.getAttribute("overwrite")));
        factory.addConstructorArgReference(element.getAttribute("registry-center-ref"));
        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(OrchestrationShardingDataSource.class);
        factory.addConstructorArgValue(parseDataSources(element, parserContext));
        factory.addConstructorArgValue(parseShardingRuleConfig(element));
        factory.addConstructorArgValue(parseConfigMap(element, parserContext, factory.getBeanDefinition()));
        factory.addConstructorArgValue(parseProperties(element, parserContext));
        factory.addConstructorArgValue(parseOrchestrationConfiguration(element));
        factory.setInitMethodName("init");
        factory.setDestroyMethodName("close");
        return factory.getBeanDefinition();
    }
+2 −2
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import io.shardingjdbc.core.api.algorithm.masterslave.RandomMasterSlaveLoadBalan
import io.shardingjdbc.core.api.algorithm.masterslave.RoundRobinMasterSlaveLoadBalanceAlgorithm;
import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource;
import io.shardingjdbc.core.rule.MasterSlaveRule;
import io.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringMasterSlaveDataSource;
import io.shardingjdbc.orchestration.internal.OrchestrationMasterSlaveDataSource;
import io.shardingjdbc.orchestration.spring.util.EmbedTestingServer;
import io.shardingjdbc.orchestration.spring.util.FieldValueUtil;
import org.apache.commons.lang3.builder.EqualsBuilder;
@@ -51,7 +51,7 @@ public class OrchestrationMasterSlaveNamespaceTest extends AbstractJUnit4SpringC
    
    @Test
    public void assertMasterSlaveDataSourceType() {
        assertTrue(this.applicationContext.getBean("defaultMasterSlaveDataSource", MasterSlaveDataSource.class) instanceof OrchestrationSpringMasterSlaveDataSource);
        assertTrue(this.applicationContext.getBean("defaultMasterSlaveDataSource", OrchestrationMasterSlaveDataSource.class) instanceof OrchestrationMasterSlaveDataSource);
    }
    
    @Test
+4 −2
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package io.shardingjdbc.orchestration.api;

import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.orchestration.api.config.OrchestrationConfiguration;
import io.shardingjdbc.orchestration.internal.OrchestrationFacade;
import io.shardingjdbc.orchestration.internal.OrchestrationMasterSlaveDataSource;
import io.shardingjdbc.orchestration.yaml.YamlOrchestrationMasterSlaveRuleConfiguration;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -57,7 +57,9 @@ public final class OrchestrationMasterSlaveDataSourceFactory {
    public static DataSource createDataSource(
            final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, 
            final Map<String, Object> configMap, final OrchestrationConfiguration orchestrationConfig) throws SQLException {
        return new OrchestrationFacade(orchestrationConfig).getOrchestrationMasterSlaveDataSource(dataSourceMap, masterSlaveRuleConfig, configMap);
        OrchestrationMasterSlaveDataSource result = new OrchestrationMasterSlaveDataSource(dataSourceMap, masterSlaveRuleConfig, configMap, orchestrationConfig);
        result.init();
        return result;
    }
    
    /**
Loading