Implements JIRA feature request SGF-309 adding support for compression of GemFire Cache Region data using the new Compressor attribute and property in the RegionAttributes API.

This commit is contained in:
John Blum
2014-08-28 15:32:11 -07:00
parent b9a966e11a
commit 84be164f60
14 changed files with 308 additions and 81 deletions

View File

@@ -345,6 +345,7 @@ public class RegionFactoryBean<K, V> extends RegionLookupFactoryBean<K, V> imple
validateRegionAttributes(regionAttributes);
regionFactory.setCloningEnabled(regionAttributes.getCloningEnabled());
regionFactory.setCompressor(regionAttributes.getCompressor());
regionFactory.setConcurrencyChecksEnabled(regionAttributes.getConcurrencyChecksEnabled());
regionFactory.setConcurrencyLevel(regionAttributes.getConcurrencyLevel());
regionFactory.setCustomEntryIdleTimeout(regionAttributes.getCustomEntryIdleTimeout());

View File

@@ -105,6 +105,7 @@ public class ClientRegionFactoryBean<K, V> extends RegionLookupFactoryBean<K, V>
// map region attributes onto the client region factory
if (attributes != null) {
factory.setCloningEnabled(attributes.getCloningEnabled());
factory.setCompressor(attributes.getCompressor());
factory.setConcurrencyLevel(attributes.getConcurrencyLevel());
factory.setCustomEntryIdleTimeout(attributes.getCustomEntryIdleTimeout());
factory.setCustomEntryTimeToLive(attributes.getCustomEntryTimeToLive());

View File

@@ -91,9 +91,10 @@ abstract class AbstractRegionParser extends AbstractSingleBeanDefinitionParser {
ParsingUtils.parseOptionalRegionAttributes(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseSubscription(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseStatistics(element, regionAttributesBuilder);
ParsingUtils.parseMembershipAttributes(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseExpiration(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseEviction(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseMembershipAttributes(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseCompressor(parserContext, element, regionAttributesBuilder);
String enableGateway = element.getAttribute("enable-gateway");
String hubId = element.getAttribute("hub-id");
@@ -133,11 +134,11 @@ abstract class AbstractRegionParser extends AbstractSingleBeanDefinitionParser {
}
else if (subElement.getLocalName().equals("cache-loader")) {
builder.addPropertyValue("cacheLoader",
ParsingUtils.parseRefOrNestedBeanDeclaration(parserContext, subElement, builder));
ParsingUtils.parseRefOrSingleNestedBeanDeclaration(parserContext, subElement, builder));
}
else if (subElement.getLocalName().equals("cache-writer")) {
builder.addPropertyValue("cacheWriter",
ParsingUtils.parseRefOrNestedBeanDeclaration(parserContext, subElement, builder));
ParsingUtils.parseRefOrSingleNestedBeanDeclaration(parserContext, subElement, builder));
}
}

View File

@@ -76,6 +76,7 @@ class ClientRegionParser extends AbstractRegionParser {
ParsingUtils.parseStatistics(element, regionAttributesBuilder);
ParsingUtils.parseExpiration(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseEviction(parserContext, element, regionAttributesBuilder);
ParsingUtils.parseCompressor(parserContext, element, regionAttributesBuilder);
builder.addPropertyValue("attributes", regionAttributesBuilder.getBeanDefinition());

View File

@@ -432,6 +432,17 @@ abstract class ParsingUtils {
return false;
}
public static void parseCompressor(ParserContext parserContext, Element element,
BeanDefinitionBuilder regionAttributesBuilder) {
Element compressorElement = DomUtils.getChildElementByTagName(element, "compressor");
if (compressorElement != null) {
regionAttributesBuilder.addPropertyValue("compressor", parseRefOrSingleNestedBeanDeclaration(
parserContext, compressorElement, regionAttributesBuilder));
}
}
static String resolveCacheReference(final String cacheRef) {
return (StringUtils.hasText(cacheRef) ? cacheRef : GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME);
}