/*
* Copyright 2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.springframework.data.gemfire.config.annotation;
import java.util.Map;
import java.util.Properties;
import org.springframework.data.gemfire.config.annotation.support.EmbeddedServiceConfigurationSupport;
import org.springframework.data.gemfire.util.PropertiesBuilder;
/**
* The {@link GemFirePropertiesConfiguration} class is a Spring {@link org.springframework.context.annotation.ImportBeanDefinitionRegistrar}
* capable of configuring additional GemFire Properties on a (Spring Boot) application class at runtime
* during startup.
*
* @author John Blum
* @see org.springframework.data.gemfire.config.annotation.EnableGemFireProperties
* @see org.springframework.data.gemfire.config.annotation.support.EmbeddedServiceConfigurationSupport
* @see org.springframework.data.gemfire.util.PropertiesBuilder
* @since 1.9.0
*/
public class GemFirePropertiesConfiguration extends EmbeddedServiceConfigurationSupport {
public static final boolean DEFAULT_CONSERVE_SOCKETS = true;
public static final boolean DEFAULT_DELTA_PROPAGATION = true;
public static final boolean DEFAULT_DISABLE_TCP = false;
public static final boolean DEFAULT_ENABLE_NETWORK_PARTITION_DETECTION = false;
public static final boolean DEFAULT_ENFORCE_UNIQUE_HOST = false;
public static final boolean DEFAULT_LOAD_CLUSTER_CONFIGURATION_FROM_DIRECTORY = false;
public static final boolean DEFAULT_LOCK_MEMORY = false;
public static final boolean DEFAULT_REMOVE_UNRESPONSIVE_CLIENT = false;
public static final int DEFAULT_ACK_SEVERE_ALERT_THRESHOLD = 0;
public static final int DEFAULT_ACK_WAIT_THRESHOLD = 15;
public static final int DEFAULT_ASYNC_MAX_QUEUE_SIZE = 8;
public static final int DEFAULT_DISTRIBUTED_SYSTEM_ID = -1;
public static final int DEFAULT_SOCKET_BUFFER_SIZE = 32768;
public static final int DEFAULT_TCP_PORT = 0;
public static final int DEFAULT_TOMBSTONE_THRESHOLD = 100000;
public static final int DEFAULT_UDP_FRAGMENT_SIZE = 60000;
public static final int DEFAULT_UDP_RECEIVE_BUFFER_SIZE = 1048576;
public static final int DEFAULT_UDP_SEND_BUFFER_SIZE = 65535;
public static final long DEFAULT_ASYNC_DISTRIBUTION_TIMEOUT = 0L;
public static final long DEFAULT_ASYNC_QUEUE_TIMEOUT = 60000L;
public static final long DEFAULT_LOCATOR_WAIT_TIME = 0L;
public static final long DEFAULT_MAX_WAIT_TIME_RECONNECT = 60000L;
public static final long DEFAULT_MEMBER_TIMEOUT = 5000L;
public static final long DEFAULT_SOCKET_LEASE_TIME = 60000L;
public static final String DEFAULT_CONFLATE_EVENTS = "server";
public static final String DEFAULT_DEPLOY_WORKING_DIRECTORY = ".";
public static final String DEFAULT_MEMBERSHIP_PORT_RANGE = "1024-65535";
/**
* {@inheritDoc}
*/
@Override
protected Class getAnnotationType() {
return EnableGemFireProperties.class;
}
/**
* {@inheritDoc}
*/
@Override
protected Properties toGemFireProperties(Map<String, Object> annotationAttributes) {
PropertiesBuilder gemfireProperties = new PropertiesBuilder();
gemfireProperties.setPropertyIfNotDefault("ack-severe-alert-threshold",
annotationAttributes.get("ackSevereAlertThreshold"), DEFAULT_ACK_SEVERE_ALERT_THRESHOLD);
gemfireProperties.setPropertyIfNotDefault("ack-wait-threshold",
annotationAttributes.get("ackWaitThreshold"), DEFAULT_ACK_WAIT_THRESHOLD);
gemfireProperties.setPropertyIfNotDefault("async-distribution-timeout",
annotationAttributes.get("asyncDistributionTimeout"), DEFAULT_ASYNC_DISTRIBUTION_TIMEOUT);
gemfireProperties.setPropertyIfNotDefault("async-max-queue-size",
annotationAttributes.get("asyncMaxQueueSize"), DEFAULT_ASYNC_MAX_QUEUE_SIZE);
gemfireProperties.setPropertyIfNotDefault("async-queue-timeout",
annotationAttributes.get("asyncQueueTimeout"), DEFAULT_ASYNC_QUEUE_TIMEOUT);
gemfireProperties.setProperty("bind-address", annotationAttributes.get("bindAddress"));
gemfireProperties.setProperty("cache-xml-file", annotationAttributes.get("cacheXmlFile"));
gemfireProperties.setProperty("cluster-configuration-dir",
annotationAttributes.get("clusterConfigurationDirectory"));
gemfireProperties.setPropertyIfNotDefault("conflate-events",
annotationAttributes.get("conflateEvents"), DEFAULT_CONFLATE_EVENTS);
gemfireProperties.setPropertyIfNotDefault("conserve-sockets",
annotationAttributes.get("conserveSockets"), DEFAULT_CONSERVE_SOCKETS);
gemfireProperties.setPropertyIfNotDefault("delta-propagation",
annotationAttributes.get("deltaPropagation"), DEFAULT_DELTA_PROPAGATION);
gemfireProperties.setPropertyIfNotDefault("deploy-working-dir",
annotationAttributes.get("deployWorkingDirectory"), DEFAULT_DEPLOY_WORKING_DIRECTORY);
gemfireProperties.setPropertyIfNotDefault("disable-tcp",
annotationAttributes.get("disableTcp"), DEFAULT_DISABLE_TCP);
gemfireProperties.setPropertyIfNotDefault("distributed-system-id",
annotationAttributes.get("distributedSystemId"), DEFAULT_DISTRIBUTED_SYSTEM_ID);
gemfireProperties.setPropertyIfNotDefault("enable-network-partition-detection",
annotationAttributes.get("enableNetworkPartitionDetection"), DEFAULT_ENABLE_NETWORK_PARTITION_DETECTION);
gemfireProperties.setPropertyIfNotDefault("enforce-unique-host",
annotationAttributes.get("enforceUniqueHost"), DEFAULT_ENFORCE_UNIQUE_HOST);
gemfireProperties.setProperty("groups", (String[]) annotationAttributes.get("groups"));
gemfireProperties.setPropertyIfNotDefault("load-cluster-configuration-from-dir",
annotationAttributes.get("loadClusterConfigurationFromDirectory"),
DEFAULT_LOAD_CLUSTER_CONFIGURATION_FROM_DIRECTORY);
gemfireProperties.setPropertyIfNotDefault("locator-wait-time",
annotationAttributes.get("locatorWaitTimeout"), DEFAULT_LOCATOR_WAIT_TIME);
gemfireProperties.setPropertyIfNotDefault("lock-memory",
annotationAttributes.get("lockMemory"), DEFAULT_LOCK_MEMORY);
gemfireProperties.setPropertyIfNotDefault("max-wait-time-reconnect",
annotationAttributes.get("maxWaitTimeReconnect"), DEFAULT_MAX_WAIT_TIME_RECONNECT);
gemfireProperties.setPropertyIfNotDefault("member-timeout",
annotationAttributes.get("memberTimeout"), DEFAULT_MEMBER_TIMEOUT);
gemfireProperties.setPropertyIfNotDefault("membership-port-range",
annotationAttributes.get("membershipPortRange"), DEFAULT_MEMBERSHIP_PORT_RANGE);
gemfireProperties.setProperty("redundancy-zone", annotationAttributes.get("redundancyZone"));
gemfireProperties.setProperty("remote-locators", annotationAttributes.get("remoteLocators"));
gemfireProperties.setPropertyIfNotDefault("remove-unresponsive-client",
annotationAttributes.get("removeUnresponsiveClient"), DEFAULT_REMOVE_UNRESPONSIVE_CLIENT);
gemfireProperties.setPropertyIfNotDefault("socket-buffer-size",
annotationAttributes.get("socketBufferSize"), DEFAULT_SOCKET_BUFFER_SIZE);
gemfireProperties.setPropertyIfNotDefault("socket-lease-time",
annotationAttributes.get("socketLeaseTime"), DEFAULT_SOCKET_LEASE_TIME);
gemfireProperties.setPropertyIfNotDefault("tcp-port", annotationAttributes.get("tcpPort"), DEFAULT_TCP_PORT);
gemfireProperties.setPropertyIfNotDefault("tombstone-gc-threshold",
annotationAttributes.get("tombstoneGcThreshold"), DEFAULT_TOMBSTONE_THRESHOLD);
gemfireProperties.setPropertyIfNotDefault("udp-fragment-size",
annotationAttributes.get("udpFragmentSize"), DEFAULT_UDP_FRAGMENT_SIZE);
gemfireProperties.setPropertyIfNotDefault("udp-recv-buffer-size",
annotationAttributes.get("udpReceiveBufferSize"), DEFAULT_UDP_RECEIVE_BUFFER_SIZE);
gemfireProperties.setPropertyIfNotDefault("udp-send-buffer-size",
annotationAttributes.get("udpSendBufferSize"), DEFAULT_UDP_SEND_BUFFER_SIZE);
gemfireProperties.setProperty("user-command-packages", annotationAttributes.get("userCommandPackages"));
return gemfireProperties.build();
}
}