001    package org.shiftone.jrat.core.jmx;
002    
003    
004    import org.shiftone.jrat.core.Environment;
005    import org.shiftone.jrat.util.log.Logger;
006    
007    
008    /**
009     * @author jeff@shiftone.org (Jeff Drost)
010     */
011    public class JmxRegistryFactory {
012    
013        private static final Logger LOG = Logger.getLogger(JmxRegistryFactory.class);
014    
015        public static JmxRegistry createJmxRegistry() {
016    
017            JmxRegistry registry = NullJmxRegistry.INSTANCE;
018            boolean enabled = Environment.getSettings().isJmxEnabled();
019            boolean create = Environment.getSettings().isMBeanServerCreationEnabled();
020    
021            if (enabled && (isJMXAvalible() == false)) {
022                LOG.info("MBeanServer is not available in this environment. Disabling JMX.");
023    
024                enabled = false;
025            }
026    
027            if (enabled) {
028                try {
029                    if (create) {
030                        registry = new ServerJmxRegistry(true);
031                    } else {
032                        registry = new WaitingJmxRegistry(new ServerJmxRegistry(false));
033                    }
034                }
035                catch (Exception e) {
036                    LOG.error("failed to initialize JMX", e);
037                }
038            }
039    
040            return registry;
041        }
042    
043    
044        private static boolean isJMXAvalible() {
045    
046            try {
047                Class.forName("javax.management.MBeanServer");
048    
049                return true;
050            }
051            catch (Exception e) {
052                return false;
053            }
054        }
055    }