From 5d85127dffe963a6530cd64c31b6e76c9da49bcb Mon Sep 17 00:00:00 2001 From: Matthew Adams Date: Fri, 13 Dec 2013 14:01:40 -0600 Subject: [PATCH] updated java config --- ...tractSpringDataCassandraConfiguration.java | 48 ++++++++----------- .../convert/AbstractCassandraConverter.java | 13 ++--- .../convert/MappingCassandraConverter.java | 27 +++++------ .../test/integration/config/TestConfig.java | 4 +- 4 files changed, 40 insertions(+), 52 deletions(-) rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/{ => java}/AbstractSpringDataCassandraConfiguration.java (76%) 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, CassandraPersistentProperty> mappingContext() { - return new CassandraMappingContext(); + public MappingContext, 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, 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);