diff --git a/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java b/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java index 73ae8fd96..c302daacd 100644 --- a/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java +++ b/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.data.cassandra.config; import java.util.HashSet; import java.util.Set; +import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; @@ -26,6 +27,8 @@ import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.data.annotation.Persistent; import org.springframework.data.cassandra.convert.CassandraConverter; import org.springframework.data.cassandra.convert.MappingCassandraConverter; +import org.springframework.data.cassandra.core.CassandraAdminOperations; +import org.springframework.data.cassandra.core.CassandraAdminTemplate; import org.springframework.data.cassandra.core.CassandraOperations; import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.data.cassandra.core.Keyspace; @@ -46,7 +49,13 @@ import com.datastax.driver.core.Session; * @author Alex Shvid */ @Configuration -public abstract class AbstractCassandraConfiguration { +public abstract class AbstractCassandraConfiguration implements BeanClassLoaderAware { + + /** + * Used by CassandraTemplate and CassandraAdminTemplate + */ + + private ClassLoader beanClassLoader; /** * Return the name of the keyspace to connect to. @@ -118,7 +127,22 @@ public abstract class AbstractCassandraConfiguration { */ @Bean public CassandraOperations cassandraTemplate() throws Exception { - return new CassandraTemplate(keyspace()); + CassandraTemplate template = new CassandraTemplate(keyspace()); + template.setBeanClassLoader(beanClassLoader); + return template; + } + + /** + * Creates a {@link CassandraAdminTemplate}. + * + * @return + * @throws Exception + */ + @Bean + public CassandraAdminOperations cassandraAdminTemplate() throws Exception { + CassandraAdminTemplate adminTemplate = new CassandraAdminTemplate(keyspace()); + adminTemplate.setBeanClassLoader(beanClassLoader); + return adminTemplate; } /** @@ -170,4 +194,12 @@ public abstract class AbstractCassandraConfiguration { return initialEntitySet; } + /** + * Bean ClassLoader Aware for CassandraTemplate/CassandraAdminTemplate + */ + + public void setBeanClassLoader(ClassLoader classLoader) { + this.beanClassLoader = classLoader; + } + } diff --git a/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java b/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java index cf130a156..de15701d1 100644 --- a/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java +++ b/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java @@ -5,6 +5,7 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.dao.DataAccessException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.dao.support.PersistenceExceptionTranslator; @@ -23,7 +24,7 @@ import com.datastax.driver.core.TableMetadata; /** * Default implementation of {@link CassandraAdminOperations}. */ -public class CassandraAdminTemplate implements CassandraAdminOperations { +public class CassandraAdminTemplate implements CassandraAdminOperations, BeanClassLoaderAware { private static Logger log = LoggerFactory.getLogger(CassandraAdminTemplate.class); @@ -239,4 +240,9 @@ public class CassandraAdminTemplate implements CassandraAdminOperations { } return entity.getTable(); } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.beanClassLoader = classLoader; + } } diff --git a/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java b/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java index c69951073..e2b1e3819 100644 --- a/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java +++ b/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java @@ -27,6 +27,7 @@ import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.dao.DataAccessException; import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.InvalidDataAccessApiUsageException; @@ -58,7 +59,7 @@ import com.datastax.driver.core.querybuilder.Batch; * @author Alex Shvid * @author David Webb */ -public class CassandraTemplate implements CassandraOperations { +public class CassandraTemplate implements CassandraOperations, BeanClassLoaderAware { /** * Simple {@link RowCallback} that will transform {@link Row} into the given target type using the given @@ -79,8 +80,8 @@ public class CassandraTemplate implements CassandraOperations { } @Override - public T doWith(Row object) { - T source = reader.read(type, object); + public T doWith(Row row) { + T source = reader.read(type, row); return source; } }