[exo-jcr-commits] exo-jcr SVN: r1209 - in kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container: management/spi and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Dec 28 07:50:33 EST 2009


Author: julien_viet
Date: 2009-12-28 07:50:33 -0500 (Mon, 28 Dec 2009)
New Revision: 1209

Added:
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProviderContext.java
Modified:
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoModelMBean.java
   kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/JMXManagementProvider.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/container/management/spi/ManagementProvider.java
Log:
EXOJCR-350 : Enable plugability of management layer : more decoupling of the JMX layer


Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoModelMBean.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoModelMBean.java	2009-12-28 12:32:22 UTC (rev 1208)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoModelMBean.java	2009-12-28 12:50:33 UTC (rev 1209)
@@ -18,8 +18,7 @@
  */
 package org.exoplatform.container.jmx;
 
-import org.exoplatform.container.ExoContainer;
-import org.exoplatform.container.component.RequestLifeCycle;
+import org.exoplatform.container.management.spi.ManagementProviderContext;
 import org.exoplatform.management.ManagementAware;
 import org.exoplatform.management.ManagementContext;
 import org.exoplatform.management.jmx.annotations.NamingContext;
@@ -52,12 +51,12 @@
    private Object mr;
 
    /** . */
-   private ManagementContextImpl parentContext;
+   private ManagementProviderContext parentContext;
 
    /** . */
-   private ManagementContextImpl context;
+   private ManagementProviderContext context;
 
-   public ExoModelMBean(ManagementContextImpl parentContext, Object mr, ModelMBeanInfo mbi) throws MBeanException,
+   public ExoModelMBean(ManagementProviderContext parentContext, Object mr, ModelMBeanInfo mbi) throws MBeanException,
       RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeException
    {
       super(mbi);
@@ -73,22 +72,14 @@
    @Override
    public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException
    {
-      final ExoContainer container = context.findContainer();
-      if (container != null)
+      context.beforeInvoke(mr);
+      try
       {
-         RequestLifeCycle.begin(container);
-         try
-         {
-            return super.invoke(opName, opArgs, sig);
-         }
-         finally
-         {
-            RequestLifeCycle.end();
-         }
+         return super.invoke(opName, opArgs, sig);
       }
-      else
+      finally
       {
-         return super.invoke(opName, opArgs, sig);
+         context.afterInvoke(mr);
       }
    }
 
@@ -119,19 +110,9 @@
       Map<String, String> scopingProperties = info != null ? info.resolve(mr) : Collections.<String, String>emptyMap();
 
       //
-      if (mr instanceof ManageableContainer)
-      {
-         context = ((ManageableContainer)mr).managementContext;
-      }
-      else
-      {
-         context = new ManagementContextImpl(parentContext);
-      }
+      context = parentContext.createContext(mr, scopingProperties);
 
       //
-      context.scopingProperties = scopingProperties;
-
-      //
       if (mr instanceof ManagementAware)
       {
          ((ManagementAware)mr).setContext(this);
@@ -176,17 +157,11 @@
 
    //
 
-
    public ManagementContext getManagementContext()
    {
       return context;
    }
 
-   public Object getManagedResource()
-   {
-      return mr;
-   }
-
    //
 
    public void register(Object o) throws IllegalArgumentException, NullPointerException

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/JMXManagementProvider.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/JMXManagementProvider.java	2009-12-28 12:32:22 UTC (rev 1208)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/JMXManagementProvider.java	2009-12-28 12:50:33 UTC (rev 1209)
@@ -18,6 +18,7 @@
 
 import org.exoplatform.container.management.ManagedTypeMetaData;
 import org.exoplatform.container.management.spi.ManagementProvider;
+import org.exoplatform.container.management.spi.ManagementProviderContext;
 import org.exoplatform.management.jmx.annotations.NameTemplate;
 
 import javax.management.InstanceAlreadyExistsException;
@@ -51,7 +52,7 @@
       this.server = server;
    }
 
-   public Object manage(ManagementContextImpl context, Object managedResource, ManagedTypeMetaData metaData)
+   public Object manage(ManagementProviderContext context, Object managedResource, ManagedTypeMetaData metaData)
    {
       ExoModelMBean mbean = null;
       try

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 12:32:22 UTC (rev 1208)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManagementContextImpl.java	2009-12-28 12:50:33 UTC (rev 1209)
@@ -19,8 +19,10 @@
 package org.exoplatform.container.jmx;
 
 import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.component.RequestLifeCycle;
 import org.exoplatform.container.management.ManagedTypeMetaData;
 import org.exoplatform.container.management.MetaDataBuilder;
+import org.exoplatform.container.management.spi.ManagementProviderContext;
 import org.exoplatform.management.ManagementContext;
 import org.exoplatform.management.annotations.ManagedBy;
 
@@ -34,7 +36,7 @@
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
  * @version $Revision$
  */
-public class ManagementContextImpl implements ManagementContext
+public class ManagementContextImpl implements ManagementContext, ManagementProviderContext
 {
 
    /** . */
@@ -91,6 +93,25 @@
       return parent;
    }
 
+   public ManagementProviderContext createContext(Object managedResource, Map<String, String> scopingProperties)
+   {
+      ManagementContextImpl context;
+      if (managedResource instanceof ManageableContainer)
+      {
+         context = ((ManageableContainer)managedResource).managementContext;
+      }
+      else
+      {
+         context = new ManagementContextImpl(this);
+      }
+
+      //
+      context.scopingProperties = scopingProperties;
+
+      //
+      return context;
+   }
+
    public void register(Object o)
    {
       Object view = null;
@@ -178,6 +199,20 @@
       }
    }
 
+   public void beforeInvoke(Object managedResource)
+   {
+      ExoContainer container = findContainer();
+      if (container != null)
+      {
+         RequestLifeCycle.begin(container);
+      }
+   }
+
+   public void afterInvoke(Object managedResource)
+   {
+      RequestLifeCycle.end();
+   }
+
    @Override
    public String toString()
    {

Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProvider.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProvider.java	2009-12-28 12:32:22 UTC (rev 1208)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProvider.java	2009-12-28 12:50:33 UTC (rev 1209)
@@ -16,18 +16,32 @@
  */
 package org.exoplatform.container.management.spi;
 
-import org.exoplatform.container.jmx.ManagementContextImpl;
 import org.exoplatform.container.management.ManagedTypeMetaData;
 
 /**
+ * This interface is implemented by a management provider such a JMX.
+ *
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
  * @version $Revision$
  */
 public interface ManagementProvider
 {
 
-   Object manage(ManagementContextImpl context, Object managedResource, ManagedTypeMetaData metaData);
+   /**
+    * Instruct the management provider to manage the provided resource with the specified meta data.
+    *
+    * @param context the context
+    * @param managedResource the managed resource
+    * @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);
 
+   /**
+    * Instruct the management provider to remove the specifed resource from management.
+    *
+    * @param key the key under which the resource is registered
+    */
    void unmanage(Object key);
 
 }

Added: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProviderContext.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProviderContext.java	                        (rev 0)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProviderContext.java	2009-12-28 12:50:33 UTC (rev 1209)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.container.management.spi;
+
+import org.exoplatform.management.ManagementContext;
+
+import java.util.Map;
+
+/**
+ * The contract between a management provider and the kernel.
+ *
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public interface ManagementProviderContext extends ManagementContext
+{
+
+   /**
+    * Returns the scoping properties of the context;
+    *
+    * @return the scoping properties
+    */
+   Map<String, String> getScopingProperties();
+
+   /**
+    * Before a managed resource is invoked by the management layer.
+    *
+    * @param managedResource the managed resource
+    */
+   void beforeInvoke(Object managedResource);
+
+   /**
+    * After a managed resource is invoked by the management layer.
+    *
+    * @param managedResource the managed resource
+    */
+   void afterInvoke(Object managedResource);
+
+   /**
+    * Callback to obtain a management provider context  for the specified managed resource scoped with
+    * the provided properties.
+    *
+    * @param managedResource the managed resource
+    * @param scopingProperties the scoping properties
+    * @return the context
+    */
+   ManagementProviderContext createContext(Object managedResource, Map<String, String> scopingProperties);
+
+}



More information about the exo-jcr-commits mailing list