SGF-162 added id to cq-listener-container

This commit is contained in:
David Turanski
2013-03-14 08:30:59 -04:00
parent 343d4b050a
commit fb0bfaf216
3 changed files with 15 additions and 48 deletions

View File

@@ -18,32 +18,24 @@ package org.springframework.data.gemfire.config;
import java.util.List;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.ManagedSet;
import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.data.gemfire.listener.ContinuousQueryDefinition;
import org.springframework.data.gemfire.listener.ContinuousQueryListenerContainer;
import org.springframework.data.gemfire.listener.adapter.ContinuousQueryListenerAdapter;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
/**
* Parser for SGF <code>&lt;cq-listener-container&gt;</code> element.
*
* @author Costin Leau
*/
class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser {
class GemfireListenerContainerParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<ContinuousQueryListenerContainer> getBeanClass(Element element) {
return ContinuousQueryListenerContainer.class;
@@ -51,31 +43,11 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
// parse attributes (but replace the value assignment with references)
NamedNodeMap attributes = element.getAttributes();
for (int x = 0; x < attributes.getLength(); x++) {
Attr attribute = (Attr) attributes.item(x);
if (isEligibleAttribute(attribute, parserContext)) {
String propertyName = extractPropertyName(attribute.getLocalName());
Assert.state(StringUtils.hasText(propertyName),
"Illegal property name returned from 'extractPropertyName(String)': cannot be null or empty.");
builder.addPropertyReference(propertyName, attribute.getValue());
}
}
ParsingUtils.setPropertyValue(element, builder, "phase");
ParsingUtils.setPropertyValue(element, builder, "pool-name");
// Register the Id if one has been provided.
String id = element.getAttribute("id");
if( StringUtils.hasText(id)) {
//BeanDefinitionHolder holder = new BeanDefinitionHolder(builder.getBeanDefinition(), id, null);
//BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry());
}
postProcess(builder, element);
ParsingUtils.setPropertyReference(element, builder, "cache","cache");
ParsingUtils.setPropertyReference(element, builder, "task-executor","task-executor");
// parse nested listeners
List<Element> listDefs = DomUtils.getChildElementsByTagName(element, "listener");
@@ -83,26 +55,21 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser
if (!listDefs.isEmpty()) {
ManagedSet<BeanDefinition> listeners = new ManagedSet<BeanDefinition>(listDefs.size());
for (Element listElement : listDefs) {
listeners.add(parseListener(listElement, parserContext, builder));
listeners.add(parseListener(listElement));
}
builder.addPropertyValue("queryListeners", listeners);
}
}
@Override
protected boolean isEligibleAttribute(String attributeName) {
return (!"phase".equals(attributeName) | !"id".equals(attributeName));
}
/**
* Parses a listener definition. Returns the listener bean reference definition (of a {@link ContinuousQueryDefinition}).
*
* @param element
* @return
*/
private BeanDefinition parseListener(Element element, ParserContext parserContext, BeanDefinitionBuilder definition) {
private BeanDefinition parseListener(Element element) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ContinuousQueryListenerAdapter.class);
builder.addConstructorArgReference(element.getAttribute("ref"));
@@ -117,7 +84,7 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser
if (StringUtils.hasText(attr)) {
defBuilder.addConstructorArgValue(attr);
}
defBuilder.addConstructorArgValue(element.getAttribute("query"));
defBuilder.addConstructorArgValue(builder.getBeanDefinition());
@@ -128,9 +95,4 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser
return defBuilder.getBeanDefinition();
}
@Override
protected boolean shouldGenerateId() {
return false;
}
}

View File

@@ -24,6 +24,7 @@ import javax.annotation.Resource;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +50,10 @@ public class JSONRegionAdviceTest {
@Autowired
GemfireOperations template;
@Before
public void setUp() {
region.clear();
}
@Test
public void testPutString() {
String json = "{\"hello\":\"world\"}";

View File

@@ -25,7 +25,7 @@
<task:executor id="testTaskExecutor" />
<gfe:cq-listener-container id="testContainerId" cache="gemfireCache" pool-name="client">
<!-- default handle method -->
<!-- default handle method -->
<gfe:listener ref="testBean1" query="SELECT * from /test-cq"/>
<gfe:listener ref="testBean1" query="SELECT * from /test-cq" name="test-bean-1" method="handleQuery"/>
<gfe:listener ref="testBean2" query="SELECT * from /test-cq" durable="false"/>
@@ -33,7 +33,7 @@
<bean id="testBean1" class="org.springframework.data.gemfire.listener.GemfireMDP"/>
<bean id="testBean2" class="org.springframework.data.gemfire.listener.ThrowableEventListener"/>
<bean id="handler" class="org.springframework.data.gemfire.listener.StubErrorHandler"/>
</beans>