/** * Project: doris.dataserver.server-0.1.0-SNAPSHOT File Created at 2011-6-2 $Id$ Copyright 1999-2100 Alibaba.com * Corporation Limited. All rights reserved. This software is the confidential and proprietary information of Alibaba * Company. ("Confidential Information"). You shall not disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into with Alibaba.com. */ package com.alibaba.doris.dataserver.adminserver.config; import org.apache.commons.lang.StringUtils; import com.alibaba.doris.common.config.ConfigException; import com.alibaba.doris.common.config.ConfigManager; import com.alibaba.doris.common.config.ConfigManagerImpl; import com.alibaba.doris.common.configer.RouteTableConfiger; import com.alibaba.doris.common.event.RouteConfigListener; import com.alibaba.doris.common.route.RouteTable; import com.alibaba.doris.common.router.service.RouteStrategyImpl; import com.alibaba.doris.common.router.service.RouteTableConfigerImpl; import com.alibaba.doris.dataserver.BaseModule; import com.alibaba.doris.dataserver.DataServerException; import com.alibaba.doris.dataserver.FatalModuleInitializationException; import com.alibaba.doris.dataserver.ModuleContext; import com.alibaba.doris.dataserver.ModuleContextAware; import com.alibaba.doris.dataserver.config.data.ModuleConfigure; /** * TODO Comment of AdminServerConfigModule * * @author mian.hem */ public class AdminServerConfigModule extends BaseModule implements ModuleContextAware { private RouteTableConfiger routeTableConfiger = null; private ConfigManager configManager = null; public void load(ModuleConfigure conf) { String configLocation = conf.getParam("adminserver.configuration.location"); if (StringUtils.isEmpty(configLocation)) { throw new FatalModuleInitializationException("property \"adminserver.configuration.location\" is not set"); } configManager = new ConfigManagerImpl(); configManager.setConfigLocation(configLocation); try { configManager.initConfig(); } catch (ConfigException e) { throw new FatalModuleInitializationException("init config manager failed.", e); } // TODO:add the correct listener. this.routeTableConfiger = new RouteTableConfigerImpl(); RouteConfigListener routeStrategy = new RouteStrategyImpl(); routeTableConfiger.addConfigListener(routeStrategy); configManager.addConfigListener(routeTableConfiger); ModuleContext moduleContext = getModuleContext(); // add to applicationContext moduleContext.getApplicationContext().setAttribute("configManager", configManager); moduleContext.getApplicationContext().setAttribute("routeTableConfiger", routeTableConfiger); // TODO: if not used remove below. moduleContext.setAttribute("routeTableConfiger", routeTableConfiger); } public void unload() { configManager.removeConfigListener(routeTableConfiger); } /** * Returns the route table will is fetched from admin server by interval. */ public RouteTable getRouteTable() { if (routeTableConfiger == null) { throw new DataServerException("AdminServerConfigModule is not loaded correctly."); } return routeTableConfiger.getRouteTable(); } }