SGF-177 fixed property placeholders for partitioned region

This commit is contained in:
David Turanski
2013-06-13 14:03:54 -04:00
parent f1ad1e198d
commit 36df54e5b5
4 changed files with 28 additions and 58 deletions

View File

@@ -59,9 +59,9 @@ public class PartitionAttributesFactoryBean implements FactoryBean<PartitionAttr
public void setColocatedWith(String colocatedRegionFullPath) {
paf.setColocatedWith(colocatedRegionFullPath);
}
public void setFixedPartitionAttributes(List<FixedPartitionAttributes> fixedPartitionAttributes) {
for (FixedPartitionAttributes fpa: fixedPartitionAttributes) {
for (FixedPartitionAttributes fpa : fixedPartitionAttributes) {
paf.addFixedPartitionAttributes(fpa);
}
}

View File

@@ -30,6 +30,8 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
import com.gemstone.gemfire.management.internal.cli.parser.ParserUtils;
/**
* Parser for &lt;partitioned-region;gt; definitions.
*
@@ -59,43 +61,14 @@ class PartitionedRegionParser extends AbstractRegionParser {
// partition attributes
BeanDefinitionBuilder parAttrBuilder = BeanDefinitionBuilder
.genericBeanDefinition(PartitionAttributesFactoryBean.class);
String attr = element.getAttribute("colocated-with");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("colocatedWith", attr);
}
attr = element.getAttribute("local-max-memory");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("localMaxMemory", Integer.valueOf(attr));
}
attr = element.getAttribute("copies");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("redundantCopies", Integer.valueOf(attr));
}
attr = element.getAttribute("recovery-delay");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("recoveryDelay", Long.valueOf(attr));
}
attr = element.getAttribute("startup-recovery-delay");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("startupRecoveryDelay", Long.valueOf(attr));
}
attr = element.getAttribute("total-max-memory");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("totalMaxMemory", Long.valueOf(attr));
}
attr = element.getAttribute("total-buckets");
if (StringUtils.hasText(attr)) {
parAttrBuilder.addPropertyValue("totalNumBuckets", Integer.valueOf(attr));
}
ParsingUtils.setPropertyValue(element, parAttrBuilder, "colocated-with");
ParsingUtils.setPropertyValue(element, parAttrBuilder, "local-max-memory");
ParsingUtils.setPropertyValue(element, parAttrBuilder, "copies","redundantCopies");
ParsingUtils.setPropertyValue(element, parAttrBuilder, "recovery-delay");
ParsingUtils.setPropertyValue(element, parAttrBuilder, "startup-recovery-delay");
ParsingUtils.setPropertyValue(element, parAttrBuilder, "total-max-memory");
ParsingUtils.setPropertyValue(element, parAttrBuilder, "total-buckets","totalNumBuckets");
//
Element subElement = DomUtils.getChildElementByTagName(element, "partition-resolver");
// parse nested partition resolver element

View File

@@ -47,14 +47,12 @@ import com.gemstone.gemfire.cache.partition.PartitionListener;
* @author David Turanski
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="partitioned-ns.xml",
initializers=GemfireTestApplicationContextInitializer.class)
@ContextConfiguration(locations = "partitioned-ns.xml", initializers = GemfireTestApplicationContextInitializer.class)
public class PartitionedRegionNamespaceTest {
@Autowired
private ApplicationContext context;
@Test
public void testBasicPartition() throws Exception {
assertTrue(context.containsBean("simple"));
@@ -64,8 +62,7 @@ public class PartitionedRegionNamespaceTest {
@Test
public void testPartitionOptions() throws Exception {
assertTrue(context.containsBean("options"));
RegionFactoryBean fb = context.getBean("&options",
RegionFactoryBean.class);
RegionFactoryBean fb = context.getBean("&options", RegionFactoryBean.class);
assertTrue(fb instanceof PartitionedRegionFactoryBean);
assertEquals(null, TestUtils.readField("scope", fb));
assertEquals("redundant", TestUtils.readField("name", fb));
@@ -77,25 +74,21 @@ public class PartitionedRegionNamespaceTest {
assertEquals(1, pAttr.getRedundantCopies());
assertEquals(4, pAttr.getTotalNumBuckets());
assertSame(SimplePartitionResolver.class, pAttr.getPartitionResolver()
.getClass());
assertSame(SimplePartitionResolver.class, pAttr.getPartitionResolver().getClass());
}
@SuppressWarnings("rawtypes")
@Test
public void testComplexPartition() throws Exception {
assertTrue(context.containsBean("complex"));
RegionFactoryBean fb = context.getBean("&complex",
RegionFactoryBean.class);
RegionFactoryBean fb = context.getBean("&complex", RegionFactoryBean.class);
CacheListener[] listeners = TestUtils.readField("cacheListeners", fb);
assertFalse(ObjectUtils.isEmpty(listeners));
assertEquals(2, listeners.length);
assertSame(listeners[0], context.getBean("c-listener"));
assertSame(context.getBean("c-loader"),
TestUtils.readField("cacheLoader", fb));
assertSame(context.getBean("c-writer"),
TestUtils.readField("cacheWriter", fb));
assertSame(context.getBean("c-loader"), TestUtils.readField("cacheLoader", fb));
assertSame(context.getBean("c-writer"), TestUtils.readField("cacheWriter", fb));
RegionAttributes attrs = TestUtils.readField("attributes", fb);
PartitionAttributes pAttr = attrs.getPartitionAttributes();
@@ -109,15 +102,13 @@ public class PartitionedRegionNamespaceTest {
@SuppressWarnings("rawtypes")
@Test
public void testFixedPartition() throws Exception {
RegionFactoryBean fb = context.getBean("&fixed",
RegionFactoryBean.class);
RegionFactoryBean fb = context.getBean("&fixed", RegionFactoryBean.class);
RegionAttributes attrs = TestUtils.readField("attributes", fb);
PartitionAttributes pAttr = attrs.getPartitionAttributes();
assertNotNull(pAttr.getFixedPartitionAttributes());
assertEquals(3, pAttr.getFixedPartitionAttributes().size());
FixedPartitionAttributes fpa = (FixedPartitionAttributes) pAttr
.getFixedPartitionAttributes().get(0);
FixedPartitionAttributes fpa = (FixedPartitionAttributes) pAttr.getFixedPartitionAttributes().get(0);
assertEquals(3, fpa.getNumBuckets());
assertTrue(fpa.isPrimary());

View File

@@ -4,15 +4,21 @@
xmlns:gfe="http://www.springframework.org/schema/gemfire"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<gfe:cache />
<context:property-placeholder properties-ref="props"/>
<util:properties id="props">
<prop key="totalBuckets">4</prop>
</util:properties>
<gfe:partitioned-region id="simple" />
<gfe:partitioned-region id="options" copies="1" total-buckets="4" name="redundant" close="true" destroy="false" statistics="true">
<gfe:partitioned-region id="options" copies="1" total-buckets="${totalBuckets}" name="redundant" close="true" destroy="false" statistics="true">
<gfe:partition-resolver>
<bean class="org.springframework.data.gemfire.SimplePartitionResolver"/>
</gfe:partition-resolver>