Skip to content

Commit

Permalink
支持功能点 #67
Browse files Browse the repository at this point in the history
希望能增加非注解的回调类来处理更新配置
  • Loading branch information
knightliao committed Mar 23, 2016
1 parent 44c2ea5 commit 81ed3dc
Show file tree
Hide file tree
Showing 17 changed files with 248 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@ public void setDisconfUpdatesActiveBackups(List<IDisconfUpdate> disconfUpdatesAc

@Override
public String toString() {
return "DisconfCommonCallbackModel [disconfConfUpdates=" + disconfConfUpdates +
", disconfUpdatesActiveBackups=" + disconfUpdatesActiveBackups + "]";
return "DisconfCommonCallbackModel{" +
"disconfConfUpdates=" + disconfConfUpdates +
", disconfUpdatesActiveBackups=" + disconfUpdatesActiveBackups +
'}';
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ public interface IDisconfSysUpdate {
*
* @throws Exception
*/
public void reload(DisconfCoreProcessor disconfCoreMgr, DisConfigTypeEnum disConfigTypeEnum, String keyName)
throws Exception;
void reload(DisconfCoreProcessor disconfCoreMgr, DisConfigTypeEnum disConfigTypeEnum, String keyName)
throws Exception;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
*/
public interface IDisconfUpdate {

public void reload() throws Exception;
void reload() throws Exception;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.baidu.disconf.client.common.update;

/**
* 通用型的配置更新接口。当配置更新 时,用户可以实现此接口,用以来实现回调函数.
*/
public interface IDisconfUpdatePipeline {

/**
* 配置文件
*
* @param key
* @param filePath
*
* @throws Exception
*/
void reloadDisconfFile(String key, String filePath) throws Exception;

/**
* 配置项
*
* @param key
* @param content
*
* @throws Exception
*/
void reloadDisconfItem(String key, Object content) throws Exception;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class DisconfCoreProcessUtils {
/**
* 调用此配置影响的回调函数
*/
public static void callOneConf(DisconfStoreProcessor disconfStoreProcessor, String key) throws Exception {
public static void callOneConf(DisconfStoreProcessor disconfStoreProcessor,
String key) throws Exception {

List<IDisconfUpdate> iDisconfUpdates = disconfStoreProcessor.getUpdateCallbackList(key);

Expand All @@ -34,6 +35,7 @@ public static void callOneConf(DisconfStoreProcessor disconfStoreProcessor, Stri

LOGGER.info("start to call " + iDisconfUpdate.getClass());

// set defined
try {

iDisconfUpdate.reload();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@

import com.baidu.disconf.client.common.model.DisConfCommonModel;
import com.baidu.disconf.client.common.model.DisconfCenterFile;
import com.baidu.disconf.client.common.update.IDisconfUpdatePipeline;
import com.baidu.disconf.client.config.DisClientConfig;
import com.baidu.disconf.client.core.filetype.FileTypeProcessorUtils;
import com.baidu.disconf.client.core.processor.DisconfCoreProcessor;
import com.baidu.disconf.client.fetcher.FetcherMgr;
import com.baidu.disconf.client.store.DisconfStoreProcessor;
import com.baidu.disconf.client.store.DisconfStoreProcessorFactory;
import com.baidu.disconf.client.store.inner.DisconfCenterStore;
import com.baidu.disconf.client.store.processor.model.DisconfValue;
import com.baidu.disconf.client.support.registry.Registry;
import com.baidu.disconf.client.watch.WatchMgr;
Expand Down Expand Up @@ -161,6 +163,28 @@ public void updateOneConfAndCallback(String key) throws Exception {

// 回调
DisconfCoreProcessUtils.callOneConf(disconfStoreProcessor, key);
callUpdatePipeline(key);
}

/**
* @param key
*/
private void callUpdatePipeline(String key) {

Object object = disconfStoreProcessor.getConfData(key);
if (object != null) {
DisconfCenterFile disconfCenterFile = (DisconfCenterFile) object;

IDisconfUpdatePipeline iDisconfUpdatePipeline =
DisconfCenterStore.getInstance().getiDisconfUpdatePipeline();
if (iDisconfUpdatePipeline != null) {
try {
iDisconfUpdatePipeline.reloadDisconfFile(key, disconfCenterFile.getFilePath());
} catch (Exception e) {
LOGGER.error(e.toString(), e);
}
}
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@

import com.baidu.disconf.client.common.model.DisConfCommonModel;
import com.baidu.disconf.client.common.model.DisconfCenterItem;
import com.baidu.disconf.client.common.update.IDisconfUpdatePipeline;
import com.baidu.disconf.client.config.DisClientConfig;
import com.baidu.disconf.client.core.processor.DisconfCoreProcessor;
import com.baidu.disconf.client.fetcher.FetcherMgr;
import com.baidu.disconf.client.store.DisconfStoreProcessor;
import com.baidu.disconf.client.store.DisconfStoreProcessorFactory;
import com.baidu.disconf.client.store.inner.DisconfCenterStore;
import com.baidu.disconf.client.store.processor.model.DisconfValue;
import com.baidu.disconf.client.support.registry.Registry;
import com.baidu.disconf.client.watch.WatchMgr;
Expand Down Expand Up @@ -152,6 +154,28 @@ public void updateOneConfAndCallback(String key) throws Exception {

// 回调
DisconfCoreProcessUtils.callOneConf(disconfStoreProcessor, key);
callUpdatePipeline(key);
}

/**
* @param key
*/
private void callUpdatePipeline(String key) {

Object object = disconfStoreProcessor.getConfData(key);
if (object != null) {
DisconfCenterItem disconfCenterItem = (DisconfCenterItem) object;

IDisconfUpdatePipeline iDisconfUpdatePipeline =
DisconfCenterStore.getInstance().getiDisconfUpdatePipeline();
if (iDisconfUpdatePipeline != null) {
try {
iDisconfUpdatePipeline.reloadDisconfItem(key, disconfCenterItem.getValue());
} catch (Exception e) {
LOGGER.error(e.toString(), e);
}
}
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@
import com.baidu.disconf.client.common.annotations.DisconfUpdateService;
import com.baidu.disconf.client.common.model.DisconfKey;
import com.baidu.disconf.client.common.update.IDisconfUpdate;
import com.baidu.disconf.client.common.update.IDisconfUpdatePipeline;
import com.baidu.disconf.client.scan.inner.common.ScanVerify;
import com.baidu.disconf.client.scan.inner.dynamic.model.ScanDynamicModel;
import com.baidu.disconf.client.scan.inner.statically.model.ScanStaticModel;
import com.baidu.disconf.client.store.DisconfStorePipelineProcessor;
import com.baidu.disconf.client.store.DisconfStoreProcessor;
import com.baidu.disconf.client.store.DisconfStoreProcessorFactory;
import com.baidu.disconf.client.support.registry.Registry;
Expand All @@ -42,6 +44,7 @@ public static void scanUpdateCallbacks(ScanStaticModel scanModel, Registry regis

// 写到仓库中
transformUpdateService(scanDynamicModel.getDisconfUpdateServiceInverseIndexMap());
transformPipelineService(scanDynamicModel.getDisconfUpdatePipeline());
}

/**
Expand Down Expand Up @@ -88,6 +91,17 @@ private static ScanDynamicModel analysis4DisconfUpdate(ScanStaticModel scanModel
ScanDynamicModel scanDynamicModel = new ScanDynamicModel();
scanDynamicModel.setDisconfUpdateServiceInverseIndexMap(inverseMap);

//
// set update pipeline
//
if (scanModel.getiDisconfUpdatePipeline() != null) {
IDisconfUpdatePipeline iDisconfUpdatePipeline = getIDisconfUpdatePipelineInstance(scanModel
.getiDisconfUpdatePipeline(), registry);
if (iDisconfUpdatePipeline != null) {
scanDynamicModel.setDisconfUpdatePipeline(iDisconfUpdatePipeline);
}
}

return scanDynamicModel;
}

Expand Down Expand Up @@ -159,6 +173,22 @@ private static IDisconfUpdate getIDisconfUpdateInstance(Class<?> disconfUpdateSe

}

/**
* 获取回调接口的实现
* //
*/
private static IDisconfUpdatePipeline getIDisconfUpdatePipelineInstance(
Class<IDisconfUpdatePipeline> disconfUpdateServiceClass,
Registry registry) {

Object iDisconfUpdate = registry.getFirstByType(disconfUpdateServiceClass);
if (iDisconfUpdate == null) {
return null;
}
return (IDisconfUpdatePipeline) iDisconfUpdate;

}

/**
* 将一个配置回调item写到map里
*/
Expand All @@ -176,6 +206,17 @@ private static void addOne2InverseMap(DisconfKey disconfKey, Map<DisconfKey, Lis
}
}

/**
* 第二次扫描<br/>
* 转换 pipeline 回调函数,将其写到 仓库中
*/
private static void transformPipelineService(IDisconfUpdatePipeline iDisconfUpdatePipeline) {

DisconfStorePipelineProcessor disconfStorePipelineProcessor = DisconfStoreProcessorFactory
.getDisconfStorePipelineProcessor();
disconfStorePipelineProcessor.setDisconfUpdatePipeline(iDisconfUpdatePipeline);
}

/**
* 第二次扫描<br/>
* 转换 更新 回调函数,将其写到 仓库中
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import com.baidu.disconf.client.common.model.DisconfKey;
import com.baidu.disconf.client.common.update.IDisconfUpdate;
import com.baidu.disconf.client.common.update.IDisconfUpdatePipeline;

/**
* 动态扫描对象
Expand All @@ -17,21 +18,34 @@ public class ScanDynamicModel {

// 配置及影响的回调函数, Key为配置项KEY 或 配置文件
private Map<DisconfKey, List<IDisconfUpdate>> disconfUpdateServiceInverseIndexMap =
new HashMap<DisconfKey, List<IDisconfUpdate>>();
new HashMap<DisconfKey, List<IDisconfUpdate>>();

private IDisconfUpdatePipeline disconfUpdatePipeline;

public Map<DisconfKey, List<IDisconfUpdate>> getDisconfUpdateServiceInverseIndexMap() {
return disconfUpdateServiceInverseIndexMap;
}

public IDisconfUpdatePipeline getDisconfUpdatePipeline() {
return disconfUpdatePipeline;
}

public void setDisconfUpdatePipeline(
IDisconfUpdatePipeline disconfUpdatePipeline) {
this.disconfUpdatePipeline = disconfUpdatePipeline;
}

public void setDisconfUpdateServiceInverseIndexMap(Map<DisconfKey,
List<IDisconfUpdate>>
disconfUpdateServiceInverseIndexMap) {
List<IDisconfUpdate>>
disconfUpdateServiceInverseIndexMap) {
this.disconfUpdateServiceInverseIndexMap = disconfUpdateServiceInverseIndexMap;
}

@Override
public String toString() {
return "ScanDynamicModel [disconfUpdateServiceInverseIndexMap=" + disconfUpdateServiceInverseIndexMap + "]";
return "ScanDynamicModel{" +
"disconfUpdateServiceInverseIndexMap=" + disconfUpdateServiceInverseIndexMap +
", disconfUpdatePipeline=" + disconfUpdatePipeline +
'}';
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import org.reflections.Reflections;

import com.baidu.disconf.client.common.update.IDisconfUpdatePipeline;

/**
* 扫描静态存储的对象
*
Expand Down Expand Up @@ -38,6 +40,7 @@ public class ScanStaticModel {
//
// 更新 回调函数类
private Set<Class<?>> disconfUpdateService;
private Class<IDisconfUpdatePipeline> iDisconfUpdatePipeline = null;

// 只是托管的配置文件,没有注入到类中
private Set<String> justHostFiles;
Expand Down Expand Up @@ -117,19 +120,29 @@ public void setJustHostFiles(Set<String> justHostFiles) {
this.justHostFiles = justHostFiles;
}

public Class<IDisconfUpdatePipeline> getiDisconfUpdatePipeline() {
return iDisconfUpdatePipeline;
}

public void setiDisconfUpdatePipeline(
Class<IDisconfUpdatePipeline> iDisconfUpdatePipeline) {
this.iDisconfUpdatePipeline = iDisconfUpdatePipeline;
}

@Override
public String toString() {
return "ScanStaticModel{" +
"reflections=" + reflections +
", disconfFileClassSet=" + disconfFileClassSet +
", disconfFileItemMethodSet=" + disconfFileItemMethodSet +
", disconfFileItemMap=" + disconfFileItemMap +
", disconfItemMethodSet=" + disconfItemMethodSet +
", disconfActiveBackupServiceClassSet=" + disconfActiveBackupServiceClassSet +
", disconfUpdateService=" + disconfUpdateService +
", justHostFiles=" + justHostFiles +
", reloadableFiles=" + reloadableFiles +
'}';
"reflections=" + reflections +
", disconfFileClassSet=" + disconfFileClassSet +
", disconfFileItemMethodSet=" + disconfFileItemMethodSet +
", disconfFileItemMap=" + disconfFileItemMap +
", disconfItemMethodSet=" + disconfItemMethodSet +
", iDisconfUpdatePipeline=" + iDisconfUpdatePipeline +
", disconfActiveBackupServiceClassSet=" + disconfActiveBackupServiceClassSet +
", disconfUpdateService=" + disconfUpdateService +
", justHostFiles=" + justHostFiles +
", reloadableFiles=" + reloadableFiles +
'}';
}

}
Loading

0 comments on commit 81ed3dc

Please sign in to comment.