SGF-162 change interval

This commit is contained in:
Lyndon Adams
2013-03-13 19:55:30 +00:00
committed by David Turanski
parent 0e81e9d4c8
commit 343d4b050a
5 changed files with 52 additions and 28 deletions

View File

@@ -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<BeanDefinition> listeners = new ManagedSet<BeanDefinition>(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;
}
}

View File

@@ -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;
}

View File

@@ -2016,21 +2016,29 @@ The name of the bean defining the GemFire cache (by default 'gemfireCache').
<xsd:documentation><![CDATA[
Container for continuous query listeners. All listeners will be hosted by the same container.
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation>
<tool:exports
type="org.springframework.data.gemfire.listener.ContinuousQueryListenerContainer" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="listener" type="listenerType"
minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="cache" type="xsd:string" default="gemfireCache">
<xsd:annotation>
<xsd:documentation><![CDATA[
<xsd:appinfo>
<tool:annotation>
<tool:exports
type="org.springframework.data.gemfire.listener.ContinuousQueryListenerContainer" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="listener" type="listenerType"
minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The id of the listener (optional)
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="cache" type="xsd:string"
default="gemfireCache">
<xsd:annotation>
<xsd:documentation><![CDATA[
A reference (by name) to the GemFire cache bean. Default is "gemfireCache".
]]></xsd:documentation>
<xsd:appinfo>

View File

@@ -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();

View File

@@ -24,8 +24,8 @@
<task:executor id="testTaskExecutor" />
<gfe:cq-listener-container cache="gemfireCache" pool-name="client">
<!-- default handle method -->
<gfe:cq-listener-container id="testContainerId" cache="gemfireCache" pool-name="client">
<!-- 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>