[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