From 343d4b050aa189bfe5e8572365d1458ae6c184ca Mon Sep 17 00:00:00 2001 From: Lyndon Adams Date: Wed, 13 Mar 2013 19:55:30 +0000 Subject: [PATCH 1/2] SGF-162 change interval --- .../GemfireListenerContainerParser.java | 29 +++++++++----- .../ContinuousQueryListenerContainer.java | 2 +- .../gemfire/config/spring-gemfire-1.3.xsd | 38 +++++++++++-------- .../adapter/ContainerXmlSetupTest.java | 5 +++ .../data/gemfire/listener/container.xml | 6 +-- 5 files changed, 52 insertions(+), 28 deletions(-) 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..42b0435e 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java @@ -18,8 +18,12 @@ 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.ParserContext; @@ -61,9 +65,16 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser } - ParsingUtils.setPropertyValue(element, builder, "phase", "phase"); - ParsingUtils.setPropertyValue(element, builder, "pool-name", "poolName"); + 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); // parse nested listeners @@ -72,7 +83,7 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser if (!listDefs.isEmpty()) { ManagedSet listeners = new ManagedSet(listDefs.size()); for (Element listElement : listDefs) { - listeners.add(parseListener(listElement)); + listeners.add(parseListener(listElement, parserContext, builder)); } builder.addPropertyValue("queryListeners", listeners); @@ -81,7 +92,7 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser @Override protected boolean isEligibleAttribute(String attributeName) { - return (!"phase".equals(attributeName)); + return (!"phase".equals(attributeName) | !"id".equals(attributeName)); } /** @@ -90,8 +101,8 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser * @param element * @return */ - private BeanDefinition parseListener(Element element) { - + private BeanDefinition parseListener(Element element, ParserContext parserContext, BeanDefinitionBuilder definition) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ContinuousQueryListenerAdapter.class); builder.addConstructorArgReference(element.getAttribute("ref")); @@ -106,7 +117,7 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser if (StringUtils.hasText(attr)) { defBuilder.addConstructorArgValue(attr); } - + defBuilder.addConstructorArgValue(element.getAttribute("query")); defBuilder.addConstructorArgValue(builder.getBeanDefinition()); @@ -117,9 +128,9 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser return defBuilder.getBeanDefinition(); } - + @Override protected boolean shouldGenerateId() { - return true; + return false; } } \ 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/resources/org/springframework/data/gemfire/listener/container.xml b/src/test/resources/org/springframework/data/gemfire/listener/container.xml index b3d54f10..a777ac79 100644 --- a/src/test/resources/org/springframework/data/gemfire/listener/container.xml +++ b/src/test/resources/org/springframework/data/gemfire/listener/container.xml @@ -24,8 +24,8 @@ - - + + @@ -33,7 +33,7 @@ - + From fb0bfaf216ac6213b68fdde26392dbbf3be5459c Mon Sep 17 00:00:00 2001 From: David Turanski Date: Thu, 14 Mar 2013 08:30:59 -0400 Subject: [PATCH 2/2] SGF-162 added id to cq-listener-container --- .../GemfireListenerContainerParser.java | 54 +++---------------- .../gemfire/support/JSONRegionAdviceTest.java | 5 ++ .../data/gemfire/listener/container.xml | 4 +- 3 files changed, 15 insertions(+), 48 deletions(-) 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 42b0435e..fab3a4fe 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GemfireListenerContainerParser.java @@ -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 <cq-listener-container> element. * * @author Costin Leau */ -class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser { - +class GemfireListenerContainerParser extends AbstractSingleBeanDefinitionParser { @Override protected Class 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 listDefs = DomUtils.getChildElementsByTagName(element, "listener"); @@ -83,26 +55,21 @@ class GemfireListenerContainerParser extends AbstractSimpleBeanDefinitionParser if (!listDefs.isEmpty()) { ManagedSet listeners = new ManagedSet(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; - } } \ No newline at end of file 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 a777ac79..dfd27d2c 100644 --- a/src/test/resources/org/springframework/data/gemfire/listener/container.xml +++ b/src/test/resources/org/springframework/data/gemfire/listener/container.xml @@ -25,7 +25,7 @@ - + @@ -33,7 +33,7 @@ - +