Author: julien_viet
Date: 2009-12-28 06:48:25 -0500 (Mon, 28 Dec 2009)
New Revision: 1207
Added:
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/management/spi/
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProvider.java
Modified:
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ExoContainer.java
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoMBeanInfoBuilder.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
Log:
EXOJCR-350 : Enable plugability of management layer : first pass of decoupling, need more
work
Modified:
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ExoContainer.java
===================================================================
---
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ExoContainer.java 2009-12-28
11:04:11 UTC (rev 1206)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/ExoContainer.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -22,7 +22,6 @@
import org.exoplatform.container.component.ComponentLifecyclePlugin;
import org.exoplatform.container.configuration.ConfigurationManager;
import org.exoplatform.container.jmx.ManageableContainer;
-import org.exoplatform.container.jmx.ManagementContextImpl;
import org.exoplatform.container.util.ContainerUtil;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.services.log.ExoLogger;
@@ -30,7 +29,6 @@
import org.picocontainer.PicoContainer;
import org.picocontainer.defaults.ComponentAdapterFactory;
-import javax.management.MBeanServer;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Collections;
@@ -86,15 +84,6 @@
public ExoContainer()
{
- super(new ManagementContextImpl());
-
- //
-
- }
-
- public ExoContainer(MBeanServer mbeanServer)
- {
- super(new ManagementContextImpl(mbeanServer));
context = new ExoContainerContext(this);
context.setName(this.getClass().getName());
registerComponentInstance(context);
Modified:
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java
===================================================================
---
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java 2009-12-28
11:04:11 UTC (rev 1206)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -35,7 +35,6 @@
import org.picocontainer.ComponentAdapter;
import java.io.File;
-import java.lang.management.ManagementFactory;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
@@ -47,7 +46,6 @@
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.PriorityBlockingQueue;
-import javax.management.MBeanServer;
import javax.servlet.ServletContext;
/**
@@ -59,17 +57,6 @@
public class RootContainer extends ExoContainer
{
- private static MBeanServer findMBeanServer()
- {
- J2EEServerInfo serverenv_ = new J2EEServerInfo();
- MBeanServer server = serverenv_.getMBeanServer();
- if (server == null)
- {
- server = ManagementFactory.getPlatformMBeanServer();
- }
- return server;
- }
-
/** The field is volatile to properly implement the double checked locking pattern.
*/
private static volatile RootContainer singleton_;
@@ -98,9 +85,6 @@
public RootContainer()
{
- super(findMBeanServer());
-
- //
Set<String> profiles = new HashSet<String>();
// Add the profile defined by the server name
Modified:
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoMBeanInfoBuilder.java
===================================================================
---
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoMBeanInfoBuilder.java 2009-12-28
11:04:11 UTC (rev 1206)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ExoMBeanInfoBuilder.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -61,7 +61,7 @@
}
}
- private MetaDataBuilder metaDataBuilder;
+ private ManagedTypeMetaData typeMD;
/**
* Create a new builder.
@@ -71,12 +71,12 @@
*/
public ExoMBeanInfoBuilder(Class clazz) throws IllegalArgumentException
{
- this.metaDataBuilder = new MetaDataBuilder(clazz);
+ this.typeMD = new MetaDataBuilder(clazz).build();
}
- public boolean isBuildable()
+ public ExoMBeanInfoBuilder(ManagedTypeMetaData typeMD) throws
IllegalArgumentException
{
- return metaDataBuilder.isBuildable();
+ this.typeMD = typeMD;
}
private ModelMBeanOperationInfo buildOperationInfo(Method method, String description,
Role role,
@@ -126,9 +126,6 @@
*/
public ModelMBeanInfo build() throws IllegalStateException
{
- ManagedTypeMetaData typeMD = metaDataBuilder.build();
-
- //
String mbeanDescription = "Exo model mbean";
if (typeMD.getDescription() != null)
{
Added:
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
(rev 0)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/JMXManagementProvider.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -0,0 +1,176 @@
+/*
+ * 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.jmx;
+
+import org.exoplatform.container.management.ManagedTypeMetaData;
+import org.exoplatform.container.management.spi.ManagementProvider;
+import org.exoplatform.management.jmx.annotations.NameTemplate;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.management.modelmbean.ModelMBeanInfo;
+import java.util.Hashtable;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class JMXManagementProvider implements ManagementProvider
+{
+
+ /** . */
+ private final MBeanServer server;
+
+ public JMXManagementProvider()
+ {
+ this(MBeanServerFactory.createMBeanServer());
+ }
+
+ public JMXManagementProvider(MBeanServer server)
+ {
+ this.server = server;
+ }
+
+ public Object manage(ManagementContextImpl context, Object managedResource,
ManagedTypeMetaData metaData)
+ {
+ ExoModelMBean mbean = null;
+ try
+ {
+ ExoMBeanInfoBuilder infoBuilder = new ExoMBeanInfoBuilder(metaData);
+ ModelMBeanInfo info = infoBuilder.build();
+ mbean = new ExoModelMBean(context, managedResource, info);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ //
+ if (mbean != null)
+ {
+ ObjectName on = null;
+ PropertiesInfo oni = PropertiesInfo.resolve(managedResource.getClass(),
NameTemplate.class);
+ if (oni != null)
+ {
+ try
+ {
+ Map<String, String> foo = oni.resolve(managedResource);
+ on = JMX.createObjectName("exo", foo);
+ }
+ catch (MalformedObjectNameException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ if (on != null)
+ {
+ // Merge with the container hierarchy context
+ try
+ {
+ Map<String, String> props = new Hashtable<String, String>();
+
+ // Julien : I know it's does not look great but it's necessary
+ // for compiling under Java 5 and Java 6 properly. The methods
+ // ObjectName#getKeyPropertyList() returns an Hashtable with Java 5
+ // and a Hashtable<String, String> with Java 6.
+ for (Object o : on.getKeyPropertyList().entrySet())
+ {
+ Map.Entry entry = (Map.Entry)o;
+ String key = (String)entry.getKey();
+ String value = (String)entry.getValue();
+ props.put(key, value);
+ }
+
+ //
+ Map<String, String> scopingProperties =
context.getScopingProperties();
+
+ // Merge with scoping properties
+ props.putAll(scopingProperties);
+
+ //
+ on = JMX.createObjectName(on.getDomain(), props);
+
+ //
+ attemptToRegister(on, mbean);
+
+ //
+ return on;
+ }
+ catch (MalformedObjectNameException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ //
+ return null;
+ }
+
+ private void attemptToRegister(ObjectName name, Object mbean)
+ {
+ synchronized (server)
+ {
+ try
+ {
+ server.registerMBean(mbean, name);
+ }
+ catch (InstanceAlreadyExistsException e)
+ {
+ try
+ {
+
+ server.unregisterMBean(name);
+ server.registerMBean(mbean, name);
+
+ }
+ catch (Exception e1)
+ {
+ throw new RuntimeException("Failed to register MBean '" +
name + " due to " + e.getMessage(), e);
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Failed to register MBean '" + name
+ " due to " + e.getMessage(), e);
+ }
+ }
+ }
+
+ public void unmanage(Object key)
+ {
+ ObjectName name = (ObjectName)key;
+ try
+ {
+ server.unregisterMBean(name);
+ }
+ catch (InstanceNotFoundException e)
+ {
+ e.printStackTrace();
+ }
+ catch (MBeanRegistrationException e)
+ {
+ e.printStackTrace();
+ }
+ }
+}
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
11:04:11 UTC (rev 1206)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManageableContainer.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -19,6 +19,7 @@
package org.exoplatform.container.jmx;
import org.exoplatform.container.CachingContainer;
+import org.exoplatform.container.monitor.jvm.J2EEServerInfo;
import org.exoplatform.management.ManagementContext;
import org.exoplatform.management.annotations.Managed;
import org.exoplatform.management.annotations.ManagedDescription;
@@ -30,20 +31,12 @@
import org.picocontainer.defaults.ComponentAdapterFactory;
import org.picocontainer.defaults.DuplicateComponentKeyRegistrationException;
+import java.lang.management.ManagementFactory;
import java.util.Collection;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanInfo;
-import javax.management.MBeanOperationInfo;
-import javax.management.MBeanParameterInfo;
import javax.management.MBeanServer;
-import javax.management.ObjectName;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
@@ -52,6 +45,17 @@
public class ManageableContainer extends CachingContainer
{
+ private static MBeanServer findMBeanServer()
+ {
+ J2EEServerInfo serverenv_ = new J2EEServerInfo();
+ MBeanServer server = serverenv_.getMBeanServer();
+ if (server == null)
+ {
+ server = ManagementFactory.getPlatformMBeanServer();
+ }
+ return server;
+ }
+
/** . */
private static final ThreadLocal<ManageableComponentAdapterFactory> hack =
new ThreadLocal<ManageableComponentAdapterFactory>();
@@ -59,30 +63,54 @@
/** . */
protected ManagementContextImpl managementContext;
- public ManageableContainer(ManagementContextImpl managementContext)
+ /** . */
+ protected MBeanServer server;
+
+ public ManageableContainer()
{
- super(getComponentAdapterFactory(new MX4JComponentAdapterFactory()));
- this.managementContext = managementContext;
- managementContext.container = this;
- init(null);
+ this((PicoContainer)null);
}
public ManageableContainer(PicoContainer parent)
{
- super(getComponentAdapterFactory(new MX4JComponentAdapterFactory()), parent);
- init(parent);
+ this(new MX4JComponentAdapterFactory(), parent);
}
public ManageableContainer(ComponentAdapterFactory componentAdapterFactory,
PicoContainer parent)
{
super(getComponentAdapterFactory(componentAdapterFactory), parent);
- init(parent);
+
+ // Yeah this is not pretty but a necessary evil to make it work
+ ManageableComponentAdapterFactory factory = hack.get();
+ factory.container = this;
+ hack.set(null);
+
+ // Reference the same mbean server that the parent has
+ if (parent instanceof ManageableContainer)
+ {
+ ManageableContainer manageableParent = (ManageableContainer)parent;
+
+ //
+ ManagementContextImpl parentManagementContext =
manageableParent.managementContext;
+ if (parentManagementContext != null)
+ {
+ managementContext = new ManagementContextImpl(parentManagementContext);
+ }
+
+ // Get server from parent
+ server = manageableParent.server;
+ } else {
+ server = findMBeanServer();
+ managementContext = new ManagementContextImpl(new
JMXManagementProvider(server));
+ }
+
+ //
+ this.managementContext.container = this;
}
public ManageableContainer(ComponentAdapterFactory componentAdapterFactory)
{
- super(getComponentAdapterFactory(componentAdapterFactory));
- init(null);
+ this(componentAdapterFactory, null);
}
@Managed
@@ -109,25 +137,6 @@
return factory;
}
- private void init(PicoContainer parent)
- {
- // Yeah this is not pretty but a necessary evil to make it work
- ManageableComponentAdapterFactory factory = hack.get();
- factory.container = this;
- hack.set(null);
-
- // Reference the same mbean server that the parent has
- if (parent instanceof ManageableContainer)
- {
- ManagementContextImpl parentManagementContext =
((ManageableContainer)parent).managementContext;
- if (parentManagementContext != null)
- {
- managementContext = new ManagementContextImpl(parentManagementContext);
- managementContext.container = this;
- }
- }
- }
-
public ManagementContext getManagementContext()
{
return managementContext;
@@ -135,7 +144,7 @@
public final MBeanServer getMBeanServer()
{
- return managementContext != null ? managementContext.server : null;
+ return server;
}
@Override
@@ -155,49 +164,4 @@
}
return adapter;
}
-
- //
-
- public void printMBeanServer()
- {
- MBeanServer server = getMBeanServer();
- final Set names = server.queryNames(null, null);
- for (final Iterator i = names.iterator(); i.hasNext();)
- {
- ObjectName name = (ObjectName)i.next();
- try
- {
- MBeanInfo info = server.getMBeanInfo(name);
- MBeanAttributeInfo[] attrs = info.getAttributes();
- if (attrs == null)
- continue;
- for (int j = 0; j < attrs.length; j++)
- {
- if (attrs[j].isReadable())
- {
- try
- {
- Object o = server.getAttribute(name, attrs[j].getName());
- }
- catch (Exception x)
- {
- x.printStackTrace();
- }
- }
- }
- MBeanOperationInfo[] methods = info.getOperations();
- for (int j = 0; j < methods.length; j++)
- {
- MBeanParameterInfo[] params = methods[j].getSignature();
- for (int k = 0; k < params.length; k++)
- {
- }
- }
- }
- catch (Exception x)
- {
- // x.printStackTrace(System. err);
- }
- }
- }
}
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
11:04:11 UTC (rev 1206)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/jmx/ManagementContextImpl.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -19,26 +19,17 @@
package org.exoplatform.container.jmx;
import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.management.ManagedTypeMetaData;
+import org.exoplatform.container.management.MetaDataBuilder;
import org.exoplatform.management.ManagementContext;
import org.exoplatform.management.annotations.ManagedBy;
-import org.exoplatform.management.jmx.annotations.NameTemplate;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Hashtable;
import java.util.Map;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.management.modelmbean.ModelMBeanInfo;
-
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
@@ -50,29 +41,29 @@
Map<String, String> scopingProperties;
/** The registrations done by this mbean. */
- private final Map<Object, ObjectName> registrations;
+ private final Map<Object, Object> registrations;
/** . */
private final ManagementContextImpl parent;
/** . */
- final MBeanServer server;
+ final JMXManagementProvider provider;
/** An optional container setup when the management context is attached to a
container. */
ManageableContainer container;
public ManagementContextImpl()
{
- this(MBeanServerFactory.createMBeanServer());
+ this(new JMXManagementProvider());
}
- public ManagementContextImpl(MBeanServer server)
+ public ManagementContextImpl(JMXManagementProvider provider)
{
- if (server == null)
+ if (provider == null)
{
throw new NullPointerException();
}
- this.registrations = new HashMap<Object, ObjectName>();
+ this.registrations = new HashMap<Object, Object>();
this.parent = null;
// This is the root container that never have scoping properties
@@ -80,7 +71,7 @@
// as the scoping properties would not exist since the root container would not be
yet
this.scopingProperties = Collections.emptyMap();
- this.server = server;
+ this.provider = provider;
}
public ManagementContextImpl(ManagementContextImpl parent)
@@ -89,10 +80,10 @@
{
throw new NullPointerException();
}
- this.registrations = new HashMap<Object, ObjectName>();
+ this.registrations = new HashMap<Object, Object>();
this.parent = parent;
this.scopingProperties = null;
- this.server = parent.server;
+ this.provider = parent.provider;
}
public ManagementContext getParent()
@@ -102,35 +93,17 @@
public void register(Object o)
{
- ObjectName name = manageMBean(o);
- if (name != null)
- {
- registrations.put(o, name);
- }
- }
-
- public void unregister(Object o)
- {
- ObjectName name = registrations.remove(o);
- if (name != null)
- {
- unmanageMBean(name);
- }
- }
-
- private ExoModelMBean createExoMBean(Object bean)
- {
Object view = null;
// Apply managed by annotation
- ManagedBy managedBy = bean.getClass().getAnnotation(ManagedBy.class);
+ ManagedBy managedBy = o.getClass().getAnnotation(ManagedBy.class);
if (managedBy != null)
{
try
{
Class managedByClass = managedBy.value();
- Constructor<?> blah = managedByClass.getConstructor(bean.getClass());
- view = blah.newInstance(bean);
+ Constructor<?> blah = managedByClass.getConstructor(o.getClass());
+ view = blah.newInstance(o);
}
catch (NoSuchMethodException e)
{
@@ -151,140 +124,43 @@
}
else
{
- view = bean;
+ view = o;
}
//
- if (view != null)
- {
- ExoMBeanInfoBuilder infoBuilder = new ExoMBeanInfoBuilder(view.getClass());
- if (infoBuilder.isBuildable())
- {
- try
- {
- ModelMBeanInfo info = infoBuilder.build();
- return new ExoModelMBean(this, view, info);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
+ if (view != null) {
- //
- return null;
- }
-
- public ObjectName manageMBean(Object bean)
- {
-
- //
- ExoModelMBean mbean = createExoMBean(bean);
-
- //
- if (mbean != null)
- {
- Object mr = mbean.getManagedResource();
- ObjectName on = null;
- PropertiesInfo oni = PropertiesInfo.resolve(mr.getClass(), NameTemplate.class);
- if (oni != null)
- {
- try
+ MetaDataBuilder builder = new MetaDataBuilder(view.getClass());
+ if (builder.isBuildable()) {
+ ManagedTypeMetaData metaData = builder.build();
+ Object name = provider.manage(this, view, metaData);
+ if (name != null)
{
- Map<String, String> foo = oni.resolve(mr);
- on = JMX.createObjectName("exo", foo);
+ registrations.put(o, name);
}
- catch (MalformedObjectNameException e)
- {
- e.printStackTrace();
- }
}
-
- //
- if (on != null)
- {
- // Merge with the container hierarchy context
- try
- {
- Map<String, String> props = new Hashtable<String, String>();
-
- // Julien : I know it's does not look great but it's necessary
- // for compiling under Java 5 and Java 6 properly. The methods
- // ObjectName#getKeyPropertyList() returns an Hashtable with Java 5
- // and a Hashtable<String, String> with Java 6.
- for (Object o : on.getKeyPropertyList().entrySet())
- {
- Map.Entry entry = (Map.Entry)o;
- String key = (String)entry.getKey();
- String value = (String)entry.getValue();
- props.put(key, value);
- }
- for (ManagementContextImpl current = this; current != null; current =
current.parent)
- {
- if (current.scopingProperties != null)
- {
- props.putAll(current.scopingProperties);
- }
- }
- on = JMX.createObjectName(on.getDomain(), props);
- attemptToRegister(on, mbean);
- return on;
- }
- catch (MalformedObjectNameException e)
- {
- e.printStackTrace();
- }
- }
}
-
- //
- return null;
}
- public void unmanageMBean(ObjectName name)
+ public void unregister(Object o)
{
- try
+ Object name = registrations.remove(o);
+ if (name != null)
{
- server.unregisterMBean(name);
+ provider.unmanage(name);
}
- catch (InstanceNotFoundException e)
- {
- e.printStackTrace();
- }
- catch (MBeanRegistrationException e)
- {
- e.printStackTrace();
- }
}
- synchronized void attemptToRegister(ObjectName name, Object mbean)
- {
- synchronized (server)
+ public Map<String, String> getScopingProperties() {
+ Map<String, String> props = new HashMap<String, String>();
+ for (ManagementContextImpl current = this; current != null; current =
current.parent)
{
- try
+ if (current.scopingProperties != null)
{
- server.registerMBean(mbean, name);
+ props.putAll(current.scopingProperties);
}
- catch (InstanceAlreadyExistsException e)
- {
- try
- {
-
- server.unregisterMBean(name);
- server.registerMBean(mbean, name);
-
- }
- catch (Exception e1)
- {
- throw new RuntimeException("Failed to register MBean '" +
name + " due to " + e.getMessage(), e);
- }
- }
- catch (Exception e)
- {
- throw new RuntimeException("Failed to register MBean '" + name
+ " due to " + e.getMessage(), e);
- }
}
+ return props;
}
public ExoContainer findContainer()
Added:
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
(rev 0)
+++
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/management/spi/ManagementProvider.java 2009-12-28
11:48:25 UTC (rev 1207)
@@ -0,0 +1,33 @@
+/*
+ * 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.container.jmx.ManagementContextImpl;
+import org.exoplatform.container.management.ManagedTypeMetaData;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public interface ManagementProvider
+{
+
+ Object manage(ManagementContextImpl context, Object managedResource,
ManagedTypeMetaData metaData);
+
+ void unmanage(Object key);
+
+}