[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