[exo-jcr-commits] exo-jcr SVN: r1223 - in kernel/trunk/exo.kernel.container/src: main/java/org/exoplatform/container/management and 6 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Dec 28 20:00:23 EST 2009


Author: julien_viet
Date: 2009-12-28 20:00:21 -0500 (Mon, 28 Dec 2009)
New Revision: 1223

Added:
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/KernelManagementContext.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Bar.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Foo.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagedResource.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagementProviderImpl.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ResourceKey.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ScopedData.java
   kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/TestManagementProvider.java
   kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/
   kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration1.xml
   kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration2.xml
Removed:
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/KernelManagementContext.java
Modified:
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableComponentAdapter.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableContainer.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManagementContextImpl.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProvider.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProviderContext.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/jmx/ExoModelMBean.java
Log:
EXOJCR-350 : Enable plugability of management layer : added new unit tests


Copied: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/KernelManagementContext.java (from rev 1218, kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/KernelManagementContext.java)
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/KernelManagementContext.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/KernelManagementContext.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.container.jmx;
+
+import org.exoplatform.management.spi.ManagementProvider;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class KernelManagementContext
+{
+
+   /** . */
+   final ManagementContextImpl root;
+
+   /** . */
+   private final Set<ManagementProvider> providers;
+
+   public KernelManagementContext()
+   {
+      this.root = new ManagementContextImpl(this);
+      this.providers = new HashSet<ManagementProvider>();
+   }
+
+   public synchronized Collection<ManagementProvider> getProviders() {
+      return providers;
+   }
+
+   public synchronized boolean addProvider(ManagementProvider provider)
+   {
+      // Prevent double registration just in case...
+      if (providers.contains(provider)) {
+         return false;
+      }
+
+      //
+      providers.add(provider);
+
+      // Perform registration of already registered managed components
+      root.install(provider);
+
+      //
+      return false;
+   }
+}

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableComponentAdapter.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableComponentAdapter.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableComponentAdapter.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -18,6 +18,7 @@
  */
 package org.exoplatform.container.jmx;
 
+import org.exoplatform.management.spi.ManagementProvider;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.picocontainer.ComponentAdapter;
@@ -74,8 +75,16 @@
          //
          if (container.managementContext != null)
          {
+            // Registry the instance against the management context
             log.debug("==> add " + instance + " to a mbean server");
             container.managementContext.register(instance);
+
+            // Register if it is a management provider
+            if (instance instanceof ManagementProvider)
+            {
+               ManagementProvider provider = (ManagementProvider)instance;
+               container.managementContext.kernelContext.addProvider(provider);
+            }
          }
       }
       return instance;

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableContainer.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableContainer.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableContainer.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -19,7 +19,6 @@
 package org.exoplatform.container.jmx;
 
 import org.exoplatform.container.CachingContainer;
-import org.exoplatform.container.management.KernelManagementContext;
 import org.exoplatform.container.monitor.jvm.J2EEServerInfo;
 import org.exoplatform.management.ManagementContext;
 import org.exoplatform.management.annotations.Managed;
@@ -104,8 +103,14 @@
          // Get server from parent
          server = manageableParent.server;
       } else {
+         KernelManagementContext kernelCtx = new KernelManagementContext();
+
+         //
          server = findMBeanServer();
-         managementContext = new ManagementContextImpl(new KernelManagementContext(Collections.<ManagementProvider>singleton(new JMXManagementProvider(server))));
+         managementContext = kernelCtx.root;
+
+         //
+         kernelCtx.addProvider(new JMXManagementProvider(server));
       }
 
       //
@@ -165,6 +170,13 @@
       if (managementContext != null)
       {
          managementContext.register(componentInstance);
+
+         // Register if it is a management provider
+         if (componentInstance instanceof ManagementProvider)
+         {
+            ManagementProvider provider = (ManagementProvider)componentInstance;
+            managementContext.kernelContext.addProvider(provider);
+         }
       }
       return adapter;
    }

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManagementContextImpl.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManagementContextImpl.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManagementContextImpl.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -20,7 +20,6 @@
 
 import org.exoplatform.container.ExoContainer;
 import org.exoplatform.container.component.RequestLifeCycle;
-import org.exoplatform.container.management.KernelManagementContext;
 import org.exoplatform.management.ManagementAware;
 import org.exoplatform.management.spi.ManagedTypeMetaData;
 import org.exoplatform.container.management.MetaDataBuilder;
@@ -58,6 +57,12 @@
    /** . */
    final KernelManagementContext kernelContext;
 
+   /** . */
+   private final Object resource;
+
+   /** . */
+   private final ManagedTypeMetaData typeMD;
+
    /** An optional container setup when the management context is attached to a container. */
    ManageableContainer container;
 
@@ -77,10 +82,17 @@
       
       this.scopingProperties = new HashMap<Class<?>, Object>();
       this.kernelContext = kernelContext;
+      this.resource = null;
+      this.typeMD = null;
    }
 
    public ManagementContextImpl(ManagementContextImpl parent)
    {
+      this(parent, null, null);
+   }
+
+   public ManagementContextImpl(ManagementContextImpl parent, Object resource, ManagedTypeMetaData typeMD)
+   {
       if (parent == null)
       {
          throw new NullPointerException();
@@ -90,6 +102,8 @@
       this.parent = parent;
       this.scopingProperties = new HashMap<Class<?>, Object>();
       this.kernelContext = parent.kernelContext;
+      this.resource = resource;
+      this.typeMD = typeMD;
    }
 
    public ManagementContext getParent()
@@ -153,7 +167,7 @@
             }
             else
             {
-               viewContext = new ManagementContextImpl(this);
+               viewContext = new ManagementContextImpl(this, view, metaData);
             }
 
             //
@@ -238,4 +252,21 @@
    {
       return "ManagementContextImpl[container=" + container + "]";
    }
+
+   void install(ManagementProvider provider) {
+      if (resource != null&& typeMD != null)
+      {
+         Object name = provider.manage(this, resource, typeMD);
+         if (name != null)
+         {
+            bilto.put(provider, name);
+         }
+      }
+
+      // Install for all
+      for (ManagementContextImpl registration : registrations.values())
+      {
+         registration.install(provider);
+      }
+   }
 }

Deleted: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/KernelManagementContext.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/KernelManagementContext.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/KernelManagementContext.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.exoplatform.container.management;
-
-import org.exoplatform.management.spi.jmx.JMXManagementProvider;
-import org.exoplatform.management.spi.ManagementProvider;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public class KernelManagementContext
-{
-
-   /** . */
-   private final Set<ManagementProvider> providers;
-
-   public KernelManagementContext()
-   {
-     providers = Collections.<ManagementProvider>singleton(new JMXManagementProvider());
-   }
-
-   public KernelManagementContext(Set<ManagementProvider> providers)
-   {
-      this.providers = providers;
-   }
-
-   public Collection<ManagementProvider> getProviders() {
-      return providers;
-   }
-}

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProvider.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProvider.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProvider.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -32,11 +32,11 @@
     * Instruct the management provider to manage the provided resource with the specified meta data.
     *
     * @param context the context
-    * @param managedResource the managed resource
+    * @param source the resource to manage
     * @param metaData the meta data describing the management interface
     * @return the key under which the resource is registered
     */
-   Object manage(ManagementProviderContext context, Object managedResource, ManagedTypeMetaData metaData);
+   Object manage(ManagementProviderContext context, Object source, ManagedTypeMetaData metaData);
 
    /**
     * Instruct the management provider to remove the specifed resource from management.

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProviderContext.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProviderContext.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/ManagementProviderContext.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -21,7 +21,6 @@
 import org.exoplatform.management.ManagementContext;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * The contract between a management provider and the kernel.
@@ -35,6 +34,8 @@
    /**
     * Returns the scoping properties of the context;
     *
+    * @param scopeType the scope type
+    * @param <S> the generic type of the scope type
     * @return the scoping properties
     */
    <S> List<S> getScopingProperties(Class<S> scopeType);
@@ -43,6 +44,8 @@
     * Callback to obtain a management provider context for the specified managed resource scoped with
     * the provided properties.
     *
+    * @param scopeType the scope type
+    * @param <S> the generic type of the scope type
     * @param scopingProperties the scoping properties
     */
    <S> void setScopingData(Class<S> scopeType, S scopingProperties);

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/jmx/ExoModelMBean.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/jmx/ExoModelMBean.java	2009-12-28 23:20:59 UTC (rev 1222)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/management/spi/jmx/ExoModelMBean.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -142,23 +142,4 @@
       //
       super.postDeregister();
    }
-
-   //
-
-   public ManagementContext getManagementContext()
-   {
-      return context;
-   }
-
-   //
-
-   public void register(Object o) throws IllegalArgumentException, NullPointerException
-   {
-      context.register(o);
-   }
-
-   public void unregister(Object o) throws IllegalArgumentException, NullPointerException
-   {
-      context.unregister(o);
-   }
 }

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Bar.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Bar.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Bar.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.container.management;
+
+import org.exoplatform.management.annotations.Managed;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+ at Managed
+public class Bar
+{
+}

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Foo.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Foo.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/Foo.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.container.management;
+
+import org.exoplatform.management.ManagementAware;
+import org.exoplatform.management.ManagementContext;
+import org.exoplatform.management.annotations.Managed;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+ at Managed
+public class Foo implements ManagementAware
+{
+
+   /** . */
+   private ManagementContext context;
+
+   final Bar bar = new Bar();
+
+   public void setContext(ManagementContext context)
+   {
+      this.context = context;
+   }
+
+   public boolean isAware()
+   {
+      return context != null;
+   }
+
+   public void deploy()
+   {
+      context.register(bar);
+   }
+
+   public void undeploy()
+   {
+      context.unregister(bar);
+   }
+
+}
\ No newline at end of file

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagedResource.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagedResource.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagedResource.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.container.management;
+
+import org.exoplatform.management.spi.ManagedTypeMetaData;
+import org.exoplatform.management.spi.ManagementProviderContext;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class ManagedResource
+{
+
+   final ResourceKey key;
+
+   /** . */
+   final Object resource;
+
+   /** . */
+   final ManagementProviderContext context;
+
+   /** . */
+   final ManagedTypeMetaData metaData;
+
+   /** . */
+   final ScopedData data;
+
+   public ManagedResource(Object resource, ManagementProviderContext context, ManagedTypeMetaData metaData)
+   {
+      this.key = new ResourceKey();
+      this.resource = resource;
+      this.context = context;
+      this.metaData = metaData;
+      this.data = new ScopedData();
+   }
+
+   public void register()
+   {
+      context.setScopingData(ScopedData.class, data);
+   }
+}

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagementProviderImpl.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagementProviderImpl.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ManagementProviderImpl.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.container.management;
+
+import org.exoplatform.management.spi.ManagedTypeMetaData;
+import org.exoplatform.management.spi.ManagementProvider;
+import org.exoplatform.management.spi.ManagementProviderContext;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class ManagementProviderImpl implements ManagementProvider
+{
+
+   /** . */
+   final List<ManagedResource> resources = new ArrayList<ManagedResource>();
+
+   public Object manage(ManagementProviderContext context, Object resource, ManagedTypeMetaData metaData)
+   {
+      ManagedResource mr = new ManagedResource(resource, context, metaData);
+      resources.add(mr);
+      return mr.key;
+   }
+
+   public void unmanage(Object key)
+   {
+      for (Iterator<ManagedResource> i = resources.iterator();i.hasNext();)
+      {
+         ManagedResource mr = i.next();
+         if (mr.key == key)
+         {
+            i.remove();
+            break;
+         }
+      }
+   }
+}

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ResourceKey.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ResourceKey.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ResourceKey.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.container.management;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class ResourceKey
+{
+}

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ScopedData.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ScopedData.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/ScopedData.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.container.management;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class ScopedData
+{
+}

Added: kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/TestManagementProvider.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/TestManagementProvider.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/java/org/exoplatform/container/management/TestManagementProvider.java	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.container.management;
+
+import junit.framework.TestCase;
+import org.exoplatform.container.RootContainer;
+import org.exoplatform.container.support.ContainerBuilder;
+
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class TestManagementProvider extends TestCase 
+{
+
+   public void testProviderRegistration()
+   {
+      URL url = getClass().getResource("configuration1.xml");
+      RootContainer container = new ContainerBuilder().withRoot(url).build();
+      ManagementProviderImpl provider = (ManagementProviderImpl)container.getComponentInstanceOfType(ManagementProviderImpl.class);
+      assertNotNull(provider);
+   }
+
+   public void testManagedRegistrationAfterProviderRegistration()
+   {
+      URL url = getClass().getResource("configuration1.xml");
+      RootContainer container = new ContainerBuilder().withRoot(url).build();
+      ManagementProviderImpl provider = (ManagementProviderImpl)container.getComponentInstanceOfType(ManagementProviderImpl.class);
+      assertEquals(0, provider.resources.size());
+      Object foo = container.getComponentInstance("Foo");
+      assertNotNull(foo);
+      assertEquals(1, provider.resources.size());
+      ManagedResource fooMR = provider.resources.get(0);
+      assertSame(foo, fooMR.resource);
+      assertEquals(Collections.<ScopedData>emptyList(), fooMR.context.getScopingProperties(ScopedData.class));
+      fooMR.register();
+      assertEquals(Collections.singletonList(fooMR.data), fooMR.context.getScopingProperties(ScopedData.class));
+   }
+
+   public void testManagedRegistrationBeforeProviderRegistration()
+   {
+      URL url = getClass().getResource("configuration2.xml");
+      RootContainer container = new ContainerBuilder().withRoot(url).build();
+      ManagementProviderImpl provider = (ManagementProviderImpl)container.getComponentInstanceOfType(ManagementProviderImpl.class);
+      assertNull(provider);
+      Object foo = container.getComponentInstance("Foo");
+      assertNotNull(foo);
+      provider = new ManagementProviderImpl();
+      container.registerComponentInstance(provider);
+      assertEquals(1, provider.resources.size());
+      ManagedResource fooMR = provider.resources.get(0);
+      assertSame(foo, fooMR.resource);
+      assertEquals(Collections.<ScopedData>emptyList(), fooMR.context.getScopingProperties(ScopedData.class));
+      fooMR.register();
+      assertEquals(Collections.singletonList(fooMR.data), fooMR.context.getScopingProperties(ScopedData.class));
+   }
+
+   public void testManagementAware()
+   {
+      URL url = getClass().getResource("configuration1.xml");
+      RootContainer container = new ContainerBuilder().withRoot(url).build();
+      ManagementProviderImpl provider = (ManagementProviderImpl)container.getComponentInstanceOfType(ManagementProviderImpl.class);
+      Foo foo = (Foo)container.getComponentInstance("Foo");
+      assertEquals(1, provider.resources.size());
+      ManagedResource fooMR = provider.resources.get(0);
+      fooMR.register();
+      assertTrue(foo.isAware());
+
+      //
+      foo.deploy();
+      assertEquals(2, provider.resources.size());
+      ManagedResource barMR = provider.resources.get(1);
+      assertSame(foo.bar, barMR.resource);
+      barMR.register();
+      assertEquals(Arrays.asList(barMR.data, fooMR.data), barMR.context.getScopingProperties(ScopedData.class));
+
+      //
+      foo.undeploy();
+      assertEquals(Arrays.asList(fooMR), provider.resources);
+   }
+}

Added: kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration1.xml
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration1.xml	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration1.xml	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (C) 2009 eXo Platform SAS.
+
+    This is free software; you can redistribute it and/or modify it
+    under the terms of the GNU Lesser General Public License as
+    published by the Free Software Foundation; either version 2.1 of
+    the License, or (at your option) any later version.
+
+    This software is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this software; if not, write to the Free
+    Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+    02110-1301 USA, or see the FSF site: http://www.fsf.org.
+
+-->
+<configuration
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www.exoplaform.org/xml/ns/kernel_1_0.xsd"
+   xmlns="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd">
+
+  <component>
+    <key>Foo</key>
+    <type>org.exoplatform.container.management.Foo</type>
+  </component>
+
+  <component>
+    <key>org.exoplatform.container.management.ManagementProviderImpl</key>
+    <type>org.exoplatform.container.management.ManagementProviderImpl</type>
+  </component>
+
+</configuration>
\ No newline at end of file

Added: kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration2.xml
===================================================================
--- kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration2.xml	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/test/resources/org/exoplatform/container/management/configuration2.xml	2009-12-29 01:00:21 UTC (rev 1223)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (C) 2009 eXo Platform SAS.
+
+    This is free software; you can redistribute it and/or modify it
+    under the terms of the GNU Lesser General Public License as
+    published by the Free Software Foundation; either version 2.1 of
+    the License, or (at your option) any later version.
+
+    This software is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this software; if not, write to the Free
+    Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+    02110-1301 USA, or see the FSF site: http://www.fsf.org.
+
+-->
+<configuration
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www.exoplaform.org/xml/ns/kernel_1_0.xsd"
+   xmlns="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd">
+
+  <component>
+    <key>Foo</key>
+    <type>org.exoplatform.container.management.Foo</type>
+  </component>
+
+</configuration>
\ No newline at end of file



More information about the exo-jcr-commits mailing list