diff --git a/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java b/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java index 53468c0657822ab30424b3b1bef6436c2e1b6fa4..1b7b24fc5c64261c7abc72bdd30fe0dcfcc7fd55 100644 --- a/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java +++ b/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java @@ -6,10 +6,13 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; import org.unidal.dal.jdbc.DalException; +import org.unidal.helper.Threads; +import org.unidal.helper.Threads.Task; import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; @@ -31,25 +34,25 @@ public class HostinfoService implements Initializable { public boolean deleteHostinfo(Hostinfo host) { int id = host.getId(); Iterator> iterator = m_hostinfos.entrySet().iterator(); + String ip = null; while (iterator.hasNext()) { Entry entry = iterator.next(); Hostinfo hostinfo = entry.getValue(); if (hostinfo.getId() == id) { - iterator.remove(); - - try { - hostinfo.setKeyId(hostinfo.getId()); - m_hostinfoDao.deleteByPK(hostinfo); - return true; - } catch (Exception e) { - Cat.logError("delete hostinfo error " + hostinfo.toString(), e); - return false; - } + ip = hostinfo.getIp(); + break; } } - return true; + try { + m_hostinfos.remove(ip); + m_hostinfoDao.deleteByPK(host); + return true; + } catch (Exception e) { + Cat.logError("delete hostinfo error " + host.toString(), e); + return false; + } } public List findAll() throws DalException { @@ -76,10 +79,17 @@ public class HostinfoService implements Initializable { @Override public void initialize() throws InitializationException { + Threads.forGroup("Cat").start(new HostinfoReloadTask()); + } + + public void refresh() { try { List hostinfos = m_hostinfoDao.findAllIp(HostinfoEntity.READSET_FULL); - for (Hostinfo hostinfo : hostinfos) { - m_hostinfos.put(hostinfo.getIp(), hostinfo); + + synchronized (this) { + for (Hostinfo hostinfo : hostinfos) { + m_hostinfos.put(hostinfo.getIp(), hostinfo); + } } } catch (DalException e) { Cat.logError("initialize HostService error", e); @@ -108,4 +118,39 @@ public class HostinfoService implements Initializable { return false; } } + + public class HostinfoReloadTask implements Task { + + @Override + public void run() { + boolean active = true; + + while (active) { + try { + refresh(); + } catch (Exception ex) { + Cat.logError("reload hostinfo error", ex); + } + + try { + TimeUnit.MINUTES.sleep(1); + } catch (InterruptedException ex) { + Cat.logError("reload hostinfo stop", ex); + active = false; + } + } + + } + + @Override + public String getName() { + return "hostinfo-reload"; + } + + @Override + public void shutdown() { + } + + } + } diff --git a/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java b/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java index 972bf3f1631424d08f6fe321d2e13dfb8142949c..f9ee49f8e16ef493569d0c3b3b4a285b1d4f1dfa 100644 --- a/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java +++ b/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java @@ -6,10 +6,13 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; import org.unidal.dal.jdbc.DalException; +import org.unidal.helper.Threads; +import org.unidal.helper.Threads.Task; import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; @@ -31,25 +34,26 @@ public class ProjectService implements Initializable { public boolean deleteProject(Project project) { int id = project.getId(); Iterator> iterator = m_projects.entrySet().iterator(); + String domainName = null; while (iterator.hasNext()) { Entry entry = iterator.next(); Project pro = entry.getValue(); - if (pro.getId() == id) { - iterator.remove(); - try { - pro.setKeyId(pro.getId()); - m_projectDao.deleteByPK(pro); - return true; - } catch (Exception e) { - Cat.logError("delete project error " + pro.toString(), e); - return false; - } + if (pro.getId() == id) { + domainName = pro.getDomain(); + break; } } - return true; + try { + m_projects.remove(domainName); + m_projectDao.deleteByPK(project); + return true; + } catch (Exception e) { + Cat.logError("delete project error ", e); + return false; + } } public List findAll() throws DalException { @@ -66,20 +70,27 @@ public class ProjectService implements Initializable { while (iterator.hasNext()) { Entry entry = iterator.next(); Project pro = entry.getValue(); + if (pro.getId() == id) { return pro; } } - return new Project(); } @Override public void initialize() throws InitializationException { + Threads.forGroup("Cat").start(new ProjectReloadTask()); + } + + public void refresh() { try { List projects = m_projectDao.findAll(ProjectEntity.READSET_FULL); - for (Project project : projects) { - m_projects.put(project.getDomain(), project); + + synchronized (this) { + for (Project project : projects) { + m_projects.put(project.getDomain(), project); + } } } catch (DalException e) { Cat.logError("initialize ProjectService error", e); @@ -108,4 +119,38 @@ public class ProjectService implements Initializable { return false; } } + + public class ProjectReloadTask implements Task { + + @Override + public void run() { + boolean active = true; + + while (active) { + try { + refresh(); + } catch (Exception ex) { + Cat.logError("reload project error", ex); + } + + try { + TimeUnit.MINUTES.sleep(1); + } catch (InterruptedException ex) { + Cat.logError("reload project stop", ex); + active = false; + } + } + } + + @Override + public String getName() { + return "project-reload"; + } + + @Override + public void shutdown() { + } + + } + } diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index f1921f0f214bf77b1120ca38018be6e2abe7a871..a8d6a67b165b28a76402f47dd7d9e2a4ba8c9ade 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -3258,7 +3258,7 @@ com.dianping.cat.DomainManager - com.dianping.cat.core.dal.HostinfoDao + com.dianping.cat.service.HostinfoService com.dianping.cat.service.ProjectService @@ -3268,6 +3268,15 @@ + + com.dianping.cat.service.HostinfoService + com.dianping.cat.service.HostinfoService + + + com.dianping.cat.core.dal.HostinfoDao + + + com.dianping.cat.core.dal.HostinfoDao com.dianping.cat.core.dal.HostinfoDao