[exo-jcr-commits] exo-jcr SVN: r4570 - kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Jul 1 04:50:59 EDT 2011


Author: nzamosenchuk
Date: 2011-07-01 04:50:58 -0400 (Fri, 01 Jul 2011)
New Revision: 4570

Modified:
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManageableContainer.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManagementContextImpl.java
Log:
EXOJCR-1068 : Unregister all MBeans on container stop.

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManageableContainer.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManageableContainer.java	2011-06-30 14:54:37 UTC (rev 4569)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManageableContainer.java	2011-07-01 08:50:58 UTC (rev 4570)
@@ -52,8 +52,7 @@
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
  * @version $Revision$
  */
-public class ManageableContainer
-   extends CachingContainer
+public class ManageableContainer extends CachingContainer
 {
 
    /**
@@ -69,7 +68,7 @@
 
    /** . */
    private static final ThreadLocal<ManageableComponentAdapterFactory> hack =
-            new ThreadLocal<ManageableComponentAdapterFactory>();
+      new ThreadLocal<ManageableComponentAdapterFactory>();
 
    /** . */
    final ManagementContextImpl managementContext;
@@ -78,8 +77,9 @@
    private MBeanServer server;
 
    private volatile boolean objectNameSet;
+
    private ObjectName objectName;
-   
+
    /** . */
    private final Set<ManagementProvider> providers;
 
@@ -88,7 +88,7 @@
 
    public ManageableContainer()
    {
-      this((PicoContainer) null);
+      this((PicoContainer)null);
    }
 
    public ManageableContainer(PicoContainer parent)
@@ -113,12 +113,12 @@
       ManagementContextImpl parentCtx = null;
       if (parent instanceof ManageableContainer)
       {
-         ManageableContainer manageableParent = (ManageableContainer) parent;
+         ManageableContainer manageableParent = (ManageableContainer)parent;
          parentCtx = manageableParent.managementContext;
       }
 
       //
-      this.parent = parent instanceof ManageableContainer ? (ManageableContainer) parent : null;
+      this.parent = parent instanceof ManageableContainer ? (ManageableContainer)parent : null;
 
       //
       if (parentCtx != null)
@@ -156,7 +156,7 @@
    }
 
    private static ManageableComponentAdapterFactory getComponentAdapterFactory(
-            ComponentAdapterFactory componentAdapterFactory)
+      ComponentAdapterFactory componentAdapterFactory)
    {
       ManageableComponentAdapterFactory factory = new ManageableComponentAdapterFactory(componentAdapterFactory);
       hack.set(factory);
@@ -196,7 +196,7 @@
                   {
                      MBeanScopingData scopingData = list.get(i - 1);
                      props.putAll(scopingData);
-                  }               
+                  }
                   try
                   {
                      this.objectName = JMX.createObjectName("exo", props);
@@ -204,7 +204,7 @@
                   catch (Exception e)
                   {
                      LOG.error("Could not create the object name", e);
-                  }                  
+                  }
                }
                this.objectNameSet = true;
             }
@@ -212,9 +212,9 @@
       }
       return objectName;
    }
-   
+
    public ComponentAdapter registerComponentInstance(Object componentKey, Object componentInstance)
-            throws PicoRegistrationException
+      throws PicoRegistrationException
    {
       ComponentAdapter adapter = super.registerComponentInstance(componentKey, componentInstance);
       if (managementContext != null)
@@ -224,13 +224,36 @@
          // Register if it is a management provider
          if (componentInstance instanceof ManagementProvider)
          {
-            ManagementProvider provider = (ManagementProvider) componentInstance;
+            ManagementProvider provider = (ManagementProvider)componentInstance;
             addProvider(provider);
          }
       }
       return adapter;
    }
 
+   @Override
+   public ComponentAdapter unregisterComponent(Object componentKey)
+   {
+      ComponentAdapter adapter = getComponentAdapter(componentKey);
+
+      if (managementContext != null && adapter != null)
+      {
+         managementContext.unregister(adapter.getComponentInstance(this));
+      }
+      return super.unregisterComponent(componentKey);
+   }
+
+   @Override
+   public void stop()
+   {
+      if (managementContext != null)
+      {
+         // un-manage all registered MBeans
+         managementContext.unregisterAll();
+      }
+      super.stop();
+   };
+
    /**
     * Returns the list of the providers which are relevant for this container.
     *

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManagementContextImpl.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManagementContextImpl.java	2011-06-30 14:54:37 UTC (rev 4569)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/ManagementContextImpl.java	2011-07-01 08:50:58 UTC (rev 4570)
@@ -33,8 +33,10 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 /**
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
@@ -237,6 +239,10 @@
       }
    }
 
+    /**
+     * 
+    * {@inheritDoc}
+    */
    public void unregister(Object o)
    {
       ManagementContextImpl context = registrations.remove(o);
@@ -247,6 +253,26 @@
          }
       }
    }
+   
+   /**
+    * Unmanages (unregisters) all early registered MBeans in ManagementProviders
+    */
+   public void unregisterAll()
+   {
+      Iterator<Entry<Object, ManagementContextImpl>> iterator = registrations.entrySet().iterator();
+      while (iterator.hasNext())
+      {
+         Entry<Object, ManagementContextImpl> contextEntry = iterator.next();
+         iterator.remove();
+         if (contextEntry.getValue() != null)
+         {
+            for (Map.Entry<ManagementProvider, Object> provider : contextEntry.getValue().managedSet.entrySet())
+            {
+               provider.getKey().unmanage(provider.getValue());
+            }
+         }
+      }
+   }
 
    public <S> List<S> getScopingData(Class<S> scopeType)
    {



More information about the exo-jcr-commits mailing list