From do-not-reply at jboss.org Fri Jul 1 04:50:59 2011 Content-Type: multipart/mixed; boundary="===============0341267744266324391==" MIME-Version: 1.0 From: do-not-reply at jboss.org To: exo-jcr-commits at lists.jboss.org Subject: [exo-jcr-commits] exo-jcr SVN: r4570 - kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management. Date: Fri, 01 Jul 2011 04:50:59 -0400 Message-ID: <201107010850.p618ox9o006259@svn01.web.mwc.hst.phx2.redhat.com> --===============0341267744266324391== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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/containe= r/management/ManageableContainer.java kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/containe= r/management/ManagementContextImpl.java Log: EXOJCR-1068 : Unregister all MBeans on container stop. Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/c= ontainer/management/ManageableContainer.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/contain= er/management/ManageableContainer.java 2011-06-30 14:54:37 UTC (rev 4569) +++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/contain= er/management/ManageableContainer.java 2011-07-01 08:50:58 UTC (rev 4570) @@ -52,8 +52,7 @@ * @author Julien Viet * @version $Revision$ */ -public class ManageableContainer - extends CachingContainer +public class ManageableContainer extends CachingContainer { = /** @@ -69,7 +68,7 @@ = /** . */ private static final ThreadLocal hac= k =3D - new ThreadLocal(); + new ThreadLocal(); = /** . */ final ManagementContextImpl managementContext; @@ -78,8 +77,9 @@ private MBeanServer server; = private volatile boolean objectNameSet; + private ObjectName objectName; - = + /** . */ private final Set providers; = @@ -88,7 +88,7 @@ = public ManageableContainer() { - this((PicoContainer) null); + this((PicoContainer)null); } = public ManageableContainer(PicoContainer parent) @@ -113,12 +113,12 @@ ManagementContextImpl parentCtx =3D null; if (parent instanceof ManageableContainer) { - ManageableContainer manageableParent =3D (ManageableContainer) pa= rent; + ManageableContainer manageableParent =3D (ManageableContainer)par= ent; parentCtx =3D manageableParent.managementContext; } = // - this.parent =3D parent instanceof ManageableContainer ? (ManageableC= ontainer) parent : null; + this.parent =3D parent instanceof ManageableContainer ? (ManageableC= ontainer)parent : null; = // if (parentCtx !=3D null) @@ -156,7 +156,7 @@ } = private static ManageableComponentAdapterFactory getComponentAdapterFac= tory( - ComponentAdapterFactory componentAdapterFactory) + ComponentAdapterFactory componentAdapterFactory) { ManageableComponentAdapterFactory factory =3D new ManageableComponen= tAdapterFactory(componentAdapterFactory); hack.set(factory); @@ -196,7 +196,7 @@ { MBeanScopingData scopingData =3D list.get(i - 1); props.putAll(scopingData); - } = + } try { this.objectName =3D JMX.createObjectName("exo", props= ); @@ -204,7 +204,7 @@ catch (Exception e) { LOG.error("Could not create the object name", e); - } = + } } this.objectNameSet =3D true; } @@ -212,9 +212,9 @@ } return objectName; } - = + public ComponentAdapter registerComponentInstance(Object componentKey, = Object componentInstance) - throws PicoRegistrationException + throws PicoRegistrationException { ComponentAdapter adapter =3D super.registerComponentInstance(compone= ntKey, componentInstance); if (managementContext !=3D null) @@ -224,13 +224,36 @@ // Register if it is a management provider if (componentInstance instanceof ManagementProvider) { - ManagementProvider provider =3D (ManagementProvider) component= Instance; + ManagementProvider provider =3D (ManagementProvider)componentI= nstance; addProvider(provider); } } return adapter; } = + @Override + public ComponentAdapter unregisterComponent(Object componentKey) + { + ComponentAdapter adapter =3D getComponentAdapter(componentKey); + + if (managementContext !=3D null && adapter !=3D null) + { + managementContext.unregister(adapter.getComponentInstance(this)); + } + return super.unregisterComponent(componentKey); + } + + @Override + public void stop() + { + if (managementContext !=3D null) + { + // un-manage all registered MBeans + managementContext.unregisterAll(); + } + super.stop(); + }; + /** * Returns the list of the providers which are relevant for this contai= ner. * Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/c= ontainer/management/ManagementContextImpl.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/contain= er/management/ManagementContextImpl.java 2011-06-30 14:54:37 UTC (rev 4569) +++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/contain= er/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 Julien Viet @@ -237,6 +239,10 @@ } } = + /** + * = + * {@inheritDoc} + */ public void unregister(Object o) { ManagementContextImpl context =3D registrations.remove(o); @@ -247,6 +253,26 @@ } } } + = + /** + * Unmanages (unregisters) all early registered MBeans in ManagementPro= viders + */ + public void unregisterAll() + { + Iterator> iterator =3D registra= tions.entrySet().iterator(); + while (iterator.hasNext()) + { + Entry contextEntry =3D iterator.ne= xt(); + iterator.remove(); + if (contextEntry.getValue() !=3D null) + { + for (Map.Entry provider : contextE= ntry.getValue().managedSet.entrySet()) + { + provider.getKey().unmanage(provider.getValue()); + } + } + } + } = public List getScopingData(Class scopeType) { --===============0341267744266324391==--