Java tutorial
/** * Copyright 1999-2011 Alibaba Group * * 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. */ package com.alibaba.cobar.client.router.config; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; import org.springframework.util.ObjectUtils; import com.alibaba.cobar.client.router.CobarClientInternalRouter; import com.alibaba.cobar.client.router.rules.IRoutingRule; import com.alibaba.cobar.client.router.support.IBatisRoutingFact; public abstract class AbstractCobarInternalRouterConfigurationFactoryBean implements FactoryBean, InitializingBean { private CobarClientInternalRouter router; private boolean enableCache; private int cacheSize; private Resource configLocation; private Resource[] configLocations; private Map<String, Object> functionsMap = new HashMap<String, Object>(); public Object getObject() throws Exception { return this.router; } @SuppressWarnings("unchecked") public Class getObjectType() { return CobarClientInternalRouter.class; } public boolean isSingleton() { return true; } public void afterPropertiesSet() throws Exception { if (enableCache) { if (cacheSize <= 0) { setCacheSize(10000); } } this.router = new CobarClientInternalRouter(enableCache, cacheSize); final Set<IRoutingRule<IBatisRoutingFact, List<String>>> sqlActionShardingRules = new HashSet<IRoutingRule<IBatisRoutingFact, List<String>>>(); final Set<IRoutingRule<IBatisRoutingFact, List<String>>> sqlActionRules = new HashSet<IRoutingRule<IBatisRoutingFact, List<String>>>(); final Set<IRoutingRule<IBatisRoutingFact, List<String>>> namespaceShardingRules = new HashSet<IRoutingRule<IBatisRoutingFact, List<String>>>(); final Set<IRoutingRule<IBatisRoutingFact, List<String>>> namespaceRules = new HashSet<IRoutingRule<IBatisRoutingFact, List<String>>>(); if (getConfigLocation() != null) { assembleRulesForRouter(this.router, getConfigLocation(), sqlActionShardingRules, sqlActionRules, namespaceShardingRules, namespaceRules); } if (!ObjectUtils.isEmpty(getConfigLocations())) { for (Resource res : getConfigLocations()) { assembleRulesForRouter(this.router, res, sqlActionShardingRules, sqlActionRules, namespaceShardingRules, namespaceRules); } } List<Set<IRoutingRule<IBatisRoutingFact, List<String>>>> ruleSequences = new ArrayList<Set<IRoutingRule<IBatisRoutingFact, List<String>>>>() { private static final long serialVersionUID = 1493353938640646578L; { add(sqlActionShardingRules); add(sqlActionRules); add(namespaceShardingRules); add(namespaceRules); } }; router.setRuleSequences(ruleSequences); } /** * Subclass just needs to read in rule configurations and assemble the * router with the rules read from configurations. * * @param router * @param namespaceRules * @param namespaceShardingRules * @param sqlActionRules * @param sqlActionShardingRules */ protected abstract void assembleRulesForRouter(CobarClientInternalRouter router, Resource configLocation, Set<IRoutingRule<IBatisRoutingFact, List<String>>> sqlActionShardingRules, Set<IRoutingRule<IBatisRoutingFact, List<String>>> sqlActionRules, Set<IRoutingRule<IBatisRoutingFact, List<String>>> namespaceShardingRules, Set<IRoutingRule<IBatisRoutingFact, List<String>>> namespaceRules) throws IOException; public void setConfigLocation(Resource configLocation) { this.configLocation = configLocation; } public Resource getConfigLocation() { return configLocation; } public void setConfigLocations(Resource[] configLocations) { this.configLocations = configLocations; } public Resource[] getConfigLocations() { return configLocations; } public void setEnableCache(boolean enableCache) { this.enableCache = enableCache; } public boolean isEnableCache() { return enableCache; } public void setCacheSize(int cacheSize) { this.cacheSize = cacheSize; } public int getCacheSize() { return cacheSize; } public void setFunctionsMap(Map<String, Object> functionMaps) { if (functionMaps == null) { return; } this.functionsMap = functionMaps; } public Map<String, Object> getFunctionsMap() { return functionsMap; } }