[infinispan-commits] Infinispan SVN: r630 - in trunk: cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje and 10 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Tue Aug 4 14:51:05 EDT 2009


Author: mircea.markus
Date: 2009-08-04 14:51:05 -0400 (Tue, 04 Aug 2009)
New Revision: 630

Removed:
   trunk/core/src/main/java/org/infinispan/config/RuntimeConfig.java
Modified:
   trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStore.java
   trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfig.java
   trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfigTest.java
   trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreTest.java
   trunk/core/src/main/java/org/infinispan/config/CacheLoaderManagerConfig.java
   trunk/core/src/main/java/org/infinispan/config/Configuration.java
   trunk/core/src/main/java/org/infinispan/config/CustomInterceptorConfig.java
   trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java
   trunk/core/src/main/java/org/infinispan/factories/AbstractComponentRegistry.java
   trunk/core/src/main/java/org/infinispan/factories/RpcManagerFactory.java
   trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStore.java
   trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStoreConfig.java
   trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java
   trunk/core/src/main/java/org/infinispan/loaders/decorators/AbstractDelegatingStore.java
   trunk/core/src/main/java/org/infinispan/loaders/decorators/ChainingCacheStore.java
   trunk/core/src/main/java/org/infinispan/manager/CacheManager.java
   trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java
   trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java
   trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java
   trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java
   trunk/core/src/test/java/org/infinispan/profiling/DeadlockDetectionPerformanceTest.java
   trunk/core/src/test/java/org/infinispan/remoting/TransportInvokeTest.java
Log:
[ISPN-106] (JdbcXyzCacheStore should honor cache name) - added UT to reproduce the issue on all cache stores. Fixed the issue in rest of cache stores as well. Reimplemented Configuration.clonable (and aggregated classes)

Modified: trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStore.java
===================================================================
--- trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStore.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStore.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -129,9 +129,9 @@
     private void openSleepyCatResources() throws CacheLoaderException {
         if (trace) log.trace("creating je environment with home dir {0}", cfg.getLocation());
 
-        if (cfg.getCacheDbName() == null) cfg.setCacheDbName(cache.getName());
-        if (cfg.getCatalogDbName() == null) cfg.setCatalogDbName(cfg.getCacheDbName() + "_class_catalog");
-        if (cfg.getExpiryDbName() == null) cfg.setExpiryDbName(cfg.getCacheDbName() + "_expiry");
+       cfg.setCacheName(cache.getName());
+        if (cfg.getCatalogDbName() == null)
+           cfg.setCatalogDbName(cfg.getCacheDbName() + "_class_catalog");
 
         File location = verifyOrCreateEnvironmentDirectory(new File(cfg.getLocation()));
         try {

Modified: trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfig.java
===================================================================
--- trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfig.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfig.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -29,90 +29,108 @@
  * @since 4.0
  */
 @ConfigurationElements(elements = {
-         @ConfigurationElement(name = "loader", parent = "loaders", 
-                  description = "org.infinispan.loaders.bdbje.BdbjeCacheStore", 
-                  cardinalityInParent=Cardinality.UNBOUNDED),
-         @ConfigurationElement(name = "properties", parent = "loader") })
+      @ConfigurationElement(name = "loader", parent = "loaders",
+                            description = "org.infinispan.loaders.bdbje.BdbjeCacheStore",
+                            cardinalityInParent = Cardinality.UNBOUNDED),
+      @ConfigurationElement(name = "properties", parent = "loader")})
 public class BdbjeCacheStoreConfig extends AbstractCacheStoreConfig {
-    private String location = "Infinispan-BdbjeCacheStore";
-    private long lockAcquistionTimeout = 60 * 1000;
-    private int maxTxRetries = 5;
-    private String cacheDbName;
-    private String catalogDbName;
-    private String expiryDbName;
+   private String location = "Infinispan-BdbjeCacheStore";
+   private long lockAcquistionTimeout = 60 * 1000;
+   private int maxTxRetries = 5;
+   private String cacheDbNamePrefix;
+   private String catalogDbName;
+   private String expiryDbPrefix;
+   private String cacheName;
 
-    public String getExpiryDbName() {
-        return expiryDbName;
-    }
+   public String getExpiryDbPrefix() {
+      return expiryDbPrefix;
+   }
 
+   public String getExpiryDbName() {
+      if (expiryDbPrefix != null) {
+         return expiryDbPrefix + "_" + cacheName;
+      } else {
+         return cacheName + "_expiry";
+      }
+   }
 
-    @ConfigurationProperty(name="expiryDbName",
-             parentElement="properties")
-    public void setExpiryDbName(String expiryDbName) {
-        this.expiryDbName = expiryDbName;
-    }
+   @ConfigurationProperty(name = "expiryDbNamePrefix", parentElement = "properties")
+   public void setExpiryDbNamePrefix(String expiryDbName) {
+      this.expiryDbPrefix = expiryDbName;
+   }
 
 
-    public BdbjeCacheStoreConfig() {
-        setCacheLoaderClassName(BdbjeCacheStore.class.getName());
-    }
+   public BdbjeCacheStoreConfig() {
+      setCacheLoaderClassName(BdbjeCacheStore.class.getName());
+   }
 
-    public int getMaxTxRetries() {
-        return maxTxRetries;
-    }
+   public int getMaxTxRetries() {
+      return maxTxRetries;
+   }
 
 
-    @ConfigurationProperty(name="maxTxRetries",
-             parentElement="properties")
-    public void setMaxTxRetries(int maxTxRetries) {
-        this.maxTxRetries = maxTxRetries;
-    }
+   @ConfigurationProperty(name = "maxTxRetries",
+                          parentElement = "properties")
+   public void setMaxTxRetries(int maxTxRetries) {
+      this.maxTxRetries = maxTxRetries;
+   }
 
 
-    public long getLockAcquistionTimeout() {
-        return lockAcquistionTimeout;
-    }
+   public long getLockAcquistionTimeout() {
+      return lockAcquistionTimeout;
+   }
 
 
-    @ConfigurationProperty(name="lockAcquistionTimeout",
-             parentElement="properties")
-    public void setLockAcquistionTimeout(long lockAcquistionTimeout) {
-        this.lockAcquistionTimeout = lockAcquistionTimeout;
-    }
+   @ConfigurationProperty(name = "lockAcquistionTimeout",
+                          parentElement = "properties")
+   public void setLockAcquistionTimeout(long lockAcquistionTimeout) {
+      this.lockAcquistionTimeout = lockAcquistionTimeout;
+   }
 
-    public String getLocation() {
-        return location;
-    }
+   public String getLocation() {
+      return location;
+   }
 
 
-    @ConfigurationProperty(name="location",
-             parentElement="properties")
-    public void setLocation(String location) {
-        testImmutability("location");
-        this.location = location;
-    }
+   @ConfigurationProperty(name = "location",
+                          parentElement = "properties")
+   public void setLocation(String location) {
+      testImmutability("location");
+      this.location = location;
+   }
 
 
-    public String getCacheDbName() {
-        return cacheDbName;
-    }
+   public String getCacheDbNamePrefix() {
+      return cacheDbNamePrefix;
+   }
 
 
-    @ConfigurationProperty(name="cacheDbName",
-             parentElement="properties")
-    public void setCacheDbName(String cacheDbName) {
-        this.cacheDbName = cacheDbName;
-    }
+   @ConfigurationProperty(name = "cacheDbNamePrefix",
+                          parentElement = "properties")
+   public void setCacheDbNamePrefix(String cacheDbNamePrefix) {
+      this.cacheDbNamePrefix = cacheDbNamePrefix;
+   }
 
-    public String getCatalogDbName() {
-        return catalogDbName;
-    }
+   public String getCatalogDbName() {
+      return catalogDbName;
+   }
 
 
-    @ConfigurationProperty(name="catalogDbName",
-             parentElement="properties")
-    public void setCatalogDbName(String catalogDbName) {
-        this.catalogDbName = catalogDbName;
-    }
+   @ConfigurationProperty(name = "catalogDbName",
+                          parentElement = "properties")
+   public void setCatalogDbName(String catalogDbName) {
+      this.catalogDbName = catalogDbName;
+   }
 
+   void setCacheName(String name) {
+      this.cacheName = name;
+   }
+
+   public String getCacheDbName() {
+      if (cacheDbNamePrefix != null) {
+         return cacheDbNamePrefix + "_" + cacheName;
+      } else {
+         return cacheName;
+      }
+   }
 }

Modified: trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfigTest.java
===================================================================
--- trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfigTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreConfigTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -67,8 +67,8 @@
 
     @Test
     public void testSetCacheDb() {
-        config.setCacheDbName("foo");
-        assert config.getCacheDbName().equals("foo");
+        config.setCacheDbNamePrefix("foo");
+        assert config.getCacheDbNamePrefix().equals("foo");
     }
 
     @Test
@@ -79,8 +79,8 @@
 
     @Test
     public void testSetExpiryDb() {
-        config.setExpiryDbName("foo");
-        assert config.getExpiryDbName().equals("foo");
+        config.setExpiryDbNamePrefix("foo");
+        assert config.getExpiryDbPrefix().equals("foo");
     }
 
 }

Modified: trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreTest.java
===================================================================
--- trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/cachestore/bdbje/src/test/java/org/infinispan/loaders/bdbje/BdbjeCacheStoreTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -82,8 +82,9 @@
                 return cacheDb;
             else if (name.equals(cfg.getCatalogDbName()))
                 return catalogDb;
-            else
+            else if (name.equals(cfg.getExpiryDbName()))
                 return expiryDb;
+            else throw new IllegalStateException("Unknown name:" + name);
         }
 
         @Override

Modified: trunk/core/src/main/java/org/infinispan/config/CacheLoaderManagerConfig.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/CacheLoaderManagerConfig.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/config/CacheLoaderManagerConfig.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -21,19 +21,18 @@
  */
 package org.infinispan.config;
 
-import java.util.LinkedList;
-import java.util.List;
+import org.infinispan.config.parsing.CacheLoaderManagerConfigReader;
+import org.infinispan.loaders.CacheLoaderConfig;
+import org.infinispan.loaders.CacheStoreConfig;
+import org.infinispan.util.Util;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
 
-import org.infinispan.config.parsing.CacheLoaderManagerConfigReader;
-import org.infinispan.loaders.CacheLoaderConfig;
-import org.infinispan.loaders.CacheStoreConfig;
-import org.infinispan.util.Util;
-
 /**
  * Holds the configuration of the cache loader chain.  ALL cache loaders should be defined using this class, adding
  * individual cache loaders to the chain by calling {@link CacheLoaderManagerConfig#addCacheLoaderConfig}
@@ -165,7 +164,7 @@
          for (CacheLoaderConfig clc : cacheLoaderConfigs) {
             clcs.add(clc.clone());
          }
-         clone.setCacheLoaderConfigs(clcs);
+         clone.cacheLoaderConfigs = clcs;
       }
       return clone;
    }

Modified: trunk/core/src/main/java/org/infinispan/config/Configuration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/Configuration.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/config/Configuration.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -21,23 +21,6 @@
  */
 package org.infinispan.config;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
 import org.infinispan.config.parsing.ClusteringConfigReader;
 import org.infinispan.config.parsing.CustomInterceptorConfigReader;
 import org.infinispan.distribution.DefaultConsistentHash;
@@ -47,7 +30,19 @@
 import org.infinispan.factories.annotations.Start;
 import org.infinispan.transaction.lookup.GenericTransactionManagerLookup;
 import org.infinispan.util.concurrent.IsolationLevel;
+import org.infinispan.CacheException;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
 /**
  * Encapsulates the configuration of a Cache.
  * 
@@ -98,95 +93,6 @@
    private String name;
 
 
-   /**
-    * Cache replication mode.
-    */
-   public static enum CacheMode {
-      /**
-       * Data is not replicated.
-       */
-      LOCAL,
-
-      /**
-       * Data replicated synchronously.
-       */
-      REPL_SYNC,
-
-      /**
-       * Data replicated asynchronously.
-       */
-      REPL_ASYNC,
-
-      /**
-       * Data invalidated synchronously.
-       */
-      INVALIDATION_SYNC,
-
-      /**
-       * Data invalidated asynchronously.
-       */
-      INVALIDATION_ASYNC,
-
-      /**
-       * Synchronous DIST
-       */
-      DIST_SYNC,
-
-      /**
-       * Async DIST
-       */
-      DIST_ASYNC;
-
-      /**
-       * Returns true if the mode is invalidation, either sync or async.
-       */
-      public boolean isInvalidation() {
-         return this == INVALIDATION_SYNC || this == INVALIDATION_ASYNC;
-      }
-
-      public boolean isSynchronous() {
-         return this == REPL_SYNC || this == DIST_SYNC || this == INVALIDATION_SYNC || this == LOCAL;
-      }
-
-      public boolean isClustered() {
-         return this != LOCAL;
-      }
-
-      public boolean isDistributed() {
-         return this == DIST_SYNC || this == DIST_ASYNC;
-      }
-
-      public boolean isReplicated() {
-         return this == REPL_SYNC || this == REPL_ASYNC;
-      }
-
-      public CacheMode toSync() {
-         switch (this) {
-            case REPL_ASYNC:
-               return REPL_SYNC;
-            case INVALIDATION_ASYNC:
-               return INVALIDATION_SYNC;
-            case DIST_ASYNC:
-               return DIST_SYNC;
-            default:
-               return this;
-         }
-      }
-
-      public CacheMode toAsync() {
-         switch (this) {
-            case REPL_SYNC:
-               return REPL_ASYNC;
-            case INVALIDATION_SYNC:
-               return INVALIDATION_ASYNC;
-            case DIST_SYNC:
-               return DIST_ASYNC;
-            default:
-               return this;
-         }
-      }
-   }
-
    // ------------------------------------------------------------------------------------------------------------
    //   CONFIGURATION OPTIONS
    // ------------------------------------------------------------------------------------------------------------
@@ -796,29 +702,25 @@
 
    @Override
    public Configuration clone() {
-      
-      Configuration obj = null;
       try {
-          // Write the object out to a byte array
-          ByteArrayOutputStream bos = new ByteArrayOutputStream();
-          ObjectOutputStream out = new ObjectOutputStream(bos);
-          out.writeObject(this);
-          out.flush();
-          out.close();
-
-          // Make an input stream from the byte array and read
-          // a copy of the object back in.
-          ObjectInputStream in = new ObjectInputStream(
-              new ByteArrayInputStream(bos.toByteArray()));
-          obj= (Configuration) in.readObject();
+         Configuration dolly = (Configuration) super.clone();
+         if (globalConfiguration!= null) dolly.globalConfiguration = globalConfiguration.clone();
+         if (locking != null) dolly.locking = (LockingType) locking.clone();
+         if (loaders != null) dolly.loaders = loaders.clone();
+         if (transaction != null) dolly.transaction = (TransactionType) transaction.clone();
+         if (customInterceptors != null) dolly.customInterceptors = customInterceptors.clone();
+         if (eviction != null) dolly.eviction = (EvictionType) eviction.clone();
+         if (expiration != null) dolly.expiration = (ExpirationType) expiration.clone();
+         if (unsafe != null) dolly.unsafe = (UnsafeType) unsafe.clone();
+         if (clustering != null) dolly.clustering = clustering.clone();
+         if (jmxStatistics != null) dolly.jmxStatistics = (BooleanAttributeType) jmxStatistics.clone();
+         if (lazyDeserialization != null) dolly.lazyDeserialization = (BooleanAttributeType) lazyDeserialization.clone();
+         if (invocationBatching != null) dolly.invocationBatching = (BooleanAttributeType) invocationBatching.clone();
+         if (deadlockDetection != null) dolly.deadlockDetection = (DeadlockDetectionType) deadlockDetection.clone();
+         return dolly;
+      } catch (CloneNotSupportedException e) {
+         throw new CacheException("Unexpected!",e);
       }
-      catch(IOException e) {
-          e.printStackTrace();
-      }
-      catch(ClassNotFoundException cnfe) {
-          cnfe.printStackTrace();
-      }
-      return obj;
    }
 
    public boolean isUsingCacheLoaders() {
@@ -983,6 +885,17 @@
          testImmutability("mode");
          this.mode = mode;
       }
+
+      @Override
+      public ClusteringType clone() throws CloneNotSupportedException {
+         ClusteringType dolly = (ClusteringType) super.clone();
+         dolly.sync = (SyncType) sync.clone();
+         dolly.stateRetrieval = (StateRetrievalType) stateRetrieval.clone();
+         dolly.l1 = (L1Type) l1.clone();
+         dolly.async = (AsyncType) async.clone();
+         dolly.hash = (HashType) hash.clone();
+         return dolly;
+      }
    }
    
    @XmlAccessorType(XmlAccessType.PROPERTY)
@@ -1247,5 +1160,107 @@
       
       @XmlElement(name="interceptor")
       private List<CustomInterceptorConfig> customInterceptors= new ArrayList<CustomInterceptorConfig>();
+
+      @Override
+      public CustomInterceptorsType clone() throws CloneNotSupportedException {
+         CustomInterceptorsType dolly = (CustomInterceptorsType) super.clone();
+         if (customInterceptors != null) {
+            dolly.customInterceptors = new ArrayList<CustomInterceptorConfig>();
+            for (CustomInterceptorConfig config: customInterceptors) {
+               CustomInterceptorConfig clone = config.clone();
+               dolly.customInterceptors.add(clone);
+            }
+         }
+         return dolly;
+      }
    }
+
+   /**
+    * Cache replication mode.
+    */
+   public static enum CacheMode {
+      /**
+       * Data is not replicated.
+       */
+      LOCAL,
+
+      /**
+       * Data replicated synchronously.
+       */
+      REPL_SYNC,
+
+      /**
+       * Data replicated asynchronously.
+       */
+      REPL_ASYNC,
+
+      /**
+       * Data invalidated synchronously.
+       */
+      INVALIDATION_SYNC,
+
+      /**
+       * Data invalidated asynchronously.
+       */
+      INVALIDATION_ASYNC,
+
+      /**
+       * Synchronous DIST
+       */
+      DIST_SYNC,
+
+      /**
+       * Async DIST
+       */
+      DIST_ASYNC;
+
+      /**
+       * Returns true if the mode is invalidation, either sync or async.
+       */
+      public boolean isInvalidation() {
+         return this == INVALIDATION_SYNC || this == INVALIDATION_ASYNC;
+      }
+
+      public boolean isSynchronous() {
+         return this == REPL_SYNC || this == DIST_SYNC || this == INVALIDATION_SYNC || this == LOCAL;
+      }
+
+      public boolean isClustered() {
+         return this != LOCAL;
+      }
+
+      public boolean isDistributed() {
+         return this == DIST_SYNC || this == DIST_ASYNC;
+      }
+
+      public boolean isReplicated() {
+         return this == REPL_SYNC || this == REPL_ASYNC;
+      }
+
+      public CacheMode toSync() {
+         switch (this) {
+            case REPL_ASYNC:
+               return REPL_SYNC;
+            case INVALIDATION_ASYNC:
+               return INVALIDATION_SYNC;
+            case DIST_ASYNC:
+               return DIST_SYNC;
+            default:
+               return this;
+         }
+      }
+
+      public CacheMode toAsync() {
+         switch (this) {
+            case REPL_SYNC:
+               return REPL_ASYNC;
+            case INVALIDATION_SYNC:
+               return INVALIDATION_ASYNC;
+            case DIST_SYNC:
+               return DIST_ASYNC;
+            default:
+               return this;
+         }
+      }
+   }
 }
\ No newline at end of file

Modified: trunk/core/src/main/java/org/infinispan/config/CustomInterceptorConfig.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/CustomInterceptorConfig.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/config/CustomInterceptorConfig.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -21,8 +21,10 @@
  */
 package org.infinispan.config;
 
-import java.util.Locale;
-import java.util.Properties;
+import net.jcip.annotations.Immutable;
+import org.infinispan.config.ConfigurationElement.Cardinality;
+import org.infinispan.interceptors.base.CommandInterceptor;
+import org.infinispan.util.TypedProperties;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -30,13 +32,9 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
+import java.util.Locale;
+import java.util.Properties;
 
-import net.jcip.annotations.Immutable;
-
-import org.infinispan.config.ConfigurationElement.Cardinality;
-import org.infinispan.interceptors.base.CommandInterceptor;
-import org.infinispan.util.TypedProperties;
-
 /**
  * Holds information about the custom interceptors defined in the configuration file.
  *
@@ -326,11 +324,7 @@
    @Override
    public CustomInterceptorConfig clone() throws CloneNotSupportedException {
       CustomInterceptorConfig dolly = (CustomInterceptorConfig) super.clone();
-      dolly.interceptor = interceptor;
-      dolly.isFirst = isFirst;
-      dolly.isLast = isLast;
-      dolly.after = after;
-      dolly.before = before;
+      if (properties != null) dolly.properties = (TypedProperties) properties.clone();
       return dolly;
    }
    

Modified: trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/config/GlobalConfiguration.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -1,14 +1,5 @@
 package org.infinispan.config;
 
-import java.util.Properties;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
 import org.infinispan.CacheException;
 import org.infinispan.Version;
 import org.infinispan.executors.DefaultExecutorFactory;
@@ -24,6 +15,14 @@
 import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
 import org.infinispan.util.TypedProperties;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+import java.util.Properties;
+
 /**
  * Configuration component that encapsulates the global configuration.
  * 
@@ -520,7 +519,14 @@
       public void setProperties(TypedProperties properties) {
          testImmutability("properties");
          this.properties = properties;
-      }         
+      }
+
+      @Override
+      public FactoryClassWithPropertiesType clone() throws CloneNotSupportedException {
+         FactoryClassWithPropertiesType dolly = (FactoryClassWithPropertiesType) super.clone();
+         dolly.properties = (TypedProperties) properties.clone();
+         return dolly;
+      }
    }
    
    @XmlAccessorType(XmlAccessType.PROPERTY)
@@ -557,7 +563,14 @@
          //testImmutability("properties");
          //TODO fails JmxStatsFunctionalTest#testMultipleManagersOnSameServerFails
          this.properties = properties;
-      }     
+      }
+
+      @Override
+      public TransportType clone() throws CloneNotSupportedException {
+         TransportType dolly = (TransportType) super.clone();
+         dolly.properties = (TypedProperties) properties.clone();
+         return dolly;
+      }
    }
    
    @XmlAccessorType(XmlAccessType.PROPERTY)

Deleted: trunk/core/src/main/java/org/infinispan/config/RuntimeConfig.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/RuntimeConfig.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/config/RuntimeConfig.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -1,140 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2000 - 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.config;
-
-import org.infinispan.remoting.rpc.RpcManager;
-import org.infinispan.util.Util;
-
-import javax.transaction.TransactionManager;
-import java.util.concurrent.ExecutorService;
-
-public class RuntimeConfig extends AbstractNamedCacheConfigurationBean {
-   /**
-    * The serialVersionUID
-    */
-   private static final long serialVersionUID = 5626847485703341794L;
-
-   private transient TransactionManager transactionManager;
-   private RpcManager rpcManager;
-   private transient ExecutorService asyncSerializationExecutor;
-   private transient ExecutorService asyncCacheListenerExecutor;
-
-   /**
-    * Resets the runtime to default values.
-    */
-   public void reset() {
-      rpcManager = null;
-   }
-
-
-   public TransactionManager getTransactionManager() {
-      return transactionManager;
-   }
-
-   public void setTransactionManager(TransactionManager transactionManager) {
-      testImmutability("transactionManager");
-      this.transactionManager = transactionManager;
-   }
-
-   /**
-    * This is only relevant if the async cache replication executor has been set using {@link
-    * #setAsyncSerializationExecutor(ExecutorService)}. If the executor is created internally, this method will return
-    * null.
-    * <p/>
-    *
-    * @return the executor used for async replication.
-    */
-   public ExecutorService getAsyncSerializationExecutor() {
-      return asyncSerializationExecutor;
-   }
-
-   /**
-    * This is used to set the executor to use for asynchronous cache operations.
-    *
-    * @param asyncSerializationExecutor executor to set
-    */
-   public void setAsyncSerializationExecutor(ExecutorService asyncSerializationExecutor) {
-      this.asyncSerializationExecutor = asyncSerializationExecutor;
-   }
-
-   /**
-    * This is only relevant if the async cache listener executor has been set using {@link
-    * #setAsyncCacheListenerExecutor(java.util.concurrent.ExecutorService)}. If the executor is created internally, this
-    * method will return null.
-    * <p/>
-    *
-    * @return the executor to use for async cache listeners
-    */
-   public ExecutorService getAsyncCacheListenerExecutor() {
-      return asyncCacheListenerExecutor;
-   }
-
-   /**
-    * This is used to set the executor to use for asynchronous cache listeners.
-    * <p/>
-    *
-    * @param asyncCacheListenerExecutor the executor to use for async cache listeners
-    */
-   public void setAsyncCacheListenerExecutor(ExecutorService asyncCacheListenerExecutor) {
-      this.asyncCacheListenerExecutor = asyncCacheListenerExecutor;
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) {
-         return true;
-      }
-
-      if (obj instanceof RuntimeConfig) {
-         RuntimeConfig other = (RuntimeConfig) obj;
-         return Util.safeEquals(transactionManager, other.transactionManager)
-               && Util.safeEquals(rpcManager, other.rpcManager)
-               && Util.safeEquals(asyncCacheListenerExecutor, other.asyncCacheListenerExecutor)
-               && Util.safeEquals(asyncSerializationExecutor, other.asyncSerializationExecutor);
-      }
-
-      return false;
-   }
-
-   @Override
-   public int hashCode() {
-      int result = 17;
-      result = result * 29 + (transactionManager == null ? 0 : transactionManager.hashCode());
-      result = result * 29 + (rpcManager == null ? 0 : rpcManager.hashCode());
-      result = result * 29 + (asyncCacheListenerExecutor == null ? 0 : asyncCacheListenerExecutor.hashCode());
-      result = result * 29 + (asyncSerializationExecutor == null ? 0 : asyncSerializationExecutor.hashCode());
-      return result;
-   }
-
-   public void setRPCManager(RpcManager rpcManager) {
-      this.rpcManager = rpcManager;
-   }
-
-   public RpcManager getRPCManager() {
-      return rpcManager;
-   }
-
-   @Override
-   public RuntimeConfig clone() throws CloneNotSupportedException {
-      return (RuntimeConfig) super.clone();
-   }
-}

Modified: trunk/core/src/main/java/org/infinispan/factories/AbstractComponentRegistry.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/factories/AbstractComponentRegistry.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/factories/AbstractComponentRegistry.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -25,7 +25,6 @@
 import org.infinispan.Version;
 import org.infinispan.config.Configuration;
 import org.infinispan.config.ConfigurationException;
-import org.infinispan.config.RuntimeConfig;
 import org.infinispan.factories.annotations.ComponentName;
 import org.infinispan.factories.annotations.DefaultFactoryFor;
 import org.infinispan.factories.annotations.Inject;

Modified: trunk/core/src/main/java/org/infinispan/factories/RpcManagerFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/factories/RpcManagerFactory.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/factories/RpcManagerFactory.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -21,7 +21,6 @@
  */
 package org.infinispan.factories;
 
-import org.infinispan.config.RuntimeConfig;
 import org.infinispan.factories.annotations.DefaultFactoryFor;
 import org.infinispan.remoting.rpc.RpcManager;
 

Modified: trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStore.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStore.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStore.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -105,6 +105,10 @@
       transactions.remove(tx);
    }
 
+   public CacheStoreConfig getCacheStoreConfig() {
+      return config;
+   }
+
    public void commit(GlobalTransaction tx) throws CacheLoaderException {
       List<? extends Modification> list = transactions.remove(tx);
       if (list != null && !list.isEmpty()) applyModifications(list);

Modified: trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStoreConfig.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStoreConfig.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/loaders/AbstractCacheStoreConfig.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -1,16 +1,16 @@
 package org.infinispan.loaders;
 
+import org.infinispan.config.ConfigurationAttribute;
+import org.infinispan.loaders.decorators.AsyncStoreConfig;
+import org.infinispan.loaders.decorators.SingletonStoreConfig;
+import org.infinispan.util.Util;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-import org.infinispan.config.ConfigurationAttribute;
-import org.infinispan.loaders.decorators.AsyncStoreConfig;
-import org.infinispan.loaders.decorators.SingletonStoreConfig;
-import org.infinispan.util.Util;
-
 /**
  * Configures {@link AbstractCacheStore}.  This allows you to tune a number of characteristics of the {@link
  * AbstractCacheStore}.
@@ -169,8 +169,7 @@
 
    @Override
    public AbstractCacheStoreConfig clone() {
-      AbstractCacheStoreConfig clone = null;
-      clone = (AbstractCacheStoreConfig) super.clone();
+      AbstractCacheStoreConfig clone = (AbstractCacheStoreConfig) super.clone();
       if (singletonStore != null) clone.setSingletonStoreConfig(singletonStore.clone());
       if (async != null) clone.setAsyncStoreConfig(async.clone());
       return clone;

Modified: trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -147,4 +147,9 @@
     * @param tx tx to roll back
     */
    void rollback(GlobalTransaction tx);
+
+   /**
+    * Returns the configuration object associated to this cache store config.
+    */
+   public CacheStoreConfig getCacheStoreConfig();
 }

Modified: trunk/core/src/main/java/org/infinispan/loaders/decorators/AbstractDelegatingStore.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/decorators/AbstractDelegatingStore.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/loaders/decorators/AbstractDelegatingStore.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -6,6 +6,7 @@
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
 import org.infinispan.loaders.CacheStore;
+import org.infinispan.loaders.CacheStoreConfig;
 import org.infinispan.loaders.modifications.Modification;
 import org.infinispan.marshall.Marshaller;
 
@@ -104,4 +105,8 @@
    public void stop() throws CacheLoaderException {
       delegate.stop();
    }
+
+   public CacheStoreConfig getCacheStoreConfig() {
+      return delegate.getCacheStoreConfig();
+   }
 }

Modified: trunk/core/src/main/java/org/infinispan/loaders/decorators/ChainingCacheStore.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/decorators/ChainingCacheStore.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/loaders/decorators/ChainingCacheStore.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -150,4 +150,8 @@
    public LinkedHashMap<CacheStore, CacheLoaderConfig> getStores() {
       return stores;
    }
+
+   public CacheStoreConfig getCacheStoreConfig() {
+      return null;
+   }
 }

Modified: trunk/core/src/main/java/org/infinispan/manager/CacheManager.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/manager/CacheManager.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/manager/CacheManager.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -3,6 +3,7 @@
 import org.infinispan.Cache;
 import org.infinispan.config.Configuration;
 import org.infinispan.config.DuplicateCacheNameException;
+import org.infinispan.config.GlobalConfiguration;
 import org.infinispan.factories.annotations.NonVolatile;
 import org.infinispan.factories.scopes.Scope;
 import org.infinispan.factories.scopes.Scopes;
@@ -102,4 +103,9 @@
    boolean isCoordinator();
 
    ComponentStatus getStatus();
+
+   /**
+    * Returns the global configuration object associated to this CacheManager.
+    */
+   public GlobalConfiguration getGlobalConfiguration();
 }

Modified: trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/main/java/org/infinispan/manager/DefaultCacheManager.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -29,7 +29,6 @@
 import org.infinispan.config.GlobalConfiguration;
 import org.infinispan.config.InfinispanConfiguration;
 import org.infinispan.config.parsing.XmlConfigurationParser;
-import org.infinispan.config.parsing.XmlConfigurationParserImpl;
 import org.infinispan.factories.GlobalComponentRegistry;
 import org.infinispan.factories.InternalCacheFactory;
 import org.infinispan.factories.annotations.NonVolatile;
@@ -385,6 +384,10 @@
       return globalComponentRegistry.getStatus();
    }
 
+   public GlobalConfiguration getGlobalConfiguration() {
+      return globalConfiguration;
+   }
+
    @ManagedAttribute(description = "the defined cache names and their status")
    public String getDefinedCacheNames() {
       StringBuilder result = new StringBuilder("[");

Modified: trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/test/java/org/infinispan/jmx/RpcManagerMBeanTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -118,11 +118,13 @@
          memberList.add(mockAddress2);
          Transport transport = createMock(Transport.class);
          EasyMock.expect(transport.getMembers()).andReturn(memberList).anyTimes();
+         EasyMock.expect(transport.getAddress()).andReturn(null).anyTimes();
          replay(transport);
          rpcManager.setTransport(transport);
          cache1.put("a5", "b5");
          assert false : "rpc manager should had thrown an expception";
       } catch (Throwable e) {
+         e.printStackTrace();
          //expected
          assertEquals(mBeanServer.getAttribute(rpcManager1, "SuccessRatio"), ("80%"));
       }

Modified: trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -2,6 +2,9 @@
 
 import org.easymock.EasyMock;
 import org.infinispan.Cache;
+import org.infinispan.config.CacheLoaderManagerConfig;
+import org.infinispan.config.Configuration;
+import org.infinispan.config.GlobalConfiguration;
 import org.infinispan.container.entries.InternalCacheEntry;
 import org.infinispan.container.entries.InternalEntryFactory;
 import org.infinispan.io.UnclosableObjectInputStream;
@@ -10,8 +13,12 @@
 import org.infinispan.loaders.modifications.Modification;
 import org.infinispan.loaders.modifications.Remove;
 import org.infinispan.loaders.modifications.Store;
+import org.infinispan.manager.CacheManager;
 import org.infinispan.marshall.Marshaller;
 import org.infinispan.marshall.TestObjectStreamMarshaller;
+import org.infinispan.marshall.VersionAwareMarshaller;
+import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.infinispan.test.TestingUtil;
 import org.infinispan.transaction.xa.GlobalTransaction;
 import org.infinispan.transaction.xa.GlobalTransactionFactory;
 import org.infinispan.util.Util;
@@ -25,6 +32,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -582,4 +590,35 @@
       if (!exceptions.isEmpty()) throw exceptions.get(0);
    }
 
+   public void testTwoCachesSameCacheStore() {
+      CacheManager localCacheManager = TestCacheManagerFactory.createLocalCacheManager();
+      GlobalConfiguration configuration = localCacheManager.getGlobalConfiguration();
+      CacheStoreConfig config = cs.getCacheStoreConfig();
+      assert config != null;
+      CacheLoaderManagerConfig clmConfig = new CacheLoaderManagerConfig();
+      clmConfig.setCacheLoaderConfigs(Collections.singletonList((CacheLoaderConfig)config));
+      configuration.getDefaultConfiguration().setCacheLoaderManagerConfig(clmConfig);
+      localCacheManager.defineCache("first", new Configuration());
+      localCacheManager.defineCache("second", new Configuration());
+
+      Cache first = localCacheManager.getCache("first");
+      Cache second = localCacheManager.getCache("second");
+      assert first.getConfiguration().getCacheLoaderManagerConfig().getCacheLoaderConfigs().size() == 1;
+      assert second.getConfiguration().getCacheLoaderManagerConfig().getCacheLoaderConfigs().size() == 1;
+
+      //TODO - this is a hack as VAM.start does not get called, for some reason. This should be removed.
+      VersionAwareMarshaller firstVam = (VersionAwareMarshaller) TestingUtil.extractComponent(first, Marshaller.class);
+      firstVam.start();
+      VersionAwareMarshaller secondVam = (VersionAwareMarshaller) TestingUtil.extractComponent(first, Marshaller.class);
+      secondVam.start();
+
+
+      first.put("key", "val");
+      assert first.get("key").equals("val");
+      assert second.get("key") == null;
+
+      second.put("key2","val2");
+      assert second.get("key2").equals("val2");
+      assert first.get("key2") == null;
+   }
 }
\ No newline at end of file

Modified: trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -282,5 +282,10 @@
    public void testConfigFile() {
       // no op
    }
+
+   @Override
+   public void testTwoCachesSameCacheStore() {
+      //this does not apply 
+   }
 }
 

Modified: trunk/core/src/test/java/org/infinispan/profiling/DeadlockDetectionPerformanceTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/profiling/DeadlockDetectionPerformanceTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/test/java/org/infinispan/profiling/DeadlockDetectionPerformanceTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -6,6 +6,8 @@
 import org.infinispan.test.TestingUtil;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
 import org.infinispan.transaction.lookup.DummyTransactionManagerLookup;
+import org.infinispan.util.logging.Log;
+import org.infinispan.util.logging.LogFactory;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
@@ -41,6 +43,8 @@
 @Test(groups = "profiling", enabled = true, testName = "profiling.DeadlockDetectionPerformanceTest")
 public class DeadlockDetectionPerformanceTest {
 
+   private static Log log = LogFactory.getLog(DeadlockDetectionPerformanceTest.class);
+
    public static final int KEY_POOL_SIZE = 10;
 
    public static int TX_SIZE = 5;
@@ -107,6 +111,16 @@
       }
    }
 
+   @Test(invocationCount = 5, enabled = false)
+   public void testReplDifferentTxSizeDldOnly() throws Exception {
+      THREAD_COUNT = 3;
+      USE_DLD = true;
+      for (int i = 2; i < KEY_POOL_SIZE; i++) {
+         TX_SIZE = i;
+         runDistributedTest();
+      }
+   }
+
    private void runDistributedTest() throws Exception {
       CacheManager cm = null;
       List<CacheManager> managers = new ArrayList<CacheManager>();
@@ -128,6 +142,7 @@
          Thread.sleep(BENCHMARK_DURATION);
          joinThreadsAndPrintResult(executorThreads);
       } finally {
+         log.trace("About to kill cache managers: " + managers);
          TestingUtil.killCacheManagers(managers);
       }
    }
@@ -213,8 +228,14 @@
                failedTx++;
             }
          }
+         info("Exiting thread " + getName() + " which lived " + (System.currentTimeMillis() - start) + " milliseconds");
       }
 
+      private void info(String s) {
+         System.out.println( "[" + getName() + "] " + s);
+         log.trace(s);
+      }
+
       public int getFailedTx() {
          return failedTx;
       }

Modified: trunk/core/src/test/java/org/infinispan/remoting/TransportInvokeTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/remoting/TransportInvokeTest.java	2009-08-04 13:10:26 UTC (rev 629)
+++ trunk/core/src/test/java/org/infinispan/remoting/TransportInvokeTest.java	2009-08-04 18:51:05 UTC (rev 630)
@@ -21,19 +21,11 @@
  */
 package org.infinispan.remoting;
 
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.transaction.TransactionManager;
-
+import static org.easymock.EasyMock.*;
 import org.infinispan.Cache;
 import org.infinispan.config.Configuration;
+import org.infinispan.remoting.rpc.RpcManager;
+import org.infinispan.remoting.rpc.RpcManagerImpl;
 import org.infinispan.remoting.transport.Address;
 import org.infinispan.remoting.transport.Transport;
 import org.infinispan.test.MultipleCacheManagersTest;
@@ -41,9 +33,11 @@
 import org.infinispan.test.TestingUtil;
 import org.infinispan.transaction.lookup.DummyTransactionManagerLookup;
 import org.testng.annotations.Test;
-import org.infinispan.remoting.rpc.RpcManager;
-import org.infinispan.remoting.rpc.RpcManagerImpl;
 
+import javax.transaction.TransactionManager;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * TransportInvokeTest.
  * 
@@ -77,6 +71,7 @@
          List<Address> memberList = new ArrayList<Address>(1);
          memberList.add(mockAddress1);
          expect(mockTransport.getMembers()).andReturn(memberList).anyTimes();
+         expect(mockTransport.getAddress()).andReturn(null).anyTimes();
          rpcManager.setTransport(mockTransport);
          // Transport invoke remote should not be called.
          replay(mockAddress1, mockTransport);



More information about the infinispan-commits mailing list