001    package com.khubla.pragmatach.framework.listener;
002    
003    import java.lang.management.ManagementFactory;
004    
005    import javax.management.MBeanServer;
006    import javax.management.ObjectName;
007    import javax.servlet.ServletContextEvent;
008    import javax.servlet.ServletContextListener;
009    
010    import org.slf4j.Logger;
011    import org.slf4j.LoggerFactory;
012    
013    import com.khubla.pragmatach.framework.jmx.PerformanceStatisticsMXBean;
014    import com.khubla.pragmatach.framework.jmx.RouteCacheStatusMXBean;
015    import com.khubla.pragmatach.framework.jmx.SystemStatusMXBean;
016    import com.khubla.pragmatach.framework.jmx.impl.RouteCacheStatus;
017    import com.khubla.pragmatach.framework.jmx.impl.SystemStatus;
018    import com.khubla.pragmatach.framework.servlet.PragmatachServlet;
019    
020    /**
021     * @author tome
022     */
023    public class JMXListener implements ServletContextListener {
024       /**
025        * logger
026        */
027       private final Logger logger = LoggerFactory.getLogger(this.getClass());
028    
029       @Override
030       public void contextDestroyed(ServletContextEvent servletContextEvent) {
031       }
032    
033       @Override
034       public void contextInitialized(ServletContextEvent servletContextEvent) {
035          try {
036             final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
037             /*
038              * system status bean
039              */
040             final ObjectName systemStatusBeanName = new ObjectName("com.khubla.pragmatach.framework.jmx.impl:type=SystemStatus");
041             final SystemStatusMXBean systemStatusMBean = new SystemStatus();
042             if (mBeanServer.isRegistered(systemStatusBeanName)) {
043                mBeanServer.unregisterMBean(systemStatusBeanName);
044             }
045             mBeanServer.registerMBean(systemStatusMBean, systemStatusBeanName);
046             /*
047              * performance statistics
048              */
049             final ObjectName performanceStatisticsBeanName = new ObjectName("com.khubla.pragmatach.framework.jmx.impl:type=PerformanceStatistics");
050             final PerformanceStatisticsMXBean performanceStatisticsMXBean = PragmatachServlet.getPerformancestatistics();
051             if (mBeanServer.isRegistered(performanceStatisticsBeanName)) {
052                mBeanServer.unregisterMBean(performanceStatisticsBeanName);
053             }
054             mBeanServer.registerMBean(performanceStatisticsMXBean, performanceStatisticsBeanName);
055             /*
056              * route cache
057              */
058             final ObjectName routeCacheStatusBeanName = new ObjectName("com.khubla.pragmatach.framework.jmx.impl:type=RouteCacheStatus");
059             final RouteCacheStatusMXBean routeCacheStatusMXBean = new RouteCacheStatus();
060             if (mBeanServer.isRegistered(routeCacheStatusBeanName)) {
061                mBeanServer.unregisterMBean(routeCacheStatusBeanName);
062             }
063             mBeanServer.registerMBean(routeCacheStatusMXBean, routeCacheStatusBeanName);
064          } catch (final Exception e) {
065             logger.error("Exception in contextInitialized", e);
066          }
067       }
068    }