package com.justdebugit.thrift.pool; import java.util.Map; import org.apache.commons.lang3.tuple.ImmutablePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.justdebugit.thrift.registry.ChangeListener; import com.justdebugit.thrift.registry.NodeEvent; import com.justdebugit.thrift.registry.Registry; public class AjustingLifeCycleMap extends NotifiableLifeCycleMap{ private static final long serialVersionUID = -6764469565224658815L; private static final Logger LOGGER = LoggerFactory.getLogger(AjustingLifeCycleMap.class); private final Registry registry ; private final String path; private volatile ChangeListener changeListener = null; public AjustingLifeCycleMap(String path,Registry registry) { this.registry = registry; this.path = path; start(); } @Override protected void doStart() { changeListener = new ChangeListener() { @Override public void onChange(NodeEvent event) { ImmutablePair<String, byte[]> data = event.getData(); switch (event.getType()) { case CHILD_ADDED: putIfAbsent(data.getKey(),data.getValue()); break; case CHILD_REMOVED: remove(data.getKey()); break; case CHILD_UPDATED: put(data.getKey(),data.getValue()); break; default: break; } getEventBus().post(event); } }; registry.subscribe(path, changeListener); Map<String, byte[]> map = registry.getChildren(path); if (map!=null) { putAll(map); }else { LOGGER.warn("path not exists"); registry.register(path); } } @Override protected void doStop() { if (changeListener==null) { registry.unsubscribe(path, changeListener); } } }