From 557d4b4b11bde5c4162137b01fc9e63c7df08ff7 Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 20 Jun 2018 16:05:32 -0700 Subject: [PATCH] DATAGEODE-128 - Allow CacheTypeAwareFactoryBean to register interests on client Region creation and implement SmartLifecycle. --- .../CacheTypeAwareRegionFactoryBean.java | 84 ++++++++++++++++--- 1 file changed, 73 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/support/CacheTypeAwareRegionFactoryBean.java b/src/main/java/org/springframework/data/gemfire/config/annotation/support/CacheTypeAwareRegionFactoryBean.java index 2ddbd34b..b10c7b6e 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/support/CacheTypeAwareRegionFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/support/CacheTypeAwareRegionFactoryBean.java @@ -38,6 +38,7 @@ import org.apache.geode.cache.client.ClientCache; import org.apache.geode.cache.client.ClientRegionShortcut; import org.apache.geode.compression.Compressor; import org.springframework.beans.factory.FactoryBean; +import org.springframework.context.SmartLifecycle; import org.springframework.data.gemfire.GemfireUtils; import org.springframework.data.gemfire.GenericRegionFactoryBean; import org.springframework.data.gemfire.LocalRegionFactoryBean; @@ -47,6 +48,7 @@ import org.springframework.data.gemfire.RegionLookupFactoryBean; import org.springframework.data.gemfire.RegionShortcutWrapper; import org.springframework.data.gemfire.ReplicatedRegionFactoryBean; import org.springframework.data.gemfire.client.ClientRegionFactoryBean; +import org.springframework.data.gemfire.client.Interest; import org.springframework.data.gemfire.config.annotation.RegionConfigurer; import org.springframework.data.gemfire.eviction.EvictingRegionFactoryBean; import org.springframework.data.gemfire.expiration.ExpiringRegionFactoryBean; @@ -85,7 +87,7 @@ import org.springframework.util.StringUtils; */ @SuppressWarnings("unused") public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBean - implements EvictingRegionFactoryBean, ExpiringRegionFactoryBean { + implements EvictingRegionFactoryBean, ExpiringRegionFactoryBean, SmartLifecycle { private GemFireCache gemfireCache; @@ -112,6 +114,8 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe private ExpirationAttributes regionIdleTimeout; private ExpirationAttributes regionTimeToLive; + private Interest[] interests; + private List regionConfigurers = Collections.emptyList(); private RegionAttributes regionAttributes; @@ -120,6 +124,8 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe private Scope scope; + private volatile SmartLifecycle smartLifecycleComponent; + private String diskStoreName; private String poolName; private String regionName; @@ -152,12 +158,13 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe ClientRegionFactoryBean clientRegionFactory = newClientRegionFactoryBean(); - clientRegionFactory.setAttributes(getRegionAttributes()); + clientRegionFactory.setAttributes(getAttributes()); clientRegionFactory.setBeanFactory(getBeanFactory()); clientRegionFactory.setCache(gemfireCache); clientRegionFactory.setClose(isClose()); clientRegionFactory.setCompressor(getCompressor()); clientRegionFactory.setDiskStoreName(getDiskStoreName()); + clientRegionFactory.setInterests(getInterests()); clientRegionFactory.setKeyConstraint(getKeyConstraint()); clientRegionFactory.setLookupEnabled(getLookupEnabled()); clientRegionFactory.setRegionConfigurers(this.regionConfigurers); @@ -172,6 +179,8 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe clientRegionFactory.afterPropertiesSet(); + this.smartLifecycleComponent = clientRegionFactory; + return clientRegionFactory.getObject(); } @@ -205,7 +214,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe RegionFactoryBean serverRegionFactory = newRegionFactoryBean(); - serverRegionFactory.setAttributes(getRegionAttributes()); + serverRegionFactory.setAttributes(getAttributes()); serverRegionFactory.setBeanFactory(getBeanFactory()); serverRegionFactory.setCache(gemfireCache); serverRegionFactory.setClose(isClose()); @@ -225,6 +234,8 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe serverRegionFactory.afterPropertiesSet(); + this.smartLifecycleComponent = serverRegionFactory; + return serverRegionFactory.getObject(); } @@ -282,7 +293,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe this.regionAttributes = regionAttributes; } - protected RegionAttributes getRegionAttributes() { + protected RegionAttributes getAttributes() { return this.regionAttributes; } @@ -331,7 +342,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected CustomExpiry getCustomEntryIdleTimeout() { - return customEntryIdleTimeout; + return this.customEntryIdleTimeout; } public void setCustomEntryTimeToLive(CustomExpiry customEntryTimeToLive) { @@ -339,7 +350,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected CustomExpiry getCustomEntryTimeToLive() { - return customEntryTimeToLive; + return this.customEntryTimeToLive; } public void setDataPolicy(DataPolicy dataPolicy) { @@ -363,7 +374,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected EvictionAttributes getEvictionAttributes() { - return evictionAttributes; + return this.evictionAttributes; } public void setEntryIdleTimeout(ExpirationAttributes entryIdleTimeout) { @@ -371,7 +382,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected ExpirationAttributes getEntryIdleTimeout() { - return entryIdleTimeout; + return this.entryIdleTimeout; } public void setEntryTimeToLive(ExpirationAttributes entryTimeToLive) { @@ -379,7 +390,15 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected ExpirationAttributes getEntryTimeToLive() { - return entryTimeToLive; + return this.entryTimeToLive; + } + + public void setInterests(Interest[] interests) { + this.interests = interests; + } + + protected Interest[] getInterests() { + return this.interests; } public void setKeyConstraint(Class keyConstraint) { @@ -451,7 +470,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected ExpirationAttributes getRegionIdleTimeout() { - return regionIdleTimeout; + return this.regionIdleTimeout; } public void setRegionTimeToLive(ExpirationAttributes regionTimeToLive) { @@ -459,7 +478,7 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe } protected ExpirationAttributes getRegionTimeToLive() { - return regionTimeToLive; + return this.regionTimeToLive; } public void setScope(Scope scope) { @@ -478,6 +497,10 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe return this.serverRegionShortcut; } + protected Optional getSmartLifecycleComponent() { + return Optional.ofNullable(this.smartLifecycleComponent); + } + public void setValueConstraint(Class valueConstraint) { this.valueConstraint = valueConstraint; } @@ -485,4 +508,43 @@ public class CacheTypeAwareRegionFactoryBean extends RegionLookupFactoryBe protected Class getValueConstraint() { return this.valueConstraint; } + + @Override + public boolean isAutoStartup() { + + return getSmartLifecycleComponent() + .map(SmartLifecycle::isAutoStartup) + .orElse(false); + } + + @Override + public boolean isRunning() { + + return getSmartLifecycleComponent() + .map(SmartLifecycle::isRunning) + .orElse(false); + } + + @Override + public int getPhase() { + + return getSmartLifecycleComponent() + .map(SmartLifecycle::getPhase) + .orElse(0); + } + + @Override + public void start() { + getSmartLifecycleComponent().ifPresent(SmartLifecycle::start); + } + + @Override + public void stop() { + getSmartLifecycleComponent().ifPresent(SmartLifecycle::stop); + } + + @Override + public void stop(Runnable callback) { + getSmartLifecycleComponent().ifPresent(it -> it.stop(callback)); + } }