diff --git a/spring-cassandra/src/main/java/org/springframework/cassandra/config/xml/DefaultBeanNames.java b/spring-cassandra/src/main/java/org/springframework/cassandra/config/xml/DefaultBeanNames.java
index c50dc5316..89b34678b 100644
--- a/spring-cassandra/src/main/java/org/springframework/cassandra/config/xml/DefaultBeanNames.java
+++ b/spring-cassandra/src/main/java/org/springframework/cassandra/config/xml/DefaultBeanNames.java
@@ -22,7 +22,7 @@ package org.springframework.cassandra.config.xml;
*/
public interface DefaultBeanNames {
- public static final String CLUSTER = "cassandra-cluster";
- public static final String SESSION = "cassandra-session";
- public static final String TEMPLATE = "cql-template";
+ public static final String CLUSTER = "cassandraCluster";
+ public static final String SESSION = "cassandraSession";
+ public static final String TEMPLATE = "cqlTemplate";
}
diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/PropertyPlaceholderNamespaceCreatingXmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/PropertyPlaceholderNamespaceCreatingXmlConfigTest-context.xml
index 906a2a32f..8259eb66c 100644
--- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/PropertyPlaceholderNamespaceCreatingXmlConfigTest-context.xml
+++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/PropertyPlaceholderNamespaceCreatingXmlConfigTest-context.xml
@@ -10,69 +10,66 @@
location="classpath:/org/springframework/cassandra/test/integration/config/xml/ppncxct.properties" />
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
+
-
+
+
+
+
-
+
-
+
-
-
-
+ max-simultaneous-requests="${remote.max.requests}" core-connections="${remote.core.connections}"
+ max-connections="${remote.max.connections}" />
+
+
+
-
-
+
+
-
-
+
-
+
diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml
index 7f63c803a..c779fde4b 100644
--- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml
+++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml
@@ -9,8 +9,8 @@
-
+
@@ -18,16 +18,15 @@
min-simultaneous-requests="25" max-simultaneous-requests="100"
core-connections="1" max-connections="2" />
+ connect-timeout-millis="5000" keep-alive="true" read-timeout-millis="60000"
+ reuse-address="true" so-linger="60" tcp-no-delay="true"
+ receive-buffer-size="65536" send-buffer-size="65536" />
-
+
-
+
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraDataCassandraMappingContextFactoryBean.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraDataCassandraMappingContextFactoryBean.java
new file mode 100644
index 000000000..3a087a06c
--- /dev/null
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraDataCassandraMappingContextFactoryBean.java
@@ -0,0 +1,46 @@
+package org.springframework.data.cassandra.config;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.data.cassandra.mapping.CassandraMappingContext;
+import org.springframework.data.cassandra.mapping.DefaultCassandraMappingContext;
+
+public class CassandraDataCassandraMappingContextFactoryBean implements FactoryBean,
+ InitializingBean {
+
+ protected Set basePackages = new HashSet();
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ }
+
+ @Override
+ public CassandraMappingContext getObject() throws Exception {
+
+ DefaultCassandraMappingContext cmc = new DefaultCassandraMappingContext();
+ cmc.setInitialEntitySet(new CassandraEntityClassScanner(basePackages).scanForEntityClasses());
+
+ return cmc;
+ }
+
+ @Override
+ public Class> getObjectType() {
+ return CassandraMappingContext.class;
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ public Set getBasePackages() {
+ return basePackages;
+ }
+
+ public void setBasePackages(Set basePackages) {
+ this.basePackages = basePackages;
+ }
+}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraDataMappingConverterFactoryBean.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraDataMappingConverterFactoryBean.java
new file mode 100644
index 000000000..48fba014a
--- /dev/null
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraDataMappingConverterFactoryBean.java
@@ -0,0 +1,49 @@
+package org.springframework.data.cassandra.config;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.data.cassandra.convert.CassandraConverter;
+import org.springframework.data.cassandra.convert.MappingCassandraConverter;
+import org.springframework.data.cassandra.mapping.CassandraMappingContext;
+import org.springframework.util.Assert;
+
+public class CassandraDataMappingConverterFactoryBean implements FactoryBean, InitializingBean {
+
+ protected CassandraMappingContext mappingContext;
+ protected Set basePackages = new HashSet();
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ Assert.notNull(mappingContext);
+ Assert.notNull(basePackages);
+ }
+
+ @Override
+ public CassandraConverter getObject() throws Exception {
+ return new MappingCassandraConverter(mappingContext);
+ }
+
+ @Override
+ public Class> getObjectType() {
+ return CassandraConverter.class;
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ public CassandraMappingContext getMappingContext() {
+ return mappingContext;
+ }
+
+ public void setMappingContext(CassandraMappingContext mappingContext) {
+
+ Assert.notNull(mappingContext);
+
+ this.mappingContext = mappingContext;
+ }
+}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraEntityClassScanner.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraEntityClassScanner.java
new file mode 100644
index 000000000..aeef0a590
--- /dev/null
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraEntityClassScanner.java
@@ -0,0 +1,110 @@
+package org.springframework.data.cassandra.config;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
+import org.springframework.data.annotation.Persistent;
+import org.springframework.data.cassandra.mapping.PrimaryKeyClass;
+import org.springframework.data.cassandra.mapping.Table;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * Scans packages for Cassandra entities.
+ *
+ * @author Matthew T. Adams
+ */
+public class CassandraEntityClassScanner {
+
+ protected Set entityBasePackages = new HashSet();
+ protected Set> entityBasePackageClasses = new HashSet>();
+ protected ClassLoader beanClassLoader;
+
+ public CassandraEntityClassScanner() {
+ }
+
+ public CassandraEntityClassScanner(Collection entityBasePackages) {
+ this(entityBasePackages, null);
+ }
+
+ public CassandraEntityClassScanner(Collection entityBasePackages,
+ Collection> entityBasePackageClasses) {
+
+ setEntityBasePackages(entityBasePackages);
+ setEntityBasePackageClasses(entityBasePackageClasses);
+ }
+
+ public Set getEntityBasePackages() {
+ return Collections.unmodifiableSet(entityBasePackages);
+ }
+
+ public void setEntityBasePackages(Collection entityBasePackages) {
+ this.entityBasePackages = entityBasePackages == null ? new HashSet() : new HashSet(
+ entityBasePackages);
+ }
+
+ public Set> getEntityBasePackageClasses() {
+ return Collections.unmodifiableSet(entityBasePackageClasses);
+ }
+
+ public void setEntityBasePackageClasses(Collection> entityBasePackageClasses) {
+ this.entityBasePackageClasses = entityBasePackageClasses == null ? new HashSet>() : new HashSet>(
+ entityBasePackageClasses);
+ }
+
+ public void setBeanClassLoader(ClassLoader beanClassLoader) {
+ this.beanClassLoader = beanClassLoader;
+ }
+
+ /**
+ * Scans the mapping base package for entity classes annotated with {@link Table} or {@link Persistent}.
+ *
+ * @see #getEntityBasePackages()
+ * @return Set<Class<?>> representing the annotated entity classes found.
+ * @throws ClassNotFoundException
+ */
+ public Set> scanForEntityClasses() throws ClassNotFoundException {
+
+ Set> classes = new HashSet>();
+
+ for (String basePackage : getEntityBasePackages()) {
+ classes.addAll(scanBasePackageForEntities(basePackage));
+ }
+
+ for (Class> basePackageClass : getEntityBasePackageClasses()) {
+ classes.addAll(scanBasePackageForEntities(basePackageClass.getPackage().getName()));
+ }
+
+ return classes;
+ }
+
+ protected Set> scanBasePackageForEntities(String basePackage) throws ClassNotFoundException {
+
+ HashSet> classes = new HashSet>();
+
+ if (StringUtils.hasText(basePackage)) {
+ ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(
+ false);
+ for (Class extends Annotation> annoClass : getEntityAnnotations()) {
+ componentProvider.addIncludeFilter(new AnnotationTypeFilter(annoClass));
+ }
+
+ for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
+ classes.add(ClassUtils.forName(candidate.getBeanClassName(), beanClassLoader));
+ }
+ }
+
+ return classes;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class extends Annotation>[] getEntityAnnotations() {
+ return new Class[] { Table.class, Persistent.class, PrimaryKeyClass.class };
+ }
+}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/DefaultDataBeanNames.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/DefaultDataBeanNames.java
index 43e4ded92..4443e54d6 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/DefaultDataBeanNames.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/DefaultDataBeanNames.java
@@ -4,6 +4,7 @@ import org.springframework.cassandra.config.xml.DefaultBeanNames;
public interface DefaultDataBeanNames extends DefaultBeanNames {
- public static final String DATA_TEMPLATE = "cassandra-template";
- public static final String CONVERTER = "cassandra-converter";
+ public static final String DATA_TEMPLATE = "cassandraTemplate";
+ public static final String CONVERTER = "cassandraConverter";
+ public static final String MAPPING_CONTEXT = "cassandra-mapping";
}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java
index 736aa0922..a86e13b5c 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java
@@ -15,18 +15,15 @@
*/
package org.springframework.data.cassandra.config.java;
-import java.util.HashSet;
+import java.util.Arrays;
import java.util.Set;
import org.springframework.beans.factory.BeanClassLoaderAware;
-import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.cassandra.config.java.AbstractClusterConfiguration;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.Configuration;
-import org.springframework.core.type.filter.AnnotationTypeFilter;
-import org.springframework.data.annotation.Persistent;
import org.springframework.data.cassandra.config.CassandraDataSessionFactoryBean;
+import org.springframework.data.cassandra.config.CassandraEntityClassScanner;
import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.convert.MappingCassandraConverter;
@@ -35,11 +32,8 @@ import org.springframework.data.cassandra.core.CassandraAdminTemplate;
import org.springframework.data.cassandra.mapping.CassandraMappingContext;
import org.springframework.data.cassandra.mapping.DefaultCassandraMappingContext;
import org.springframework.data.cassandra.mapping.Mapping;
-import org.springframework.data.cassandra.mapping.PrimaryKeyClass;
import org.springframework.data.cassandra.mapping.Table;
import org.springframework.data.mapping.context.MappingContext;
-import org.springframework.util.ClassUtils;
-import org.springframework.util.StringUtils;
/**
* Base class for Spring Data Cassandra configuration using JavaConfig.
@@ -64,11 +58,11 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC
}
/**
- * 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()).
+ * The base packages to scan for entities annotated with {@link Table} annotations. By default, returns the package
+ * name of {@literal this} (this.getClass().getPackage().getName()). This method must never return null.
*/
- public String getEntityBasePackage() {
- return getClass().getPackage().getName();
+ public String[] getMappingBasePackages() {
+ return new String[] { getClass().getPackage().getName() };
}
@Bean
@@ -118,46 +112,27 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC
*/
@Bean
public CassandraConverter converter() throws ClassNotFoundException {
- MappingCassandraConverter converter = new MappingCassandraConverter(cassandraMappingContext());
- converter.setBeanClassLoader(beanClassLoader);
- return converter;
+ return new MappingCassandraConverter(cassandraMappingContext());
}
/**
- * Scans the mapping base package for entity classes annotated with {@link Table} or {@link Persistent}.
+ * Scans the mapping base package for entity classes.
*
- * @see #getEntityBasePackage()
+ * @see #getMappingBasePackages()
+ * @see #getEntityScanner()
* @return Set<Class<?>> representing the annotated entity classes found.
* @throws ClassNotFoundException
*/
protected Set> getInitialEntitySet() throws ClassNotFoundException {
- String basePackage = getEntityBasePackage();
- Set> initialEntitySet = new HashSet>();
+ CassandraEntityClassScanner entityScanner = getEntityScanner();
+ entityScanner.setEntityBasePackages(Arrays.asList(getMappingBasePackages()));
- if (StringUtils.hasText(basePackage)) {
- ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(
- false);
- componentProvider.addIncludeFilter(new AnnotationTypeFilter(Table.class));
- componentProvider.addIncludeFilter(new AnnotationTypeFilter(Persistent.class));
- componentProvider.addIncludeFilter(new AnnotationTypeFilter(PrimaryKeyClass.class));
-
- for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
-
- Class> clazz = ClassUtils.forName(candidate.getBeanClassName(), beanClassLoader);
- initialEntitySet.add(clazz);
- }
- }
-
- processMappingOverrides(initialEntitySet);
-
- return initialEntitySet;
+ return entityScanner.scanForEntityClasses();
}
- protected void processMappingOverrides(Set> entityTypes) {
-
- // TODO: search for external entity mapping info (xml/properties/yaml/etc) here & update this.mapping
- // similar to JPA's or JDO's external metadata search algorithms
+ public CassandraEntityClassScanner getEntityScanner() {
+ return new CassandraEntityClassScanner();
}
@Override
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataCassandraMappingContextParser.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataCassandraMappingContextParser.java
new file mode 100644
index 000000000..fe696044c
--- /dev/null
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataCassandraMappingContextParser.java
@@ -0,0 +1,52 @@
+package org.springframework.data.cassandra.config.xml;
+
+import java.util.Set;
+
+import org.springframework.beans.factory.BeanDefinitionStoreException;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.data.cassandra.config.CassandraDataCassandraMappingContextFactoryBean;
+import org.springframework.data.cassandra.config.DefaultDataBeanNames;
+import org.springframework.util.StringUtils;
+import org.w3c.dom.Element;
+
+/**
+ * Spring Data Cassandra XML namespace parser for the <mapping-context> element.
+ *
+ * @author Matthew T. Adams
+ */
+public class CassandraDataCassandraMappingContextParser extends AbstractSimpleBeanDefinitionParser {
+
+ @Override
+ protected Class> getBeanClass(Element element) {
+ return CassandraDataCassandraMappingContextFactoryBean.class;
+ }
+
+ @Override
+ protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
+ throws BeanDefinitionStoreException {
+
+ String id = super.resolveId(element, definition, parserContext);
+ return StringUtils.hasText(id) ? id : DefaultDataBeanNames.MAPPING_CONTEXT;
+ }
+
+ @Override
+ protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
+ super.doParse(element, parserContext, builder);
+
+ parseBasePackagesAttribute(element, parserContext, builder);
+ }
+
+ protected void parseBasePackagesAttribute(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
+
+ String basePackages = element.getAttribute("base-packages");
+ if (!StringUtils.hasText(basePackages)) {
+ return;
+ }
+
+ Set basePackageSet = StringUtils.commaDelimitedListToSet(basePackages);
+ builder.addPropertyValue("basePackages", basePackageSet);
+ }
+}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataMappingCassandraConverterParser.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataMappingCassandraConverterParser.java
new file mode 100644
index 000000000..18eefc9c7
--- /dev/null
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataMappingCassandraConverterParser.java
@@ -0,0 +1,62 @@
+package org.springframework.data.cassandra.config.xml;
+
+import java.util.Set;
+
+import org.springframework.beans.factory.BeanDefinitionStoreException;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.data.cassandra.config.CassandraDataMappingConverterFactoryBean;
+import org.springframework.data.cassandra.config.DefaultDataBeanNames;
+import org.springframework.util.StringUtils;
+import org.w3c.dom.Element;
+
+/**
+ * Spring Data Cassandra XML namespace parser for the <mapping-converter> element.
+ *
+ * @author Matthew T. Adams
+ */
+public class CassandraDataMappingCassandraConverterParser extends AbstractSimpleBeanDefinitionParser {
+
+ @Override
+ protected Class> getBeanClass(Element element) {
+ return CassandraDataMappingConverterFactoryBean.class;
+ }
+
+ @Override
+ protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
+ throws BeanDefinitionStoreException {
+
+ String id = super.resolveId(element, definition, parserContext);
+ return StringUtils.hasText(id) ? id : DefaultDataBeanNames.CONVERTER;
+ }
+
+ @Override
+ protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
+ super.doParse(element, parserContext, builder);
+
+ parseMappingContextAttribute(element, parserContext, builder);
+ parseBasePackagesAttribute(element, parserContext, builder);
+ }
+
+ protected void parseMappingContextAttribute(Element element, ParserContext parserContext,
+ BeanDefinitionBuilder builder) {
+
+ String mappingContextRef = element.getAttribute("mapping-context-ref");
+ if (!StringUtils.hasText(mappingContextRef)) {
+ mappingContextRef = DefaultDataBeanNames.MAPPING_CONTEXT;
+ }
+ builder.addPropertyReference("mappingContext", mappingContextRef);
+ }
+
+ protected void parseBasePackagesAttribute(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
+
+ String basePackages = element.getAttribute("base-packages");
+ if (!StringUtils.hasText(basePackages)) {
+ return;
+ }
+
+ Set basePackageSet = StringUtils.commaDelimitedListToSet(basePackages);
+ }
+}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataNamespaceHandler.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataNamespaceHandler.java
index fdd7fc80c..349b87ce3 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataNamespaceHandler.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataNamespaceHandler.java
@@ -36,5 +36,7 @@ public class CassandraDataNamespaceHandler extends NamespaceHandlerSupport {
registerBeanDefinitionParser("cluster", new CassandraDataClusterParser());
registerBeanDefinitionParser("session", new CassandraDataSessionParser());
registerBeanDefinitionParser("template", new CassandraDataTemplateParser());
+ registerBeanDefinitionParser("mapping-converter", new CassandraDataMappingCassandraConverterParser());
+ registerBeanDefinitionParser("mapping-context", new CassandraDataCassandraMappingContextParser());
}
}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataSessionParser.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataSessionParser.java
index ea2327801..fef2f1842 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataSessionParser.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/xml/CassandraDataSessionParser.java
@@ -45,6 +45,15 @@ public class CassandraDataSessionParser extends CassandraSessionParser {
}
}
+ @Override
+ protected void setDefaultProperties(BeanDefinitionBuilder builder) {
+
+ super.setDefaultProperties(builder);
+
+ addRequiredPropertyReference(builder, "converter", DefaultDataBeanNames.CONVERTER);
+ addRequiredPropertyReference(builder, "schemaAction", SchemaAction.NONE.name());
+ }
+
@Override
protected void parseUnhandledElement(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java
index e48f7ec7d..36ac828e4 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java
@@ -52,6 +52,8 @@ public class DefaultCassandraMappingContext extends
CassandraMappingContext, ApplicationContextAware {
protected ApplicationContext context;
+
+ // useful caches
protected Map>> entitySetsByTableName = new HashMap>>();
protected Set> nonPrimaryKeyEntities = new HashSet>();
protected Set> primaryKeyEntities = new HashSet>();
@@ -63,6 +65,20 @@ public class DefaultCassandraMappingContext extends
setSimpleTypeHolder(new CassandraSimpleTypeHolder());
}
+ @Override
+ public void initialize() {
+
+ super.initialize();
+
+ processMappingOverrides();
+ }
+
+ protected void processMappingOverrides() {
+
+ // TODO: search for external entity mapping info (xml/properties/yaml/etc) here & update this.mapping
+ // similar to JPA's or JDO's external metadata search algorithms
+ }
+
@Override
public Collection> getPersistentEntities() {
return getPersistentEntities(false);
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/config/CassandraRepositoryConfigurationExtension.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/config/CassandraRepositoryConfigurationExtension.java
index 91b2fc35a..5821450f0 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/config/CassandraRepositoryConfigurationExtension.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/config/CassandraRepositoryConfigurationExtension.java
@@ -18,6 +18,7 @@ package org.springframework.data.cassandra.repository.config;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.cassandra.config.xml.ParsingUtils;
import org.springframework.core.annotation.AnnotationAttributes;
+import org.springframework.data.cassandra.config.DefaultDataBeanNames;
import org.springframework.data.cassandra.repository.support.CassandraRepositoryFactoryBean;
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
import org.springframework.data.repository.config.RepositoryConfigurationExtension;
@@ -52,7 +53,7 @@ public class CassandraRepositoryConfigurationExtension extends RepositoryConfigu
Element element = config.getElement();
ParsingUtils.addOptionalPropertyReference(builder, "cassandraTemplate", element, CASSANDRA_TEMPLATE_REF,
- "cassandra-template");
+ DefaultDataBeanNames.TEMPLATE);
}
@Override
diff --git a/spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/ext-spring-cassandra-1.0.xsd b/spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/spring-cassandra-1.0-trying-to-use-xml-extension.xsd
similarity index 100%
rename from spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/ext-spring-cassandra-1.0.xsd
rename to spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/spring-cassandra-1.0-trying-to-use-xml-extension.xsd
diff --git a/spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/spring-cassandra-1.0.xsd b/spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/spring-cassandra-1.0.xsd
index bed6fd896..14d048be2 100644
--- a/spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/spring-cassandra-1.0.xsd
+++ b/spring-data-cassandra/src/main/resources/org/springframework/data/cassandra/config/spring-cassandra-1.0.xsd
@@ -482,7 +482,7 @@ The name of a Cassandra Keyspace. No default; for the system keyspace, use the
use="optional">
@@ -500,7 +500,7 @@ The schema action to perform; default is NONE.
@@ -515,7 +515,7 @@ The reference to a Cassandra session; default is "cassandra-session".
use="optional">
@@ -676,11 +676,10 @@ Table name override.
-
+
@@ -696,4 +695,61 @@ The reference to a cassandraTemplate. Will default to 'cassandra-template'.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java
index 4515b97af..99a396907 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java
@@ -69,8 +69,8 @@ public class CommentRepositoryJavaConfigIntegrationTests extends AbstractSpringD
}
@Override
- public String getEntityBasePackage() {
- return Comment.class.getPackage().getName();
+ public String[] getMappingBasePackages() {
+ return new String[] { Comment.class.getPackage().getName() };
}
}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java
index 9ca1eac3e..1d6a180bf 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java
@@ -68,8 +68,8 @@ public class UserRepositoryJavaConfigIntegrationTests extends AbstractSpringData
}
@Override
- public String getEntityBasePackage() {
- return User.class.getPackage().getName();
+ public String[] getMappingBasePackages() {
+ return new String[] { User.class.getPackage().getName() };
}
}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java
index 047545bc8..6406ba08a 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java
@@ -16,7 +16,6 @@
package org.springframework.data.cassandra.test.integration.template;
import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace;
-import static org.springframework.cassandra.core.keyspace.DropTableSpecification.dropTable;
import java.io.IOException;
import java.util.ArrayList;
@@ -24,30 +23,22 @@ import java.util.Arrays;
import java.util.List;
import java.util.UUID;
-import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cassandra.core.ConsistencyLevel;
import org.springframework.cassandra.core.QueryOptions;
import org.springframework.cassandra.core.RetryPolicy;
import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
import org.springframework.data.cassandra.config.SchemaAction;
-import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.test.integration.simpletons.Book;
import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest;
import org.springframework.data.cassandra.test.integration.support.TestConfig;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import com.datastax.driver.core.TableMetadata;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
@@ -75,8 +66,8 @@ public class CassandraDataOperationsTest extends AbstractSpringDataEmbeddedCassa
}
@Override
- public String getEntityBasePackage() {
- return Book.class.getPackage().getName();
+ public String[] getMappingBasePackages() {
+ return new String[] { Book.class.getPackage().getName() };
}
}
diff --git a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryXmlConfigIntegrationTests-context.xml b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryXmlConfigIntegrationTests-context.xml
index a181a4745..325c8e0c7 100644
--- a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryXmlConfigIntegrationTests-context.xml
+++ b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryXmlConfigIntegrationTests-context.xml
@@ -2,24 +2,23 @@
-
-
+
-
+
diff --git a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml
index 5709113fc..a25253303 100644
--- a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml
+++ b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml
@@ -11,9 +11,8 @@
-
+
@@ -27,21 +26,13 @@
durable-writes="true" />
-
-
+
+
+
-
-
-
-
+
-
-
-
-
+
diff --git a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/repository/UserRepositoryXmlConfigIntegrationTests-context.xml b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/repository/UserRepositoryXmlConfigIntegrationTests-context.xml
index a80188b22..973c3c938 100644
--- a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/repository/UserRepositoryXmlConfigIntegrationTests-context.xml
+++ b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/repository/UserRepositoryXmlConfigIntegrationTests-context.xml
@@ -1,7 +1,8 @@
-
-
+
-
+
diff --git a/spring-data-cassandra/src/test/resources/spring-data-cassandra-basic.xml b/spring-data-cassandra/src/test/resources/spring-data-cassandra-basic.xml
index 7c6868246..39c99629f 100644
--- a/spring-data-cassandra/src/test/resources/spring-data-cassandra-basic.xml
+++ b/spring-data-cassandra/src/test/resources/spring-data-cassandra-basic.xml
@@ -10,15 +10,10 @@
-
+
-
-
-
+
-
+