Package com.alibaba.cobar.client.router.config

Source Code of com.alibaba.cobar.client.router.config.AbstractCobarClientInternalRouterFactoryBean

/**
* 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.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;

import com.alibaba.cobar.client.router.DefaultCobarClientInternalRouter;
import com.alibaba.cobar.client.router.ICobarRouter;
import com.alibaba.cobar.client.router.aspects.RoutingResultCacheAspect;
import com.alibaba.cobar.client.router.config.support.InternalRuleLoader4DefaultInternalRouter;
import com.alibaba.cobar.client.router.config.vo.InternalRule;
import com.alibaba.cobar.client.router.support.IBatisRoutingFact;
import com.alibaba.cobar.client.support.LRUMap;

/**
* Top super class used to configure DefaultCobarClientInternalRouter instances.<br>
*
* @author fujohnwang
* @see DefaultCobarClientInternalRouter
* @see DefaultCobarClientInternalRouterXmlFactoryBean
* @see StaticCobarClientInternalRouterFactoryBean
*/
public abstract class AbstractCobarClientInternalRouterFactoryBean implements FactoryBean,
        InitializingBean {
    private ICobarRouter<IBatisRoutingFact>          router;

    private Map<String, Object>                      functionsMap = new HashMap<String, Object>();

    private InternalRuleLoader4DefaultInternalRouter ruleLoader   = new InternalRuleLoader4DefaultInternalRouter();

    private boolean                                  enableCache;
    private int                                      cacheSize    = -1;

    public Object getObject() throws Exception {
        return router;
    }

    @SuppressWarnings("unchecked")
    public Class getObjectType() {
        return ICobarRouter.class;
    }

    public boolean isSingleton() {
        return true;
    }

    @SuppressWarnings("unchecked")
    public void afterPropertiesSet() throws Exception {

        DefaultCobarClientInternalRouter routerToUse = new DefaultCobarClientInternalRouter();

        List<InternalRule> rules = loadRulesFromExternal();

        getRuleLoader().loadRulesAndEquipRouter(rules, routerToUse, getFunctionsMap());

        if (isEnableCache()) {
            ProxyFactory proxyFactory = new ProxyFactory(routerToUse);
            proxyFactory.setInterfaces(new Class[] { ICobarRouter.class });
            RoutingResultCacheAspect advice = new RoutingResultCacheAspect();
            if (cacheSize > 0) {
                advice.setInternalCache(new LRUMap(cacheSize));
            }
            proxyFactory.addAdvice(advice);
            this.router = (ICobarRouter<IBatisRoutingFact>) proxyFactory.getProxy();
        } else {
            this.router = routerToUse;
        }
    }

    protected abstract List<InternalRule> loadRulesFromExternal() throws Exception;

    public ICobarRouter<IBatisRoutingFact> getRouter() {
        return router;
    }

    public void setRouter(ICobarRouter<IBatisRoutingFact> router) {
        this.router = router;
    }

    public Map<String, Object> getFunctionsMap() {
        return functionsMap;
    }

    public void setFunctionsMap(Map<String, Object> functionsMap) {
        this.functionsMap = functionsMap;
    }

    public InternalRuleLoader4DefaultInternalRouter getRuleLoader() {
        return ruleLoader;
    }

    public void setRuleLoader(InternalRuleLoader4DefaultInternalRouter ruleLoader) {
        this.ruleLoader = ruleLoader;
    }

    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;
    }

}
TOP

Related Classes of com.alibaba.cobar.client.router.config.AbstractCobarClientInternalRouterFactoryBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.