+ add support for expiration attributes
This commit is contained in:
Costin Leau
2011-08-17 18:46:10 +03:00
parent d4870d0316
commit a9a7286f2d
9 changed files with 194 additions and 42 deletions

View File

@@ -32,6 +32,8 @@ import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
import com.gemstone.gemfire.cache.DiskWriteAttributesFactory;
import com.gemstone.gemfire.cache.ExpirationAction;
import com.gemstone.gemfire.cache.ExpirationAttributes;
/**
* Various minor utility used by the parser.
@@ -66,7 +68,8 @@ abstract class ParsingUtils {
*/
static void addBeanAliasAsMetadata(Element element, BeanDefinitionBuilder builder) {
String[] aliases = new String[0];
String name = element.getAttributeNS(BeanDefinitionParserDelegate.BEANS_NAMESPACE_URI, AbstractBeanDefinitionParser.NAME_ATTRIBUTE);
String name = element.getAttributeNS(BeanDefinitionParserDelegate.BEANS_NAMESPACE_URI,
AbstractBeanDefinitionParser.NAME_ATTRIBUTE);
if (StringUtils.hasLength(name)) {
aliases = StringUtils.trimArrayElements(StringUtils.commaDelimitedListToStringArray(name));
@@ -78,7 +81,8 @@ abstract class ParsingUtils {
static BeanDefinitionHolder replaceBeanAliasAsMetadata(BeanDefinitionHolder holder) {
BeanDefinition beanDefinition = holder.getBeanDefinition();
return new BeanDefinitionHolder(beanDefinition, holder.getBeanName(), (String[]) beanDefinition.removeAttribute(ALIASES_KEY));
return new BeanDefinitionHolder(beanDefinition, holder.getBeanName(),
(String[]) beanDefinition.removeAttribute(ALIASES_KEY));
}
/**
@@ -184,6 +188,7 @@ abstract class ParsingUtils {
/**
* Parses the eviction sub-element. Populates the given attribute factory with the proper attributes.
*
* @param parserContext
* @param element
* @param attrBuilder
* @return true if parsing actually occured, false otherwise
@@ -222,4 +227,64 @@ abstract class ParsingUtils {
static void parseStatistics(Element element, BeanDefinitionBuilder attrBuilder) {
setPropertyValue(element, attrBuilder, "statistics", "statisticsEnabled");
}
/**
* Parses the expiration sub-elements. Populates the given attribute factory with proper attributes.
*
* @param parserContext
* @param element
* @param attrBuilder
* @return
*/
static boolean parseExpiration(ParserContext parserContext, Element element, BeanDefinitionBuilder attrBuilder) {
boolean result = false;
result |= parseExpiration(element, "region-ttl", "regionTimeToLive", attrBuilder);
result |= parseExpiration(element, "region-tti", "regionIdleTimeout", attrBuilder);
result |= parseExpiration(element, "entry-ttl", "entryTimeToLive", attrBuilder);
result |= parseExpiration(element, "entry-tti", "entryIdleTimeout", attrBuilder);
if (result) {
// turn on statistics
attrBuilder.addPropertyValue("statisticsEnabled", Boolean.TRUE);
}
return result;
}
private static boolean parseExpiration(Element rootElement, String elementName, String propertyName, BeanDefinitionBuilder attrBuilder) {
Element expirationElement = DomUtils.getChildElementByTagName(rootElement, elementName);
if (expirationElement == null)
return false;
int expirationTime = 0;
ExpirationAction action = ExpirationAction.INVALIDATE;
// do manual conversion since the enum is not public
String attr = expirationElement.getAttribute("timeout");
if (StringUtils.hasText(attr)) {
expirationTime = Integer.valueOf(attr);
}
attr = expirationElement.getAttribute("action");
if (StringUtils.hasText(attr)) {
// figure out action based on string length
attr = attr.trim();
if (attr.length() == 10) {
action = ExpirationAction.INVALIDATE;
}
else if (attr.length() == 7) {
action = ExpirationAction.DESTROY;
}
else if (attr.length() == 13) {
action = ExpirationAction.LOCAL_DESTROY;
}
else if (attr.length() == 16) {
action = ExpirationAction.LOCAL_INVALIDATE;
}
}
attrBuilder.addPropertyValue(propertyName, new ExpirationAttributes(expirationTime, action));
return true;
}
}

View File

@@ -76,6 +76,7 @@ class PartitionedRegionParser extends AliasReplacingBeanDefinitionParser {
// region attributes
BeanDefinitionBuilder attrBuilder = BeanDefinitionBuilder.genericBeanDefinition(RegionAttributesFactoryBean.class);
ParsingUtils.parseExpiration(parserContext, element, attrBuilder);
ParsingUtils.parseEviction(parserContext, element, attrBuilder);
ParsingUtils.parseDiskStorage(element, attrBuilder);
ParsingUtils.parseStatistics(element, attrBuilder);

View File

@@ -71,6 +71,7 @@ class ReplicatedRegionParser extends AliasReplacingBeanDefinitionParser {
attrBuilder.addPropertyValue("publisher", Boolean.valueOf(attr));
}
ParsingUtils.parseExpiration(parserContext, element, attrBuilder);
ParsingUtils.parseEviction(parserContext, element, attrBuilder);
ParsingUtils.parseDiskStorage(element, attrBuilder);