DATACASS-401 - Fix bean name for CassandraTemplate instances using XML namespace configuration.
We now use the correct bean name `cassandraTemplate` when configuring a CassandraTemplate instance via XML namespace support. Previously, the bean name defaulted to `cqlTemplate`. CassandraTemplate and CqlTemplate no longer share the same type hierarchy but are separated since 2.0.x. Original pull request: #96. Related ticket: DATACASS-292.
This commit is contained in:
committed by
Mark Paluch
parent
77971cf281
commit
52b7f0f58d
@@ -181,7 +181,7 @@ public class CassandraMappingBeanFactoryPostProcessor implements BeanFactoryPost
|
||||
.addConstructorArgReference(converterBeanName) //
|
||||
.getBeanDefinition();
|
||||
|
||||
BeanDefinitionHolder template = new BeanDefinitionHolder(beanDefinition, DefaultBeanNames.TEMPLATE);
|
||||
BeanDefinitionHolder template = new BeanDefinitionHolder(beanDefinition, DefaultBeanNames.DATA_TEMPLATE);
|
||||
registry.registerBeanDefinition(template.getBeanName(), template.getBeanDefinition());
|
||||
|
||||
return template;
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
*/
|
||||
package org.springframework.data.cassandra.config.xml;
|
||||
|
||||
import static org.springframework.cassandra.config.xml.ParsingUtils.addOptionalPropertyReference;
|
||||
|
||||
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.AbstractSingleBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.cassandra.config.xml.CassandraCqlTemplateParser;
|
||||
import org.springframework.data.cassandra.config.CassandraTemplateFactoryBean;
|
||||
import org.springframework.data.cassandra.config.DefaultBeanNames;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -31,7 +33,7 @@ import org.w3c.dom.Element;
|
||||
* @author Matthew T. Adams
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
public class CassandraTemplateParser extends CassandraCqlTemplateParser {
|
||||
public class CassandraTemplateParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.cassandra.config.xml.CassandraCqlTemplateParser#getBeanClass(org.w3c.dom.Element)
|
||||
@@ -48,9 +50,6 @@ public class CassandraTemplateParser extends CassandraCqlTemplateParser {
|
||||
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
||||
throws BeanDefinitionStoreException {
|
||||
|
||||
// TODO: super.resolveId resolves always to a non-empty id because its fallback is DefaultCqlBeanNames.TEMPLATE.
|
||||
// This also means that CassandraTemplate is exposed as bean named cqlTemplate. This should change with 2.0
|
||||
// because 2.0 breaks up inheritance.
|
||||
String id = super.resolveId(element, definition, parserContext);
|
||||
return StringUtils.hasText(id) ? id : DefaultBeanNames.DATA_TEMPLATE;
|
||||
}
|
||||
@@ -65,14 +64,7 @@ public class CassandraTemplateParser extends CassandraCqlTemplateParser {
|
||||
|
||||
super.doParse(element, parserContext, builder);
|
||||
|
||||
parseConverterAttribute(element, parserContext, builder);
|
||||
}
|
||||
|
||||
protected void parseConverterAttribute(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||
String converterRef = element.getAttribute("cassandra-converter-ref");
|
||||
if (!StringUtils.hasText(converterRef)) {
|
||||
converterRef = DefaultBeanNames.CONVERTER;
|
||||
}
|
||||
builder.addPropertyReference("converter", converterRef);
|
||||
addOptionalPropertyReference(builder, "converter", element, "cassandra-converter-ref", DefaultBeanNames.CONVERTER);
|
||||
addOptionalPropertyReference(builder, "session", element, "session-ref", DefaultBeanNames.SESSION);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.cassandra.config.xml.DefaultCqlBeanNames;
|
||||
import org.springframework.cassandra.config.xml.ParsingUtils;
|
||||
import org.springframework.core.annotation.AnnotationAttributes;
|
||||
import org.springframework.data.cassandra.config.DefaultBeanNames;
|
||||
@@ -78,9 +77,8 @@ public class CassandraRepositoryConfigurationExtension extends RepositoryConfigu
|
||||
|
||||
Element element = config.getElement();
|
||||
|
||||
// TODO: XML-based configuration uses a different bean name than Java config
|
||||
ParsingUtils.addOptionalPropertyReference(builder, "cassandraTemplate", element, CASSANDRA_TEMPLATE_REF,
|
||||
DefaultCqlBeanNames.TEMPLATE);
|
||||
DefaultBeanNames.DATA_TEMPLATE);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.lang.annotation.Target;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.context.annotation.ComponentScan.Filter;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.cassandra.config.DefaultBeanNames;
|
||||
import org.springframework.data.cassandra.core.CassandraTemplate;
|
||||
import org.springframework.data.cassandra.repository.support.CassandraRepositoryFactoryBean;
|
||||
import org.springframework.data.repository.config.DefaultRepositoryBaseClass;
|
||||
@@ -120,7 +121,7 @@ public @interface EnableCassandraRepositories {
|
||||
|
||||
/**
|
||||
* Configures the name of the {@link CassandraTemplate} bean to be used with the repositories detected.
|
||||
*
|
||||
* Defaults to {@link DefaultBeanNames#DATA_TEMPLATE}
|
||||
* @return
|
||||
*/
|
||||
String cassandraTemplateRef() default "cassandraTemplate";
|
||||
|
||||
@@ -47,9 +47,9 @@ public class CassandraMappingBeanFactoryPostProcessorUnitTests {
|
||||
context.load(CassandraMappingBeanFactoryPostProcessorUnitTests.class, "cluster-and-mock-session.xml");
|
||||
context.refresh();
|
||||
|
||||
assertThat(context.getBeanNamesForType(CassandraOperations.class), hasItemInArray("cqlTemplate"));
|
||||
assertThat(context.getBeanNamesForType(CassandraMappingContext.class), hasItemInArray("cassandraMapping"));
|
||||
assertThat(context.getBeanNamesForType(CassandraConverter.class), hasItemInArray("cassandraConverter"));
|
||||
assertThat(context.getBeanNamesForType(CassandraOperations.class), hasItemInArray(DefaultBeanNames.DATA_TEMPLATE));
|
||||
assertThat(context.getBeanNamesForType(CassandraMappingContext.class), hasItemInArray(DefaultBeanNames.CONTEXT));
|
||||
assertThat(context.getBeanNamesForType(CassandraConverter.class), hasItemInArray(DefaultBeanNames.CONVERTER));
|
||||
}
|
||||
|
||||
@Test // DATACASS-290
|
||||
@@ -59,7 +59,7 @@ public class CassandraMappingBeanFactoryPostProcessorUnitTests {
|
||||
context.load(CassandraMappingBeanFactoryPostProcessorUnitTests.class, "mock-session-mapping-converter.xml");
|
||||
context.refresh();
|
||||
|
||||
assertThat(context.getBeanNamesForType(CassandraOperations.class), hasItemInArray("cqlTemplate"));
|
||||
assertThat(context.getBeanNamesForType(CassandraOperations.class), hasItemInArray(DefaultBeanNames.DATA_TEMPLATE));
|
||||
}
|
||||
|
||||
@Test // DATACASS-290
|
||||
|
||||
Reference in New Issue
Block a user