[infinispan-commits] Infinispan SVN: r2664 - in trunk: core/src/main/java/org/infinispan/config and 9 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Nov 3 12:56:11 EDT 2010


Author: galder.zamarreno at jboss.com
Date: 2010-11-03 12:56:10 -0400 (Wed, 03 Nov 2010)
New Revision: 2664

Removed:
   trunk/jopr-plugin/src/main/java/org/infinispan/jopr/ConnectionHelper.java
Modified:
   trunk/core/src/main/java/org/infinispan/CacheDelegate.java
   trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java
   trunk/core/src/main/java/org/infinispan/jmx/AbstractJmxRegistration.java
   trunk/core/src/main/java/org/infinispan/jmx/CacheJmxRegistration.java
   trunk/core/src/main/java/org/infinispan/jmx/CacheManagerJmxRegistration.java
   trunk/core/src/main/java/org/infinispan/jmx/ComponentsJmxRegistration.java
   trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java
   trunk/core/src/test/java/org/infinispan/jmx/ActivationAndPassivationInterceptorMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/CacheLoaderAndCacheStoreInterceptorMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/CacheMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/CacheManagerMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/CacheMgmtInterceptorMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/ComponentsJmxRegistrationTest.java
   trunk/core/src/test/java/org/infinispan/jmx/JmxStatsFunctionalTest.java
   trunk/core/src/test/java/org/infinispan/jmx/MvccLockManagerMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java
   trunk/core/src/test/java/org/infinispan/jmx/TxInterceptorMBeanTest.java
   trunk/core/src/test/java/org/infinispan/test/TestingUtil.java
   trunk/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java
   trunk/jopr-plugin/pom.xml
   trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheComponent.java
   trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheDiscovery.java
   trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerComponent.java
   trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerDiscovery.java
   trunk/parent/pom.xml
   trunk/tools/src/main/java/org/infinispan/tools/jopr/RhqPluginXmlGenerator.java
Log:
ISPN-675 - Make Infinispan JOPR plugin friendly with AS environments - Merged from 4.2.x rev 2662 and 2663
ISPN-754 - Build object names that follow best practices, are clearer and avoid confusion - Merged from 4.2.x rev 2662 and 2663


Modified: trunk/core/src/main/java/org/infinispan/CacheDelegate.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/CacheDelegate.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/CacheDelegate.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -399,7 +399,8 @@
    @ManagedAttribute(description = "Returns the cache name")
    @Metric(displayName = "Cache name", dataType = DataType.TRAIT, displayType = DisplayType.SUMMARY)
    public String getCacheName() {
-      return getName().equals(CacheContainer.DEFAULT_CACHE_NAME) ? "Default Cache" : getName();
+      String name = getName().equals(CacheContainer.DEFAULT_CACHE_NAME) ? "Default Cache" : getName();
+      return name + "(" + getConfiguration().getCacheModeString().toLowerCase() + ")";
    }
 
    public String getVersion() {

Modified: trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -36,6 +36,7 @@
  * @author Manik Surtani
  * @author Vladimir Blagojevic
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  * @since 4.0
  * 
  * @see <a href="../../../config.html#ce_infinispan_global">Configuration reference</a>
@@ -148,6 +149,22 @@
       globalJmxStatistics.setAllowDuplicateDomains(allowDuplicateDomains);
    }
 
+   public String getCacheManagerName() {
+      return globalJmxStatistics.cacheManagerName;
+   }
+
+   /**
+    * If JMX statistics are enabled, this property represents the name of this cache manager.
+    * It offers the possibility for clients to provide a user-defined name to the cache manager
+    * which later can be used to identify the cache manager within a JMX based management tool
+    * amongst other cache managers that might be running under the same JVM.
+    *
+    * @param cacheManagerName
+    */
+   public void setCacheManagerName(String cacheManagerName) {
+      globalJmxStatistics.setCacheManagerName(cacheManagerName);
+   }
+
    public boolean isStrictPeerToPeer() {
       return transport.strictPeerToPeer;
    }
@@ -885,7 +902,7 @@
       protected Boolean enabled = false;
       
       @ConfigurationDocRef(bean=GlobalConfiguration.class,targetElement="setJmxDomain")
-      protected String jmxDomain = "infinispan";
+      protected String jmxDomain = "org.infinispan";
 
       @ConfigurationDocRef(bean=GlobalConfiguration.class,targetElement="setMBeanServerLookup")
       protected String mBeanServerLookup = PlatformMBeanServerLookup.class.getName();
@@ -893,6 +910,9 @@
       @ConfigurationDocRef(bean=GlobalConfiguration.class,targetElement="setAllowDuplicateDomains")
       protected Boolean allowDuplicateDomains = false;
 
+      @ConfigurationDocRef(bean=GlobalConfiguration.class,targetElement="setCacheManagerName")
+      protected String cacheManagerName = "DefaultCacheManager";
+
       @XmlAttribute
       public void setEnabled(Boolean enabled) {
          testImmutability("enabled");
@@ -920,6 +940,13 @@
          testImmutability("allowDuplicateDomains");
          this.allowDuplicateDomains = allowDuplicateDomains;
       }
+
+      @XmlAttribute
+      public void setCacheManagerName(String cacheManagerName) {
+         testImmutability("cacheManagerName");
+         this.cacheManagerName = cacheManagerName;
+      }
+
    }
 
    /**

Modified: trunk/core/src/main/java/org/infinispan/jmx/AbstractJmxRegistration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/jmx/AbstractJmxRegistration.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/jmx/AbstractJmxRegistration.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -25,7 +25,10 @@
 import java.util.Set;
 
 import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
 
+import org.infinispan.CacheException;
 import org.infinispan.config.GlobalConfiguration;
 import org.infinispan.factories.AbstractComponentRegistry;
 import org.infinispan.util.Util;
@@ -62,21 +65,23 @@
       return lookup.getMBeanServer();
    }
 
-   protected String getJmxDomain(String jmxDomain, MBeanServer mBeanServer) {
-      String[] registeredDomains = mBeanServer.getDomains();
+   protected String getJmxDomain(String jmxDomain, MBeanServer mBeanServer, String groupName) {
       int index = 2;
       String finalName = jmxDomain;
       boolean done = false;
       while (!done) {
          done = true;
-         for (String domain : registeredDomains) {
-            if (domain.equals(finalName)) {
+         try {
+            ObjectName targetName = new ObjectName(finalName + ':' + groupName + ",*");
+            if (mBeanServer.queryNames(targetName, null).size() > 0) {
                finalName = jmxDomain + index++;
                done = false;
-               break;
             }
+         } catch (MalformedObjectNameException e) {
+            throw new CacheException("Unable to check for duplicate names", e);
          }
       }
+
       return finalName;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/jmx/CacheJmxRegistration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/jmx/CacheJmxRegistration.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/jmx/CacheJmxRegistration.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -23,7 +23,6 @@
 
 import org.infinispan.AdvancedCache;
 import org.infinispan.Cache;
-import org.infinispan.CacheDelegate;
 import org.infinispan.CacheException;
 import org.infinispan.config.Configuration;
 import org.infinispan.config.GlobalConfiguration;
@@ -58,6 +57,7 @@
 @SurvivesRestarts
 public class CacheJmxRegistration extends AbstractJmxRegistration {
    private static final Log log = LogFactory.getLog(CacheJmxRegistration.class);
+   public static final String CACHE_JMX_GROUP = "type=Cache";
 
    private AdvancedCache cache;
    private Set<Component> nonCacheComponents;
@@ -107,7 +107,7 @@
    }
    
    public void unregisterCacheMBean() {
-      String pattern = jmxDomain + ":" + ComponentsJmxRegistration.JMX_RESOURCE_KEY + "=" + CacheDelegate.OBJECT_NAME + ",*";
+      String pattern = jmxDomain + ":" + CACHE_JMX_GROUP + ",*";
       try {
          Set<ObjectName> names = mBeanServer.queryNames(new ObjectName(pattern), null);
          for (ObjectName name : names) {
@@ -128,16 +128,22 @@
 
    @Override
    protected ComponentsJmxRegistration buildRegistrar(Set<AbstractComponentRegistry.Component> components) {
-      ComponentsJmxRegistration registrar = new ComponentsJmxRegistration(mBeanServer, components, getGroupName());
-      updateDomain(registrar, cache.getComponentRegistry().getGlobalComponentRegistry(), mBeanServer);
+      // Quote group name, to handle invalid ObjectName characters
+      String groupName = CACHE_JMX_GROUP
+            + "," + ComponentsJmxRegistration.NAME_KEY + "="
+            + ObjectName.quote(cache.getName() + "(" + cache.getConfiguration().getCacheModeString().toLowerCase() + ")")
+            + ",manager=" + ObjectName.quote(cache.getConfiguration().getGlobalConfiguration().getCacheManagerName());
+      ComponentsJmxRegistration registrar = new ComponentsJmxRegistration(mBeanServer, components, groupName);
+      updateDomain(registrar, cache.getComponentRegistry().getGlobalComponentRegistry(), mBeanServer, groupName);
       return registrar;
    }
    
-   protected void updateDomain(ComponentsJmxRegistration registrar, GlobalComponentRegistry componentRegistry, MBeanServer mBeanServer) {
+   protected void updateDomain(ComponentsJmxRegistration registrar, GlobalComponentRegistry componentRegistry,
+                               MBeanServer mBeanServer, String groupName) {
       GlobalConfiguration gc = componentRegistry.getComponent(GlobalConfiguration.class);
       CacheManagerJmxRegistration managerJmxReg = componentRegistry.getComponent(CacheManagerJmxRegistration.class);
       if (!gc.isExposeGlobalJmxStatistics() && jmxDomain == null) {
-         String tmpJmxDomain = getJmxDomain(gc.getJmxDomain(), mBeanServer);
+         String tmpJmxDomain = getJmxDomain(gc.getJmxDomain(), mBeanServer, groupName);
          synchronized (managerJmxReg) {
             if (managerJmxReg.jmxDomain == null) {
                if (!tmpJmxDomain.equals(gc.getJmxDomain()) && !gc.isAllowDuplicateDomains()) {
@@ -174,8 +180,4 @@
       return componentsExceptCache;
    }
 
-   private String getGroupName() {
-      return cache.getName() + "(" + cache.getConfiguration().getCacheModeString().toLowerCase() + ")";
-   }
-
 }

Modified: trunk/core/src/main/java/org/infinispan/jmx/CacheManagerJmxRegistration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/jmx/CacheManagerJmxRegistration.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/jmx/CacheManagerJmxRegistration.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -9,6 +9,7 @@
 import org.infinispan.util.logging.LogFactory;
 
 import javax.management.MBeanServer;
+import javax.management.ObjectName;
 
 import java.util.Set;
 
@@ -22,7 +23,7 @@
 @SurvivesRestarts
 public class CacheManagerJmxRegistration extends AbstractJmxRegistration {
    private static final Log log = LogFactory.getLog(CacheManagerJmxRegistration.class);
-   public static final String GLOBAL_JMX_GROUP = "[global]";
+   public static final String CACHE_MANAGER_JMX_GROUP = "type=CacheManager";
    private GlobalComponentRegistry globalReg;
 
    @Inject
@@ -55,14 +56,18 @@
 
    @Override
    protected ComponentsJmxRegistration buildRegistrar(Set<AbstractComponentRegistry.Component> components) {
-      ComponentsJmxRegistration registrar = new ComponentsJmxRegistration(mBeanServer, components, GLOBAL_JMX_GROUP);
-      updateDomain(registrar, globalReg, mBeanServer);
+      // Quote group name, to handle invalid ObjectName characters      
+      String groupName = CACHE_MANAGER_JMX_GROUP
+            + "," + ComponentsJmxRegistration.NAME_KEY
+            + "=" + ObjectName.quote(globalConfig.getCacheManagerName());
+      ComponentsJmxRegistration registrar = new ComponentsJmxRegistration(mBeanServer, components, groupName);
+      updateDomain(registrar, mBeanServer, groupName);
       return registrar;
    }
 
-   protected void updateDomain(ComponentsJmxRegistration registrar, GlobalComponentRegistry componentRegistry, MBeanServer mBeanServer) {
+   protected void updateDomain(ComponentsJmxRegistration registrar, MBeanServer mBeanServer, String groupName) {
       if (jmxDomain == null) {
-         jmxDomain = getJmxDomain(globalConfig.getJmxDomain(), mBeanServer);
+         jmxDomain = getJmxDomain(globalConfig.getJmxDomain(), mBeanServer, groupName);
          String configJmxDomain = globalConfig.getJmxDomain();
          if (!jmxDomain.equals(configJmxDomain) && !globalConfig.isAllowDuplicateDomains()) {
             String message = "There's already an cache manager instance registered under '" + configJmxDomain +

Modified: trunk/core/src/main/java/org/infinispan/jmx/ComponentsJmxRegistration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/jmx/ComponentsJmxRegistration.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/jmx/ComponentsJmxRegistration.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -21,9 +21,11 @@
  */
 package org.infinispan.jmx;
 
+import org.infinispan.CacheDelegate;
 import org.infinispan.CacheException;
 import org.infinispan.factories.AbstractComponentRegistry;
 import org.infinispan.factories.ComponentRegistry;
+import org.infinispan.manager.DefaultCacheManager;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
 
@@ -38,6 +40,7 @@
  * Registers a set of components on an MBean server.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  * @since 4.0
  */
 public class ComponentsJmxRegistration {
@@ -51,15 +54,15 @@
 
    private Set<AbstractComponentRegistry.Component> components;
 
-   public static final String CACHE_NAME_KEY = "cache-name";
-   public static final String JMX_RESOURCE_KEY = "jmx-resource";
+   public static String COMPONENT_KEY = "component";
+   public static String NAME_KEY = "name";   
 
    /**
     * C-tor.
     *
     * @param mBeanServer the server where mbeans are being registered
     * @param components  components
-    * @param groupName   group name
+    * @param groupName   name of jmx group name
     * @see java.lang.management.ManagementFactory#getPlatformMBeanServer()
     * @see <a href="http://java.sun.com/j2se/1.5.0/docs/guide/management/mxbeans.html#mbean_server">platform
     *      MBeanServer</a>
@@ -67,8 +70,7 @@
    public ComponentsJmxRegistration(MBeanServer mBeanServer, Set<AbstractComponentRegistry.Component> components, String groupName) {
       this.mBeanServer = mBeanServer;
       this.components = components;
-      // Quote group name, to handle invalid ObjectName characters
-      this.groupName = ObjectName.quote(groupName);
+      this.groupName = groupName;
    }
 
    public void setJmxDomain(String jmxDomain) {
@@ -83,8 +85,7 @@
          List<ResourceDMBean> resourceDMBeans = getResourceDMBeansFromComponents();
          boolean trace = log.isTraceEnabled();
          for (ResourceDMBean resource : resourceDMBeans) {
-            String resourceName = resource.getObjectName();
-            ObjectName objectName = new ObjectName(getObjectName(resourceName));
+            ObjectName objectName = getObjectName(resource);
             if (!mBeanServer.isRegistered(objectName)) {
                try {
                   mBeanServer.registerMBean(resource, objectName);
@@ -113,8 +114,7 @@
          List<ResourceDMBean> resourceDMBeans = getResourceDMBeansFromComponents();
          boolean trace = log.isTraceEnabled();
          for (ResourceDMBean resource : resourceDMBeans) {
-            String resourceName = resource.getObjectName();
-            ObjectName objectName = new ObjectName(getObjectName(resourceName));
+            ObjectName objectName = getObjectName(resource);
             if (mBeanServer.isRegistered(objectName)) {
                mBeanServer.unregisterMBean(objectName);
                if (trace) log.trace("Unregistered " + objectName);
@@ -137,11 +137,15 @@
       return resourceDMBeans;
    }
 
-   public String getObjectName(String resourceName) {
-      return getObjectName(jmxDomain, groupName, resourceName);
+   private ObjectName getObjectName(ResourceDMBean resource) throws Exception {
+      return getObjectName(resource.getObjectName());
    }
 
+   protected ObjectName getObjectName(String resourceName) throws Exception {
+      return new ObjectName(getObjectName(jmxDomain, groupName, resourceName));
+   }
+
    public static String getObjectName(String jmxDomain, String groupName, String resourceName) {
-      return jmxDomain + ":" + CACHE_NAME_KEY + "=" + groupName + "," + JMX_RESOURCE_KEY + "=" + resourceName;
+      return jmxDomain + ":" + groupName + "," + COMPONENT_KEY + "=" + resourceName;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -623,23 +623,7 @@
    @ManagedAttribute(description = "The name of this cache manager")
    @Metric(displayName = "Cache manager name", displayType = DisplayType.SUMMARY, dataType = DataType.TRAIT)
    public String getName() {
-      StringBuilder sb = new StringBuilder();
-      sb.append(globalConfiguration.getJmxDomain()).append('@');
-      String jmxPort = System.getProperty("com.sun.management.jmxremote.port");
-      if (jmxPort != null) {
-         try {
-            // At least until jdk6, Sun bind the jmx agent to
-            // 0.0.0.0:jmxPort, so using local host name is safe.
-            sb.append(InetAddress.getLocalHost().getHostName()).append(':').append(jmxPort);
-         } catch (UnknownHostException e) {
-            if (log.isTraceEnabled())
-               log.trace("Unable to resolve host", e);
-            sb.append(getLogicalAddressString());
-         }
-      } else {
-         sb.append(getLogicalAddressString());
-      }
-      return sb.toString();
+      return globalConfiguration.getCacheManagerName();
    }
 
    @ManagedOperation(description = "Starts the default cache associated with this cache manager")

Modified: trunk/core/src/test/java/org/infinispan/jmx/ActivationAndPassivationInterceptorMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/ActivationAndPassivationInterceptorMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/ActivationAndPassivationInterceptorMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -10,6 +10,7 @@
 import org.infinispan.loaders.dummy.DummyInMemoryCacheStore;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.test.SingleCacheManagerTest;
+import static org.infinispan.test.TestingUtil.*;
 import org.infinispan.test.TestingUtil;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 import org.testng.annotations.AfterMethod;
@@ -18,13 +19,17 @@
 import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
+import static org.infinispan.test.TestingUtil.getCacheObjectName;
+
 /**
  * Tester class for ActivationInterceptor and PassivationInterceptor.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  */
 @Test(groups = "functional", testName = "jmx.ActivationAndPassivationInterceptorMBeanTest")
 public class ActivationAndPassivationInterceptorMBeanTest extends SingleCacheManagerTest {
@@ -33,7 +38,7 @@
    ObjectName activationInterceptorObjName;
    ObjectName passivationInterceptorObjName;
    CacheStore cacheStore;
-   private static final String JMX_DOMAIN = ActivationAndPassivationInterceptorMBeanTest.class.getName();
+   private static final String JMX_DOMAIN = ActivationAndPassivationInterceptorMBeanTest.class.getSimpleName();
 
    protected EmbeddedCacheManager createCacheManager() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getNonClusteredDefault();
@@ -51,8 +56,8 @@
 
       cacheManager.defineConfiguration("test", configuration);
       cache = cacheManager.getCache("test");
-      activationInterceptorObjName = new ObjectName(JMX_DOMAIN + ":cache-name=\"test(local)\",jmx-resource=Activation");
-      passivationInterceptorObjName = new ObjectName(JMX_DOMAIN + ":cache-name=\"test(local)\",jmx-resource=Passivation");
+      activationInterceptorObjName = getCacheObjectName(JMX_DOMAIN, "test(local)", "Activation");
+      passivationInterceptorObjName = getCacheObjectName(JMX_DOMAIN, "test(local)", "Passivation");
 
       threadMBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
       cacheStore = TestingUtil.extractComponent(cache, CacheLoaderManager.class).getCacheStore();
@@ -71,73 +76,73 @@
       threadMBeanServer.setAttribute(activationInterceptorObjName, new Attribute("StatisticsEnabled", Boolean.TRUE));
    }
 
-   public void testActivationOnGet() throws Exception {
+   public void testActivationOnGet(Method m) throws Exception {
       assertActivationCount(0);
-      assert cache.get("key") == null;
+      assert cache.get(k(m)) == null;
       assertActivationCount(0);
-      cacheStore.store(InternalEntryFactory.create("key", "value"));
-      assert cacheStore.containsKey("key");
-      assert cache.get("key").equals("value");
+      cacheStore.store(InternalEntryFactory.create(k(m), v(m)));
+      assert cacheStore.containsKey(k(m));
+      assert cache.get(k(m)).equals(v(m));
       assertActivationCount(1);
-      assert !cacheStore.containsKey("key");
+      assert !cacheStore.containsKey(k(m));
    }
 
-   public void testActivationOnPut() throws Exception {
+   public void testActivationOnPut(Method m) throws Exception {
       assertActivationCount(0);
-      assert cache.get("key") == null;
+      assert cache.get(k(m)) == null;
       assertActivationCount(0);
-      cacheStore.store(InternalEntryFactory.create("key", "value"));
-      assert cacheStore.containsKey("key");
-      cache.put("key", "value2");
-      assert cache.get("key").equals("value2");
+      cacheStore.store(InternalEntryFactory.create(k(m), v(m)));
+      assert cacheStore.containsKey(k(m));
+      cache.put(k(m), v(m, "2"));
+      assert cache.get(k(m)).equals(v(m, "2"));
       assertActivationCount(1);
-      assert !cacheStore.containsKey("key") : "this should only be persisted on evict";
+      assert !cacheStore.containsKey(k(m)) : "this should only be persisted on evict";
    }
 
-   public void testActivationOnRemove() throws Exception {
+   public void testActivationOnRemove(Method m) throws Exception {
       assertActivationCount(0);
-      assert cache.get("key") == null;
+      assert cache.get(k(m)) == null;
       assertActivationCount(0);
-      cacheStore.store(InternalEntryFactory.create("key", "value"));
-      assert cacheStore.containsKey("key");
-      assert cache.remove("key").equals("value");
+      cacheStore.store(InternalEntryFactory.create(k(m), v(m)));
+      assert cacheStore.containsKey(k(m));
+      assert cache.remove(k(m)).equals(v(m));
       assertActivationCount(1);
-      assert !cacheStore.containsKey("key");
+      assert !cacheStore.containsKey(k(m));
    }
 
-   public void testActivationOnReplace() throws Exception {
+   public void testActivationOnReplace(Method m) throws Exception {
       assertActivationCount(0);
-      assert cache.get("key") == null;
+      assert cache.get(k(m)) == null;
       assertActivationCount(0);
-      cacheStore.store(InternalEntryFactory.create("key", "value"));
-      assert cacheStore.containsKey("key");
-      assert cache.replace("key", "value2").equals("value");
+      cacheStore.store(InternalEntryFactory.create(k(m), v(m)));
+      assert cacheStore.containsKey(k(m));
+      assert cache.replace(k(m), v(m, "2")).equals(v(m));
       assertActivationCount(1);
-      assert !cacheStore.containsKey("key");
+      assert !cacheStore.containsKey(k(m));
    }
 
-   public void testActivationOnPutMap() throws Exception {
+   public void testActivationOnPutMap(Method m) throws Exception {
       assertActivationCount(0);
-      assert cache.get("key") == null;
+      assert cache.get(k(m)) == null;
       assertActivationCount(0);
-      cacheStore.store(InternalEntryFactory.create("key", "value"));
-      assert cacheStore.containsKey("key");
+      cacheStore.store(InternalEntryFactory.create(k(m), v(m)));
+      assert cacheStore.containsKey(k(m));
 
       Map toAdd = new HashMap();
-      toAdd.put("key", "value2");
+      toAdd.put(k(m), v(m, "2"));
       cache.putAll(toAdd);
       assertActivationCount(1);
-      assert cache.get("key").equals("value2");
-      assert !cacheStore.containsKey("key");
+      assert cache.get(k(m)).equals(v(m, "2"));
+      assert !cacheStore.containsKey(k(m));
    }
 
-   public void testPassivationOnEvict() throws Exception {
+   public void testPassivationOnEvict(Method m) throws Exception {
       assertPassivationCount(0);
-      cache.put("key", "val");
-      cache.put("key2", "val2");
-      cache.evict("key");
+      cache.put(k(m), v(m));
+      cache.put(k(m, "2"), v(m, "2"));
+      cache.evict(k(m));
       assertPassivationCount(1);
-      cache.evict("key2");
+      cache.evict(k(m, "2"));
       assertPassivationCount(2);
       cache.evict("not_existing_key");
       assertPassivationCount(2);
@@ -150,4 +155,5 @@
    private void assertPassivationCount(int activationCount) throws Exception {
       assert Integer.valueOf(threadMBeanServer.getAttribute(passivationInterceptorObjName, "Passivations").toString()).equals(activationCount);
    }
+
 }

Modified: trunk/core/src/test/java/org/infinispan/jmx/CacheLoaderAndCacheStoreInterceptorMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/CacheLoaderAndCacheStoreInterceptorMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/CacheLoaderAndCacheStoreInterceptorMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -17,10 +17,13 @@
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
+import static org.infinispan.test.TestingUtil.*;
+
 /**
  * Tests the jmx functionality from CacheLoaderInterceptor and CacheStoreInterceptor.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  */
 @Test(groups = "functional", testName = "jmx.CacheLoaderAndCacheStoreInterceptorMBeanTest")
 public class CacheLoaderAndCacheStoreInterceptorMBeanTest extends SingleCacheManagerTest {
@@ -48,8 +51,8 @@
 
       cacheManager.defineConfiguration("test", configuration);
       cache = cacheManager.getCache("test");
-      loaderInterceptorObjName = new ObjectName(JMX_DOMAIN + ":cache-name=\"test(local)\",jmx-resource=CacheLoader");
-      storeInterceptorObjName = new ObjectName(JMX_DOMAIN + ":cache-name=\"test(local)\",jmx-resource=CacheStore");
+      loaderInterceptorObjName = getCacheObjectName(JMX_DOMAIN, "test(local)", "CacheLoader");
+      storeInterceptorObjName = getCacheObjectName(JMX_DOMAIN, "test(local)", "CacheStore");
 
       threadMBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
       cacheStore = TestingUtil.extractComponent(cache, CacheLoaderManager.class).getCacheStore();

Modified: trunk/core/src/test/java/org/infinispan/jmx/CacheMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/CacheMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/CacheMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -33,6 +33,7 @@
 import org.infinispan.manager.CacheContainer;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.test.SingleCacheManagerTest;
+import static org.infinispan.test.TestingUtil.*;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
@@ -52,8 +53,8 @@
    }
    
    public void testStartStopManagedOperations() throws Exception {
-      ObjectName defaultOn = new ObjectName(JMX_DOMAIN + ":cache-name=\"" + CacheContainer.DEFAULT_CACHE_NAME + "(local)\",jmx-resource=Cache");
-      ObjectName managerON = new ObjectName(JMX_DOMAIN + ":cache-name=\"[global]\",jmx-resource=CacheManager");
+      ObjectName defaultOn = getCacheObjectName(JMX_DOMAIN);
+      ObjectName managerON = getCacheManagerObjectName(JMX_DOMAIN);
       server.invoke(managerON, "startCache", new Object[]{}, new String[]{});
       assert ComponentStatus.RUNNING.toString().equals(server.getAttribute(defaultOn, "CacheStatus"));
       assert server.getAttribute(managerON, "CreatedCacheCount").equals("1");
@@ -81,10 +82,10 @@
    }
    
    public void testManagerStopRemovesCacheMBean(Method m) throws Exception {
-      final String otherJmxDomain = JMX_DOMAIN + '.' + m.getName();
-      ObjectName defaultOn = new ObjectName(otherJmxDomain + ":cache-name=\"" + CacheContainer.DEFAULT_CACHE_NAME + "(local)\",jmx-resource=Cache");
-      ObjectName galderOn = new ObjectName(otherJmxDomain + ":cache-name=\"galder(local)\",jmx-resource=Cache");
-      ObjectName managerON = new ObjectName(otherJmxDomain + ":cache-name=\"[global]\",jmx-resource=CacheManager");
+      final String otherJmxDomain = getMethodSpecificJmxDomain(m, JMX_DOMAIN);
+      ObjectName defaultOn = getCacheObjectName(otherJmxDomain);
+      ObjectName galderOn = getCacheObjectName(otherJmxDomain, "galder(local)");
+      ObjectName managerON = getCacheManagerObjectName(otherJmxDomain);
       CacheContainer otherContainer = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(otherJmxDomain);
       server.invoke(managerON, "startCache", new Object[]{}, new String[]{});
       server.invoke(managerON, "startCache", new Object[]{"galder"}, new String[]{String.class.getName()});

Modified: trunk/core/src/test/java/org/infinispan/jmx/CacheManagerMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/CacheManagerMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/CacheManagerMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -6,6 +6,7 @@
 import org.infinispan.manager.CacheContainer;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.test.SingleCacheManagerTest;
+import static org.infinispan.test.TestingUtil.*;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 import org.testng.annotations.Test;
 
@@ -19,6 +20,7 @@
  * Tests whether the attributes defined by DefaultCacheManager work correct.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  * @since 4.0
  */
 @Test(groups = "functional", testName = "jmx.CacheManagerMBeanTest")
@@ -31,7 +33,7 @@
 
    protected EmbeddedCacheManager createCacheManager() throws Exception {
       cacheManager = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(JMX_DOMAIN, true, false);
-      name = new ObjectName(JMX_DOMAIN + ":cache-name=\"[global]\",jmx-resource=CacheManager");
+      name = getCacheManagerObjectName(JMX_DOMAIN);
       server = PerThreadMBeanServerLookup.getThreadMBeanServer();
       server.invoke(name, "startCache", new Object[]{}, new String[]{});
       return cacheManager;
@@ -77,10 +79,10 @@
       
    }
    
-   public void testJmxRegistrationAtStartupAndStop(Method method) throws Exception {
-      final String otherJmxDomain = JMX_DOMAIN + '.' + method.getName();
+   public void testJmxRegistrationAtStartupAndStop(Method m) throws Exception {
+      final String otherJmxDomain = getMethodSpecificJmxDomain(m, JMX_DOMAIN);
       CacheContainer otherContainer = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(otherJmxDomain, true, false);
-      ObjectName otherName = new ObjectName(otherJmxDomain + ":cache-name=\"[global]\",jmx-resource=CacheManager");
+      ObjectName otherName = getCacheManagerObjectName(otherJmxDomain);
       try {
          assert server.getAttribute(otherName, "CreatedCacheCount").equals("0");
       } finally {
@@ -93,4 +95,16 @@
       } catch (InstanceNotFoundException e) {
       }
    }
+
+   public void testCustomCacheManagerName(Method m) throws Exception {
+      final String otherJmxDomain = getMethodSpecificJmxDomain(m, JMX_DOMAIN);
+      CacheContainer otherContainer = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(otherJmxDomain, "Hibernate2LC", true, false);
+      ObjectName otherName = getCacheManagerObjectName(otherJmxDomain, "Hibernate2LC");
+      try {
+         assert server.getAttribute(otherName, "CreatedCacheCount").equals("0");
+      } finally {
+         otherContainer.stop();
+      }
+   }
+
 }

Modified: trunk/core/src/test/java/org/infinispan/jmx/CacheMgmtInterceptorMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/CacheMgmtInterceptorMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/CacheMgmtInterceptorMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -5,6 +5,7 @@
 import org.infinispan.config.GlobalConfiguration;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.test.SingleCacheManagerTest;
+import static org.infinispan.test.TestingUtil.*;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
@@ -18,13 +19,14 @@
  * Test functionality in {@link org.infinispan.interceptors.CacheMgmtInterceptor}.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  */
 @Test(groups = "functional", testName = "jmx.CacheMgmtInterceptorMBeanTest")
 public class CacheMgmtInterceptorMBeanTest extends SingleCacheManagerTest {
    private ObjectName mgmtInterceptor;
    private MBeanServer threadMBeanServer;
    AdvancedCache advanced;
-   private static final String JMX_DOMAIN = CacheMgmtInterceptorMBeanTest.class.getName();
+   private static final String JMX_DOMAIN = CacheMgmtInterceptorMBeanTest.class.getSimpleName();
 
    protected EmbeddedCacheManager createCacheManager() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getNonClusteredDefault();
@@ -38,7 +40,7 @@
       cacheManager.defineConfiguration("test", configuration);
       cache = cacheManager.getCache("test");
       advanced = cache.getAdvancedCache();
-      mgmtInterceptor = new ObjectName(JMX_DOMAIN + ":cache-name=\"test(local)\",jmx-resource=Statistics");
+      mgmtInterceptor = getCacheObjectName(JMX_DOMAIN, "test(local)", "Statistics");
 
       threadMBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
       return cacheManager;

Modified: trunk/core/src/test/java/org/infinispan/jmx/ComponentsJmxRegistrationTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/ComponentsJmxRegistrationTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/ComponentsJmxRegistrationTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -5,7 +5,6 @@
 import org.infinispan.config.Configuration;
 import org.infinispan.config.GlobalConfiguration;
 import org.infinispan.factories.AbstractComponentRegistry;
-import org.infinispan.manager.CacheContainer;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.test.AbstractInfinispanTest;
 import org.infinispan.test.TestingUtil;
@@ -25,12 +24,12 @@
  * Tester class for {@link ComponentsJmxRegistration}.
  *
  * @author Mircea.Markus at jboss.com
- * @author <a href="mailto:galder.zamarreno at jboss.com">Galder Zamarreno</a>
+ * @author Galder Zamarreño
  * @since 4.0
  */
 @Test(groups = "functional", testName = "jmx.ComponentsJmxRegistrationTest")
 public class ComponentsJmxRegistrationTest extends AbstractInfinispanTest {
-
+   public static final String JMX_DOMAIN = ComponentsJmxRegistrationTest.class.getSimpleName();
    private MBeanServer mBeanServer;
    private List<EmbeddedCacheManager> cacheContainers = new ArrayList<EmbeddedCacheManager>();
 
@@ -58,7 +57,7 @@
 
       ComponentsJmxRegistration regComponents = buildRegistrator(first);
       regComponents.registerMBeans();
-      String name = regComponents.getObjectName("Statistics");
+      String name = regComponents.getObjectName("Statistics").toString();
       ObjectName name1 = new ObjectName(name);
       assert mBeanServer.isRegistered(name1);
       regComponents.unregisterMBeans();
@@ -69,7 +68,10 @@
    private ComponentsJmxRegistration buildRegistrator(Cache cache) {
       AdvancedCache ac = (AdvancedCache) cache;
       Set<AbstractComponentRegistry.Component> components = ac.getComponentRegistry().getRegisteredComponents();
-      return new ComponentsJmxRegistration(mBeanServer, components, cache.getName());
+      String groupName = "name=" + ObjectName.quote(cache.getName());
+      ComponentsJmxRegistration registrator = new ComponentsJmxRegistration(mBeanServer, components, groupName);
+      registrator.setJmxDomain(JMX_DOMAIN);
+      return registrator;
    }
 
    public void testRegisterReplicatedCache() throws Exception {
@@ -85,7 +87,7 @@
 
       ComponentsJmxRegistration regComponents = buildRegistrator(first);
       regComponents.registerMBeans();
-      String name = regComponents.getObjectName("Statistics");
+      String name = regComponents.getObjectName("Statistics").toString();
       ObjectName name1 = new ObjectName(name);
       assertCorrectJmxName(name1, first);
       assert mBeanServer.isRegistered(name1);
@@ -113,8 +115,8 @@
       replicatedRegComponents.registerMBeans();
       localRegComponents.registerMBeans();
 
-      String replicatedtCMgmtIntName = replicatedRegComponents.getObjectName("Statistics");
-      String localCMgmtIntName = localRegComponents.getObjectName("Statistics");
+      String replicatedtCMgmtIntName = replicatedRegComponents.getObjectName("Statistics").toString();
+      String localCMgmtIntName = localRegComponents.getObjectName("Statistics").toString();
       ObjectName replObjectName = new ObjectName(replicatedtCMgmtIntName);
       ObjectName localObjName = new ObjectName(localCMgmtIntName);
       assertCorrectJmxName(replObjectName, replicatedCache);
@@ -130,8 +132,8 @@
    }
 
    private void assertCorrectJmxName(ObjectName objectName, Cache cache) {
-      assert ObjectName.unquote(objectName.getKeyProperty(ComponentsJmxRegistration.CACHE_NAME_KEY)).startsWith(cache.getName());
-      assert objectName.getKeyProperty(ComponentsJmxRegistration.JMX_RESOURCE_KEY) != null;
+      assert ObjectName.unquote(objectName.getKeyProperty(ComponentsJmxRegistration.NAME_KEY)).startsWith(cache.getName());
+      assert objectName.getKeyProperty(ComponentsJmxRegistration.COMPONENT_KEY) != null;
    }
 
    private Configuration config() {

Modified: trunk/core/src/test/java/org/infinispan/jmx/JmxStatsFunctionalTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/JmxStatsFunctionalTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/JmxStatsFunctionalTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -6,6 +6,7 @@
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.test.AbstractInfinispanTest;
 import org.infinispan.test.TestingUtil;
+import static org.infinispan.test.TestingUtil.*;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
@@ -23,6 +24,7 @@
  * Functional test for checking jmx statistics exposure.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  * @since 4.0
  */
 @Test(groups = "functional", testName = "jmx.JmxStatsFunctionalTest")
@@ -51,7 +53,7 @@
    /**
     * Create a local cache, two replicated caches and see that everithing is correctly registered.
     */
-   public void testDefaultDomain() {
+   public void testDefaultDomain() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setExposeGlobalJmxStatistics(true);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
@@ -71,22 +73,22 @@
       cm.getCache("remote1");
       cm.getCache("remote2");
 
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert existsObject(jmxDomain + ":cache-name=\"remote1(repl_sync)\",jmx-resource=RpcManager");
-      assert existsObject(jmxDomain + ":cache-name=\"remote1(repl_sync)\",jmx-resource=Statistics");
-      assert existsObject(jmxDomain + ":cache-name=\"remote2(invalidation_async)\",jmx-resource=RpcManager");
-      assert existsObject(jmxDomain + ":cache-name=\"remote2(invalidation_async)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert existsObject(getCacheObjectName(jmxDomain, "remote1(repl_sync)", "RpcManager"));
+      assert existsObject(getCacheObjectName(jmxDomain, "remote1(repl_sync)", "Statistics"));
+      assert existsObject(getCacheObjectName(jmxDomain, "remote2(invalidation_async)", "RpcManager"));
+      assert existsObject(getCacheObjectName(jmxDomain, "remote2(invalidation_async)", "Statistics"));
 
       TestingUtil.killCacheManagers(cm);
 
-      assert !existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert !existsObject(jmxDomain + ":cache-name=\"remote1(repl_sync)\",jmx-resource=RpcManager");
-      assert !existsObject(jmxDomain + ":cache-name=\"remote1(repl_sync)\",jmx-resource=Statistics");
-      assert !existsObject(jmxDomain + ":cache-name=\"remote2(invalidation_async)\",jmx-resource=RpcManager");
-      assert !existsObject(jmxDomain + ":cache-name=\"remote2(invalidation_async)\",jmx-resource=Statistics");
+      assert !existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert !existsObject(getCacheObjectName(jmxDomain, "remote1(repl_sync)", "RpcManager"));
+      assert !existsObject(getCacheObjectName(jmxDomain, "remote1(repl_sync)", "Statistics"));
+      assert !existsObject(getCacheObjectName(jmxDomain, "remote2(invalidation_async)", "RpcManager"));
+      assert !existsObject(getCacheObjectName(jmxDomain, "remote2(invalidation_async)", "Statistics"));
    }
 
-   public void testDifferentDomain() {
+   public void testDifferentDomain() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
       cm = TestCacheManagerFactory.createCacheManager(globalConfiguration);
@@ -96,11 +98,11 @@
       cm.defineConfiguration("local_cache", localCache);
       cm.getCache("local_cache");
 
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
    }
 
 
-   public void testOnlyGlobalJmxStatsEnabled() {
+   public void testOnlyGlobalJmxStatsEnabled() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setExposeGlobalJmxStatistics(true);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
@@ -118,12 +120,12 @@
       cm.getCache("local_cache");
       cm.getCache("remote1");
 
-      assert !existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert existsObject(jmxDomain + ":cache-name=\"[global]\",jmx-resource=CacheManager");
-      assert !existsObject(jmxDomain + ":cache-name=\"remote1(repl_sync)\",jmx-resource=Statistics");
+      assert !existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert existsObject(getCacheManagerObjectName(jmxDomain));
+      assert !existsObject(getCacheObjectName(jmxDomain, "remote1(repl_sync)", "RpcManager"));
    }
 
-   public void testOnlyPerCacheJmxStatsEnabled() {
+   public void testOnlyPerCacheJmxStatsEnabled() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setExposeGlobalJmxStatistics(false);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
@@ -141,22 +143,23 @@
       cm.getCache("local_cache");
       cm.getCache("remote1");
 
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert !existsObject(jmxDomain + ":cache-name=\"[global]\",jmx-resource=RpcManager");
-      assert existsObject(jmxDomain + ":cache-name=\"remote1(repl_sync)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert !existsObject(getCacheManagerObjectName(jmxDomain));
+      assert existsObject(getCacheObjectName(jmxDomain, "remote1(repl_sync)", "RpcManager"));
    }
 
    public void testMultipleManagersOnSameServerFails(Method method) throws Exception {
       final String jmxDomain = JMX_DOMAIN + '.' + method.getName();
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setJmxDomain(jmxDomain);
+      globalConfiguration.setExposeGlobalJmxStatistics(true);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
       cm = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(globalConfiguration);
       Configuration localCache = config();//local by default
       localCache.setExposeJmxStatistics(true);
       cm.defineConfiguration("local_cache", localCache);
       cm.getCache("local_cache");
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
 
       GlobalConfiguration globalConfiguration2 = GlobalConfiguration.getClusteredDefault();
       globalConfiguration2.setJmxDomain(jmxDomain);
@@ -174,23 +177,24 @@
       CacheContainer duplicateAllowedContainer = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(globalConfiguration2);
       try {
          final String duplicateName = jmxDomain + "2";
-         ObjectName duplicateObjectName = new ObjectName(duplicateName + ":cache-name=\"[global]\",jmx-resource=CacheManager");
+         ObjectName duplicateObjectName = getCacheManagerObjectName(duplicateName);
          server.getAttribute(duplicateObjectName, "CreatedCacheCount").equals("0");
       } finally {
          duplicateAllowedContainer.stop();
       }
    }
 
-   public void testMultipleManagersOnSameServerWithCloneFails() {
+   public void testMultipleManagersOnSameServerWithCloneFails() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
+      globalConfiguration.setExposeGlobalJmxStatistics(true);
       cm = TestCacheManagerFactory.createCacheManager(globalConfiguration);
       Configuration localCache = config();//local by default
       localCache.setExposeJmxStatistics(true);
       cm.defineConfiguration("local_cache", localCache);
       cm.getCache("local_cache");
       String jmxDomain = globalConfiguration.getJmxDomain();
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
 
       GlobalConfiguration globalConfigurationClone = globalConfiguration.clone();
       globalConfigurationClone.setExposeGlobalJmxStatistics(true);
@@ -203,7 +207,7 @@
       }
    }
 
-   public void testMultipleManagersOnSameServer() {
+   public void testMultipleManagersOnSameServer() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setAllowDuplicateDomains(true);
       globalConfiguration.setExposeGlobalJmxStatistics(true);
@@ -214,7 +218,7 @@
       localCache.setExposeJmxStatistics(true);
       cm.defineConfiguration("local_cache", localCache);
       cm.getCache("local_cache");
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
 
       GlobalConfiguration globalConfiguration2 = GlobalConfiguration.getClusteredDefault();
       globalConfiguration2.setExposeGlobalJmxStatistics(true);
@@ -226,7 +230,7 @@
       localCache2.setExposeJmxStatistics(true);
       cm2.defineConfiguration("local_cache", localCache);
       cm2.getCache("local_cache");
-      assert existsObject(jmxDomain2 + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain2, "local_cache(local)", "Statistics"));
 
       GlobalConfiguration globalConfiguration3 = GlobalConfiguration.getClusteredDefault();
       globalConfiguration3.setExposeGlobalJmxStatistics(true);
@@ -238,10 +242,10 @@
       cm3.defineConfiguration("local_cache", localCache);
       cm3.getCache("local_cache");
       String jmxDomain3 = cm3.getGlobalConfiguration().getJmxDomain();
-      assert existsObject(jmxDomain3 + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain3, "local_cache(local)", "Statistics"));
    }
 
-   public void testUnregisterJmxInfoOnStop() {
+   public void testUnregisterJmxInfoOnStop() throws Exception {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
       globalConfiguration.setExposeGlobalJmxStatistics(true);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
@@ -251,15 +255,15 @@
       cm.defineConfiguration("local_cache", localCache);
       cm.getCache("local_cache");
       String jmxDomain = globalConfiguration.getJmxDomain();
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
 
       TestingUtil.killCacheManagers(cm);
 
-      assert !existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
+      assert !existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
       assert !existsDomains(jmxDomain);
    }
 
-   public void testCorrectUnregistering() {
+   public void testCorrectUnregistering() throws Exception {
       assert !existsDomains("infinispan");
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getNonClusteredDefault();
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
@@ -268,8 +272,8 @@
       cm.defineConfiguration("local_cache", localCache);
       cm.getCache("local_cache");
       String jmxDomain = cm.getGlobalConfiguration().getJmxDomain();
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Cache");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Cache"));
 
       //now register a global one
       GlobalConfiguration globalConfiguration2 = GlobalConfiguration.getClusteredDefault();
@@ -283,17 +287,17 @@
       cm2.defineConfiguration("remote_cache", remoteCache);
       cm2.getCache("remote_cache");
       String jmxDomain2 = cm2.getGlobalConfiguration().getJmxDomain();
-      assert existsObject(jmxDomain2 + ":cache-name=\"remote_cache(repl_sync)\",jmx-resource=Cache");
-      assert existsObject(jmxDomain2 + ":cache-name=\"remote_cache(repl_sync)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain2, "remote_cache(repl_sync)", "Cache"));
+      assert existsObject(getCacheObjectName(jmxDomain2, "remote_cache(repl_sync)", "Statistics"));
 
       cm2.stop();
-      assert existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert !existsObject(jmxDomain2 + ":cache-name=\"remote_cache(repl_sync)\",jmx-resource=Cache");
-      assert !existsObject(jmxDomain2 + ":cache-name=\"remote_cache(repl_sync)\",jmx-resource=Statistics");
+      assert existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert !existsObject(getCacheObjectName(jmxDomain2, "remote_cache(repl_sync)", "CacheComponent"));
+      assert !existsObject(getCacheObjectName(jmxDomain2, "remote_cache(repl_sync)", "Statistics"));
 
       cm.stop();
-      assert !existsObject(jmxDomain + ":cache-name=\"local_cache(local)\",jmx-resource=Statistics");
-      assert !existsObject(jmxDomain2 + ":cache-name=\"remote_cache(repl_sync)\",jmx-resource=Statistics");
+      assert !existsObject(getCacheObjectName(jmxDomain, "local_cache(local)", "Statistics"));
+      assert !existsObject(getCacheObjectName(jmxDomain2, "remote_cache(repl_sync)", "Statistics"));
    }
 
    public void testStopUnstartedCacheManager() {
@@ -304,13 +308,8 @@
       cm.stop();
    }
 
-   static boolean existsObject(String s) {
-      try {
-         ObjectName objectName = new ObjectName(s);
-         return PerThreadMBeanServerLookup.getThreadMBeanServer().isRegistered(objectName);
-      } catch (MalformedObjectNameException e) {
-         throw new RuntimeException(e);
-      }
+   static boolean existsObject(ObjectName objectName) {
+      return PerThreadMBeanServerLookup.getThreadMBeanServer().isRegistered(objectName);
    }
 
    public boolean existsDomains(String... domains) {

Modified: trunk/core/src/test/java/org/infinispan/jmx/MvccLockManagerMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/MvccLockManagerMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/MvccLockManagerMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -12,10 +12,13 @@
 import javax.management.ObjectName;
 import javax.transaction.TransactionManager;
 
+import static org.infinispan.test.TestingUtil.getCacheObjectName;
+
 /**
  * Test the JMX functionality in {@link org.infinispan.util.concurrent.locks.LockManagerImpl}.
  *
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  */
 @Test(groups = "functional", testName = "jmx.MvccLockManagerMBeanTest")
 public class MvccLockManagerMBeanTest extends SingleCacheManagerTest {
@@ -38,7 +41,7 @@
 
       cacheManager.defineConfiguration("test", configuration);
       cache = cacheManager.getCache("test");
-      lockManagerObjName = new ObjectName(JMX_DOMAIN + ":cache-name=\"test(local)\",jmx-resource=LockManager");
+      lockManagerObjName = getCacheObjectName(JMX_DOMAIN, "test(local)", "LockManager");
 
       threadMBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
       return cacheManager;

Modified: trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -17,6 +17,7 @@
 import org.infinispan.test.TestingUtil;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 
+import static org.infinispan.test.TestingUtil.getCacheObjectName;
 import static org.testng.Assert.assertEquals;
 import org.testng.annotations.Test;
 
@@ -46,11 +47,13 @@
  * A workaround in Eclipse is to add -ea to the default VM parameters used.
  * 
  * @author Mircea.Markus at jboss.com
+ * @author Galder Zamarreño
  */
 @Test(groups = "functional", testName = "jmx.RpcManagerMBeanTest")
 public class RpcManagerMBeanTest extends MultipleCacheManagersTest {
    private final String cachename = "repl_sync_cache";
-   public static final String JMX_DOMAIN = RpcManagerMBeanTest.class.getSimpleName();  
+   public static final String JMX_DOMAIN = RpcManagerMBeanTest.class.getSimpleName();
+   public static final String JMX_DOMAIN2 = JMX_DOMAIN + "2";
 
    protected void createCacheManagers() throws Throwable {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getClusteredDefault();
@@ -80,8 +83,8 @@
       Cache cache1 = manager(0).getCache(cachename);
       Cache cache2 = manager(1).getCache(cachename);
       MBeanServer mBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
-      ObjectName rpcManager1 = new ObjectName("RpcManagerMBeanTest:cache-name=\"" + cachename + "(repl_sync)\",jmx-resource=RpcManager");
-      ObjectName rpcManager2 = new ObjectName("RpcManagerMBeanTest2:cache-name=\"" + cachename + "(repl_sync)\",jmx-resource=RpcManager");
+      ObjectName rpcManager1 = getCacheObjectName(JMX_DOMAIN, cachename + "(repl_sync)", "RpcManager");
+      ObjectName rpcManager2 = getCacheObjectName(JMX_DOMAIN2, cachename + "(repl_sync)", "RpcManager");
       assert mBeanServer.isRegistered(rpcManager1);
       assert mBeanServer.isRegistered(rpcManager2);
 
@@ -119,8 +122,7 @@
       Cache cache1 = manager(0).getCache(cachename);
       Cache cache2 = manager(1).getCache(cachename);
       MBeanServer mBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
-      ObjectName rpcManager1 = new ObjectName("RpcManagerMBeanTest:cache-name=\"" + cachename + "(repl_sync)\",jmx-resource=RpcManager");
-      ObjectName rpcManager2 = new ObjectName("RpcManagerMBeanTest2:cache-name=\"" + cachename + "(repl_sync)\",jmx-resource=RpcManager");
+      ObjectName rpcManager1 = getCacheObjectName(JMX_DOMAIN, cachename + "(repl_sync)", "RpcManager");
       
       assert mBeanServer.getAttribute(rpcManager1, "ReplicationCount").equals((long) 0);
       assert mBeanServer.getAttribute(rpcManager1, "ReplicationFailures").equals((long) 0);
@@ -205,8 +207,8 @@
    @Test(dependsOnMethods = "testSuccessRatio")
    public void testAddressInformation() throws Exception {
       MBeanServer mBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
-      ObjectName rpcManager1 = new ObjectName("RpcManagerMBeanTest:cache-name=\"" + cachename + "(repl_sync)\",jmx-resource=RpcManager");
-      ObjectName rpcManager2 = new ObjectName("RpcManagerMBeanTest2:cache-name=\"" + cachename + "(repl_sync)\",jmx-resource=RpcManager");
+      ObjectName rpcManager1 = getCacheObjectName(JMX_DOMAIN, cachename + "(repl_sync)", "RpcManager");
+      ObjectName rpcManager2 = getCacheObjectName(JMX_DOMAIN2, cachename + "(repl_sync)", "RpcManager");
       String cm1Address = manager(0).getAddress().toString();
       String cm2Address = manager(1).getAddress().toString();
       assert mBeanServer.getAttribute(rpcManager1, "NodeAddress").equals(cm1Address);

Modified: trunk/core/src/test/java/org/infinispan/jmx/TxInterceptorMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/TxInterceptorMBeanTest.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/jmx/TxInterceptorMBeanTest.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -14,10 +14,14 @@
 import javax.management.ObjectName;
 import javax.transaction.TransactionManager;
 
+import static org.infinispan.test.TestingUtil.getCacheObjectName;
+
 @Test(groups = "functional", testName = "jmx.TxInterceptorMBeanTest")
 public class TxInterceptorMBeanTest extends MultipleCacheManagersTest {
+   private static final String JMX_DOMAIN = TxInterceptorMBeanTest.class.getSimpleName();
 
    private ObjectName txInterceptor;
+   private ObjectName txInterceptor2;
    private MBeanServer threadMBeanServer;
    private TransactionManager tm;
    private Cache cache1;
@@ -28,10 +32,12 @@
       globalConfiguration.setExposeGlobalJmxStatistics(true);
       globalConfiguration.setAllowDuplicateDomains(true);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
-      globalConfiguration.setJmxDomain("TxInterceptorMBeanTest");
+      globalConfiguration.setJmxDomain(JMX_DOMAIN);
       EmbeddedCacheManager cacheManager1 = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(globalConfiguration);
       registerCacheManager(cacheManager1);
-      EmbeddedCacheManager cacheManager2 = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(globalConfiguration.clone());
+      GlobalConfiguration globalConfiguration2 = globalConfiguration.clone();
+      globalConfiguration2.setCacheManagerName("SecondDefaultCacheManager");
+      EmbeddedCacheManager cacheManager2 = TestCacheManagerFactory.createCacheManagerEnforceJmxDomain(globalConfiguration2);
       registerCacheManager(cacheManager2);
 
       Configuration configuration = getDefaultClusteredConfig(Configuration.CacheMode.REPL_SYNC, true);
@@ -40,7 +46,8 @@
       cacheManager2.defineConfiguration("test", configuration.clone());
       cache1 = cacheManager1.getCache("test");
       cache2 = cacheManager2.getCache("test");
-      txInterceptor = new ObjectName("TxInterceptorMBeanTest:cache-name=\"test(repl_sync)\",jmx-resource=Transactions");
+      txInterceptor = getCacheObjectName(JMX_DOMAIN, "test(repl_sync)", "Transactions");
+      txInterceptor2 = getCacheObjectName(JMX_DOMAIN, "test(repl_sync)", "Transactions", "SecondDefaultCacheManager");
 
       threadMBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
       tm = TestingUtil.getTransactionManager(cache1);
@@ -49,53 +56,53 @@
    @AfterMethod
    public void resetStats() throws Exception {
       threadMBeanServer.invoke(txInterceptor, "resetStatistics", new Object[0], new String[0]);
+      threadMBeanServer.invoke(txInterceptor2, "resetStatistics", new Object[0], new String[0]);
    }
 
-   public void testCommit() throws Exception {
-      
-      assertCommitRollback(0, 0);
+   public void testCommit() throws Exception {      
+      assertCommitRollback(0, 0, txInterceptor);
       tm.begin();
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor);
       cache1.put("key", "value");
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor);
       tm.commit();
-      assertCommitRollback(1, 0);
+      assertCommitRollback(1, 0, txInterceptor);
    }
 
    public void testRollback() throws Exception {
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor);
       tm.begin();
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor);
       cache1.put("key", "value");
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor);
       tm.rollback();
-      assertCommitRollback(0, 1);
+      assertCommitRollback(0, 1, txInterceptor);
    }
 
    public void testRemoteCommit() throws Exception {
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor2);
       tm.begin();
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor2);
       cache2.put("key", "value");
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor2);
       tm.commit();
-      assertCommitRollback(1, 0);
+      assertCommitRollback(1, 0, txInterceptor2);
    }
 
    public void testRemoteRollback() throws Exception {
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor2);
       tm.begin();
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor2);
       cache2.put("key", "value");
-      assertCommitRollback(0, 0);
+      assertCommitRollback(0, 0, txInterceptor2);
       tm.rollback();
-      assertCommitRollback(0, 1);
+      assertCommitRollback(0, 1, txInterceptor2);
    }
 
-   private void assertCommitRollback(int commit, int rollback) throws Exception {
-      String commitCount = threadMBeanServer.getAttribute(txInterceptor, "Commits").toString();
+   private void assertCommitRollback(int commit, int rollback, ObjectName objectName) throws Exception {
+      String commitCount = threadMBeanServer.getAttribute(objectName, "Commits").toString();
       assert Integer.valueOf(commitCount) == commit : "expecting " + commit + " commits, received " + commitCount;
-      String rollbackCount = threadMBeanServer.getAttribute(txInterceptor, "Rollbacks").toString();
+      String rollbackCount = threadMBeanServer.getAttribute(objectName, "Rollbacks").toString();
       assert Integer.valueOf(commitCount) == commit : "expecting " + rollback + " rollbacks, received " + rollbackCount;
    }
 }

Modified: trunk/core/src/test/java/org/infinispan/test/TestingUtil.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/test/TestingUtil.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/test/TestingUtil.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -40,6 +40,7 @@
 import org.jgroups.protocols.TP;
 import org.jgroups.stack.ProtocolStack;
 
+import javax.management.ObjectName;
 import javax.transaction.TransactionManager;
 import java.io.File;
 import java.lang.reflect.Field;
@@ -875,4 +876,34 @@
    public static TransactionTable getTransactionTable(Cache<Object, Object> cache) {
       return cache.getAdvancedCache().getComponentRegistry().getComponent(TransactionTable.class);
    }
+
+   public static String getMethodSpecificJmxDomain(Method m, String jmxDomain) {
+      return jmxDomain + '.' + m.getName();
+   }
+
+   public static ObjectName getCacheManagerObjectName(String jmxDomain) throws Exception {
+      return getCacheManagerObjectName(jmxDomain, "DefaultCacheManager");
+   }
+
+   public static ObjectName getCacheManagerObjectName(String jmxDomain, String cacheManagerName) throws Exception {
+      return new ObjectName(jmxDomain + ":type=CacheManager,name=" + ObjectName.quote(cacheManagerName) + ",component=CacheManager");
+   }
+
+   public static ObjectName getCacheObjectName(String jmxDomain) throws Exception {
+      return getCacheObjectName(jmxDomain, CacheContainer.DEFAULT_CACHE_NAME + "(local)");
+   }
+
+   public static ObjectName getCacheObjectName(String jmxDomain, String cacheName) throws Exception {
+      return getCacheObjectName(jmxDomain, cacheName, "Cache");
+   }
+
+   public static ObjectName getCacheObjectName(String jmxDomain, String cacheName, String component) throws Exception {
+      return getCacheObjectName(jmxDomain, cacheName, component, "DefaultCacheManager");
+   }
+
+   public static ObjectName getCacheObjectName(String jmxDomain, String cacheName, String component, String cacheManagerName) throws Exception {
+      return new ObjectName(jmxDomain + ":type=Cache,manager=" + ObjectName.quote(cacheManagerName)
+            + ",name=" + ObjectName.quote(cacheName) + ",component=" + component);
+   }
+
 }

Modified: trunk/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/core/src/test/java/org/infinispan/test/fwk/TestCacheManagerFactory.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -15,6 +15,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -237,8 +238,17 @@
     * @see #createCacheManagerEnforceJmxDomain(String)
     */
    public static EmbeddedCacheManager createCacheManagerEnforceJmxDomain(String jmxDomain, boolean exposeGlobalJmx, boolean exposeCacheJmx) {
+      return createCacheManagerEnforceJmxDomain(jmxDomain, null, exposeGlobalJmx, exposeCacheJmx);
+   }
+
+   /**
+    * @see #createCacheManagerEnforceJmxDomain(String)
+    */
+   public static EmbeddedCacheManager createCacheManagerEnforceJmxDomain(String jmxDomain, String cacheManagerName, boolean exposeGlobalJmx, boolean exposeCacheJmx) {
       GlobalConfiguration globalConfiguration = GlobalConfiguration.getNonClusteredDefault();
       globalConfiguration.setJmxDomain(jmxDomain);
+      if (cacheManagerName != null)
+         globalConfiguration.setCacheManagerName(cacheManagerName);
       globalConfiguration.setMBeanServerLookup(PerThreadMBeanServerLookup.class.getName());
       globalConfiguration.setExposeGlobalJmxStatistics(exposeGlobalJmx);
       Configuration configuration = new Configuration();

Modified: trunk/jopr-plugin/pom.xml
===================================================================
--- trunk/jopr-plugin/pom.xml	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/jopr-plugin/pom.xml	2010-11-03 16:56:10 UTC (rev 2664)
@@ -184,14 +184,14 @@
                </docletArtifact>
                <useStandardDocletOptions>false</useStandardDocletOptions>
             </configuration>
-         <executions>
-            <execution>
-               <phase>process-classes</phase>
-               <goals>
-                  <goal>javadoc</goal>
-               </goals>
-            </execution>
-         </executions>
+            <executions>
+               <execution>
+                  <phase>process-classes</phase>
+                  <goals>
+                     <goal>javadoc</goal>
+                  </goals>
+               </execution>
+            </executions>
          </plugin>
          
          <!--

Modified: trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheComponent.java
===================================================================
--- trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheComponent.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheComponent.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -41,8 +41,12 @@
 import org.rhq.core.pluginapi.measurement.MeasurementFacet;
 import org.rhq.core.pluginapi.operation.OperationFacet;
 import org.rhq.core.pluginapi.operation.OperationResult;
+import org.rhq.plugins.jmx.MBeanResourceComponent;
+import org.rhq.plugins.jmx.ObjectNameQueryUtility;
 
+import javax.management.ObjectName;
 import java.util.Collection;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -51,13 +55,12 @@
  * @author Heiko W. Rupp
  * @author Galder Zamarreño
  */
-public class CacheComponent implements ResourceComponent<CacheManagerComponent>, MeasurementFacet, OperationFacet {
+public class CacheComponent extends MBeanResourceComponent<CacheManagerComponent> {
    private static final Log log = LogFactory.getLog(CacheComponent.class);
 
    private ResourceContext<CacheManagerComponent> context;
-   
-   /** The naming pattern of the current bean without the actual bean name */
-   private String myNamePattern;
+   private String cacheManagerName;
+   private String cacheName;
 
    /**
     * Return availability of this resource
@@ -69,14 +72,13 @@
       EmsConnection conn = getConnection();
       try {
          conn.refresh();
-         EmsBean bean = conn.getBean(context.getResourceKey());
-         EmsAttribute attribute = bean.getAttribute("CacheStatus");
-         if (attribute.getValue().equals(ComponentStatus.RUNNING.toString())) {
+         EmsBean bean = queryCacheBean();
+         if (bean != null && bean.getAttribute("CacheStatus").getValue().equals(ComponentStatus.RUNNING.toString())) {
             bean.refreshAttributes();
-            if (trace) log.trace("Cache status is running and attributes could be refreshed, so it's up."); 
+            if (trace) log.trace("Cache {0} within {1} cache manager is running and attributes could be refreshed, so it's up.", cacheName, cacheManagerName);
             return AvailabilityType.UP;
          }
-         if (trace) log.trace("Cache status is anything other than running, so it's down.");
+         if (trace) log.trace("Cache status for {0} within {1} cache manager is anything other than running, so it's down.", cacheName, cacheManagerName);
          return AvailabilityType.DOWN;
       } catch (Exception e) {
          if (trace) log.trace("There was an exception checking availability, so cache status is down.");
@@ -84,16 +86,14 @@
       }
    }
 
-
    /**
     * Start the resource connection
-    *
-    * @see org.rhq.core.pluginapi.inventory.ResourceComponent#start(org.rhq.core.pluginapi.inventory.ResourceContext)
     */
-   public void start(ResourceContext<CacheManagerComponent> context) throws Exception {
+   public void start(ResourceContext<CacheManagerComponent> context) {
+      if (log.isTraceEnabled()) log.trace("Start cache component");
       this.context = context;
-      myNamePattern = context.getResourceKey();
-      myNamePattern = myNamePattern.substring(0, myNamePattern.indexOf("jmx-resource=") + 13);
+      this.cacheManagerName = context.getParentResourceComponent().context.getResourceKey();
+      this.cacheName = context.getResourceKey();
    }
 
    /**
@@ -104,26 +104,22 @@
    public void stop() {
    }
 
-
    /**
     * Gather measurement data
     *
     * @see org.rhq.core.pluginapi.measurement.MeasurementFacet#getValues(org.rhq.core.domain.measurement.MeasurementReport,
     *      java.util.Set)
     */
-   public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) throws Exception {
+   public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) {
       boolean trace = log.isTraceEnabled();
       if (trace) log.trace("Get values metrics");
-      EmsConnection conn = getConnection();
       for (MeasurementScheduleRequest req : metrics) {
          if (trace) log.trace("Inspect metric {0}", req);
          String metric = req.getName();
          try {
-            String abbrev = metric.substring(0, metric.indexOf("."));
-            String mbean = myNamePattern + abbrev;
-            EmsBean bean = conn.getBean(mbean);
+            EmsBean bean = queryComponentBean(metric);
             if (bean != null) {
-               if (trace) log.trace("Retrieved mbean with name {0}", mbean);
+               if (trace) log.trace("Retrieved mbean with name {0}", bean.getBeanName());
                bean.refreshAttributes();
                String attName = metric.substring(metric.indexOf(".") + 1);
                EmsAttribute att = bean.getAttribute(attName);
@@ -148,8 +144,6 @@
                } else {
                   log.warn("Attribute {0} not found", attName);
                }
-            } else {
-               if (trace) log.trace("No mbean found with name {0}", mbean);
             }
          }
          catch (Exception e) {
@@ -161,18 +155,15 @@
    /**
     * Invoke operations on the Cache MBean instance
     *
-    * @param name       Name of the operation
-    * @param parameters Parameters of the Operation
+    * @param fullOpName       Name of the operation
+    * @param parameters       Parameters of the Operation
     * @return OperationResult object if successful
-    * @throws Exception If operation was not successful
+    * @throws Exception       If operation was not successful
     */
-   public OperationResult invokeOperation(String name, Configuration parameters) throws Exception {
+   public OperationResult invokeOperation(String fullOpName, Configuration parameters) throws Exception {
       boolean trace = log.isTraceEnabled();
-      EmsConnection conn = getConnection();
-      String abbrev = name.substring(0, name.indexOf("."));
-      String mbean = myNamePattern + abbrev;
-      EmsBean bean = conn.getBean(mbean);
-      String opName = name.substring(name.indexOf(".") + 1);
+      EmsBean bean = queryComponentBean(fullOpName);
+      String opName = fullOpName.substring(fullOpName.indexOf(".") + 1);
       EmsOperation ops = bean.getOperation(opName);
       Collection<PropertySimple> simples = parameters.getSimpleProperties().values();
       if (trace) log.trace("Parameters, as simple properties, are {0}", simples);
@@ -184,7 +175,7 @@
       }
 
       if (ops == null)
-         throw new Exception("Operation " + name + " can't be found");
+         throw new Exception("Operation " + fullOpName + " can't be found");
       
       Object result = ops.invoke(realParams);
       if (trace) log.trace("Returning operation result containing {0}", result.toString());
@@ -192,7 +183,7 @@
    }
 
    private EmsConnection getConnection() {
-      return context.getParentResourceComponent().getConnection();
+      return context.getParentResourceComponent().getEmsConnection();
    }
 
    private MeasurementDataNumeric constructMeasurementDataNumeric(Class attrType, Object o, MeasurementScheduleRequest req) {
@@ -215,4 +206,39 @@
       log.warn("Unknown {0} attribute type for {1}", attrType, o);
       return null;
    }
+
+   private String getSingleComponentPattern(String cacheManagerName, String cacheName, String componentName) {
+      return namedCacheComponentPattern(cacheManagerName, cacheName, componentName) + ",*";
+   }
+
+   private String namedCacheComponentPattern(String cacheManagerName, String cacheName, String componentName) {
+      return CacheDiscovery.cacheComponentPattern(cacheManagerName, componentName)
+            + ",name=" + ObjectName.quote(cacheName);
+   }
+
+   private EmsBean queryCacheBean() {
+      return queryBean("Cache");
+   }
+
+   private EmsBean queryComponentBean(String name) {
+      String componentName = name.substring(0, name.indexOf("."));
+      return queryBean(componentName);
+   }
+
+   private EmsBean queryBean(String componentName) {
+      EmsConnection conn = getConnection();
+      String pattern = getSingleComponentPattern(cacheManagerName, cacheName, componentName);
+      if (log.isTraceEnabled()) log.trace("Pattern to query is {0}", pattern);
+      ObjectNameQueryUtility queryUtility = new ObjectNameQueryUtility(pattern);
+      List<EmsBean> beans = conn.queryBeans(queryUtility.getTranslatedQuery());
+      if (beans.size() > 1) {
+         // If more than one are returned, most likely is due to duplicate domains which is not the general case
+         log.warn("More than one bean returned from applying {0} pattern: {1}", pattern, beans);
+      }
+      EmsBean bean = beans.get(0);
+      if (bean == null) {
+         if (log.isTraceEnabled()) log.trace("No mbean found with name {0}", pattern);
+      }
+      return bean;
+   }
 }
\ No newline at end of file

Modified: trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheDiscovery.java
===================================================================
--- trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheDiscovery.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheDiscovery.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -28,8 +28,10 @@
 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
 import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
 import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+import org.rhq.plugins.jmx.MBeanResourceDiscoveryComponent;
 import org.rhq.plugins.jmx.ObjectNameQueryUtility;
 
+import javax.management.ObjectName;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -40,22 +42,22 @@
  * @author Heiko W. Rupp
  * @author Galder Zamarreño
  */
-public class CacheDiscovery implements ResourceDiscoveryComponent<CacheManagerComponent> {
+public class CacheDiscovery extends MBeanResourceDiscoveryComponent<CacheManagerComponent> {
    private static final Log log = LogFactory.getLog(CacheDiscovery.class);
 
-   /** Naming pattern of the cache mbean */
-   static final String CACHE_QUERY = "*:cache-name=%name%,jmx-resource=Cache";
-
    /** Run the discovery */
-   public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<CacheManagerComponent> discoveryContext) throws Exception {
+   public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<CacheManagerComponent> ctx) {
       boolean trace = log.isTraceEnabled();
-      if (trace) log.trace("Discover resources with context: " + discoveryContext);
+      if (trace) log.trace("Discover resources with context");
       Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
 
-      EmsConnection conn = discoveryContext.getParentResourceComponent().getConnection();
-      if (trace) log.trace("Connection to ems server stablished: " + conn);
-      
-      ObjectNameQueryUtility queryUtility = new ObjectNameQueryUtility(CACHE_QUERY);
+      EmsConnection conn = ctx.getParentResourceComponent().getEmsConnection();
+      if (trace) log.trace("Connection to ems server established");
+
+      String pattern = getAllCachesPattern(ctx.getParentResourceContext().getResourceKey());
+      if (trace) log.trace("Pattern to query is {0}", pattern);
+
+      ObjectNameQueryUtility queryUtility = new ObjectNameQueryUtility(pattern);
       List<EmsBean> beans = conn.queryBeans(queryUtility.getTranslatedQuery());
       if (trace) log.trace("Querying [" + queryUtility.getTranslatedQuery() + "] returned beans: " + beans);
 
@@ -66,12 +68,12 @@
          String name = bean.getAttribute("CacheName").getValue().toString();
          if (trace) log.trace("Resource name is {0}", name);
          DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
-               discoveryContext.getResourceType(), // Resource Type
-               bean.getBeanName().getCanonicalName(), // Resource Key
+               ctx.getResourceType(), // Resource Type
+               name, // Resource Key
                name, // Resource name 
                null, // Version
                "One cache within Infinispan", // ResourceDescription
-               discoveryContext.getDefaultPluginConfiguration(), // Plugin Config
+               ctx.getDefaultPluginConfiguration(), // Plugin Config
                null // ProcessInfo
          );
 
@@ -81,4 +83,12 @@
       }
       return discoveredResources;
    }
+
+   private String getAllCachesPattern(String cacheManagerName) {
+      return cacheComponentPattern(cacheManagerName, "Cache") + ",*";
+   }
+
+   protected static String cacheComponentPattern(String cacheManagerName, String componentName) {
+      return "*:type=Cache,component=" + componentName + ",manager=" + ObjectName.quote(cacheManagerName);
+   }
 }
\ No newline at end of file

Modified: trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerComponent.java
===================================================================
--- trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerComponent.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerComponent.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -31,24 +31,27 @@
 import org.rhq.core.domain.measurement.MeasurementDataTrait;
 import org.rhq.core.domain.measurement.MeasurementReport;
 import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
-import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
-import org.rhq.core.pluginapi.inventory.ResourceComponent;
 import org.rhq.core.pluginapi.inventory.ResourceContext;
-import org.rhq.core.pluginapi.measurement.MeasurementFacet;
+import org.rhq.plugins.jmx.JMXComponent;
+import org.rhq.plugins.jmx.MBeanResourceComponent;
 import org.rhq.plugins.jmx.ObjectNameQueryUtility;
 
+import javax.management.ObjectName;
+import java.util.List;
 import java.util.Set;
 
+import static org.infinispan.jmx.CacheManagerJmxRegistration.CACHE_MANAGER_JMX_GROUP;
+
 /**
  * The component class for the Infinispan manager
  *
  * @author Heiko W. Rupp
  * @author Galder Zamarreño
  */
-public class CacheManagerComponent implements ResourceComponent, MeasurementFacet {
+public class CacheManagerComponent extends MBeanResourceComponent<MBeanResourceComponent> {
    private static final Log log = LogFactory.getLog(CacheManagerComponent.class);
-   private ResourceContext context;
-   private ConnectionHelper helper;
+   protected ResourceContext<JMXComponent> context;
+   private String cacheManagerPattern;
 
    /**
     * Return availability of this resource. We do this by checking the connection to it. If the Manager would expose
@@ -58,13 +61,13 @@
     */
    public AvailabilityType getAvailability() {
       boolean trace = log.isTraceEnabled();
-      EmsConnection conn = getConnection();
+      EmsConnection conn = getEmsConnection();
       try {
          conn.refresh();
          EmsBean bean = queryCacheManagerBean(conn);
          if (bean != null) {
             bean.refreshAttributes();
-            if (trace) log.trace("Cache manager could be found and attributes where refreshed, so it's up.", bean);
+            if (trace) log.trace("Cache manager {0} could be found and attributes where refreshed, so it's up.", bean);
             return AvailabilityType.UP;
          }
          if (trace) log.trace("Cache manager could not be found, so cache manager is down");
@@ -77,23 +80,16 @@
 
    /**
     * Start the resource connection
-    *
-    * @see org.rhq.core.pluginapi.inventory.ResourceComponent#start(org.rhq.core.pluginapi.inventory.ResourceContext)
     */
-   public void start(ResourceContext context) throws InvalidPluginConfigurationException, Exception {
+   public void start(ResourceContext context) {
+      // TODO: Call super.start() ?
       this.context = context;
-      this.helper = new ConnectionHelper();
-      getConnection();
+      this.cacheManagerPattern = "*:" + CACHE_MANAGER_JMX_GROUP + ",name=" + ObjectName.quote(context.getResourceKey()) + ",*";
    }
 
-   /**
-    * Tear down the rescource connection
-    *
-    * @see org.rhq.core.pluginapi.inventory.ResourceComponent#stop()
-    */
-   public void stop() {
-      helper.closeConnection();
-
+   @Override
+   public EmsConnection getEmsConnection() {
+      return context.getParentResourceComponent().getEmsConnection();
    }
 
    /**
@@ -102,11 +98,11 @@
     * @see org.rhq.core.pluginapi.measurement.MeasurementFacet#getValues(org.rhq.core.domain.measurement.MeasurementReport,
     *      java.util.Set)
     */
-   public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) throws Exception {
+   public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) {
       boolean trace = log.isTraceEnabled();
       if (trace) log.trace("Get values for these metrics: {0}", metrics);
-      EmsConnection conn = getConnection();
-      if (trace) log.trace("Connection to ems server stablished: {0}", conn);
+      EmsConnection conn = getEmsConnection();
+      if (trace) log.trace("Connection to ems server established: {0}", conn);
       EmsBean bean = queryCacheManagerBean(conn);
       bean.refreshAttributes();
       if (trace) log.trace("Querying returned bean: {0}", bean);
@@ -127,19 +123,15 @@
       }
    }
 
-   /**
-    * Helper to obtain a connection
-    *
-    * @return EmsConnection object
-    */
-   protected EmsConnection getConnection() {
-      return helper.getEmsConnection(context.getPluginConfiguration());
-   }
-
    private EmsBean queryCacheManagerBean(EmsConnection conn) {
-      String pattern = context.getPluginConfiguration().getSimpleValue("objectName", null);
+      String pattern = cacheManagerPattern;
       if (log.isTraceEnabled()) log.trace("Pattern to query is {0}", pattern);
       ObjectNameQueryUtility queryUtility = new ObjectNameQueryUtility(pattern);
-      return conn.queryBeans(queryUtility.getTranslatedQuery()).get(0);
+      List<EmsBean> beans = conn.queryBeans(queryUtility.getTranslatedQuery());
+      if (beans.size() > 1) {
+         // If more than one are returned, most likely is due to duplicate domains which is not the general case
+         log.warn("More than one bean returned from applying {0} pattern: {1}", pattern, beans);
+      }
+      return beans.get(0);
    }
 }
\ No newline at end of file

Modified: trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerDiscovery.java
===================================================================
--- trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerDiscovery.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/jopr-plugin/src/main/java/org/infinispan/jopr/CacheManagerDiscovery.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -22,18 +22,15 @@
 package org.infinispan.jopr;
 
 import static org.infinispan.jmx.CacheManagerJmxRegistration.*;
-import static org.infinispan.jmx.ComponentsJmxRegistration.*;
-import static org.infinispan.manager.DefaultCacheManager.*;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
 import org.mc4j.ems.connection.EmsConnection;
 import org.mc4j.ems.connection.bean.EmsBean;
 import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.PropertySimple;
 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
-import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
 import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
-import org.rhq.plugins.jmx.JMXDiscoveryComponent;
+import org.rhq.plugins.jmx.JMXComponent;
+import org.rhq.plugins.jmx.MBeanResourceDiscoveryComponent;
 import org.rhq.plugins.jmx.ObjectNameQueryUtility;
 
 import java.util.HashSet;
@@ -46,78 +43,63 @@
  * @author Heiko W. Rupp
  * @author Galder Zamarreño
  */
-public class CacheManagerDiscovery implements ResourceDiscoveryComponent<CacheManagerComponent> {
+public class CacheManagerDiscovery extends MBeanResourceDiscoveryComponent<JMXComponent> {
    private static final Log log = LogFactory.getLog(CacheManagerDiscovery.class);
 
-   // Assume a java5+ jmx-remote connector on port 6996
-   public static String REMOTE = "service:jmx:rmi://127.0.0.1/jndi/rmi://127.0.0.1:6996/jmxrmi";
-
-   private static final String MANAGER_OBJECT = "*:" + CACHE_NAME_KEY + '=' + GLOBAL_JMX_GROUP + "," + JMX_RESOURCE_KEY + "=" + OBJECT_NAME;
-   private static final String CONNECTOR = "org.mc4j.ems.connection.support.metadata.J2SE5ConnectionTypeDescriptor";
-   private static final String OBJECT_NAME_KEY = "objectName";
+   protected static final String CACHE_MANAGER_OBJECTS = "*:" + CACHE_MANAGER_JMX_GROUP + ",*";
    
    /**
     * Run the discovery
     */
-   public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<CacheManagerComponent> ctx) throws Exception {
+   public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<JMXComponent> ctx) {
       boolean trace = log.isTraceEnabled();
       if (trace) log.trace("Discover resources with context: {0}", ctx);
-      Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
-      DiscoveredResourceDetails resource = null;
+      Set<DiscoveredResourceDetails> discoveredResources;
       List<Configuration> manualCfgs = ctx.getPluginConfigurations();
       if (!manualCfgs.isEmpty()) {
-         // Process any manually-added resource.
-         Configuration cfg = ctx.getPluginConfigurations().get(0);
-         String objectName = cfg.getSimple(OBJECT_NAME_KEY).getStringValue();
-         String connectorAddress = cfg.getSimple(JMXDiscoveryComponent.CONNECTOR_ADDRESS_CONFIG_PROPERTY).getStringValue();
-         resource = createDiscoveredResource(ctx, objectName, connectorAddress);
-         if (trace) log.trace("Manually discovered resource is {0}", resource);
+         // TODO: Remove this?
+         discoveredResources = createDiscoveredResource(ctx, CACHE_MANAGER_OBJECTS);
+         if (trace) log.trace("Manually discovered resources are {0}", discoveredResources);
       } else {
          // Process auto discovered resource
-         resource = createDiscoveredResource(ctx, MANAGER_OBJECT, REMOTE);
-         if (trace) log.trace("Automatically discovered resource is {0}", resource);
-         discoveredResources.add(resource);
+         discoveredResources = createDiscoveredResource(ctx, CACHE_MANAGER_OBJECTS);
+         if (trace) log.trace("Automatically discovered resources are {0}", discoveredResources);
       }
-      discoveredResources.add(resource);
       return discoveredResources;
    }
 
-   private DiscoveredResourceDetails createDiscoveredResource(ResourceDiscoveryContext ctx, String objectName, String connectorAddress) {
+   private Set<DiscoveredResourceDetails> createDiscoveredResource(ResourceDiscoveryContext<JMXComponent> ctx, String objectName) {
       boolean trace = log.isTraceEnabled();
-
-      Configuration c = new Configuration();
-      c.put(new PropertySimple(OBJECT_NAME_KEY, objectName));
-      c.put(new PropertySimple(JMXDiscoveryComponent.CONNECTOR_ADDRESS_CONFIG_PROPERTY, connectorAddress));
-      c.put(new PropertySimple(JMXDiscoveryComponent.CONNECTION_TYPE, CONNECTOR));
-      if (trace) log.trace("Configuration is {0}", c.toString(true));
-      
-      ConnectionHelper helper = new ConnectionHelper();
-      EmsConnection conn = helper.getEmsConnection(c);
+      JMXComponent parentComponent = ctx.getParentResourceComponent();
+      EmsConnection conn = parentComponent.getEmsConnection();
       if (conn != null) {
-         if (trace) log.trace("Connection to ems server stablished: {0}", conn);
+         if (trace) log.trace("Connection to ems server established: {0}", conn);
 
          // Run query for manager_object
          ObjectNameQueryUtility queryUtility = new ObjectNameQueryUtility(objectName);
          List<EmsBean> beans = conn.queryBeans(queryUtility.getTranslatedQuery());
          if (trace) log.trace("Querying [{0}] returned beans: {1}", queryUtility.getTranslatedQuery(), beans);
 
-         EmsBean bean = beans.get(0);
-         String managerName = bean.getBeanName().getCanonicalName();
-         String resourceName = bean.getAttribute("Name").getValue().toString();
-         String version = bean.getAttribute("Version").getValue().toString();
-         /* A discovered resource must have a unique key, that must stay the same when the resource is discovered the next time */
-         if (trace) log.trace("Add resource with version '{1}' and type {2}", version, ctx.getResourceType());
-         DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
-               ctx.getResourceType(), // Resource type
-               resourceName, // Resource key
-               resourceName, // Resource name
-               version, // Resource version
-               "A cache manager within Infinispan", // Description
-               c, // Plugin config
-               null // Process info from a process scan
-         );
-         log.info("Discovered Infinispan instance with key {0} and name {1}", resourceName, managerName);
-         return detail;
+         Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
+         for (EmsBean bean : beans) {
+            String managerName = bean.getBeanName().getCanonicalName();
+            String resourceName = bean.getAttribute("Name").getValue().toString();
+            String version = bean.getAttribute("Version").getValue().toString();
+            /* A discovered resource must have a unique key, that must stay the same when the resource is discovered the next time */
+            if (trace) log.trace("Add resource with version '{1}' and type {2}", version, ctx.getResourceType());
+            DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
+                  ctx.getResourceType(), // Resource type
+                  resourceName, // Resource key
+                  resourceName, // Resource name
+                  version, // Resource version
+                  "A cache manager within Infinispan", // Description
+                  null, // Plugin config
+                  null // Process info from a process scan
+            );
+            log.info("Discovered Infinispan instance with key {0} and name {1}", resourceName, managerName);
+            discoveredResources.add(detail);
+         }
+         return discoveredResources;
       } else {
          log.debug("Unable to establish connection");
          return null;

Deleted: trunk/jopr-plugin/src/main/java/org/infinispan/jopr/ConnectionHelper.java
===================================================================
--- trunk/jopr-plugin/src/main/java/org/infinispan/jopr/ConnectionHelper.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/jopr-plugin/src/main/java/org/infinispan/jopr/ConnectionHelper.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -1,166 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2009 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * 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, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.infinispan.jopr;
-
-import org.infinispan.util.Util;
-import org.infinispan.util.logging.Log;
-import org.infinispan.util.logging.LogFactory;
-import org.mc4j.ems.connection.ConnectionFactory;
-import org.mc4j.ems.connection.EmsConnection;
-import org.mc4j.ems.connection.settings.ConnectionSettings;
-import org.mc4j.ems.connection.support.ConnectionProvider;
-import org.mc4j.ems.connection.support.metadata.ConnectionTypeDescriptor;
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.PropertySimple;
-import org.rhq.plugins.jmx.JMXDiscoveryComponent;
-
-import java.util.Properties;
-
-/**
- * Shared helper class to connect to a remote server
- *
- * @author Jay Shaughnessy
- * @author Heiko W. Rupp
- */
-public class ConnectionHelper {
-
-   private final Log log = LogFactory.getLog(ConnectionHelper.class);
-
-   private EmsConnection connection;
-   /**
-    * Controls the dampening of connection error stack traces in an attempt to control spam to the log file. Each time a
-    * connection error is encountered, this will be incremented. When the connection is finally established, this will
-    * be reset to zero.
-    */
-   private int consecutiveConnectionErrors;
-
-
-   public EmsConnection getEmsConnection(Configuration config) {
-      EmsConnection emsConnection = null;
-
-      try {
-         emsConnection = loadConnection(config);
-      } catch (Exception e) {
-         log.error("Component attempting to access a connection that could not be loaded");
-      }
-
-      return emsConnection;
-   }
-
-   /**
-    * This is the preferred way to use a connection from within this class; methods should not access the connection
-    * property directly as it may not have been instantiated if the connection could not be made. <p/> <p>If the
-    * connection has already been established, return the object reference to it. If not, attempt to make a live
-    * connection to the JMX server.</p> <p/> <p>If the connection could not be made in the
-    * start(org.rhq.core.pluginapi.inventory.ResourceContext) method, this method will effectively try to load the
-    * connection on each attempt to use it. As such, multiple threads may attempt to access the connection through this
-    * means at a time. Therefore, the method has been made synchronized on instances of the class.</p> <p/> <p>If any
-    * errors are encountered, this method will log the error, taking into account logic to prevent spamming the log
-    * file. Calling methods should take care to not redundantly log the exception thrown by this method.</p>
-    *
-    * @param pluginConfig
-    * @return live connection to the JMX server; this will not be <code>null</code>
-    * @throws Exception if there are any issues at all connecting to the server
-    */
-   private synchronized EmsConnection loadConnection(Configuration pluginConfig) throws Exception {
-      if (this.connection == null) {
-         try {
-            //Configuration pluginConfig = this.resourceContext.getPluginConfiguration();
-
-            ConnectionSettings connectionSettings = new ConnectionSettings();
-
-            String connectionTypeDescriptorClass = pluginConfig.getSimple(JMXDiscoveryComponent.CONNECTION_TYPE)
-                  .getStringValue();
-            PropertySimple serverUrl = pluginConfig
-                  .getSimple(JMXDiscoveryComponent.CONNECTOR_ADDRESS_CONFIG_PROPERTY);
-
-            connectionSettings.initializeConnectionType((ConnectionTypeDescriptor) Util.getInstance(connectionTypeDescriptorClass));
-            // if not provided use the default serverUrl
-            if (null != serverUrl) {
-               connectionSettings.setServerUrl(serverUrl.getStringValue());
-            }
-
-//                connectionSettings.setPrincipal(pluginConfig.getSimpleValue(PRINCIPAL_CONFIG_PROP, null));
-//                connectionSettings.setCredentials(pluginConfig.getSimpleValue(CREDENTIALS_CONFIG_PROP, null));
-
-            if (connectionSettings.getAdvancedProperties() == null) {
-               connectionSettings.setAdvancedProperties(new Properties());
-            }
-
-            ConnectionFactory connectionFactory = new ConnectionFactory();
-
-
-            ConnectionProvider connectionProvider = connectionFactory.getConnectionProvider(connectionSettings);
-            this.connection = connectionProvider.connect();
-
-            this.connection.loadSynchronous(false); // this loads all the MBeans
-
-            this.consecutiveConnectionErrors = 0;
-
-            if (log.isDebugEnabled())
-               log.debug("Successfully made connection to the remote server instance");
-         } catch (Exception e) {
-
-            // The connection will be established even in the case that the principal cannot be authenticated,
-            // but the connection will not work. That failure seems to come from the call to loadSynchronous after
-            // the connection is established. If we get to this point that an exception was thrown, close any
-            // connection that was made and null it out so we can try to establish it again.
-            if (connection != null) {
-               if (log.isDebugEnabled())
-                  log.debug("Connection created but an exception was thrown. Closing the connection.", e);
-               connection.close();
-               connection = null;
-            }
-
-            // Since the connection is attempted each time it's used, failure to connect could result in log
-            // file spamming. Log it once for every 10 consecutive times it's encountered.
-            if (consecutiveConnectionErrors % 10 == 0) {
-               log.warn("Could not establish connection to the Infinispan instance ["
-                     + (consecutiveConnectionErrors + 1) + "] times.", e);
-            }
-
-            if (log.isDebugEnabled())
-               log.debug("Could not connect to the Infinispan instance for resource ", e);
-
-            consecutiveConnectionErrors++;
-
-            throw e;
-         }
-      }
-
-      return connection;
-   }
-
-
-   /**
-    * If necessary attempt to close the EMS connection, then set this.connection null.  Synchronized ensure we play well
-    * with loadConnection.
-    */
-   public synchronized void closeConnection() {
-      if (this.connection != null) {
-         try {
-            this.connection.close();
-         } catch (Exception e) {
-            log.error("Error closing Infinispan EMS connection: " + e);
-         }
-         this.connection = null;
-      }
-   }
-
-}

Modified: trunk/parent/pom.xml
===================================================================
--- trunk/parent/pom.xml	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/parent/pom.xml	2010-11-03 16:56:10 UTC (rev 2664)
@@ -113,9 +113,13 @@
       <version.netty>3.2.3.Final</version.netty>
       <version.org.jboss.naming>5.0.3.GA</version.org.jboss.naming>
       <version.resteasy>2.0-beta-2</version.resteasy>
-      <version.rhq.pluginAnnotations>1.4.0.B01</version.rhq.pluginAnnotations>
-      <version.rhq.plugingen>1.4.0.B01</version.rhq.plugingen>
-      <version.rhq>1.2.0.GA</version.rhq>
+<!--
+      <version.rhq.pluginAnnotations>4.0.0-SNAPSHOT</version.rhq.pluginAnnotations>
+      <version.rhq.plugingen>4.0.0-SNAPSHOT</version.rhq.plugingen>
+-->
+      <version.rhq.pluginAnnotations>3.0.1</version.rhq.pluginAnnotations>
+      <version.rhq.plugingen>3.0.1</version.rhq.plugingen>
+      <version.rhq>3.0.0</version.rhq>
       <version.scala>2.8.0</version.scala>
       <version.slf4j>1.6.1</version.slf4j>
       <version.spymemcached>2.5</version.spymemcached>

Modified: trunk/tools/src/main/java/org/infinispan/tools/jopr/RhqPluginXmlGenerator.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/jopr/RhqPluginXmlGenerator.java	2010-11-03 16:45:38 UTC (rev 2663)
+++ trunk/tools/src/main/java/org/infinispan/tools/jopr/RhqPluginXmlGenerator.java	2010-11-03 16:56:10 UTC (rev 2664)
@@ -31,7 +31,9 @@
 import java.lang.reflect.Method;
 import java.nio.channels.FileChannel;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.infinispan.factories.scopes.Scope;
 import org.infinispan.factories.scopes.Scopes;
@@ -51,7 +53,7 @@
 import org.rhq.helpers.pluginGen.Props.MetricProps;
 import org.rhq.helpers.pluginGen.Props.OperationProps;
 import org.rhq.helpers.pluginGen.Props.SimpleProperty;
-import org.rhq.helpers.pluginGen.Props.Template;
+import org.rhq.helpers.pluginGen.Props.TypeKey;
 
 import com.sun.javadoc.DocErrorReporter;
 import com.sun.javadoc.RootDoc;
@@ -103,30 +105,16 @@
       root.setName("Infinispan Cache Manager");
       root.setPkg("org.infinispan.jopr");
       root.setDependsOnJmxPlugin(true);
-      root.setManualAddOfResourceType(true);
       root.setDiscoveryClass("CacheManagerDiscovery");
       root.setComponentClass("CacheManagerComponent");
-      root.setSingleton(true);
-      root.setCategory(ResourceCategory.SERVER);
+      root.setSingleton(false);
+      root.setCategory(ResourceCategory.SERVICE);
+      Set<TypeKey> servers = new HashSet<TypeKey>();
+      servers.add(new TypeKey("JMX Server", "JMX"));
+      servers.add(new TypeKey("JBossAS Server", "JBossAS"));
+      servers.add(new TypeKey("JBossAS Server", "JBossAS5"));
+      root.setRunsInsides(servers);
       populateMetricsAndOperations(globalClasses, root, false);
-      
-      SimpleProperty connect = new SimpleProperty("connectorAddress");
-      connect.setDescription("JMX Remoting address of the remote Infinispan Instance");
-      connect.setReadOnly(false);
-      root.getSimpleProps().add(connect);
-       
-      SimpleProperty objectName = new SimpleProperty("objectName");
-      objectName.setDescription("ObjectName of the Manager");
-      objectName.setType("string");
-      objectName.setReadOnly(true);
-      root.getSimpleProps().add(objectName);
-      Template defaultTemplate = new Template("defaultManualDiscovery");
-      defaultTemplate.setDescription("The default setup for Infinispan");
-      SimpleProperty connect2 = new SimpleProperty("connectorAddress");
-      connect2.setDisplayName("URL of the remote server");
-      connect2.setDefaultValue("service:jmx:rmi://127.0.0.1/jndi/rmi://127.0.0.1:6996/jmxrmi");
-      defaultTemplate.getSimpleProps().add(connect2);
-      root.getTemplates().add(defaultTemplate);
 
       Props cache = new Props();
       cache.setName("Infinispan Cache");



More information about the infinispan-commits mailing list