[infinispan-commits] Infinispan SVN: r1578 - in trunk: cachestore/cloud/src/main/java/org/infinispan/loaders/cloud and 8 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Tue Mar 9 07:10:50 EST 2010


Author: manik.surtani at jboss.com
Date: 2010-03-09 07:10:49 -0500 (Tue, 09 Mar 2010)
New Revision: 1578

Added:
   trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderMetadata.java
Modified:
   trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStore.java
   trunk/cachestore/cloud/src/main/java/org/infinispan/loaders/cloud/CloudCacheStore.java
   trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java
   trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStore.java
   trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStore.java
   trunk/cachestore/jdbm/src/main/java/org/infinispan/loaders/jdbm/JdbmCacheStore.java
   trunk/core/src/main/java/org/infinispan/loaders/CacheLoader.java
   trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderConfig.java
   trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java
   trunk/core/src/main/java/org/infinispan/loaders/cluster/ClusterCacheLoader.java
   trunk/core/src/main/java/org/infinispan/loaders/file/FileCacheStore.java
   trunk/core/src/test/java/org/infinispan/loaders/dummy/DummyInMemoryCacheStore.java
Log:
[ISPN-333] (Cache Loader Class Instantiated Twice)

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	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/cachestore/bdbje/src/main/java/org/infinispan/loaders/bdbje/BdbjeCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -11,6 +11,7 @@
 import org.infinispan.loaders.AbstractCacheStore;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.modifications.Modification;
 import org.infinispan.marshall.Marshaller;
 import org.infinispan.transaction.xa.GlobalTransaction;
@@ -49,8 +50,10 @@
  * <p/>
  *
  * @author Adrian Cole
+ * @author Manik Surtani
  * @since 4.0
  */
+ at CacheLoaderMetadata(configurationClass = BdbjeCacheStoreConfig.class)
 public class BdbjeCacheStore extends AbstractCacheStore {
 
     private static final Log log = LogFactory.getLog(BdbjeCacheStore.class);

Modified: trunk/cachestore/cloud/src/main/java/org/infinispan/loaders/cloud/CloudCacheStore.java
===================================================================
--- trunk/cachestore/cloud/src/main/java/org/infinispan/loaders/cloud/CloudCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/cachestore/cloud/src/main/java/org/infinispan/loaders/cloud/CloudCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -22,6 +22,7 @@
 import org.infinispan.container.entries.InternalCacheEntry;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.CacheStoreConfig;
 import org.infinispan.loaders.bucket.Bucket;
 import org.infinispan.loaders.bucket.BucketBasedCacheStore;
@@ -55,6 +56,7 @@
  * @author Adrian Cole
  * @since 4.0
  */
+ at CacheLoaderMetadata(configurationClass = CloudCacheStoreConfig.class)
 public class CloudCacheStore extends BucketBasedCacheStore {
    private static final int COMPRESSION_COPY_BYTEARRAY_SIZE = 1024;
    private static final Log log = LogFactory.getLog(CloudCacheStore.class);

Modified: trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java
===================================================================
--- trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -26,6 +26,7 @@
 import org.infinispan.io.ByteBuffer;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.bucket.Bucket;
 import org.infinispan.loaders.bucket.BucketBasedCacheStore;
 import org.infinispan.loaders.jdbc.DataManipulationHelper;
@@ -67,6 +68,7 @@
  * @see JdbcBinaryCacheStoreConfig
  * @see org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore
  */
+ at CacheLoaderMetadata(configurationClass = JdbcBinaryCacheStoreConfig.class)
 public class JdbcBinaryCacheStore extends BucketBasedCacheStore {
 
    private static final Log log = LogFactory.getLog(JdbcBinaryCacheStore.class);

Modified: trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStore.java
===================================================================
--- trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/mixed/JdbcMixedCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -26,6 +26,7 @@
 import org.infinispan.loaders.AbstractCacheStore;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.CacheStore;
 import org.infinispan.loaders.jdbc.binary.JdbcBinaryCacheStore;
 import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactory;
@@ -62,6 +63,7 @@
  * @see org.infinispan.loaders.jdbc.binary.JdbcBinaryCacheStore
  * @see org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore
  */
+ at CacheLoaderMetadata(configurationClass = JdbcMixedCacheStoreConfig.class)
 public class JdbcMixedCacheStore extends AbstractCacheStore {
 
    private JdbcMixedCacheStoreConfig config;

Modified: trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStore.java
===================================================================
--- trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/JdbcStringBasedCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -27,6 +27,7 @@
 import org.infinispan.io.ByteBuffer;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.LockSupportCacheStore;
 import org.infinispan.loaders.jdbc.DataManipulationHelper;
 import org.infinispan.loaders.jdbc.JdbcUtil;
@@ -66,6 +67,7 @@
  * @see Key2StringMapper
  * @see DefaultKey2StringMapper
  */
+ at CacheLoaderMetadata(configurationClass = JdbcStringBasedCacheStoreConfig.class)
 public class JdbcStringBasedCacheStore extends LockSupportCacheStore {
 
    private static Log log = LogFactory.getLog(JdbcStringBasedCacheStore.class);

Modified: trunk/cachestore/jdbm/src/main/java/org/infinispan/loaders/jdbm/JdbmCacheStore.java
===================================================================
--- trunk/cachestore/jdbm/src/main/java/org/infinispan/loaders/jdbm/JdbmCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/cachestore/jdbm/src/main/java/org/infinispan/loaders/jdbm/JdbmCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -17,6 +17,7 @@
 import org.infinispan.loaders.AbstractCacheStore;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.modifications.Modification;
 import org.infinispan.loaders.modifications.Remove;
 import org.infinispan.loaders.modifications.Store;
@@ -53,6 +54,7 @@
  * @author Galder Zamarreño
  */
 @ThreadSafe
+ at CacheLoaderMetadata(configurationClass = JdbmCacheStoreConfig.class)
 public class JdbmCacheStore extends AbstractCacheStore {
 
    private static final Log log = LogFactory.getLog(JdbmCacheStore.class);

Modified: trunk/core/src/main/java/org/infinispan/loaders/CacheLoader.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/CacheLoader.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/core/src/main/java/org/infinispan/loaders/CacheLoader.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -54,10 +54,18 @@
 
    public void stop() throws CacheLoaderException;
 
-
    /**
+    * This method is used by the configuration parser to get a hold of the CacheLoader implementation's corresponding
+    * {@link org.infinispan.loaders.CacheLoaderConfig} type. This is usually done by instantiating the CacheLoader
+    * and then calling this method.  This may result in 2 instances being created, however, since the instance
+    * created to get a hold of the configuration type is then discarded and another instance is created for actual
+    * use as a CacheLoader when the cache starts.
+    * <p />
+    * Since Infinispan 4.1, you can also annotate your CacheLoader implementation with {@link org.infinispan.loaders.CacheLoaderMetadata}
+    * and provide this information via the annotation, which will prevent unnecessary instances being created.
+    * <p />
     * @return the type of the {@link org.infinispan.loaders.CacheLoaderConfig} bean used to configure this
-    *         implementation of {@link org.infinispan.loaders.CacheLoader}
+    *         implementation of {@link org.infinispan.loaders.CacheLoader}.
     */
    Class<? extends CacheLoaderConfig> getConfigurationClass();
 }

Modified: trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderConfig.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderConfig.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderConfig.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -63,12 +63,10 @@
       String clClass = storeConfig.getCacheLoaderClassName();
       if (clClass == null || clClass.length()==0)
          throw new ConfigurationException("Missing 'class'  attribute for cache loader configuration");
-      
-      CacheLoader cl;
+
       CacheLoaderConfig clc;
       try {
-         cl = (CacheLoader) Util.getInstance(clClass);
-         clc = Util.getInstance(cl.getConfigurationClass());
+         clc = instantiateCacheLoaderConfig(clClass);
       } catch (Exception e) {
          throw new ConfigurationException("Unable to instantiate cache loader or configuration", e);
       }
@@ -89,4 +87,19 @@
          csc.setAsyncStoreConfig(storeConfig.getAsyncStoreConfig());         
       }
       return clc;
-   }}
\ No newline at end of file
+   }
+
+   private CacheLoaderConfig instantiateCacheLoaderConfig(String cacheLoaderImpl) throws Exception {
+      // first see if the type is annotated
+      Class<? extends CacheLoaderConfig> clazz = Util.loadClass(cacheLoaderImpl);
+      Class<? extends CacheLoaderConfig> cacheLoaderConfigType;
+      CacheLoaderMetadata metadata = clazz.getAnnotation(CacheLoaderMetadata.class);
+      if (metadata == null) {
+         CacheLoader cl = (CacheLoader) Util.getInstance(clazz);
+         cacheLoaderConfigType = cl.getConfigurationClass();
+      } else {
+         cacheLoaderConfigType = metadata.configurationClass();
+      }
+      return Util.getInstance(cacheLoaderConfigType);
+   }
+}
\ No newline at end of file

Added: trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderMetadata.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderMetadata.java	                        (rev 0)
+++ trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderMetadata.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -0,0 +1,24 @@
+package org.infinispan.loaders;
+
+import sun.security.krb5.internal.crypto.EType;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows you to provide metadata, such as CacheLoaderConfig type via annotation so that the CacheLoader or CacheStore
+ * need not be instantiated by the configuration parser to set up the cache loader configuration.
+ * <p />
+ * This annotation is not necessary, since {@link org.infinispan.loaders.CacheLoader#getConfigurationClass()} still
+ * needs to be implemented and serves the same purpose.  It is, however, a runtime optimization.
+ *
+ * @author Manik Surtani
+ * @since 4.1
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+public @interface CacheLoaderMetadata {
+   Class<? extends CacheLoaderConfig> configurationClass();
+}


Property changes on: trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderMetadata.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/core/src/main/java/org/infinispan/loaders/CacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -151,5 +151,5 @@
    /**
     * Returns the configuration object associated to this cache store config.
     */
-   public CacheStoreConfig getCacheStoreConfig();
+   CacheStoreConfig getCacheStoreConfig();
 }

Modified: trunk/core/src/main/java/org/infinispan/loaders/cluster/ClusterCacheLoader.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/cluster/ClusterCacheLoader.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/core/src/main/java/org/infinispan/loaders/cluster/ClusterCacheLoader.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -10,6 +10,7 @@
 import org.infinispan.loaders.AbstractCacheLoader;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.marshall.Marshaller;
 import org.infinispan.remoting.responses.ClusteredGetResponseValidityFilter;
 import org.infinispan.remoting.responses.Response;
@@ -32,6 +33,7 @@
  *
  * @author Mircea.Markus at jboss.com
  */
+ at CacheLoaderMetadata(configurationClass = ClusterCacheLoaderConfig.class)
 public class ClusterCacheLoader extends AbstractCacheLoader {
    private static Log log = LogFactory.getLog(ClusterCacheLoader.class);
 
@@ -64,7 +66,7 @@
 
    @SuppressWarnings(value = "unchecked")
    public Set<InternalCacheEntry> loadAll() throws CacheLoaderException {
-      return Collections.EMPTY_SET;
+      return Collections.emptySet();
    }
 
    public void start() throws CacheLoaderException {
@@ -76,7 +78,7 @@
    }
 
    public Class<? extends CacheLoaderConfig> getConfigurationClass() {
-      throw new IllegalStateException("TODO - please implement me!!!");
+      return ClusterCacheLoaderConfig.class;
    }
 
    private List<Response> doRemoteCall(ClusteredGetCommand clusteredGetCommand) throws CacheLoaderException {

Modified: trunk/core/src/main/java/org/infinispan/loaders/file/FileCacheStore.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/file/FileCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/core/src/main/java/org/infinispan/loaders/file/FileCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -6,6 +6,7 @@
 import org.infinispan.io.ExposedByteArrayOutputStream;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.loaders.bucket.Bucket;
 import org.infinispan.loaders.bucket.BucketBasedCacheStore;
 import org.infinispan.marshall.Marshaller;
@@ -35,6 +36,7 @@
  * 
  * @since 4.0
  */
+ at CacheLoaderMetadata(configurationClass = FileCacheStoreConfig.class)
 public class FileCacheStore extends BucketBasedCacheStore {
 
    private static final Log log = LogFactory.getLog(FileCacheStore.class);

Modified: trunk/core/src/test/java/org/infinispan/loaders/dummy/DummyInMemoryCacheStore.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/loaders/dummy/DummyInMemoryCacheStore.java	2010-03-09 11:43:18 UTC (rev 1577)
+++ trunk/core/src/test/java/org/infinispan/loaders/dummy/DummyInMemoryCacheStore.java	2010-03-09 12:10:49 UTC (rev 1578)
@@ -6,6 +6,7 @@
 import org.infinispan.loaders.AbstractCacheStoreConfig;
 import org.infinispan.loaders.CacheLoaderConfig;
 import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.CacheLoaderMetadata;
 import org.infinispan.marshall.Marshaller;
 import org.infinispan.marshall.TestObjectStreamMarshaller;
 import org.infinispan.util.logging.Log;



More information about the infinispan-commits mailing list