Coverage Report - org.mule.module.management.support.AutoDiscoveryJmxSupportFactory
 
Classes in this File Line Coverage Branch Coverage Complexity
AutoDiscoveryJmxSupportFactory
0%
0/16
0%
0/6
0
 
 1  
 /*
 2  
  * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 3  
  * The software in this package is published under the terms of the CPAL v1.0
 4  
  * license, a copy of which has been included with this distribution in the
 5  
  * LICENSE.txt file.
 6  
  */
 7  
 package org.mule.module.management.support;
 8  
 
 9  
 import org.mule.util.ClassUtils;
 10  
 
 11  
 import java.io.ObjectStreamException;
 12  
 import java.lang.reflect.Method;
 13  
 
 14  
 import javax.management.ObjectName;
 15  
 
 16  
 import org.apache.commons.logging.Log;
 17  
 import org.apache.commons.logging.LogFactory;
 18  
 
 19  
 /**
 20  
  * Will discover if newer JMX version is available, otherwise fallback to JMX 1.1
 21  
  * style support.
 22  
  */
 23  
 // @Immutable
 24  
 public class AutoDiscoveryJmxSupportFactory implements JmxSupportFactory
 25  
 {
 26  
     /**
 27  
      * Safe initialization for a singleton.
 28  
      */
 29  0
     private static final JmxSupportFactory instance = new AutoDiscoveryJmxSupportFactory();
 30  
 
 31  
     /**
 32  
      * logger used by this class
 33  
      */
 34  0
     private transient Log logger = LogFactory.getLog(getClass());
 35  
 
 36  
     /**
 37  
      * A cached JMX support class instance.
 38  
      */
 39  
     private JmxSupport jmxSupport;
 40  
 
 41  
 
 42  
     /** Constructs a new AutoDiscoveryJmxSupportFactory. */
 43  
     protected AutoDiscoveryJmxSupportFactory ()
 44  0
     {
 45  0
         final boolean jmxModernAvailable = isModernSpecAvailable();
 46  
 
 47  
         // tertiary operand does not work anymore after hiererachy refactoring ?!
 48  0
         if (jmxModernAvailable)
 49  
         {
 50  0
             jmxSupport = new JmxModernSupport();
 51  
         }
 52  
         else
 53  
         {
 54  0
             jmxSupport = new JmxLegacySupport();
 55  
         }
 56  0
         if (logger.isDebugEnabled())
 57  
         {
 58  0
             logger.debug("JMX support instance is " + jmxSupport);
 59  
         }
 60  0
     }
 61  
 
 62  
     /**
 63  
      * Obtain an instance of the factory class.
 64  
      * @return a cached singleton instance
 65  
      */
 66  
     public static JmxSupportFactory getInstance()
 67  
     {
 68  0
         return instance;
 69  
     }
 70  
 
 71  
 
 72  
     /**
 73  
      * Will try to detect if JMX 1.2 or later is available, otherwise will fallback
 74  
      * to the JMX 1.1 version of the support class.
 75  
      *
 76  
      * @return matching support class instance
 77  
      * @see JmxLegacySupport
 78  
      */
 79  
     public JmxSupport getJmxSupport ()
 80  
     {
 81  0
         return this.jmxSupport;
 82  
     }
 83  
 
 84  
     /**
 85  
      * Is JMX 1.2 and up available for use?
 86  
      * @return false if only JMX 1.1 can be used
 87  
      */
 88  
     protected boolean isModernSpecAvailable ()
 89  
     {
 90  0
         Class<ObjectName> clazz = ObjectName.class;
 91  
         // method escape() is available since JMX 1.2
 92  0
         Method method = ClassUtils.getMethod(clazz, "quote", new Class[]{String.class});
 93  
 
 94  0
         return  method != null;
 95  
     }
 96  
 
 97  
     /**
 98  
      * Safe deserialization.
 99  
      * @throws ObjectStreamException will never throw it for this class
 100  
      * @return singleton instance for this classloader/JVM
 101  
      */
 102  
     private Object readResolve() throws ObjectStreamException
 103  
     {
 104  0
         return instance;
 105  
     }
 106  
 }