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 @@ - +