diff --git a/maven.gradle b/maven.gradle index c80dcce7..577a73f6 100644 --- a/maven.gradle +++ b/maven.gradle @@ -64,6 +64,11 @@ def customizePom(pom, gradleProject) { name = 'Oliver Gierke' email = 'ogierke@vmware.com' } + developer { + id = 'ladams' + name = 'Lyndon Adams' + email = 'ladams@vmware.com' + } } } } diff --git a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java index daee69bb..144a06db 100644 --- a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java @@ -119,6 +119,7 @@ abstract class AbstractRegionParser extends AliasReplacingBeanDefinitionParser { } ParsingUtils.parseExpiration(parserContext, element, attrBuilder); + ParsingUtils.parseSubscription(parserContext, element, attrBuilder); ParsingUtils.parseEviction(parserContext, element, attrBuilder); ParsingUtils.parseMembershipAttributes(parserContext, element, attrBuilder); diff --git a/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java b/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java index 8170e1de..fdfb591e 100644 --- a/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java +++ b/src/main/java/org/springframework/data/gemfire/config/ParsingUtils.java @@ -48,6 +48,7 @@ import com.gemstone.gemfire.cache.Scope; * * @author Costin Leau * @author David Turanski + * @author Lyndon Adams */ abstract class ParsingUtils { @@ -256,6 +257,36 @@ abstract class ParsingUtils { attrBuilder.addPropertyValue("evictionAttributes", evictionDefBuilder.getBeanDefinition()); return true; } + + /** + * Parses the subscription sub-element. Populates the given attribute factory + * with the proper attributes. + * + * @author Lyndon Adams + * @param parserContext + * @param element + * @param attrBuilder + * @return true if parsing actually occured, false otherwise + */ + static boolean parseSubscription(ParserContext parserContext, Element element, BeanDefinitionBuilder attrBuilder) { + Element subscriptionElement = DomUtils.getChildElementByTagName(element, "subscription"); + + if (subscriptionElement == null) + return false; + + BeanDefinitionBuilder subscriptionDefBuilder = BeanDefinitionBuilder + .genericBeanDefinition(SubscriptionAttributesFactoryBean.class); + + // do manual conversion since the enum is not public + String attr = subscriptionElement.getAttribute("type"); + if (StringUtils.hasText(attr)) { + subscriptionDefBuilder.addPropertyValue("type", SubscriptionType.valueOf(attr.toUpperCase())); + } + + attrBuilder.addPropertyValue("subscriptionAttributes", subscriptionDefBuilder.getBeanDefinition()); + return true; + } + static void parseTransportFilters(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { Element transportFilterElement = DomUtils.getChildElementByTagName(element, "transport-filter"); diff --git a/src/main/java/org/springframework/data/gemfire/config/SubscriptionAttributesFactoryBean.java b/src/main/java/org/springframework/data/gemfire/config/SubscriptionAttributesFactoryBean.java new file mode 100644 index 00000000..474cf12d --- /dev/null +++ b/src/main/java/org/springframework/data/gemfire/config/SubscriptionAttributesFactoryBean.java @@ -0,0 +1,102 @@ +/* + * Copyright 2010-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.gemfire.config; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; + +import com.gemstone.gemfire.cache.InterestPolicy; +import com.gemstone.gemfire.cache.SubscriptionAttributes; + +/** + * Simple utility class used for defining nested factory-method like definitions w/o polluting the container with useless beans. + * + * @author Lyndon Adams + * @since 12 March 2013 + */ +public class SubscriptionAttributesFactoryBean implements FactoryBean, InitializingBean { + + SubscriptionAttributes subscriptionAttri; + InterestPolicy policy; + SubscriptionType type = SubscriptionType.ALL; + + + /* (non-Javadoc) + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + @Override + public void afterPropertiesSet() throws Exception { + if( policy == null ){ + policy = InterestPolicy.DEFAULT; + } + subscriptionAttri = createAttributes(); + } + + private SubscriptionAttributes createAttributes(){ + switch( type ){ + case ALL : + policy = InterestPolicy.ALL; + break; + case CACHE_CONTENT : + policy = InterestPolicy.CACHE_CONTENT; + break; + default : + policy = InterestPolicy.DEFAULT; + } + return new SubscriptionAttributes( policy ); + } + + + /* (non-Javadoc) + * @see org.springframework.beans.factory.FactoryBean#getObject() + */ + @Override + public SubscriptionAttributes getObject() throws Exception { + return subscriptionAttri; + } + + /* (non-Javadoc) + * @see org.springframework.beans.factory.FactoryBean#getObjectType() + */ + @Override + public Class getObjectType() { + return ( subscriptionAttri != null ) ? subscriptionAttri.getClass() : SubscriptionAttributes.class; + } + + /* (non-Javadoc) + * @see org.springframework.beans.factory.FactoryBean#isSingleton() + */ + @Override + public boolean isSingleton() { + return true; + } + + public InterestPolicy getPolicy() { + return policy; + } + + public SubscriptionType getType() { + return type; + } + + public void setPolicy(InterestPolicy policy) { + this.policy = policy; + } + + public void setType(SubscriptionType type) { + this.type = type; + } +} diff --git a/src/main/java/org/springframework/data/gemfire/config/SubscriptionType.java b/src/main/java/org/springframework/data/gemfire/config/SubscriptionType.java new file mode 100644 index 00000000..83cc8439 --- /dev/null +++ b/src/main/java/org/springframework/data/gemfire/config/SubscriptionType.java @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.gemfire.config; + +/** + * Simple enumeration for the various GemFire subscription types. + * + * @author Lyndon Adams + * + */ +enum SubscriptionType { + ALL, CACHE_CONTENT; +} \ No newline at end of file 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 c9aad6bc..9f5f4037 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 @@ -1,199 +1,195 @@ - - - - - - + + + + + + - - - - - - - + + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + - - - - + + + + - - - + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + namespace and its 'properties' element. ]]> - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - - + + + + + - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + - - - - - - - + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + - - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + - - - - - - + + + + + - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + - - - - - - + + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - + + + + + + + + + - - - - - - + + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + - - - - - - - - + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + - - - - - - + + + + + + - - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - + + - - - - - - - - - - + + + + + + + + + - - - - - - + + + + + - - - - - - - + + + + + + - - - - - + + + + - - - - - - + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + - - - - - - - - - - + + + + + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - - - + + + + + + - - - - - - + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml b/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml index b0a76411..29eecb6b 100644 --- a/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml +++ b/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml @@ -9,5 +9,5 @@ - + diff --git a/src/test/resources/org/springframework/data/gemfire/config/subscription-ns.xml b/src/test/resources/org/springframework/data/gemfire/config/subscription-ns.xml new file mode 100644 index 00000000..aa35ba0a --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/config/subscription-ns.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file