/**
*
*/
package com.taobao.top.analysis.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import com.taobao.top.analysis.config.IConfig;
/**
* 简单的监控节点数据变化,将变化的数据设置到config中
* @author fangweng
* email: fangweng@taobao.com
* 下午1:31:34
*
*/
public class AnalyzerZKWatcher<C extends IConfig> implements Watcher{
private static final Log logger = LogFactory.getLog(AnalyzerZKWatcher.class);
ZooKeeper zk;
C config;
public AnalyzerZKWatcher(C config)
{
this.config = config;
}
public ZooKeeper getZk() {
return zk;
}
public void setZk(ZooKeeper zk) {
this.zk = zk;
}
@Override
public void process(WatchedEvent event) {
switch(event.getType())
{
case None:
break;
case NodeCreated:
break;
case NodeDeleted:
break;
case NodeDataChanged:
try
{
String path = event.getPath();
byte[] result = zk.getData(path, true, null);
String content = new String(result,"utf-8");
if (logger.isWarnEnabled())
{
logger.warn(new StringBuilder("config : ")
.append(path).append(" change, value : ").append(content).toString());
}
config.unmarshal(content);
}
catch(Exception ex)
{
ex.printStackTrace();
}
break;
case NodeChildrenChanged:
break;
default:
}
}
}