package dk.thoerup.traininfoservice; import java.util.logging.Logger; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletRegistration; import javax.servlet.annotation.WebListener; import dk.thoerup.circuitbreaker.AccountingCircuitBreaker; import dk.thoerup.circuitbreaker.CircuitBreakerManager; import dk.thoerup.circuitbreaker.LoggingCircuitBreaker; import dk.thoerup.circuitbreaker.notification.CompositeNotifier; import dk.thoerup.circuitbreaker.notification.JavaLogNotifier; import dk.thoerup.circuitbreaker.notification.MailNotifier; /** * Application Lifecycle Listener implementation class JmxListener * */ @WebListener public class CircuitBreakerListener implements ServletContextListener { Logger logger = Logger.getLogger(CircuitBreakerListener.class.getName()); public CircuitBreakerListener() { } /** * @see ServletContextListener#contextInitialized(ServletContextEvent) */ public void contextInitialized(ServletContextEvent sce) { logger.warning("Context Init"); TraininfoSettings settings = SettingsListener.loadSettings( sce.getServletContext() ); CircuitBreakerManager mgr = CircuitBreakerManager.getManager(); CompositeNotifier notif = new CompositeNotifier(); notif.addNotifier( new JavaLogNotifier() ); //only send mail on prod server if (sce.getServletContext().getRealPath("/").startsWith("/home/app/") ) { notif.addNotifier( new MailNotifier("traininfo@t-hoerup.dk", "torben@t-hoerup.dk", "192.168.10.5") ); } LoggingCircuitBreaker banedk = new LoggingCircuitBreaker("banedk", settings); banedk.setNotifier(notif); mgr.addCircuitBreaker( banedk ); AccountingCircuitBreaker metro = new AccountingCircuitBreaker("metro", settings); metro.setNotifier(notif); mgr.addCircuitBreaker( metro ); ServletRegistration.Dynamic dynconf = sce.getServletContext().addServlet("circuitbreaker", dk.thoerup.circuitbreaker.web.CircuitBreakerServletBase.class ); dynconf.addMapping("/CircuitBreakerServlet"); dynconf.setInitParameter("readonly", "0"); //JMXWrapper.registerAllCircuitBreakers(); } /** * @see ServletContextListener#contextDestroyed(ServletContextEvent) */ public void contextDestroyed(ServletContextEvent sce) { logger.warning("Context Destroyed"); CircuitBreakerManager.getManager().shutdown(); //JMXWrapper.unregisterAllCircuitBreakers(); } }