From 390b9031d10fc28668d77201c991fea85f9d692e Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 30 Jul 2018 21:01:57 -0700 Subject: [PATCH] DATAGEODE-136 - Replace all BeanPostProcessors setting GemFire/Geode Properties using SDG service enabling annotations with Configurers. --- .../config/annotation/AuthConfiguration.java | 4 +- ...ConfiguredAuthenticationConfiguration.java | 1 - .../GemFirePropertiesConfiguration.java | 3 - .../GeodeIntegratedSecurityConfiguration.java | 1 - .../annotation/HttpServiceConfiguration.java | 4 +- .../annotation/LocatorConfiguration.java | 4 +- .../annotation/LoggingConfiguration.java | 4 +- .../annotation/ManagerConfiguration.java | 60 +++++++++++-------- .../config/annotation/McastConfiguration.java | 4 +- .../MemcachedServerConfiguration.java | 4 +- .../annotation/OffHeapConfiguration.java | 3 - .../annotation/RedisServerConfiguration.java | 4 +- .../config/annotation/SslConfiguration.java | 1 - .../EmbeddedServiceConfigurationSupport.java | 52 +++++++++++++--- 14 files changed, 91 insertions(+), 58 deletions(-) diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/AuthConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/AuthConfiguration.java index 09539780..f83bb46f 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/AuthConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/AuthConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Properties; @@ -61,11 +62,10 @@ public class AuthConfiguration extends EmbeddedServiceConfigurationSupport { * @see org.springframework.data.gemfire.config.annotation.EnableAuth */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableAuth.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/AutoConfiguredAuthenticationConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/AutoConfiguredAuthenticationConfiguration.java index 79a3ba9a..ebbb6ffa 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/AutoConfiguredAuthenticationConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/AutoConfiguredAuthenticationConfiguration.java @@ -47,7 +47,6 @@ import org.springframework.util.StringUtils; * @see org.springframework.core.env.Environment * @see org.springframework.data.gemfire.config.annotation.EnableBeanFactoryLocator * @see org.springframework.data.gemfire.config.annotation.support.AutoConfiguredAuthenticationInitializer - * @see org.springframework.data.gemfire.config.annotation.support.EmbeddedServiceConfigurationSupport * @see org.springframework.data.gemfire.util.PropertiesBuilder * @since 2.0.0 */ diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/GemFirePropertiesConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/GemFirePropertiesConfiguration.java index c18e03db..b7583c97 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/GemFirePropertiesConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/GemFirePropertiesConfiguration.java @@ -88,9 +88,6 @@ public class GemFirePropertiesConfiguration extends EmbeddedServiceConfiguration return EnableGemFireProperties.class; } - /** - * {@inheritDoc} - */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/GeodeIntegratedSecurityConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/GeodeIntegratedSecurityConfiguration.java index 3968f1ee..34a417e9 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/GeodeIntegratedSecurityConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/GeodeIntegratedSecurityConfiguration.java @@ -81,7 +81,6 @@ public class GeodeIntegratedSecurityConfiguration extends EmbeddedServiceConfigu return !isShiroSecurityConfigured(); } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/HttpServiceConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/HttpServiceConfiguration.java index 3de194f2..6e8d8cd1 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/HttpServiceConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/HttpServiceConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Optional; import java.util.Properties; @@ -51,11 +52,10 @@ public class HttpServiceConfiguration extends EmbeddedServiceConfigurationSuppor * @see org.springframework.data.gemfire.config.annotation.EnableHttpService */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableHttpService.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/LocatorConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/LocatorConfiguration.java index 3bbe06e6..d2a7eb05 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/LocatorConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/LocatorConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Optional; import java.util.Properties; @@ -52,11 +53,10 @@ public class LocatorConfiguration extends EmbeddedServiceConfigurationSupport { * @see org.springframework.data.gemfire.config.annotation.EnableLocator */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableLocator.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/LoggingConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/LoggingConfiguration.java index 5afd5b74..c85b6f2d 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/LoggingConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/LoggingConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Properties; @@ -49,11 +50,10 @@ public class LoggingConfiguration extends EmbeddedServiceConfigurationSupport { * @see org.springframework.data.gemfire.config.annotation.EnableLogging */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableLogging.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/ManagerConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/ManagerConfiguration.java index 2ea54d57..79ca7bcb 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/ManagerConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/ManagerConfiguration.java @@ -17,7 +17,9 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; +import java.util.Optional; import java.util.Properties; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; @@ -46,46 +48,52 @@ public class ManagerConfiguration extends EmbeddedServiceConfigurationSupport { * @see org.springframework.data.gemfire.config.annotation.EnableManager */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableManager.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { - PropertiesBuilder gemfireProperties = PropertiesBuilder.create(); + return Optional.of(resolveProperty(managerProperty("enabled"), Boolean.TRUE)) + .filter(Boolean.TRUE::equals) + .map(enabled -> { - gemfireProperties.setProperty("jmx-manager", - resolveProperty(managerProperty("enabled"), Boolean.TRUE)); + PropertiesBuilder gemfireProperties = PropertiesBuilder.create(); - gemfireProperties.setProperty("jmx-manager-access-file", - resolveProperty(managerProperty("access-file"), - (String) annotationAttributes.get("accessFile"))); + gemfireProperties.setProperty("jmx-manager", + resolveProperty(managerProperty("enabled"), Boolean.TRUE)); - gemfireProperties.setProperty("jmx-manager-bind-address", - resolveProperty(managerProperty("bind-address"), - (String) annotationAttributes.get("bindAddress"))); + gemfireProperties.setProperty("jmx-manager-access-file", + resolveProperty(managerProperty("access-file"), + (String) annotationAttributes.get("accessFile"))); - gemfireProperties.setProperty("jmx-manager-hostname-for-clients", - resolveProperty(managerProperty("hostname-for-clients"), - (String) annotationAttributes.get("hostnameForClients"))); + gemfireProperties.setProperty("jmx-manager-bind-address", + resolveProperty(managerProperty("bind-address"), + (String) annotationAttributes.get("bindAddress"))); - gemfireProperties.setProperty("jmx-manager-password-file", - resolveProperty(managerProperty("password-file"), - (String) annotationAttributes.get("passwordFile"))); + gemfireProperties.setProperty("jmx-manager-hostname-for-clients", + resolveProperty(managerProperty("hostname-for-clients"), + (String) annotationAttributes.get("hostnameForClients"))); - gemfireProperties.setProperty("jmx-manager-port", - resolvePort(resolveProperty(managerProperty("port"), - (Integer) annotationAttributes.get("port")), DEFAULT_JMX_MANAGER_PORT)); + gemfireProperties.setProperty("jmx-manager-password-file", + resolveProperty(managerProperty("password-file"), + (String) annotationAttributes.get("passwordFile"))); - gemfireProperties.setProperty("jmx-manager-start", - resolveProperty(managerProperty("start"), (Boolean) annotationAttributes.get("start"))); + gemfireProperties.setProperty("jmx-manager-port", + resolvePort(resolveProperty(managerProperty("port"), + (Integer) annotationAttributes.get("port")), DEFAULT_JMX_MANAGER_PORT)); - gemfireProperties.setProperty("jmx-manager-update-rate", - resolveProperty(managerProperty("update-rate"), - (Integer) annotationAttributes.get("updateRate"))); + gemfireProperties.setProperty("jmx-manager-start", + resolveProperty(managerProperty("start"), (Boolean) annotationAttributes.get("start"))); - return gemfireProperties.build(); + gemfireProperties.setProperty("jmx-manager-update-rate", + resolveProperty(managerProperty("update-rate"), + (Integer) annotationAttributes.get("updateRate"))); + + return gemfireProperties.build(); + + }) + .orElseGet(Properties::new); } } diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/McastConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/McastConfiguration.java index b4f62c48..33af508e 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/McastConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/McastConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Properties; @@ -50,11 +51,10 @@ public class McastConfiguration extends EmbeddedServiceConfigurationSupport { * @see org.springframework.data.gemfire.config.annotation.EnableMcast */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableMcast.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/MemcachedServerConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/MemcachedServerConfiguration.java index cd3104a9..8d55dbad 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/MemcachedServerConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/MemcachedServerConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Optional; import java.util.Properties; @@ -47,11 +48,10 @@ public class MemcachedServerConfiguration extends EmbeddedServiceConfigurationSu * @see org.springframework.data.gemfire.config.annotation.EnableMemcachedServer */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableMemcachedServer.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/OffHeapConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/OffHeapConfiguration.java index dcb31a2c..871417eb 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/OffHeapConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/OffHeapConfiguration.java @@ -72,7 +72,6 @@ public class OffHeapConfiguration extends EmbeddedServiceConfigurationSupport { return EnableOffHeap.class; } - /* (non-Javadoc) */ @Override protected void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, Map annotationAttributes, BeanDefinitionRegistry registry) { @@ -87,7 +86,6 @@ public class OffHeapConfiguration extends EmbeddedServiceConfigurationSupport { builder.getBeanDefinition()); } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { @@ -98,7 +96,6 @@ public class OffHeapConfiguration extends EmbeddedServiceConfigurationSupport { .build(); } - /* (non-Javadoc) */ @SuppressWarnings("unused") protected static class OffHeapBeanFactoryPostProcessor extends AbstractAnnotationConfigSupport implements BeanFactoryPostProcessor { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/RedisServerConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/RedisServerConfiguration.java index bfdaa298..362046ce 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/RedisServerConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/RedisServerConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.data.gemfire.config.annotation; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Optional; import java.util.Properties; @@ -47,11 +48,10 @@ public class RedisServerConfiguration extends EmbeddedServiceConfigurationSuppor * @see org.springframework.data.gemfire.config.annotation.EnableRedisServer */ @Override - protected Class getAnnotationType() { + protected Class getAnnotationType() { return EnableRedisServer.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributes) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/SslConfiguration.java b/src/main/java/org/springframework/data/gemfire/config/annotation/SslConfiguration.java index fd92fdef..df844cea 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/SslConfiguration.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/SslConfiguration.java @@ -55,7 +55,6 @@ public class SslConfiguration extends EmbeddedServiceConfigurationSupport { return EnableSsl.class; } - /* (non-Javadoc) */ @Override protected Properties toGemFireProperties(Map annotationAttributesMap) { diff --git a/src/main/java/org/springframework/data/gemfire/config/annotation/support/EmbeddedServiceConfigurationSupport.java b/src/main/java/org/springframework/data/gemfire/config/annotation/support/EmbeddedServiceConfigurationSupport.java index 1593eb59..b7c6b32c 100644 --- a/src/main/java/org/springframework/data/gemfire/config/annotation/support/EmbeddedServiceConfigurationSupport.java +++ b/src/main/java/org/springframework/data/gemfire/config/annotation/support/EmbeddedServiceConfigurationSupport.java @@ -35,7 +35,11 @@ import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; import org.springframework.data.gemfire.config.annotation.AbstractCacheConfiguration; +import org.springframework.data.gemfire.config.annotation.ClientCacheConfigurer; +import org.springframework.data.gemfire.config.annotation.PeerCacheConfigurer; import org.springframework.data.gemfire.util.CollectionUtils; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -64,8 +68,8 @@ public abstract class EmbeddedServiceConfigurationSupport extends AbstractAnnota public static final Integer DEFAULT_PORT = 0; public static final String DEFAULT_HOST = "localhost"; - @Autowired @SuppressWarnings("all") + @Autowired(required = false) private AbstractCacheConfiguration cacheConfiguration; /** @@ -83,9 +87,6 @@ public abstract class EmbeddedServiceConfigurationSupport extends AbstractAnnota .orElseThrow(() -> newIllegalStateException("AbstractCacheConfiguration is required")); } - /** - * {@inheritDoc} - */ @Override public final void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { @@ -112,17 +113,14 @@ public abstract class EmbeddedServiceConfigurationSupport extends AbstractAnnota getCacheConfiguration().add(gemfireProperties); } catch (Exception ignore) { - registerGemFirePropertiesBeanPostProcessor(registry, gemfireProperties); + //registerGemFirePropertiesBeanPostProcessor(registry, gemfireProperties); + registerGemFirePropertiesConfigurer(registry, gemfireProperties); } } } protected abstract Properties toGemFireProperties(Map annotationAttributes); - protected boolean isAnnotationPresent(AnnotationMetadata importingClassMetadata) { - return importingClassMetadata.hasAnnotation(getAnnotationTypeName()); - } - protected boolean hasProperties(Properties properties) { return !CollectionUtils.isEmpty(properties); } @@ -138,6 +136,16 @@ public abstract class EmbeddedServiceConfigurationSupport extends AbstractAnnota BeanDefinitionReaderUtils.registerBeanDefinition(newBeanDefinitionHolder(builder), registry); } + protected void registerGemFirePropertiesConfigurer(BeanDefinitionRegistry registry, Properties gemfireProperties) { + + BeanDefinitionBuilder builder = + BeanDefinitionBuilder.genericBeanDefinition(GemFirePropertiesConfigurer.class); + + builder.addConstructorArgValue(gemfireProperties); + + BeanDefinitionReaderUtils.registerBeanDefinition(newBeanDefinitionHolder(builder), registry); + } + protected BeanDefinitionHolder newBeanDefinitionHolder(BeanDefinitionBuilder builder) { return new BeanDefinitionHolder(builder.getBeanDefinition(), generateBeanName()); } @@ -205,6 +213,32 @@ public abstract class EmbeddedServiceConfigurationSupport extends AbstractAnnota return Optional.ofNullable(port).orElse(defaultPort); } + protected static class GemFirePropertiesConfigurer implements PeerCacheConfigurer, ClientCacheConfigurer { + + private final Properties gemfireProperties; + + public GemFirePropertiesConfigurer(Properties gemfireProperties) { + + Assert.notEmpty(gemfireProperties, "GemFire Properties are required"); + + this.gemfireProperties = gemfireProperties; + } + + @Override + public void configure(String beanName, CacheFactoryBean bean) { + configureGemFireProperties(bean); + } + + @Override + public void configure(String beanName, ClientCacheFactoryBean bean) { + configureGemFireProperties(bean); + } + + private void configureGemFireProperties(CacheFactoryBean bean) { + bean.getProperties().putAll(this.gemfireProperties); + } + } + /** * Spring {@link BeanPostProcessor} used to process before initialization Pivotal GemFire or Apache Geode * {@link Properties} defined as a bean in the Spring application context.