package com.taobao.tddl.optimizer; import com.taobao.tddl.common.model.Matrix; import com.taobao.tddl.common.utils.thread.ThreadLocalMap; import com.taobao.tddl.optimizer.config.table.IndexManager; import com.taobao.tddl.optimizer.config.table.SchemaManager; import com.taobao.tddl.optimizer.costbased.esitimater.stat.StatManager; import com.taobao.tddl.optimizer.rule.OptimizerRule; /** * 优化器上下文,主要解决一些共享上下文对象,因为不考虑spring进行IOC控制,所以一些对象/工具之间的依赖就很蛋疼,就搞了这么一个上下文 * * <pre> * 考虑基于ThreadLocal进行上下文传递,几个原因: * 1. 减少context传递,ast/expression/plan基本都是无状态的,不希望某个特定代码需要依赖context,而导致整个链路对象都需要传递context上下文 * 2. context上下文中的对象,本身为支持线程安全,每个tddl客户端实例只有一份,一个jvm实例允许多个tddl客户端实例,所以不能搞成static对象 * </pre> * * @author jianghang 2013-11-12 下午3:07:19 */ public class OptimizerContext { private static final String OPTIMIZER_CONTEXT_KEY = "_optimizer_context_"; // 配置信息 private Matrix matrix; private SchemaManager schemaManager; private IndexManager indexManager; private OptimizerRule rule; private Optimizer optimizer; private StatManager statManager; public static OptimizerContext getContext() { return (OptimizerContext) ThreadLocalMap.get(OPTIMIZER_CONTEXT_KEY); } public static void setContext(OptimizerContext context) { ThreadLocalMap.put(OPTIMIZER_CONTEXT_KEY, context); } public Matrix getMatrix() { return matrix; } public void setMatrix(Matrix matrix) { this.matrix = matrix; } public SchemaManager getSchemaManager() { return schemaManager; } public void setSchemaManager(SchemaManager schemaManager) { this.schemaManager = schemaManager; } public IndexManager getIndexManager() { return indexManager; } public void setIndexManager(IndexManager indexManager) { this.indexManager = indexManager; } public OptimizerRule getRule() { return rule; } public void setRule(OptimizerRule rule) { this.rule = rule; } public Optimizer getOptimizer() { return optimizer; } public void setOptimizer(Optimizer optimizer) { this.optimizer = optimizer; } public StatManager getStatManager() { return statManager; } public void setStatManager(StatManager statManager) { this.statManager = statManager; } }