package com.netflix.eureka; import com.netflix.discovery.converters.JsonXStream; import com.netflix.discovery.converters.XmlXStream; import com.netflix.eureka.util.EurekaMonitors; import com.netflix.governator.LifecycleInjector; import com.netflix.governator.guice.servlet.GovernatorServletContextListener; import com.thoughtworks.xstream.XStream; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; /** * @author David Liu */ public class EurekaContextListener extends GovernatorServletContextListener { private EurekaServerContext serverContext; @Override public void contextInitialized(ServletContextEvent servletContextEvent) { super.contextInitialized(servletContextEvent); ServletContext sc = servletContextEvent.getServletContext(); sc.setAttribute(EurekaServerContext.class.getName(), serverContext); // Copy registry from neighboring eureka node int registryCount = serverContext.getRegistry().syncUp(); serverContext.getRegistry().openForTraffic(serverContext.getApplicationInfoManager(), registryCount); // Register all monitoring statistics. EurekaMonitors.registerAllStats(); } public void contextDestroyed(ServletContextEvent servletContextEvent) { EurekaMonitors.shutdown(); ServletContext sc = servletContextEvent.getServletContext(); sc.removeAttribute(EurekaServerContext.class.getName()); super.contextDestroyed(servletContextEvent); } @Override protected LifecycleInjector createInjector() { // For backward compatibility JsonXStream.getInstance().registerConverter(new V1AwareInstanceInfoConverter(), XStream.PRIORITY_VERY_HIGH); XmlXStream.getInstance().registerConverter(new V1AwareInstanceInfoConverter(), XStream.PRIORITY_VERY_HIGH); LifecycleInjector injector = EurekaInjectorCreator.createInjector(); serverContext = injector.getInstance(EurekaServerContext.class); return injector; } }