package com.taobao.tddl.atom.config;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import com.taobao.tddl.atom.common.TAtomConstants;
import com.taobao.tddl.common.exception.TddlException;
import com.taobao.tddl.config.ConfigDataHandler;
import com.taobao.tddl.config.ConfigDataHandlerFactory;
import com.taobao.tddl.config.ConfigDataListener;
import com.taobao.tddl.config.impl.ConfigDataHandlerCity;
import com.taobao.tddl.common.utils.logger.Logger;
import com.taobao.tddl.common.utils.logger.LoggerFactory;
/**
* 全局和应用的配置管理Diamond实现
*
* @author qihao
*/
public class AtomConfigManager implements DbConfManager {
private static Logger logger = LoggerFactory.getLogger(AtomConfigManager.class);
private String globalConfigDataId;
private String appConfigDataId;
private String unitName;
private ConfigDataHandlerFactory configFactory;
private ConfigDataHandler globalHandler;
private ConfigDataHandler appDBHandler;
private volatile List<ConfigDataListener> globalDbConfListener = new ArrayList<ConfigDataListener>();
private volatile List<ConfigDataListener> appDbConfListener = new ArrayList<ConfigDataListener>();
public void init(String appName) {
configFactory = ConfigDataHandlerCity.getFactory(appName, unitName);
Map<String, Object> config = new HashMap<String, Object>();
config.put("group", TAtomConstants.DEFAULT_DIAMOND_GROUP);
globalHandler = configFactory.getConfigDataHandler(globalConfigDataId,
globalDbConfListener,
Executors.newSingleThreadScheduledExecutor(),
config);
appDBHandler = configFactory.getConfigDataHandler(appConfigDataId,
appDbConfListener,
Executors.newSingleThreadScheduledExecutor(),
config);
}
public String getAppDbConfDataId() {
return appConfigDataId;
}
public String getAppDbDbConf() {
if (null != appDBHandler) {
return appDBHandler.getData(ConfigDataHandler.GET_DATA_TIMEOUT,
ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);
}
logger.error("[getDataError] appDBConfig not init !");
return null;
}
public String getGlobalDbConf() {
if (null != globalHandler) {
return globalHandler.getData(ConfigDataHandler.GET_DATA_TIMEOUT,
ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);
}
logger.error("[getDataError] globalConfig not init !");
return null;
}
public void setGlobalConfigDataId(String globalConfigDataId) {
this.globalConfigDataId = globalConfigDataId;
}
public String getAppConfigDataId() {
return appConfigDataId;
}
public void setAppConfigDataId(String appConfigDataId) {
this.appConfigDataId = appConfigDataId;
}
public String getUnitName() {
return unitName;
}
public void setUnitName(String unitName) {
this.unitName = unitName;
}
/**
* @param Listener
*/
public void registerGlobaDbConfListener(ConfigDataListener listener) {
globalDbConfListener.add(listener);
}
/**
* @param Listener
*/
public void registerAppDbConfListener(ConfigDataListener listener) {
appDbConfListener.add(listener);
}
@Override
public void stopDbConfManager() throws TddlException {
if (null != this.globalHandler) {
this.globalHandler.destory();
}
if (null != this.appDBHandler) {
this.appDBHandler.destory();
}
}
}