diff --git a/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java b/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java index 8322b9f2..fab3a4fe 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java @@ -21,25 +21,21 @@ import java.util.List; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; 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 <cq-listener-container> element. * * @author Costin Leau */ -class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser { - +class GemfireListenerContainerParser extends AbstractSingleBeanDefinitionParser { @Override protected Class getBeanClass(Element element) { return ContinuousQueryListenerContainer.class; @@ -47,24 +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", "phase"); - ParsingUtils.setPropertyValue(element, builder, "pool-name", "poolName"); - - postProcess(builder, element); + ParsingUtils.setPropertyValue(element, builder, "phase"); + ParsingUtils.setPropertyValue(element, builder, "pool-name"); + ParsingUtils.setPropertyReference(element, builder, "cache","cache"); + ParsingUtils.setPropertyReference(element, builder, "task-executor","task-executor"); // parse nested listeners List listDefs = DomUtils.getChildElementsByTagName(element, "listener"); @@ -79,11 +62,6 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser } } - @Override - protected boolean isEligibleAttribute(String attributeName) { - return (!"phase".equals(attributeName)); - } - /** * Parses a listener definition. Returns the listener bean reference definition (of a {@link ContinuousQueryDefinition}). * @@ -117,9 +95,4 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser return defBuilder.getBeanDefinition(); } - - @Override - protected boolean shouldGenerateId() { - return true; - } } \ No newline at end of file diff --git a/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java b/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java index a0125f0f..2c0bd2e4 100644 --- a/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java +++ b/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java @@ -277,7 +277,7 @@ public class ContinuousQueryListenerContainer implements InitializingBean, Dispo logger.warn("Execution of JMS event listener failed, and no ErrorHandler has been set.", ex); } } - + public void setBeanName(String name) { this.beanName = name; } diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd index 9f5f4037..0355ff95 100755 --- a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd +++ b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd @@ -2016,21 +2016,29 @@ The name of the bean defining the GemFire cache (by default 'gemfireCache'). - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/src/test/java/org/springframework/data/gemfire/listener/adapter/ContainerXmlSetupTest.java b/src/test/java/org/springframework/data/gemfire/listener/adapter/ContainerXmlSetupTest.java index 6a89ce21..e8e9bde3 100644 --- a/src/test/java/org/springframework/data/gemfire/listener/adapter/ContainerXmlSetupTest.java +++ b/src/test/java/org/springframework/data/gemfire/listener/adapter/ContainerXmlSetupTest.java @@ -24,6 +24,8 @@ import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.data.gemfire.ForkUtil; +import org.springframework.data.gemfire.listener.ContinuousQueryDefinition; +import org.springframework.data.gemfire.listener.ContinuousQueryListener; import org.springframework.data.gemfire.listener.ContinuousQueryListenerContainer; import com.gemstone.gemfire.cache.Cache; @@ -56,6 +58,9 @@ public class ContainerXmlSetupTest { Cache cache = ctx.getBean("gemfireCache", Cache.class); Pool pool = ctx.getBean("client", Pool.class); + + // Test getting container listener bean by ID + ctx.getBean("testContainerId"); CqQuery[] cqs = cache.getQueryService().getCqs(); CqQuery[] pcqs = pool.getQueryService().getCqs(); diff --git a/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java b/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java index d6bae478..e647bbad 100644 --- a/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java +++ b/src/test/java/org/springframework/data/gemfire/support/JSONRegionAdviceTest.java @@ -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\"}"; diff --git a/src/test/resources/org/springframework/data/gemfire/listener/container.xml b/src/test/resources/org/springframework/data/gemfire/listener/container.xml index b3d54f10..dfd27d2c 100644 --- a/src/test/resources/org/springframework/data/gemfire/listener/container.xml +++ b/src/test/resources/org/springframework/data/gemfire/listener/container.xml @@ -24,7 +24,7 @@ - +