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@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@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)
{
Show replies by date