package net.sourceforge.cruisecontrol.dashboard.service; import net.sourceforge.cruisecontrol.BuildLoopInformation.JmxInfo; import net.sourceforge.cruisecontrol.dashboard.repository.BuildInformationRepository; import org.aspectj.lang.ProceedingJoinPoint; import javax.management.MBeanServerConnection; import java.util.HashMap; import java.util.Map; public class JmxConnectionCacheService { private BuildInformationRepository buildInfoRepository; private Map cachedConnections = new HashMap(); public JmxConnectionCacheService(BuildInformationRepository buildInfoRepository) { this.buildInfoRepository = buildInfoRepository; } public MBeanServerConnection getJMXConnection(ProceedingJoinPoint pjp, String projectName) throws Throwable { JmxInfo newJmxInfo = buildInfoRepository.getBuildLoopInfo(projectName).getJmxInfo(); if (!cachedConnections.containsKey(newJmxInfo)) { cachedConnections.put(newJmxInfo, pjp.proceed()); } return (MBeanServerConnection) cachedConnections.get(newJmxInfo); } }