SGF-162 added id to cq-listener-container
This commit is contained in:
@@ -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><cq-listener-container></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;
|
||||
}
|
||||
}
|
||||
@@ -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\"}";
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user