diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractSpringDataCassandraConfiguration.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java
similarity index 76%
rename from spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractSpringDataCassandraConfiguration.java
rename to spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java
index 657cf634d..943662a02 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractSpringDataCassandraConfiguration.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.data.cassandra.config;
+package org.springframework.data.cassandra.config.java;
import java.util.HashSet;
import java.util.Set;
@@ -51,13 +51,8 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC
private ClassLoader beanClassLoader;
/**
- * Return the base package to scan for mapped {@link Table}s. Will return the package name of the configuration class'
- * (the concrete class, not this one here) by default. So if you have a {@code com.acme.AppConfig} extending
- * {@link AbstractSpringDataCassandraConfiguration} the base package will be considered {@code com.acme} unless the
- * method is overriden to implement alternate behaviour.
- *
- * @return the base package to scan for mapped {@link Table} classes or {@literal null} to not enable scanning for
- * entities.
+ * The base package to scan for entities annotated with {@link Table} annotations. By default, returns the package
+ * name of {@literal this} (this.getClass().getPackage().getName()).
*/
protected String getMappingBasePackage() {
return getClass().getPackage().getName();
@@ -65,44 +60,42 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC
/**
* Creates a {@link CassandraAdminTemplate}.
- *
- * @return
- * @throws Exception
*/
@Bean
- public CassandraAdminOperations adminTemplate() throws Exception {
+ public CassandraAdminOperations adminTemplate() {
return new CassandraAdminTemplate(session());
}
/**
* Return the {@link MappingContext} instance to map Entities to properties.
*
- * @return
- * @throws Exception
+ * @throws ClassNotFoundException
*/
@Bean
- public MappingContext extends CassandraPersistentEntity>, CassandraPersistentProperty> mappingContext() {
- return new CassandraMappingContext();
+ public MappingContext extends CassandraPersistentEntity>, CassandraPersistentProperty> cassandraMappingContext()
+ throws ClassNotFoundException {
+ CassandraMappingContext context = new CassandraMappingContext();
+ context.setInitialEntitySet(getInitialEntitySet());
+ return context;
}
/**
* Return the {@link CassandraConverter} instance to convert Rows to Objects, Objects to BuiltStatements
*
- * @return
- * @throws Exception
+ * @throws ClassNotFoundException
*/
@Bean
- public CassandraConverter converter() {
- MappingCassandraConverter converter = new MappingCassandraConverter(mappingContext());
+ public CassandraConverter converter() throws ClassNotFoundException {
+ MappingCassandraConverter converter = new MappingCassandraConverter(cassandraMappingContext());
converter.setBeanClassLoader(beanClassLoader);
return converter;
}
/**
- * Scans the mapping base package for classes annotated with {@link Table}.
+ * Scans the mapping base package for entity classes annotated with {@link Table} or {@link Persistent}.
*
* @see #getMappingBasePackage()
- * @return
+ * @return Set<Class<?>> representing the annotated entity classes found.
* @throws ClassNotFoundException
*/
protected Set> getInitialEntitySet() throws ClassNotFoundException {
@@ -116,19 +109,18 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC
componentProvider.addIncludeFilter(new AnnotationTypeFilter(Table.class));
componentProvider.addIncludeFilter(new AnnotationTypeFilter(Persistent.class));
+ // TODO: figure out which ClassLoader to use here
+ ClassLoader classLoader = getClass().getClassLoader();
+
for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
- initialEntitySet.add(ClassUtils.forName(candidate.getBeanClassName(),
- AbstractSpringDataCassandraConfiguration.class.getClassLoader()));
+ initialEntitySet.add(ClassUtils.forName(candidate.getBeanClassName(), classLoader));
}
}
return initialEntitySet;
}
- /**
- * Bean ClassLoader Aware for CassandraTemplate/CassandraAdminTemplate
- */
-
+ @Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.beanClassLoader = classLoader;
}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/AbstractCassandraConverter.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/AbstractCassandraConverter.java
index bfcc255ff..ad707e860 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/AbstractCassandraConverter.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/AbstractCassandraConverter.java
@@ -18,27 +18,24 @@ package org.springframework.data.cassandra.convert;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.support.DefaultConversionService;
-import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.data.convert.EntityInstantiators;
/**
- * Base class for {@link CassandraConverter} implementations. Sets up a {@link GenericConversionService} and populates
- * basic converters.
+ * Base class for {@link CassandraConverter} implementations. Sets up a {@link ConversionService} and populates basic
+ * converters.
*
* @author Alex Shvid
* @author Matthew T. Adams
*/
public abstract class AbstractCassandraConverter implements CassandraConverter, InitializingBean {
- protected final GenericConversionService conversionService;
+ protected final ConversionService conversionService;
protected EntityInstantiators instantiators = new EntityInstantiators();
/**
- * Creates a new {@link AbstractCassandraConverter} using the given {@link GenericConversionService}.
- *
- * @param conversionService
+ * Creates a new {@link AbstractCassandraConverter} using the given {@link ConversionService}.
*/
- public AbstractCassandraConverter(GenericConversionService conversionService) {
+ public AbstractCassandraConverter(ConversionService conversionService) {
this.conversionService = conversionService == null ? new DefaultConversionService() : conversionService;
}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/MappingCassandraConverter.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/MappingCassandraConverter.java
index d8d7e5127..b9d44f83a 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/MappingCassandraConverter.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/MappingCassandraConverter.java
@@ -97,18 +97,12 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
return readRowInternal(persistentEntity, row);
}
- /*
- * (non-Javadoc)
- * @see org.springframework.data.convert.EntityConverter#getMappingContext()
- */
+ @Override
public MappingContext extends CassandraPersistentEntity>, CassandraPersistentProperty> getMappingContext() {
return mappingContext;
}
- /*
- * (non-Javadoc)
- * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
- */
+ @Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
this.spELContext = new SpELContext(this.spELContext, applicationContext);
@@ -131,6 +125,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
entity.doWithProperties(new PropertyHandler() {
+ @Override
public void doWithPersistentProperty(CassandraPersistentProperty prop) {
MappingCassandraConverter.this.handlePersistentPropertyRead(row, entity, prop, propertyProvider, wrapper);
@@ -161,13 +156,14 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
wrapper.setProperty(prop, obj, useFieldAccessOnly);
}
+ public boolean getUseFieldAccessOnly() {
+ return useFieldAccessOnly;
+ }
+
public void setUseFieldAccessOnly(boolean useFieldAccessOnly) {
this.useFieldAccessOnly = useFieldAccessOnly;
}
- /* (non-Javadoc)
- * @see org.springframework.data.convert.EntityWriter#write(java.lang.Object, java.lang.Object)
- */
@Override
public R read(Class type, Object row) {
if (row instanceof Row) {
@@ -176,9 +172,6 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
throw new MappingException("Unknown row object " + row.getClass().getName());
}
- /* (non-Javadoc)
- * @see org.springframework.data.convert.EntityWriter#write(java.lang.Object, java.lang.Object)
- */
@Override
public void write(Object obj, Object builtStatement) {
@@ -211,6 +204,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
// Write the properties
entity.doWithProperties(new PropertyHandler() {
+ @Override
public void doWithPersistentProperty(CassandraPersistentProperty prop) {
Object propertyObj = wrapper.getProperty(prop, prop.getType(), useFieldAccessOnly);
@@ -231,6 +225,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
// Write the properties
entity.doWithProperties(new PropertyHandler() {
+ @Override
public void doWithPersistentProperty(CassandraPersistentProperty prop) {
Object propertyObj = wrapper.getProperty(prop, prop.getType(), useFieldAccessOnly);
@@ -256,6 +251,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
// Write the properties
entity.doWithProperties(new PropertyHandler() {
+ @Override
public void doWithPersistentProperty(CassandraPersistentProperty prop) {
if (prop.isIdProperty()) {
@@ -272,6 +268,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
}
+ @Override
public CreateTableSpecification getCreateTableSpecification(CassandraPersistentEntity> entity) {
final CreateTableSpecification spec = new CreateTableSpecification();
@@ -279,6 +276,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
spec.name(entity.getTableName());
entity.doWithProperties(new PropertyHandler() {
+ @Override
public void doWithPersistentProperty(CassandraPersistentProperty prop) {
if (prop.isCompositePrimaryKey()) {
@@ -286,6 +284,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter implem
CassandraPersistentEntity> pkEntity = mappingContext.getPersistentEntity(prop.getRawType());
pkEntity.doWithProperties(new PropertyHandler() {
+ @Override
public void doWithPersistentProperty(CassandraPersistentProperty pkProp) {
if (pkProp.isPartitionKeyColumn()) {
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java
index 1960db90d..ce5f64d33 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java
@@ -5,7 +5,7 @@ import org.springframework.cassandra.core.CassandraOperations;
import org.springframework.cassandra.core.CassandraTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.cassandra.config.AbstractSpringDataCassandraConfiguration;
+import org.springframework.data.cassandra.config.java.AbstractSpringDataCassandraConfiguration;
import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.convert.MappingCassandraConverter;
import org.springframework.data.cassandra.core.CassandraDataOperations;
@@ -66,7 +66,7 @@ public class TestConfig extends AbstractSpringDataCassandraConfiguration {
}
@Bean
- public CassandraDataOperations cassandraDataTemplate() {
+ public CassandraDataOperations cassandraDataTemplate() throws ClassNotFoundException {
CassandraDataOperations template = new CassandraDataTemplate(sessionFactoryBean().getObject(), converter(),
keyspaceName);