Coverage Report - org.mule.module.management.support.JmxRegistrationContext
 
Classes in this File Line Coverage Branch Coverage Complexity
JmxRegistrationContext
0%
0/17
0%
0/2
0
JmxRegistrationContext$1
0%
0/6
0%
0/2
0
 
 1  
 /*
 2  
  * $Id: JmxRegistrationContext.java 19191 2010-08-25 21:05:23Z tcarlson $
 3  
  * --------------------------------------------------------------------------------------
 4  
  * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 5  
  *
 6  
  * The software in this package is published under the terms of the CPAL v1.0
 7  
  * license, a copy of which has been included with this distribution in the
 8  
  * LICENSE.txt file.
 9  
  */
 10  
 package org.mule.module.management.support;
 11  
 
 12  
 import org.mule.api.MuleContext;
 13  
 import org.mule.api.context.notification.MuleContextNotificationListener;
 14  
 import org.mule.context.notification.MuleContextNotification;
 15  
 import org.mule.context.notification.NotificationException;
 16  
 
 17  
 import org.apache.commons.logging.Log;
 18  
 import org.apache.commons.logging.LogFactory;
 19  
 
 20  
 /**
 21  
  * Stores JMX info pertinent to the currently intialising Mule manager with
 22  
  * JMX management enabled. The info is being kept for the duration of Mule server life,
 23  
  * and cleared on manager disposal.
 24  
  * <p/>
 25  
  * The main reason for that class is that JmxAgent prepares only the JMX foundation, while
 26  
  * the agents following it may require some contextual information about Mule's JMX, such as
 27  
  * a currently resolved Mule domain name (if non-clashing JMX domains support is enabled, which
 28  
  * is by default). Otherwise, they are left unaware of the previous work, and a random number
 29  
  * of JMX domains might be created for Mule.
 30  
  */
 31  0
 public class JmxRegistrationContext
 32  
 {
 33  
     /**
 34  
      * The logger used for this class
 35  
      */
 36  0
     private final transient Log logger = LogFactory.getLog(getClass());
 37  
 
 38  
     /**
 39  
      * Normally ThreadLocal is fine, as Mule is being initialised and destroyed
 40  
      * by a single thread. We only need to share this info between random agents
 41  
      * during startup.
 42  
      */
 43  0
     private static final ThreadLocal<JmxRegistrationContext> contexts = new ThreadLocal<JmxRegistrationContext>();
 44  
 
 45  
     private String resolvedDomain;
 46  
 
 47  
     /** Do not instantiate JmxRegistrationContext. */
 48  
     private JmxRegistrationContext(MuleContext context)
 49  0
     {
 50  
         try
 51  
         {
 52  
             // register the cleanup hook, otherwise server stop/start cycles may produce
 53  
             // Mule JMX domains with ever increasing suffix.
 54  0
             context.registerListener(new MuleContextNotificationListener<MuleContextNotification>()
 55  0
             {
 56  
                 public void onNotification(MuleContextNotification notification)
 57  
                 {
 58  0
                     MuleContextNotification mn = (MuleContextNotification) notification;
 59  0
                     if (MuleContextNotification.CONTEXT_DISPOSED == mn.getAction())
 60  
                     {
 61  
                         // just in case someone is holding a ref to the context instance
 62  0
                         resolvedDomain = null;
 63  
                         // disassociate
 64  0
                         contexts.set(null);
 65  
                     }
 66  0
                 }
 67  
             });
 68  0
         } catch (NotificationException e)
 69  
         {
 70  0
             logger.warn("Did not cleanup properly.", e);
 71  0
         }
 72  0
     }
 73  
 
 74  
     /**
 75  
      * Get current context or create one if none exist for the current startup cycle.
 76  
      * @return jmx registration context
 77  
      */
 78  
     public static JmxRegistrationContext getCurrent(MuleContext context)
 79  
     {
 80  0
         JmxRegistrationContext ctx = contexts.get();
 81  0
         if (ctx == null)
 82  
         {
 83  0
             ctx = new JmxRegistrationContext(context);
 84  
         }
 85  0
         contexts.set(ctx);
 86  0
         return ctx;
 87  
     }
 88  
 
 89  
     /**
 90  
      * Getter for property 'resolvedDomain'.
 91  
      *
 92  
      * @return Value for property 'resolvedDomain'.
 93  
      */
 94  
     public String getResolvedDomain()
 95  
     {
 96  0
         return resolvedDomain;
 97  
     }
 98  
 
 99  
     /**
 100  
      * Setter for property 'resolvedDomain'.
 101  
      *
 102  
      * @param resolvedDomain Value to set for property 'resolvedDomain'.
 103  
      */
 104  
     public void setResolvedDomain(String resolvedDomain)
 105  
     {
 106  0
         this.resolvedDomain = resolvedDomain;
 107  0
     }
 108  
 }