You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2016/02/12 03:39:39 UTC

[1/5] incubator-geode git commit: GEODE-913: refactor AbstractDistributionConfig

Repository: incubator-geode
Updated Branches:
  refs/heads/develop 3adb0b8e1 -> 700599052


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
index 190a137..fc2fca7 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
@@ -17,21 +17,6 @@
 
 package com.gemstone.gemfire.distributed.internal;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.InetAddress;
-import java.net.URL;
-import java.net.UnknownHostException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
 import com.gemstone.gemfire.GemFireConfigException;
 import com.gemstone.gemfire.GemFireIOException;
 import com.gemstone.gemfire.distributed.DistributedSystem;
@@ -41,6 +26,14 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.process.ProcessLauncherContext;
 import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.*;
+
 /**
  * Provides an implementation of <code>DistributionConfig</code> that
  * knows how to read the configuration file.
@@ -1544,8 +1537,7 @@ public class DistributionConfigImpl
   }
 
   public void setHttpServicePort(int value) {
-    minMaxCheck(HTTP_SERVICE_PORT_NAME, value, 0, 65535);
-    this.httpServicePort = value;
+    this.httpServicePort = (Integer)checkAttribute(HTTP_SERVICE_PORT_NAME, value);
   }
   
   public String getHttpServiceBindAddress() {
@@ -1553,8 +1545,7 @@ public class DistributionConfigImpl
   }
   
   public void setHttpServiceBindAddress(String value) {
-    checkHttpServiceBindAddress(value);
-    this.httpServiceBindAddress = value;
+    this.httpServiceBindAddress = (String)checkAttribute(HTTP_SERVICE_BIND_ADDRESS_NAME, value);
   }
   
   public boolean getStartDevRestApi(){
@@ -1566,8 +1557,7 @@ public class DistributionConfigImpl
   }
  
   public void setUserCommandPackages(String value) {
-    checkUserCommandPackages(value);
-    this.userCommandPackages = value;
+    this.userCommandPackages = (String)checkAttribute(USER_COMMAND_PACKAGES, value);
   }
 
   public boolean getDeltaPropagation() {
@@ -1575,44 +1565,35 @@ public class DistributionConfigImpl
   }
 
   public void setDeltaPropagation(boolean value) {
-    checkDeltaPropagationModifiable();
-    this.deltaPropagation = value;
+    this.deltaPropagation = (Boolean)checkAttribute(DELTA_PROPAGATION_PROP_NAME, value);
   }
 
   public void setName(String value) {
-    checkName(value);
     if (value == null) {
       value = DEFAULT_NAME;
     }
-    this.name = value;
+    this.name = (String)checkAttribute(NAME_NAME, value);
   }
   public void setTcpPort(int value) {
-    checkTcpPort(value);
-    this.tcpPort = value;
+    this.tcpPort = (Integer)checkAttribute(TCP_PORT_NAME, value);
   }
   public void setMcastPort(int value) {
-    checkMcastPort(value);
-    this.mcastPort = value;
+    this.mcastPort = (Integer)checkAttribute(MCAST_PORT_NAME, value);
   }
   public void setMcastTtl(int value) {
-    checkMcastTtl(value);
-    this.mcastTtl = value;
+    this.mcastTtl = (Integer)checkAttribute(MCAST_TTL_NAME, value);
   }
   public void setSocketLeaseTime(int value) {
-    checkSocketLeaseTime(value);
-    this.socketLeaseTime = value;
+    this.socketLeaseTime = (Integer)checkAttribute(SOCKET_LEASE_TIME_NAME, value);
   }
   public void setSocketBufferSize(int value) {
-    checkSocketBufferSize(value);
-    this.socketBufferSize = value;
+    this.socketBufferSize = (Integer)checkAttribute(SOCKET_BUFFER_SIZE_NAME, value);
   }
   public void setConserveSockets(boolean value) {
-    checkConserveSockets(value);
-    this.conserveSockets = value;
+    this.conserveSockets = (Boolean)checkAttribute(CONSERVE_SOCKETS_NAME, value);
   }
   public void setRoles(String value) {
-    checkRoles(value);
-    this.roles = value;
+    this.roles = (String)checkAttribute(ROLES_NAME, value);
   }
 
   public void setMaxWaitTimeForReconnect(int value){
@@ -1624,23 +1605,19 @@ public class DistributionConfigImpl
   }
 
   public void setMcastAddress(InetAddress value) {
-    checkMcastAddress(value);
-    this.mcastAddress = value;
+    this.mcastAddress = (InetAddress)checkAttribute(MCAST_ADDRESS_NAME, value);
   }
   public void setBindAddress(String value) {
-    checkBindAddress(value);
-    this.bindAddress = value;
+    this.bindAddress = (String)checkAttribute(BIND_ADDRESS_NAME, value);
   }
   public void setServerBindAddress(String value) {
-    checkServerBindAddress(value);
-    this.serverBindAddress = value;
+    this.serverBindAddress = (String)checkAttribute(SERVER_BIND_ADDRESS_NAME, value);
   }
   public void setLocators(String value) {
-    value = checkLocators(value);
     if (value == null) {
       value = DEFAULT_LOCATORS;
     }
-    this.locators = value;
+    this.locators = (String)checkAttribute(LOCATORS_NAME, value);
   }
   
   public void setLocatorWaitTime(int value) {
@@ -1652,16 +1629,13 @@ public class DistributionConfigImpl
   }
   
   public void setDeployWorkingDir(File value) {
-    checkDeployWorkingDir(value);
-    this.deployWorkingDir = value;
+    this.deployWorkingDir = (File)checkAttribute(DEPLOY_WORKING_DIR, value);
   }
   public void setLogFile(File value) {
-    checkLogFile(value);
-    this.logFile = value;
+    this.logFile = (File)checkAttribute(LOG_FILE_NAME, value);
   }
   public void setLogLevel(int value) {
-    checkLogLevel(value);
-    this.logLevel = value;
+    this.logLevel = (Integer)checkAttribute(LOG_LEVEL_NAME, value);
   }
   /**
    * the locator startup code must be able to modify the locator log file in order
@@ -1700,17 +1674,16 @@ public class DistributionConfigImpl
         }
       }
       else {
-        checkStartLocator(value);
+        value = (String)checkAttribute(START_LOCATOR_NAME, value);
       }
     }
     this.startLocator = value;
   }
   public void setStatisticSamplingEnabled(boolean value) {
-    checkStatisticSamplingEnabled(value);
-    this.statisticSamplingEnabled = value;
+    this.statisticSamplingEnabled = (Boolean)checkAttribute(STATISTIC_SAMPLING_ENABLED_NAME, value);
   }
   public void setStatisticSampleRate(int value) {
-    checkStatisticSampleRate(value);
+    value = (Integer)checkAttribute(STATISTIC_SAMPLE_RATE_NAME, value);
     if (value < DEFAULT_STATISTIC_SAMPLE_RATE) {
       // fix 48228
       InternalDistributedSystem ids = InternalDistributedSystem.getConnectedInstance();
@@ -1722,110 +1695,94 @@ public class DistributionConfigImpl
     this.statisticSampleRate = value;
   }
   public void setStatisticArchiveFile(File value) {
-    checkStatisticArchiveFile(value);
     if (value == null) {
       value = new File("");
     }
-    this.statisticArchiveFile = value;
+    this.statisticArchiveFile = (File)checkAttribute(STATISTIC_ARCHIVE_FILE_NAME, value);
   }
   public void setCacheXmlFile(File value) {
-    checkCacheXmlFile(value);
-    this.cacheXmlFile = value;
+    this.cacheXmlFile = (File)checkAttribute(CACHE_XML_FILE_NAME, value);
   }
   public void setAckWaitThreshold(int value) {
-    checkAckWaitThreshold(value);
-    this.ackWaitThreshold = value;
+    this.ackWaitThreshold = (Integer)checkAttribute(ACK_WAIT_THRESHOLD_NAME, value);
   }
 
   public void setAckSevereAlertThreshold(int value) {
-    checkAckSevereAlertThreshold(value);
-    this.ackForceDisconnectThreshold = value;
+    this.ackForceDisconnectThreshold = (Integer)checkAttribute(ACK_SEVERE_ALERT_THRESHOLD_NAME, value);
   }
 
   public int getArchiveDiskSpaceLimit() {
     return this.archiveDiskSpaceLimit;
   }
   public void setArchiveDiskSpaceLimit(int value) {
-    checkArchiveDiskSpaceLimit(value);
-    this.archiveDiskSpaceLimit = value;
+    this.archiveDiskSpaceLimit = (Integer)checkAttribute(ARCHIVE_DISK_SPACE_LIMIT_NAME, value);
   }
   public int getArchiveFileSizeLimit() {
     return this.archiveFileSizeLimit;
   }
   public void setArchiveFileSizeLimit(int value) {
-    checkArchiveFileSizeLimit(value);
-    this.archiveFileSizeLimit = value;
+    this.archiveFileSizeLimit = (Integer)checkAttribute(ARCHIVE_FILE_SIZE_LIMIT_NAME, value);
   }
   public int getLogDiskSpaceLimit() {
     return this.logDiskSpaceLimit;
   }
   public void setLogDiskSpaceLimit(int value) {
-    checkLogDiskSpaceLimit(value);
-    this.logDiskSpaceLimit = value;
+    this.logDiskSpaceLimit = (Integer)checkAttribute(LOG_DISK_SPACE_LIMIT_NAME, value);
   }
   public int getLogFileSizeLimit() {
     return this.logFileSizeLimit;
   }
   public void setLogFileSizeLimit(int value) {
-    checkLogFileSizeLimit(value);
-    this.logFileSizeLimit = value;
+    this.logFileSizeLimit = (Integer)checkAttribute(LOG_FILE_SIZE_LIMIT_NAME, value);
   }
   public void setSSLEnabled( boolean value ) {
-    checkSSLEnabled( value ? Boolean.TRUE : Boolean.FALSE );
-    this.sslEnabled = value;
+    this.sslEnabled = (Boolean)checkAttribute(SSL_ENABLED_NAME, value);
   }
   public void setSSLProtocols( String value ) {
-    checkSSLProtocols( value );
-    this.sslProtocols = value;
+    this.sslProtocols = (String)checkAttribute(SSL_PROTOCOLS_NAME, value);
   }
   public void setSSLCiphers( String value ) {
-    checkSSLCiphers( value );
-    this.sslCiphers = value;
+    this.sslCiphers = (String)checkAttribute(SSL_CIPHERS_NAME, value);
   }
   public void setSSLRequireAuthentication( boolean value ){
-    checkSSLRequireAuthentication( value ? Boolean.TRUE : Boolean.FALSE );
-    this.sslRequireAuthentication = value;
+    this.sslRequireAuthentication = (Boolean)checkAttribute(SSL_REQUIRE_AUTHENTICATION_NAME, value);
   }
 
   public void setClusterSSLEnabled( boolean value ) {
-    checkClusterSSLEnabled( value ? Boolean.TRUE : Boolean.FALSE );
-    this.clusterSSLEnabled = value;
+    this.clusterSSLEnabled = (Boolean)checkAttribute(CLUSTER_SSL_ENABLED_NAME, value);
   }
   public void setClusterSSLProtocols( String value ) {
-    checkClusterSSLProtocols( value );
-    this.clusterSSLProtocols = value;
+    this.clusterSSLProtocols = (String)checkAttribute(CLUSTER_SSL_PROTOCOLS_NAME, value);
   }
   public void setClusterSSLCiphers( String value ) {
-    checkClusterSSLCiphers( value );
-    this.clusterSSLCiphers = value;
+    this.clusterSSLCiphers = (String)checkAttribute(CLUSTER_SSL_CIPHERS_NAME, value);
   }
   public void setClusterSSLRequireAuthentication( boolean value ){
-    checkClusterSSLRequireAuthentication( value ? Boolean.TRUE : Boolean.FALSE );
-    this.clusterSSLRequireAuthentication = value;
+    this.clusterSSLRequireAuthentication = (Boolean)checkAttribute(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME, value);
   }
   
   public void setClusterSSLKeyStore( String value ) {
-    checkClusterSSLKeyStore( value );
+    value = (String)checkAttribute(CLUSTER_SSL_KEYSTORE_NAME, value);
    this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_NAME, value);
    this.clusterSSLKeyStore = value;
   }
   public void setClusterSSLKeyStoreType( String value ) {
-    checkClusterSSLKeyStoreType( value );
+    value =  (String)checkAttribute(CLUSTER_SSL_KEYSTORE_TYPE_NAME, value);
     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_TYPE_NAME, value);
     this.clusterSSLKeyStoreType = value;
   }
   public void setClusterSSLKeyStorePassword( String value ) {
-    checkClusterSSLKeyStorePassword( value );
+    value = (String)checkAttribute(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME, value);
     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_PASSWORD_NAME, value);
-    this.clusterSSLKeyStorePassword = value;
+    this.clusterSSLKeyStorePassword =value;
   }
   public void setClusterSSLTrustStore( String value ) {
-    checkClusterSSLTrustStore( value );
+    value = (String)checkAttribute(CLUSTER_SSL_TRUSTSTORE_NAME, value);
     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_NAME, value);
     this.clusterSSLTrustStore = value;
   }
   public void setClusterSSLTrustStorePassword( String value ) {
-    checkClusterSSLTrustStorePassword( value );
+    value = (String)checkAttribute(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME, value);
     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_PASSWORD_NAME, value);
     this.clusterSSLTrustStorePassword = value;
   }
@@ -1835,8 +1792,7 @@ public class DistributionConfigImpl
   }
 
   public void setMcastSendBufferSize(int value) {
-    checkMcastSendBufferSize(value);
-    mcastSendBufferSize = value;
+    mcastSendBufferSize = (Integer)checkAttribute(MCAST_SEND_BUFFER_SIZE_NAME, value);
   }
 
   public int getMcastRecvBufferSize() {
@@ -1844,20 +1800,16 @@ public class DistributionConfigImpl
   }
 
   public void setMcastRecvBufferSize(int value) {
-    checkMcastRecvBufferSize(value);
-    mcastRecvBufferSize = value;
+    mcastRecvBufferSize = (Integer)checkAttribute(MCAST_RECV_BUFFER_SIZE_NAME, value);
   }
   public void setAsyncDistributionTimeout(int value) {
-    checkAsyncDistributionTimeout(value);
-    this.asyncDistributionTimeout = value;
+    this.asyncDistributionTimeout = (Integer)checkAttribute(ASYNC_DISTRIBUTION_TIMEOUT_NAME, value);
   }
   public void setAsyncQueueTimeout(int value) {
-    checkAsyncQueueTimeout(value);
-    this.asyncQueueTimeout = value;
+    this.asyncQueueTimeout = (Integer)checkAttribute(ASYNC_QUEUE_TIMEOUT_NAME, value);
   }
   public void setAsyncMaxQueueSize(int value) {
-    checkAsyncMaxQueueSize(value);
-    this.asyncMaxQueueSize = value;
+    this.asyncMaxQueueSize = (Integer)checkAttribute(ASYNC_MAX_QUEUE_SIZE_NAME, value);
   }
 
   public FlowControlParams getMcastFlowControl() {
@@ -1865,8 +1817,7 @@ public class DistributionConfigImpl
   }
 
   public void setMcastFlowControl(FlowControlParams values) {
-    checkMcastFlowControl(values);
-    mcastFlowControl = values;
+    mcastFlowControl = (FlowControlParams)checkAttribute(MCAST_FLOW_CONTROL_NAME, values);
   }
 
   public int getUdpFragmentSize() {
@@ -1874,8 +1825,7 @@ public class DistributionConfigImpl
   }
 
   public void setUdpFragmentSize(int value) {
-    checkUdpFragmentSize(value);
-    udpFragmentSize = value;
+    udpFragmentSize = (Integer)checkAttribute(UDP_FRAGMENT_SIZE_NAME, value);
   }
 
   public int getUdpSendBufferSize() {
@@ -1883,8 +1833,7 @@ public class DistributionConfigImpl
   }
 
   public void setUdpSendBufferSize(int value) {
-    checkUdpSendBufferSize(value);
-    udpSendBufferSize = value;
+    udpSendBufferSize = (Integer)checkAttribute(UDP_SEND_BUFFER_SIZE_NAME, value);
   }
 
   public int getUdpRecvBufferSize() {
@@ -1892,8 +1841,7 @@ public class DistributionConfigImpl
   }
 
   public void setUdpRecvBufferSize(int value) {
-    checkUdpRecvBufferSize(value);
-    udpRecvBufferSize = value;
+    udpRecvBufferSize = (Integer)checkAttribute(UDP_RECV_BUFFER_SIZE_NAME, value);
   }
 
   public boolean getDisableTcp() {
@@ -1917,8 +1865,7 @@ public class DistributionConfigImpl
   }
 
   public void setMemberTimeout(int value) {
-    checkMemberTimeout(value);
-    memberTimeout = value;
+    memberTimeout = (Integer)checkAttribute(MEMBER_TIMEOUT_NAME, value);
   }
 
   /** @since 5.7 */
@@ -1928,8 +1875,7 @@ public class DistributionConfigImpl
 
   /** @since 5.7 */
   public void setClientConflation(String value) {
-    checkClientConflation(value);
-    this.clientConflation = value;
+    this.clientConflation = (String)checkAttribute(CLIENT_CONFLATION_PROP_NAME, value);
   }
 
   public String getDurableClientId() {
@@ -1937,8 +1883,7 @@ public class DistributionConfigImpl
   }
 
   public void setDurableClientId(String value) {
-    checkDurableClientId(value);
-    durableClientId = value;
+    durableClientId = (String)checkAttribute(DURABLE_CLIENT_ID_NAME, value);
   }
 
   public int getDurableClientTimeout() {
@@ -1946,8 +1891,7 @@ public class DistributionConfigImpl
   }
 
   public void setDurableClientTimeout(int value) {
-    checkDurableClientTimeout(value);
-    durableClientTimeout = value;
+    durableClientTimeout = (Integer)checkAttribute(DURABLE_CLIENT_TIMEOUT_NAME, value);
   }
 
   public String getSecurityClientAuthInit() {
@@ -1955,8 +1899,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityClientAuthInit(String value) {
-    checkSecurityClientAuthInit(value);
-    securityClientAuthInit = value;
+    securityClientAuthInit = (String)checkAttribute(SECURITY_CLIENT_AUTH_INIT_NAME, value);
   }
 
   public String getSecurityClientAuthenticator() {
@@ -1978,8 +1921,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityClientAuthenticator(String value) {
-    checkSecurityClientAuthenticator(value);
-    securityClientAuthenticator = value;
+    securityClientAuthenticator = (String)checkAttribute(SECURITY_CLIENT_AUTHENTICATOR_NAME, value);
   }
 
   public String getSecurityClientDHAlgo() {
@@ -1987,8 +1929,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityClientDHAlgo(String value) {
-    checkSecurityClientDHAlgo(value);
-    securityClientDHAlgo = value;
+    securityClientDHAlgo = (String)checkAttribute(SECURITY_CLIENT_DHALGO_NAME, value);
   }
 
   public String getSecurityPeerAuthInit() {
@@ -1996,8 +1937,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityPeerAuthInit(String value) {
-    checkSecurityPeerAuthInit(value);
-    securityPeerAuthInit = value;
+    securityPeerAuthInit = (String)checkAttribute(SECURITY_PEER_AUTH_INIT_NAME, value);
   }
 
   public String getSecurityPeerAuthenticator() {
@@ -2005,8 +1945,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityPeerAuthenticator(String value) {
-    checkSecurityPeerAuthenticator(value);
-    securityPeerAuthenticator = value;
+    securityPeerAuthenticator = (String)checkAttribute(SECURITY_PEER_AUTHENTICATOR_NAME, value);
   }
 
   public String getSecurityClientAccessor() {
@@ -2014,8 +1953,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityClientAccessor(String value) {
-    checkSecurityClientAccessor(value);
-    securityClientAccessor = value;
+    securityClientAccessor = (String)checkAttribute(SECURITY_CLIENT_ACCESSOR_NAME, value);
   }
 
   public String getSecurityClientAccessorPP() {
@@ -2023,8 +1961,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityClientAccessorPP(String value) {
-    checkSecurityClientAccessorPP(value);
-    securityClientAccessorPP = value;
+    securityClientAccessorPP = (String)checkAttribute(SECURITY_CLIENT_ACCESSOR_PP_NAME, value);
   }
 
   public int getSecurityLogLevel() {
@@ -2032,8 +1969,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityLogLevel(int value) {
-    checkSecurityLogLevel(value);
-    securityLogLevel = value;
+    securityLogLevel = (Integer)checkAttribute(SECURITY_LOG_LEVEL_NAME, value);
   }
 
   public File getSecurityLogFile() {
@@ -2041,8 +1977,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityLogFile(File value) {
-    checkSecurityLogFile(value);
-    securityLogFile = value;
+    securityLogFile = (File)checkAttribute(SECURITY_LOG_FILE_NAME, value);
   }
 
   public int getSecurityPeerMembershipTimeout() {
@@ -2050,8 +1985,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurityPeerMembershipTimeout(int value) {
-    checkSecurityPeerMembershipTimeout(value);
-    securityPeerMembershipTimeout = value;
+    securityPeerMembershipTimeout = (Integer)checkAttribute(SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME, value);
   }
 
   public Properties getSecurityProps() {
@@ -2065,7 +1999,7 @@ public class DistributionConfigImpl
   }
 
   public void setSecurity(String attName, String attValue) {
-    checkSecurity(attName, attValue);
+    checkAttribute(attName, attValue);
     security.setProperty(attName, attValue);
   }
 
@@ -2082,8 +2016,7 @@ public class DistributionConfigImpl
   }
 
   public void setDistributedSystemId(int distributedSystemId) {
-    checkDistributedSystemId(distributedSystemId);
-    this.distributedSystemId = distributedSystemId;
+    this.distributedSystemId = (Integer)checkAttribute(DISTRIBUTED_SYSTEM_ID_NAME, distributedSystemId);
     
   }
 
@@ -2097,19 +2030,17 @@ public class DistributionConfigImpl
   }
 
   public void setEnforceUniqueHost(boolean enforceUniqueHost) {
-    checkEnforceUniqueHostModifiable();
-    this.enforceUniqueHost = enforceUniqueHost;
+    this.enforceUniqueHost = (Boolean)checkAttribute(ENFORCE_UNIQUE_HOST_NAME, enforceUniqueHost);
     
   }
 
   public void setRedundancyZone(String redundancyZone) {
-    checkRedundancyZoneModifiable();
-    this.redundancyZone = redundancyZone;
+    this.redundancyZone = (String)checkAttribute(REDUNDANCY_ZONE_NAME, redundancyZone);
     
   }
 
   public void setSSLProperty(String attName, String attValue) {
-    checkSSLPropertyModifiable();
+    checkAttribute(attName, attValue);
     if (attName.startsWith(SYS_PROP_NAME)) {
       attName = attName.substring(SYS_PROP_NAME.length());
     }
@@ -2150,11 +2081,10 @@ public class DistributionConfigImpl
     return this.groups;
   }
   public void setGroups(String value) {
-    checkGroups(value);
     if (value == null) {
       value = DEFAULT_GROUPS;
     }
-    this.groups = value;
+    this.groups = (String)checkAttribute(GROUPS_NAME, value);
   }
 
   @Override
@@ -2182,10 +2112,6 @@ public class DistributionConfigImpl
     this.jmxManagerSSL= value;
   }
   @Override
-  public boolean isJmxManagerSSLModifiable() {
-    return false;
-  }
-  @Override
   public boolean getJmxManagerSSLEnabled() {
     return this.jmxManagerSSLEnabled;
   }
@@ -2219,29 +2145,29 @@ public class DistributionConfigImpl
   }
   
   public void setJmxManagerSSLKeyStore( String value ) {
-    checkJmxManagerSSLKeyStore( value );
+    value = (String)checkAttribute(JMX_MANAGER_SSL_KEYSTORE_NAME, value);
    this.getJmxSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_NAME, value);
    this.jmxManagerSSLKeyStore = value;
   }
   public void setJmxManagerSSLKeyStoreType( String value ) {
-    checkJmxManagerSSLKeyStoreType( value );
+    value =(String)checkAttribute(JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME, value);
     this.getJmxSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_TYPE_NAME, value);
     this.jmxManagerSSLKeyStoreType = value;
   }
   public void setJmxManagerSSLKeyStorePassword( String value ) {
-    checkJmxManagerSSLKeyStorePassword( value );
+    value = (String)checkAttribute(JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME, value);
     this.getJmxSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_PASSWORD_NAME, value);
     this.jmxManagerSSLKeyStorePassword = value;
   }
   public void setJmxManagerSSLTrustStore( String value ) {
-    checkJmxManagerSSLTrustStore( value );
+    value = (String)checkAttribute(JMX_MANAGER_SSL_TRUSTSTORE_NAME, value);
     this.getJmxSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_NAME, value);
     this.jmxManagerSSLTrustStore = value;
   }
   public void setJmxManagerSSLTrustStorePassword( String value ) {
-    checkJmxManagerSSLTrustStorePassword( value );
+    value = (String)checkAttribute(JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME, value);
     this.getJmxSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_PASSWORD_NAME, value);
-    this.jmxManagerSSLTrustStorePassword = value;
+    this.jmxManagerSSLTrustStorePassword =value;
   }
 
   public String getJmxManagerSSLKeyStore( ){
@@ -2269,8 +2195,7 @@ public class DistributionConfigImpl
   }
   @Override
   public void setJmxManagerPort(int value) {
-    checkJmxManagerPort(value);
-    this.jmxManagerPort = value;
+    this.jmxManagerPort = (Integer)checkAttribute(JMX_MANAGER_PORT_NAME, value);
   }
   @Override
   public String getJmxManagerBindAddress() {
@@ -2281,8 +2206,7 @@ public class DistributionConfigImpl
     if (value == null) {
       value = "";
     }
-    checkJmxManagerBindAddress(value);
-    this.jmxManagerBindAddress = value;
+    this.jmxManagerBindAddress = (String)checkAttribute(JMX_MANAGER_BIND_ADDRESS_NAME, value);
   }
   @Override
   public String getJmxManagerHostnameForClients() {
@@ -2293,8 +2217,7 @@ public class DistributionConfigImpl
     if (value == null) {
       value = "";
     }
-    checkJmxManagerHostnameForClients(value);
-    this.jmxManagerHostnameForClients = value;
+    this.jmxManagerHostnameForClients = (String)checkAttribute(JMX_MANAGER_HOSTNAME_FOR_CLIENTS_NAME, value);
   }
   @Override
   public String getJmxManagerPasswordFile() {
@@ -2305,8 +2228,7 @@ public class DistributionConfigImpl
     if (value == null) {
       value = "";
     }
-    checkJmxManagerPasswordFile(value);
-    this.jmxManagerPasswordFile = value;
+    this.jmxManagerPasswordFile = (String)checkAttribute(JMX_MANAGER_PASSWORD_FILE_NAME, value);
   }
   @Override
   public String getJmxManagerAccessFile() {
@@ -2317,8 +2239,7 @@ public class DistributionConfigImpl
     if (value == null) {
       value = "";
     }
-    checkJmxManagerAccessFile(value);
-    this.jmxManagerAccessFile = value;
+    this.jmxManagerAccessFile = (String)checkAttribute(JMX_MANAGER_ACCESS_FILE_NAME, value);
   }
   
   @Override
@@ -2338,8 +2259,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setJmxManagerUpdateRate(int value) {
-    checkJmxManagerUpdateRate(value);
-    this.jmxManagerUpdateRate = value;
+    this.jmxManagerUpdateRate = (Integer)checkAttribute(JMX_MANAGER_UPDATE_RATE_NAME, value);
   }
 
   @Override
@@ -3177,15 +3097,14 @@ public class DistributionConfigImpl
    * @see com.gemstone.gemfire.distributed.internal.DistributionConfig#setMembershipPortRange(int[])
    */
   public void setMembershipPortRange(int[] range) {
-    checkMembershipPortRange(range);
-    membershipPortRange = range;
+    membershipPortRange = (int[])checkAttribute(MEMBERSHIP_PORT_RANGE_NAME, range);
   }
   
   /**
    * Set the host-port information of remote site locator 
    */
   public void setRemoteLocators(String value) {
-    this.remoteLocators = checkRemoteLocators(value);
+    this.remoteLocators = (String)checkAttribute(REMOTE_LOCATORS_NAME, value);
   }
 
   /**
@@ -3206,8 +3125,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setMemcachedPort(int value) {
-    checkMemcachedPort(value);
-    this.memcachedPort = value;
+    this.memcachedPort = (Integer)checkAttribute(MEMCACHED_PORT_NAME, value);
   }
 
   @Override
@@ -3217,8 +3135,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setMemcachedProtocol(String protocol) {
-    checkMemcachedProtocol(protocol);
-    this.memcachedProtocol = protocol;
+    this.memcachedProtocol = (String)checkAttribute(MEMCACHED_PROTOCOL_NAME, protocol);
   }
   
   @Override
@@ -3228,8 +3145,7 @@ public class DistributionConfigImpl
   
   @Override
   public void setRedisPort(int value) {
-    checkRedisPort(value);
-    this.redisPort = value;
+    this.redisPort = (Integer)checkAttribute(REDIS_PORT_NAME, value);
   }
 
   @Override
@@ -3239,8 +3155,7 @@ public class DistributionConfigImpl
   
   @Override
   public void setRedisBindAddress(String bindAddress) {
-    checkRedisBindAddress(bindAddress);
-    this.redisBindAddress = bindAddress;
+    this.redisBindAddress = (String)checkAttribute(REDIS_BIND_ADDRESS_NAME, bindAddress);
   }
   
   @Override
@@ -3260,12 +3175,7 @@ public class DistributionConfigImpl
   
   @Override 
   public void setOffHeapMemorySize(String value) {
-    checkOffHeapMemorySize(value);
-    this.offHeapMemorySize = value;
-  }
-  
-  protected void checkOffHeapMemorySize(String value) {
-    super.checkOffHeapMemorySize(value);
+    this.offHeapMemorySize = (String)checkAttribute(OFF_HEAP_MEMORY_SIZE_NAME, value);
   }
 
   @Override
@@ -3275,14 +3185,12 @@ public class DistributionConfigImpl
 
   @Override
   public void setMemcachedBindAddress(String bindAddress) {
-    checkMemcachedBindAddress(bindAddress);
-    this.memcachedBindAddress = bindAddress;
+    this.memcachedBindAddress = (String)checkAttribute(MEMCACHED_BIND_ADDRESS_NAME, bindAddress);
   }
 
   @Override
   public void setEnableClusterConfiguration(boolean value) {
-    checkEnableSharedConfiguration();
-    this.enableSharedConfiguration = value;
+    this.enableSharedConfiguration = (Boolean)checkAttribute(ENABLE_CLUSTER_CONFIGURATION_NAME, value);
   }
 
   @Override
@@ -3293,8 +3201,7 @@ public class DistributionConfigImpl
   
   @Override
   public void setUseSharedConfiguration(boolean newValue) {
-    checkUseSharedConfiguration();
-    this.useSharedConfiguration = newValue;
+    this.useSharedConfiguration = (Boolean)checkAttribute(USE_CLUSTER_CONFIGURATION_NAME, newValue);
   }
   
   @Override
@@ -3303,8 +3210,7 @@ public class DistributionConfigImpl
   }
   @Override
   public void setLoadClusterConfigFromDir(boolean newValue) {
-    checkLoadSharedConfigFromDir();
-    this.loadSharedConfigurationFromDir = newValue;
+    this.loadSharedConfigurationFromDir = (Boolean)checkAttribute(LOAD_CLUSTER_CONFIG_FROM_DIR_NAME, newValue);
   }
   
   @Override
@@ -3314,8 +3220,7 @@ public class DistributionConfigImpl
   
   @Override
   public void setClusterConfigDir(String clusterConfigDir) {
-    checkClusterConfigDir();
-    this.clusterConfigDir = clusterConfigDir;
+    this.clusterConfigDir = (String)checkAttribute(CLUSTER_CONFIGURATION_DIR, clusterConfigDir);
   }  
   
   @Override
@@ -3329,8 +3234,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setServerSSLEnabled(boolean value) {
-    checkServerSSLEnabled();
-    this.serverSSLEnabled = value;
+    this.serverSSLEnabled = (Boolean)checkAttribute(SERVER_SSL_ENABLED_NAME, value);
     
   }
 
@@ -3341,8 +3245,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setServerSSLRequireAuthentication(boolean value) {
-    checkServerSSLRequireAuthentication();
-    this.serverSslRequireAuthentication = value;
+    this.serverSslRequireAuthentication = (Boolean)checkAttribute(SERVER_SSL_REQUIRE_AUTHENTICATION_NAME, value);
   }
 
   @Override
@@ -3352,8 +3255,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setServerSSLProtocols(String protocols) {
-    checkServerSSLProtocols();
-    this.serverSslProtocols = protocols;    
+    this.serverSslProtocols = (String)checkAttribute(SERVER_SSL_PROTOCOLS_NAME, protocols);
   }
 
   @Override
@@ -3363,32 +3265,31 @@ public class DistributionConfigImpl
 
   @Override
   public void setServerSSLCiphers(String ciphers) {
-   checkServerSSLCiphers();
-    this.serverSslCiphers = ciphers;
+    this.serverSslCiphers = (String)checkAttribute(SERVER_SSL_CIPHERS_NAME, ciphers);
   }
 
   public void setServerSSLKeyStore( String value ) {
-    checkServerSSLKeyStore( value );
+    value = (String)checkAttribute(SERVER_SSL_KEYSTORE_NAME, value);
    this.getServerSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_NAME, value);
    this.serverSSLKeyStore = value;
   }
   public void setServerSSLKeyStoreType( String value ) {
-    checkServerSSLKeyStoreType( value );
+    value = (String)checkAttribute(SERVER_SSL_KEYSTORE_TYPE_NAME, value);
     this.getServerSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_TYPE_NAME, value);
     this.serverSSLKeyStoreType = value;
   }
   public void setServerSSLKeyStorePassword( String value ) {
-    checkServerSSLKeyStorePassword( value );
+    value = (String) checkAttribute(SERVER_SSL_KEYSTORE_PASSWORD_NAME,  value );
     this.getServerSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_PASSWORD_NAME, value);
     this.serverSSLKeyStorePassword = value;
   }
   public void setServerSSLTrustStore( String value ) {
-    checkServerSSLTrustStore( value );
+    value = (String)checkAttribute(SERVER_SSL_TRUSTSTORE_NAME, value);
     this.getServerSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_NAME, value);
     this.serverSSLTrustStore = value;
   }
   public void setServerSSLTrustStorePassword( String value ) {
-    checkServerSSLTrustStorePassword( value );
+    value = (String)checkAttribute(SERVER_SSL_TRUSTSTORE_PASSWORD_NAME, value);
     this.getServerSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_PASSWORD_NAME, value);
     this.serverSSLTrustStorePassword = value;
   }
@@ -3424,8 +3325,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setGatewaySSLEnabled(boolean value) {
-    checkServerSSLEnabled();
-    this.gatewaySSLEnabled = value;
+    this.gatewaySSLEnabled = (Boolean)checkAttribute(SERVER_SSL_ENABLED_NAME, value);
     
   }
 
@@ -3436,8 +3336,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setGatewaySSLRequireAuthentication(boolean value) {
-    checkGatewaySSLRequireAuthentication();
-    this.gatewaySslRequireAuthentication = value;
+    this.gatewaySslRequireAuthentication = (Boolean)checkAttribute(GATEWAY_SSL_REQUIRE_AUTHENTICATION_NAME, value);
   }
 
   @Override
@@ -3447,8 +3346,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setGatewaySSLProtocols(String protocols) {
-    checkServerSSLProtocols();
-    this.gatewaySslProtocols = protocols;    
+    this.gatewaySslProtocols = (String)checkAttribute(SERVER_SSL_PROTOCOLS_NAME, protocols);
   }
 
   @Override
@@ -3458,32 +3356,31 @@ public class DistributionConfigImpl
 
   @Override
   public void setGatewaySSLCiphers(String ciphers) {
-   checkGatewaySSLCiphers();
-    this.gatewaySslCiphers = ciphers;
+    this.gatewaySslCiphers = (String)checkAttribute(GATEWAY_SSL_CIPHERS_NAME, ciphers);
   }
 
   public void setGatewaySSLKeyStore( String value ) {
-    checkGatewaySSLKeyStore( value );
+    checkAttribute(GATEWAY_SSL_KEYSTORE_NAME, value);
    this.getGatewaySSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_NAME, value);
    this.gatewaySSLKeyStore = value;
   }
   public void setGatewaySSLKeyStoreType( String value ) {
-    checkGatewaySSLKeyStoreType( value );
+    checkAttribute(GATEWAY_SSL_KEYSTORE_TYPE_NAME, value);
     this.getGatewaySSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_TYPE_NAME, value);
     this.gatewaySSLKeyStoreType = value;
   }
   public void setGatewaySSLKeyStorePassword( String value ) {
-    checkGatewaySSLKeyStorePassword( value );
+    checkAttribute(GATEWAY_SSL_KEYSTORE_PASSWORD_NAME, value);
     this.getGatewaySSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_PASSWORD_NAME, value);
     this.gatewaySSLKeyStorePassword = value;
   }
   public void setGatewaySSLTrustStore( String value ) {
-    checkGatewaySSLTrustStore( value );
+    checkAttribute(GATEWAY_SSL_TRUSTSTORE_NAME, value);
     this.getGatewaySSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_NAME, value);
     this.gatewaySSLTrustStore = value;
   }
   public void setGatewaySSLTrustStorePassword( String value ) {
-    checkGatewaySSLTrustStorePassword( value );
+    checkAttribute(GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME, value);
     this.getGatewaySSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_PASSWORD_NAME, value);
     this.gatewaySSLTrustStorePassword = value;
   }
@@ -3560,7 +3457,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setHttpServiceSSLKeyStore(String httpServiceSSLKeyStore) {
-    checkHttpServiceSSLKeyStore(httpServiceSSLKeyStore);
+    checkAttribute(HTTP_SERVICE_SSL_KEYSTORE_NAME, httpServiceSSLKeyStore);
     this.getHttpServiceSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_NAME, httpServiceSSLKeyStore);
     this.httpServiceSSLKeyStore = httpServiceSSLKeyStore;
   }
@@ -3572,7 +3469,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setHttpServiceSSLKeyStoreType(String httpServiceSSLKeyStoreType) {
-    checkHttpServiceSSLKeyStoreType(httpServiceSSLKeyStoreType);
+    checkAttribute(HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME, httpServiceSSLKeyStoreType);
     this.getHttpServiceSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_TYPE_NAME, httpServiceSSLKeyStoreType);
     this.httpServiceSSLKeyStoreType = httpServiceSSLKeyStoreType;
   }
@@ -3584,7 +3481,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setHttpServiceSSLKeyStorePassword(String httpServiceSSLKeyStorePassword) {
-    checkHttpServiceSSLKeyStorePassword(httpServiceSSLKeyStorePassword);
+    checkAttribute(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME, httpServiceSSLKeyStorePassword);
     this.getHttpServiceSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_PASSWORD_NAME,
         httpServiceSSLKeyStorePassword);
     this.httpServiceSSLKeyStorePassword = httpServiceSSLKeyStorePassword;
@@ -3597,7 +3494,7 @@ public class DistributionConfigImpl
 
   @Override
   public void setHttpServiceSSLTrustStore(String httpServiceSSLTrustStore) {
-    checkHttpServiceSSLTrustStore(httpServiceSSLTrustStore);
+    checkAttribute(HTTP_SERVICE_SSL_TRUSTSTORE_NAME, httpServiceSSLTrustStore);
     this.getHttpServiceSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_NAME, httpServiceSSLTrustStore);
     this.httpServiceSSLTrustStore = httpServiceSSLTrustStore;
   }
@@ -3609,7 +3506,7 @@ public class DistributionConfigImpl
   
   @Override
   public void setHttpServiceSSLTrustStorePassword(String httpServiceSSLTrustStorePassword) {
-    checkHttpServiceSSLTrustStorePassword(httpServiceSSLTrustStorePassword);
+    checkAttribute(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME, httpServiceSSLTrustStorePassword);
     this.getHttpServiceSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_PASSWORD_NAME,
         httpServiceSSLTrustStorePassword);
     this.httpServiceSSLTrustStorePassword = httpServiceSSLTrustStorePassword;
@@ -3631,4 +3528,6 @@ public class DistributionConfigImpl
     this.distributedTransactions = value;
   }
 
+
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java
index 299744a..f2e3a62 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java
@@ -17,12 +17,14 @@
    
 package com.gemstone.gemfire.distributed.internal;
 
-import java.io.File;
-
 import com.gemstone.gemfire.GemFireIOException;
 import com.gemstone.gemfire.internal.ConfigSource;
 import com.gemstone.gemfire.internal.logging.log4j.LogWriterAppenders;
 
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * Provides an implementation of <code>DistributionConfig</code> that
  * is used at runtime by a {@link InternalDistributedSystem}. It allows
@@ -56,33 +58,23 @@ public final class RuntimeDistributionConfigImpl
   }
 
   ////////////////////  Configuration Methods  ////////////////////
-
   @Override
   public void setLogLevel(int value) {
-    checkLogLevel(value);
-    this.logLevel = value;
+    this.logLevel = (Integer)checkAttribute(LOG_LEVEL_NAME, value);
     getAttSourceMap().put(LOG_LEVEL_NAME, ConfigSource.runtime());
     this.ds.getInternalLogWriter().setLogWriterLevel(value);
     LogWriterAppenders.configChanged(LogWriterAppenders.Identifier.MAIN);
   }
-  @Override
-  public boolean isLogLevelModifiable() {
-    return true;
-  }
   
   @Override
   public void setStatisticSamplingEnabled(boolean value) {
-    checkStatisticSamplingEnabled(value);
-    this.statisticSamplingEnabled = value;
+    this.statisticSamplingEnabled = (Boolean)checkAttribute(STATISTIC_SAMPLING_ENABLED_NAME, value);
     getAttSourceMap().put(STATISTIC_SAMPLING_ENABLED_NAME, ConfigSource.runtime());
   }
-  @Override
-  public boolean isStatisticSamplingEnabledModifiable() {
-    return true;
-  }
+
   @Override
   public void setStatisticSampleRate(int value) {
-    checkStatisticSampleRate(value);
+    value = (Integer)checkAttribute(STATISTIC_SAMPLE_RATE_NAME, value);
     if (value < DEFAULT_STATISTIC_SAMPLE_RATE) {
       // fix 48228
       this.ds.getLogWriter().info("Setting statistic-sample-rate to " + DEFAULT_STATISTIC_SAMPLE_RATE + " instead of the requested " + value + " because VSD does not work with sub-second sampling.");
@@ -90,13 +82,10 @@ public final class RuntimeDistributionConfigImpl
     }
     this.statisticSampleRate = value;
   }
-  @Override
-  public boolean isStatisticSampleRateModifiable() {
-    return true;
-  }
+
   @Override
   public void setStatisticArchiveFile(File value) {
-    checkStatisticArchiveFile(value);
+    value = (File)checkAttribute(STATISTIC_ARCHIVE_FILE_NAME, value);
     if (value == null) {
       value = new File("");
     }
@@ -108,55 +97,42 @@ public final class RuntimeDistributionConfigImpl
     this.statisticArchiveFile = value;
     getAttSourceMap().put(STATISTIC_ARCHIVE_FILE_NAME, ConfigSource.runtime());
   }
-  @Override
-  public boolean isStatisticArchiveFileModifiable() {
-    return true;
-  }
+
 
   @Override
   public void setArchiveDiskSpaceLimit(int value) {
-    checkArchiveDiskSpaceLimit(value);
-    this.archiveDiskSpaceLimit = value;
+    this.archiveDiskSpaceLimit = (Integer)checkAttribute(ARCHIVE_DISK_SPACE_LIMIT_NAME, value);
     getAttSourceMap().put(ARCHIVE_DISK_SPACE_LIMIT_NAME, ConfigSource.runtime());
   }
-  @Override
-  public boolean isArchiveDiskSpaceLimitModifiable() {
-    return true;
-  }
+
   @Override
   public void setArchiveFileSizeLimit(int value) {
-    checkArchiveFileSizeLimit(value);
-    this.archiveFileSizeLimit = value;
+    this.archiveFileSizeLimit = (Integer)checkAttribute(ARCHIVE_FILE_SIZE_LIMIT_NAME, value);
     getAttSourceMap().put(ARCHIVE_FILE_SIZE_LIMIT_NAME, ConfigSource.runtime());
   }
-  @Override
-  public boolean isArchiveFileSizeLimitModifiable() {
-    return true;
-  }
+
   @Override
   public void setLogDiskSpaceLimit(int value) {
-    checkLogDiskSpaceLimit(value);
-    this.logDiskSpaceLimit = value;
+    this.logDiskSpaceLimit = (Integer)checkAttribute(LOG_DISK_SPACE_LIMIT_NAME, value);
     getAttSourceMap().put(LOG_DISK_SPACE_LIMIT_NAME, ConfigSource.runtime());
     LogWriterAppenders.configChanged(LogWriterAppenders.Identifier.MAIN);
   }
-  @Override
-  public boolean isLogDiskSpaceLimitModifiable() {
-    return true;
-  }
+
   @Override
   public void setLogFileSizeLimit(int value) {
-    checkLogFileSizeLimit(value);
-    this.logFileSizeLimit = value;
+    this.logFileSizeLimit = (Integer)checkAttribute(LOG_FILE_SIZE_LIMIT_NAME, value);
     getAttSourceMap().put(this.LOG_FILE_SIZE_LIMIT_NAME, ConfigSource.runtime());
     LogWriterAppenders.configChanged(LogWriterAppenders.Identifier.MAIN);
   }
-  @Override
-  public boolean isLogFileSizeLimitModifiable() {
-    return true;
-  }
 
   public DistributionConfig takeSnapshot() {
     return new DistributionConfigSnapshot(this);
   }
+
+  public List<String> getModifiableAttributes(){
+    String[] modifiables = {HTTP_SERVICE_PORT_NAME,JMX_MANAGER_HTTP_PORT_NAME, ARCHIVE_DISK_SPACE_LIMIT_NAME,
+            ARCHIVE_FILE_SIZE_LIMIT_NAME, LOG_DISK_SPACE_LIMIT_NAME, LOG_FILE_SIZE_LIMIT_NAME,
+            LOG_LEVEL_NAME, STATISTIC_ARCHIVE_FILE_NAME, STATISTIC_SAMPLE_RATE_NAME, STATISTIC_SAMPLING_ENABLED_NAME};
+    return Arrays.asList(modifiables);
+  };
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
index ddf2970..ee4aceb 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
@@ -17,31 +17,18 @@
 
 package com.gemstone.gemfire.internal;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Array;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeSet;
-
 import com.gemstone.gemfire.InternalGemFireException;
 import com.gemstone.gemfire.UnmodifiableException;
-import com.gemstone.gemfire.distributed.internal.AbstractDistributionConfig;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.distributed.internal.FlowControlParams;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 
+import java.io.*;
+import java.lang.reflect.Array;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.*;
+
 /**
  * Provides an implementation of the {@link Config} interface
  * that implements functionality that all {@link Config} implementations
@@ -71,16 +58,6 @@ public abstract class AbstractConfig implements Config {
   protected boolean _modifiableDefault() {
     return false;
   }
-
-  /**
-   * Checks to see if the named attribute can be modified.
-   * @throws UnmodifiableException if it is unmodifiable.
-   */
-  protected void _checkIfModifiable(String attName) {
-    if (!isAttributeModifiable(attName)) {
-      throw new UnmodifiableException(_getUnmodifiableMsg(attName));
-    }
-  }
   
   /**
    * Use {@link #toLoggerString()} instead. If you need to override this in a 
@@ -117,7 +94,6 @@ public abstract class AbstractConfig implements Config {
   public Map<String, String> getConfigPropsFromSource(ConfigSource source) {
     Map<String, String> configProps = new HashMap<String, String>();
     String[] validAttributeNames = getAttributeNames();
-    boolean sourceFound = false;
     Map<String, ConfigSource> sm = getAttSourceMap();
     
     for (int i=0; i < validAttributeNames.length; i++) {
@@ -128,14 +104,6 @@ public abstract class AbstractConfig implements Config {
         }
       } else if (!source.equals(sm.get(attName))) {
         continue;
-      } 
-      if (!sourceFound) {
-        sourceFound = true;
-        if (source == null) {
-          //configProps.put(sourceHeader, "### GemFire Properties using default values ###");
-        } else {
-          //configProps.put(sourceHeader, "### GemFire Properties defined with " + source.getDescription() + " ###");
-        }
       }
       configProps.put(attName, this.getAttribute(attName));
     }
@@ -328,12 +296,18 @@ public abstract class AbstractConfig implements Config {
     Object result = getAttributeObject(attName);
     if (result instanceof String) {
       return (String)result;
-    } if (attName.equalsIgnoreCase(DistributionConfig.MEMBERSHIP_PORT_RANGE_NAME)) {
+    }
+
+    if (attName.equalsIgnoreCase(DistributionConfig.MEMBERSHIP_PORT_RANGE_NAME)) {
       int[] value = (int[])result;
       return ""+value[0]+"-"+value[1];
-    } else if (result.getClass().isArray()) {
+    }
+
+    if (result.getClass().isArray()) {
       return SystemAdmin.join((Object[])result);
-    } else if (result instanceof InetAddress) {
+    }
+
+    if (result instanceof InetAddress) {
       InetAddress addr = (InetAddress)result;
       String addrName = null;
       if (addr.isMulticastAddress() || !SocketCreator.resolve_dns) {
@@ -342,9 +316,9 @@ public abstract class AbstractConfig implements Config {
         addrName = SocketCreator.getHostName(addr);
       }
       return addrName;
-    } else {
-      return result.toString();
     }
+
+    return result.toString();
   }
 
   public ConfigSource getAttributeSource(String attName) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java
index 08f51e4..6991b3b 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java
@@ -29,10 +29,31 @@ public class ConfigSource implements Serializable {
   public enum Type {API, SYSTEM_PROPERTY, FILE, SECURE_FILE, XML, RUNTIME, LAUNCHER};
   private final Type type;
   private final String description;
-  
-  private ConfigSource(Type t, String d) {
+
+  private ConfigSource(Type t) {
     this.type = t;
-    this.description = d;
+    switch (t) {
+      case API: this.description = "api"; break;
+      case SYSTEM_PROPERTY: this.description = "system property"; break;
+      case FILE: this.description = "file"; break;
+      case SECURE_FILE: this.description = "secure file"; break;
+      case XML: this.description = "cache.xml"; break;
+      case RUNTIME: this.description = "runtime modification"; break;
+      case LAUNCHER: this.description = "launcher"; break;
+      default:
+        this.description = "";
+    }
+  }
+
+  private ConfigSource(String fileName, boolean secure) {
+    if(secure) {
+      this.type = Type.SECURE_FILE;
+      this.description = (fileName==null)?"secure file":fileName;
+    }
+    else {
+      this.type = Type.FILE;
+      this.description = (fileName==null)?"file":fileName;
+    }
   }
   /**
    * @return returns the type of this source
@@ -41,32 +62,20 @@ public class ConfigSource implements Serializable {
     return this.type;
   }
   public String getDescription() {
-    String result = this.description;
-    if (result == null) {
-      switch (getType()) {
-      case API: result = "api"; break;
-      case SYSTEM_PROPERTY: result = "system property"; break;
-      case FILE: result = "file"; break;
-      case SECURE_FILE: result = "secure file"; break;
-      case XML: result = "cache.xml"; break;
-      case RUNTIME: result = "runtime modification"; break;
-      case LAUNCHER: result = "launcher"; break;
-      }
-    }
-    return result;
+    return this.description;
   }
 
-  private static final ConfigSource API_SINGLETON = new ConfigSource(Type.API, null);
-  private static final ConfigSource SYSPROP_SINGLETON = new ConfigSource(Type.SYSTEM_PROPERTY, null);
-  private static final ConfigSource XML_SINGLETON = new ConfigSource(Type.XML, null);
-  private static final ConfigSource RUNTIME_SINGLETON = new ConfigSource(Type.RUNTIME, null);
-  private static final ConfigSource LAUNCHER_SINGLETON = new ConfigSource(Type.LAUNCHER, null);
+  private static final ConfigSource API_SINGLETON = new ConfigSource(Type.API);
+  private static final ConfigSource SYSPROP_SINGLETON = new ConfigSource(Type.SYSTEM_PROPERTY);
+  private static final ConfigSource XML_SINGLETON = new ConfigSource(Type.XML);
+  private static final ConfigSource RUNTIME_SINGLETON = new ConfigSource(Type.RUNTIME);
+  private static final ConfigSource LAUNCHER_SINGLETON = new ConfigSource(Type.LAUNCHER);
   
   public static ConfigSource api() {return API_SINGLETON;}
   public static ConfigSource sysprop() {return SYSPROP_SINGLETON;}
   public static ConfigSource xml() {return XML_SINGLETON;}
   public static ConfigSource runtime() {return RUNTIME_SINGLETON;}
-  public static ConfigSource file(String fileName, boolean secure) {return new ConfigSource(secure ? Type.SECURE_FILE : Type.FILE, fileName);}
+  public static ConfigSource file(String fileName, boolean secure) {return new ConfigSource(fileName, secure);}
   public static ConfigSource launcher() {return LAUNCHER_SINGLETON;}
   
   @Override
@@ -87,14 +96,9 @@ public class ConfigSource implements Serializable {
     if (getClass() != obj.getClass())
       return false;
     ConfigSource other = (ConfigSource) obj;
-    if (description == null) {
-      if (other.description != null)
-        return false;
-    } else if (!description.equals(other.description))
-      return false;
-    if (type != other.type)
-      return false;
-    return true;
+
+    return (type == other.type
+            && description.equals(other.description));
   }
   
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
index 8c8dd5c..3e4fbc6 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
@@ -46,7 +46,17 @@ public interface LogConfig {
    * property
    */
   public int getLogDiskSpaceLimit();
-  
+
+  /**
+   * Returns the value of the <a
+   * href="../DistributedSystem.html#name">"name"</a> property
+   * Gets the member's name.
+   * A name is optional and by default empty.
+   * If set it must be unique in the ds.
+   * When set its used by tools to help identify the member.
+   * <p> The default value is: {@link #DEFAULT_NAME}.
+   * @return the system's name.
+   */
   public String getName();
   
   public String toLoggerString();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
new file mode 100644
index 0000000..d2b5643
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
@@ -0,0 +1,313 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.distributed.internal;
+
+import com.gemstone.gemfire.InternalGemFireException;
+import com.gemstone.gemfire.UnmodifiableException;
+import com.gemstone.gemfire.internal.ConfigSource;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.*;
+
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * Created by jiliao on 2/2/16.
+ */
+@Category(UnitTest.class)
+
+public class DistributionConfigJUnitTest {
+  static Map<String, ConfigAttribute> attributes;
+  static Map<String, Method> setters;
+  static Map<String, Method> getters;
+  static Map<String, Method> isModifiables;
+  static Map<String, Method> checkers;
+  static String[] attNames;
+  DistributionConfigImpl config;
+
+  @BeforeClass
+  public static void beforeClass() {
+    attributes = DistributionConfig.attributes;
+    setters = DistributionConfig.setters;
+    getters = DistributionConfig.getters;
+    attNames = DistributionConfig.dcValidAttributeNames;
+    checkers = AbstractDistributionConfig.checkers;
+  }
+
+  @Before
+  public void before() {
+    config = new DistributionConfigImpl(new Properties());
+  }
+
+  @Test
+  public void testGetAttributeNames() {
+    String[] attNames = AbstractDistributionConfig._getAttNames();
+    assertEquals(attNames.length, 140);
+
+    List boolList = new ArrayList();
+    List intList = new ArrayList();
+    List fileList = new ArrayList();
+    List stringList = new ArrayList();
+    List otherList = new ArrayList();
+    for (String attName : attNames) {
+      Class clazz = AbstractDistributionConfig._getAttributeType(attName);
+      if (clazz.equals(Boolean.class)) {
+        boolList.add(attName);
+      } else if (clazz.equals(Integer.class)) {
+        intList.add(attName);
+      } else if (clazz.equals(String.class)) {
+        stringList.add(attName);
+      } else if (clazz.equals(File.class)) {
+        fileList.add(attName);
+      } else {
+        otherList.add(attName);
+      }
+    }
+
+    System.out.println("boolList: " + boolList);
+    System.out.println();
+    System.out.println("intList: " + intList);
+    System.out.println();
+    System.out.println("stringlList: " + stringList);
+    System.out.println();
+    System.out.println("filelList: " + fileList);
+    System.out.println();
+    System.out.println("otherList: " + otherList);
+    assertEquals(boolList.size(), 30);
+    assertEquals(intList.size(), 33);
+    assertEquals(stringList.size(), 69);
+    assertEquals(fileList.size(), 5);
+    assertEquals(otherList.size(), 3);
+  }
+
+  @Test
+  public void sameCount() {
+    assertEquals(attributes.size(), setters.size());
+    assertEquals(setters.size(), getters.size());
+  }
+
+  @Test
+  public void everyAttrHasValidSetter() {
+    for (String attr : attributes.keySet()) {
+      Method setter = setters.get(attr);
+      assertNotNull(attr + " should have a setter", setter);
+      assertTrue(setter.getName().startsWith("set"));
+      assertEquals(setter.getParameterCount(), 1);
+
+      if (!(attr.equalsIgnoreCase(DistributionConfig.LOG_LEVEL_NAME) || attr.equalsIgnoreCase(DistributionConfig.SECURITY_LOG_LEVEL_NAME))) {
+        Class clazz = attributes.get(attr).type();
+        try {
+          setter.invoke(mock(DistributionConfig.class), any(clazz));
+        } catch (Exception e) {
+          throw new RuntimeException("Error calling setter " + setter.getName(), e);
+        }
+      }
+
+    }
+  }
+
+  @Test
+  public void everyAttrHasValidGetter() {
+    for (String attr : attributes.keySet()) {
+      Method getter = getters.get(attr);
+      assertNotNull(attr + " should have a getter", getter);
+      assertTrue(getter.getName().startsWith("get"));
+      assertEquals(getter.getParameterCount(), 0);
+
+      if (!(attr.equalsIgnoreCase(DistributionConfig.LOG_LEVEL_NAME) || attr.equalsIgnoreCase(DistributionConfig.SECURITY_LOG_LEVEL_NAME))) {
+        Class clazz = attributes.get(attr).type();
+        Class returnClass = getter.getReturnType();
+        if (returnClass.isPrimitive()) {
+          returnClass = classMap.get(returnClass);
+        }
+        assertEquals(returnClass, clazz);
+      }
+    }
+  }
+
+  @Test
+  public void everyGetterSetterSameNameSameType() {
+    for (String attr : getters.keySet()) {
+      Method getter = getters.get(attr);
+      Method setter = setters.get(attr);
+      assertNotNull("every getter should have a corresponding setter " + attr, setter);
+      String setterName = setter.getName();
+      String getterName = getter.getName();
+      assertEquals(setterName.substring(setterName.indexOf("set") + 3), getterName.substring(getterName.indexOf("get") + 3));
+      assertEquals(setter.getParameterTypes()[0], getter.getReturnType());
+    }
+
+    for (String attr : setters.keySet()) {
+      Method getter = getters.get(attr);
+      assertNotNull("every setter should have a corresponding getter: " + attr, getter);
+    }
+  }
+
+  @Test
+  public void everySetterHasAttributeDefined() {
+    for (String attr : setters.keySet()) {
+      ConfigAttribute configAttribute = attributes.get(attr);
+      assertNotNull(attr + " should be defined a ConfigAttribute", configAttribute);
+    }
+  }
+
+  @Test
+  public void everyGetterHasAttributeDefined() {
+    for (String attr : getters.keySet()) {
+      ConfigAttribute configAttribute = attributes.get(attr);
+      assertNotNull(attr + " should be defined a ConfigAttribute", configAttribute);
+    }
+  }
+
+  @Test
+  public void testGetAttributeObject() {
+    assertEquals(config.getAttributeObject(DistributionConfig.LOG_LEVEL_NAME), "config");
+    assertEquals(config.getAttributeObject(DistributionConfig.SECURITY_LOG_LEVEL_NAME), "config");
+    assertEquals(config.getAttributeObject(DistributionConfig.REDUNDANCY_ZONE_NAME), "");
+    assertEquals(config.getAttributeObject(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME).getClass(), Boolean.class);
+  }
+
+  @Test
+  public void testCheckerChecksValidAttribute() {
+    for (String att : checkers.keySet()) {
+      assertTrue(attributes.containsKey(att));
+      Method checker = checkers.get(att);
+      assertEquals(checker.getParameterCount(), 1);
+      assertEquals("invalid checker: " + checker.getName(), checker.getReturnType(), checker.getParameterTypes()[0]);
+
+      //TODO assert checker and setter accepts this same type of parameter
+    }
+  }
+
+  @Test
+  public void testDistributionConfigImplModifiable() {
+    // default DistributionConfigImpl contains only 2 modifiable attributes
+    List modifiables = new ArrayList<>();
+    for (String attName : attNames) {
+      if (config.isAttributeModifiable(attName)) {
+        modifiables.add(attName);
+      }
+    }
+    assertEquals(modifiables.size(), 2);
+    assertEquals(modifiables.get(0), "http-service-port");
+    assertEquals(modifiables.get(1), "jmx-manager-http-port");
+  }
+
+  @Test
+  public void testRuntimeConfigModifiable() {
+    InternalDistributedSystem ds = mock(InternalDistributedSystem.class);
+    when(ds.getOriginalConfig()).thenReturn(config);
+    RuntimeDistributionConfigImpl runtime = new RuntimeDistributionConfigImpl(ds);
+    List modifiables = new ArrayList<>();
+    for (String attName : attNames) {
+      if (runtime.isAttributeModifiable(attName)) {
+        modifiables.add(attName);
+      }
+    }
+    assertEquals(modifiables.size(), 10);
+    assertEquals(modifiables.get(0), "archive-disk-space-limit");
+    assertEquals(modifiables.get(1), "archive-file-size-limit");
+    assertEquals(modifiables.get(2), "http-service-port");
+    assertEquals(modifiables.get(3), "jmx-manager-http-port");
+    assertEquals(modifiables.get(4), "log-disk-space-limit");
+    assertEquals(modifiables.get(5), "log-file-size-limit");
+    assertEquals(modifiables.get(6), "log-level");
+    assertEquals(modifiables.get(7), "statistic-archive-file");
+    assertEquals(modifiables.get(8), "statistic-sample-rate");
+    assertEquals(modifiables.get(9), "statistic-sampling-enabled");
+
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testSetInvalidAttributeObject() {
+    config.setAttributeObject("fake attribute", "test", ConfigSource.api());
+  }
+
+  @Test(expected = UnmodifiableException.class)
+  public void testSetUnmodifiableAttributeObject() {
+    config.setAttributeObject("archive-disk-space-limit", 0, ConfigSource.api());
+  }
+
+  @Test
+  public void testValidAttributeObject() {
+    config.setAttributeObject("http-service-port", 8080, ConfigSource.api());
+    assertEquals(config.getHttpServicePort(), 8080);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testOutOfRangeAttributeObject() {
+    config.setAttributeObject("http-service-port", -1, ConfigSource.api());
+  }
+
+  @Test
+  public void testLogLevel() {
+    config.modifiable = true;
+    config.setAttribute(DistributionConfig.LOG_LEVEL_NAME, "config", ConfigSource.api());
+    assertEquals(config.getLogLevel(), 700);
+
+    config.setAttributeObject(DistributionConfig.SECURITY_LOG_LEVEL_NAME, "debug", ConfigSource.api());
+    assertEquals(config.getSecurityLogLevel(), 500);
+  }
+
+  @Test
+  public void testValidLocatorAddress() {
+    String address = "81.240.0.1[7056]";
+    config.modifiable = true;
+    config.setStartLocator(address);
+    assertEquals(config.getStartLocator(), address);
+  }
+
+  @Test(expected = InternalGemFireException.class)
+  public void testInvalidLocatorAddress() {
+    String address = "bad.bad[7056]";
+    config.modifiable = true;
+    config.setStartLocator(address);
+  }
+
+  @Test
+  public void testAttributesAlwaysModifiable() {
+    config.modifiable = false;
+    assertTrue(config.isAttributeModifiable(DistributionConfig.HTTP_SERVICE_PORT_NAME));
+    assertTrue(config.isAttributeModifiable("jmx-manager-http-port"));
+
+    config.modifiable = true;
+    assertTrue(config.isAttributeModifiable(DistributionConfig.HTTP_SERVICE_PORT_NAME));
+    assertTrue(config.isAttributeModifiable("jmx-manager-http-port"));
+  }
+
+  public final static Map<Class<?>, Class<?>> classMap = new HashMap<Class<?>, Class<?>>();
+
+  static {
+    classMap.put(boolean.class, Boolean.class);
+    classMap.put(byte.class, Byte.class);
+    classMap.put(short.class, Short.class);
+    classMap.put(char.class, Character.class);
+    classMap.put(int.class, Integer.class);
+    classMap.put(long.class, Long.class);
+    classMap.put(float.class, Float.class);
+    classMap.put(double.class, Double.class);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
new file mode 100644
index 0000000..73cd9a0
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.internal;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by jiliao on 2/2/16.
+ */
+@Category(UnitTest.class)
+public class ConfigSourceJUnitTest {
+  @Test
+  public void testDescriptions() {
+    ConfigSource cs = ConfigSource.api();
+    assertEquals(cs.getDescription(), "api");
+
+    cs = ConfigSource.file("test", true);
+    assertEquals(cs.getDescription(), "test");
+
+    cs = ConfigSource.file("test2", false);
+    assertEquals(cs.getDescription(), "test2");
+
+    cs = ConfigSource.file(null, true);
+    assertEquals(cs.getDescription(), "secure file");
+
+    cs = ConfigSource.file(null, false);
+    assertEquals(cs.getDescription(), "file");
+
+    cs = ConfigSource.file("", true);
+    assertEquals(cs.getDescription(), "");
+
+    cs = ConfigSource.launcher();
+    assertEquals(cs.getDescription(), "launcher");
+
+    cs = ConfigSource.sysprop();
+    assertEquals(cs.getDescription(), "system property");
+
+    cs = ConfigSource.runtime();
+    assertEquals(cs.getDescription(), "runtime modification");
+
+    cs = ConfigSource.xml();
+    assertEquals(cs.getDescription(), "cache.xml");
+  }
+
+  @Test
+  public void testEquals() {
+    ConfigSource cs1 = ConfigSource.file("name", true);
+    ConfigSource cs2 = ConfigSource.file("name", false);
+    assertFalse(cs1.equals(cs2));
+
+    cs1 = ConfigSource.file("name", true);
+    cs2 = ConfigSource.file("name", true);
+    assertTrue(cs1.equals(cs2));
+
+    cs1 = ConfigSource.file(null, true);
+    cs2 = ConfigSource.file(null, false);
+    assertFalse(cs1.equals(cs2));
+
+    cs1 = ConfigSource.file(null, true);
+    cs2 = ConfigSource.file(null, true);
+    assertTrue(cs1.equals(cs2));
+
+    cs1 = ConfigSource.file(null, true);
+    cs2 = ConfigSource.file("", true);
+    assertFalse(cs1.equals(cs2));
+
+    cs1 = ConfigSource.xml();
+    cs2 = ConfigSource.xml();
+    assertTrue(cs1.equals(cs2));
+  }
+}


[4/5] incubator-geode git commit: GEODE-913: refactor AbstractDistributionConfig

Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
index 0cc76ec..0c099fd 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
@@ -16,19 +16,9 @@
  */
 package com.gemstone.gemfire.distributed.internal;
 
-import java.io.File;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
 import com.gemstone.gemfire.InternalGemFireException;
 import com.gemstone.gemfire.InvalidValueException;
+import com.gemstone.gemfire.UnmodifiableException;
 import com.gemstone.gemfire.internal.AbstractConfig;
 import com.gemstone.gemfire.internal.ConfigSource;
 import com.gemstone.gemfire.internal.SocketCreator;
@@ -37,6 +27,11 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.logging.LogWriterImpl;
 import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
 
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.*;
+
 /**
  * Provides an implementation of <code>DistributionConfig</code> that
  * knows how to read the configuration file.
@@ -54,162 +49,97 @@ public abstract class AbstractDistributionConfig
   extends AbstractConfig
   implements DistributionConfig
 {
-  protected void checkName(String value) {
-    _checkIfModifiable(NAME_NAME);
-  }
-  public boolean isNameModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isEnableNetworkPartitionDetectionModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isDisableAutoReconnectModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isDepartureCorrelationWindowModifiable() {
-    return _modifiableDefault();
-  }
 
-  protected void checkLogFile(File value) {
-    _checkIfModifiable(LOG_FILE_NAME);
-  }
-  public boolean isLogFileModifiable() {
-    return _modifiableDefault();
-  }
+  protected Object checkAttribute(String attName, Object value){
+    // first check to see if this attribute is modifiable, this also checks if the attribute is a valid one.
+    if (!isAttributeModifiable(attName)) {
+      throw new UnmodifiableException(_getUnmodifiableMsg(attName));
+    }
 
-  protected void checkLogLevel(int value) {
-    _checkIfModifiable(LOG_LEVEL_NAME);
-    if (value < MIN_LOG_LEVEL) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {LOG_LEVEL_NAME, Integer.valueOf(value), Integer.valueOf(MIN_LOG_LEVEL)}));
+    ConfigAttribute attribute = attributes.get(attName);
+    if(attribute==null){
+      // isAttributeModifiable already checks the validity of the attName, if reached here, then they
+      // must be those special attributes that starts with ssl_system_props or sys_props, no further checking needed
+      return value;
     }
-    if (value > MAX_LOG_LEVEL) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {LOG_LEVEL_NAME, Integer.valueOf(value), Integer.valueOf(MAX_LOG_LEVEL)}));
+    // for integer attribute, do the range check.
+    if(attribute.type().equals(Integer.class)){
+      Integer intValue = (Integer)value;
+      minMaxCheck(attName, intValue, attribute.min(), attribute.max());
+    }
+
+    Method checker = checkers.get(attName);
+    if(checker==null)
+      return value;
+
+    // if specific checker exists for this attribute, call that with the value
+    try {
+      return checker.invoke(this, value);
+    } catch (Exception e) {
+      if(e instanceof RuntimeException){
+        throw (RuntimeException)e;
+      }
+      if(e.getCause() instanceof RuntimeException){
+        throw (RuntimeException)e.getCause();
+      }
+      else
+        throw new InternalGemFireException("error invoking "+checker.getName()+" with value "+value);
     }
   }
 
-  protected void checkStartLocator(String value) {
-    _checkIfModifiable(START_LOCATOR_NAME);
+
+  protected void minMaxCheck(String propName, int value, int minValue, int maxValue) {
+    if (value < minValue) {
+      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[]{propName, Integer.valueOf(value), Integer.valueOf(minValue)}));
+    } else if (value > maxValue) {
+      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[]{propName, Integer.valueOf(value), Integer.valueOf(maxValue)}));
+    }
+  }
+
+
+  @ConfigAttributeChecker(name=START_LOCATOR_NAME)
+  protected String checkStartLocator(String value) {
     if (value != null && value.trim().length() > 0) {
       // throws IllegalArgumentException if string is malformed
       new DistributionLocatorId(value);
     }
+    return value;
   }
 
-  public boolean isStartLocatorModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isLogLevelModifiable() {
-    return _modifiableDefault();
-  }
 
-  protected void checkTcpPort(int value) {
-    _checkIfModifiable(TCP_PORT_NAME);
-    if (value < MIN_TCP_PORT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {TCP_PORT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_TCP_PORT)}));
-    }
-    if (value > MAX_TCP_PORT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {TCP_PORT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_TCP_PORT)}));
-    }
+  @ConfigAttributeChecker(name=TCP_PORT_NAME)
+  protected int checkTcpPort(int value) {
     if ( getSSLEnabled() && value != 0 ) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_MUST_BE_0_WHEN_2_IS_TRUE.toLocalizedString(new Object[] {TCP_PORT_NAME, Integer.valueOf(value), SSL_ENABLED_NAME}));
     }
     if ( getClusterSSLEnabled() && value != 0 ) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_MUST_BE_0_WHEN_2_IS_TRUE.toLocalizedString(new Object[] {TCP_PORT_NAME, Integer.valueOf(value), CLUSTER_SSL_ENABLED_NAME}));
     }
-  }
-  public boolean isTcpPortModifiable() {
-    return _modifiableDefault();
+    return value;
   }
 
-  protected void checkMcastPort(int value) {
-    _checkIfModifiable(MCAST_PORT_NAME);
-    if (value < MIN_MCAST_PORT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {MCAST_PORT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_MCAST_PORT)}));
-    }
-    if (value > MAX_MCAST_PORT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {MCAST_PORT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_MCAST_PORT)}));
-    }
+  @ConfigAttributeChecker(name=MCAST_PORT_NAME)
+  protected int checkMcastPort(int value) {
     if ( getSSLEnabled() && value != 0 ) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_MUST_BE_0_WHEN_2_IS_TRUE.toLocalizedString(new Object[] {MCAST_PORT_NAME, Integer.valueOf(value), SSL_ENABLED_NAME}));
     }
     if ( getClusterSSLEnabled() && value != 0 ) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_MUST_BE_0_WHEN_2_IS_TRUE.toLocalizedString(new Object[] {MCAST_PORT_NAME, Integer.valueOf(value), CLUSTER_SSL_ENABLED_NAME}));
     }
-
-  }
-  public boolean isMcastPortModifiable() {
-    return _modifiableDefault();
+    return value;
   }
 
-  protected void checkMcastAddress(InetAddress value) {
-    _checkIfModifiable(MCAST_ADDRESS_NAME);
+
+  @ConfigAttributeChecker(name=MCAST_ADDRESS_NAME)
+  protected InetAddress checkMcastAddress(InetAddress value) {
     if (!value.isMulticastAddress()) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_IT_WAS_NOT_A_MULTICAST_ADDRESS.toLocalizedString(new Object[] {MCAST_ADDRESS_NAME, value}));
     }
-  }
-  public boolean isMcastAddressModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkMcastTtl(int value) {
-    _checkIfModifiable(MCAST_TTL_NAME);
-    if (value < MIN_MCAST_TTL) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {MCAST_TTL_NAME, Integer.valueOf(value), Integer.valueOf(MIN_MCAST_TTL)}));
-    }
-    if (value > MAX_MCAST_TTL) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {MCAST_TTL_NAME, Integer.valueOf(value), Integer.valueOf(MAX_MCAST_TTL)}));
-    }
-  }
-  public boolean isMcastTtlModifiable() {
-    return _modifiableDefault();
+    return value;
   }
 
-  protected void checkSocketLeaseTime(int value) {
-    _checkIfModifiable(SOCKET_LEASE_TIME_NAME);
-    if (value < MIN_SOCKET_LEASE_TIME) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {SOCKET_LEASE_TIME_NAME, Integer.valueOf(value), Integer.valueOf(MIN_SOCKET_LEASE_TIME)}));
-    }
-    if (value > MAX_SOCKET_LEASE_TIME) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {SOCKET_LEASE_TIME_NAME, Integer.valueOf(value), Integer.valueOf(MAX_SOCKET_LEASE_TIME)}));
-    }
-  }
-  public boolean isSocketLeaseTimeModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSocketBufferSize(int value) {
-    _checkIfModifiable(SOCKET_BUFFER_SIZE_NAME);
-    if (value < MIN_SOCKET_BUFFER_SIZE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {SOCKET_BUFFER_SIZE_NAME, Integer.valueOf(value), Integer.valueOf(MIN_SOCKET_BUFFER_SIZE)}));
-    }
-    if (value > MAX_SOCKET_BUFFER_SIZE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {SOCKET_BUFFER_SIZE_NAME, Integer.valueOf(value), Integer.valueOf(MAX_SOCKET_BUFFER_SIZE)}));
-    }
-  }
-  public boolean isSocketBufferSizeModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkConserveSockets(boolean value) {
-    _checkIfModifiable(CONSERVE_SOCKETS_NAME);
-  }
-  public boolean isConserveSocketsModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkRoles(String value) {
-    _checkIfModifiable(ROLES_NAME);
-  }
-  public boolean isRolesModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkBindAddress(String value) {
-    _checkIfModifiable(BIND_ADDRESS_NAME);
+  @ConfigAttributeChecker(name=BIND_ADDRESS_NAME)
+  protected String checkBindAddress(String value) {
     if (value != null && value.length() > 0 &&
         !SocketCreator.isLocalHost(value)) {
       throw new IllegalArgumentException(
@@ -217,13 +147,12 @@ public abstract class AbstractDistributionConfig
           .toLocalizedString(new Object[]{value, SocketCreator.getMyAddresses()
           }));
     }
-  }
-  public boolean isBindAddressModifiable() {
-    return _modifiableDefault();
+    return value;
   }
 
-  protected void checkServerBindAddress(String value) {
-    _checkIfModifiable(SERVER_BIND_ADDRESS_NAME);
+
+  @ConfigAttributeChecker(name=SERVER_BIND_ADDRESS_NAME)
+  protected String checkServerBindAddress(String value) {
     if (value != null && value.length() > 0 &&
         !SocketCreator.isLocalHost(value)) {
       throw new IllegalArgumentException(
@@ -231,66 +160,27 @@ public abstract class AbstractDistributionConfig
           .toLocalizedString(new Object[]{value, SocketCreator.getMyAddresses()
           }));
     }
-  }
-  public boolean isServerBindAddressModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkDeployWorkingDir(File value) {
-    _checkIfModifiable(DEPLOY_WORKING_DIR);
-  }
-
-  public boolean isDeployWorkingDirModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkStatisticSamplingEnabled(boolean value) {
-    _checkIfModifiable(STATISTIC_SAMPLING_ENABLED_NAME);
-  }
-  public boolean isStatisticSamplingEnabledModifiable() {
-    return _modifiableDefault();
+    return value;
   }
 
-  
-  protected void checkStatisticArchiveFile(File value) {
-    _checkIfModifiable(STATISTIC_ARCHIVE_FILE_NAME);
-  }
-  public boolean isStatisticArchiveFileModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkCacheXmlFile(File value) {
-    _checkIfModifiable(CACHE_XML_FILE_NAME);
-  }
-  public boolean isCacheXmlFileModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSSLEnabled(Boolean value) {
-    _checkIfModifiable(SSL_ENABLED_NAME);
+  @ConfigAttributeChecker(name=SSL_ENABLED_NAME)
+  protected Boolean checkSSLEnabled(Boolean value) {
     if ( value.booleanValue() && (getMcastPort() != 0) ) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_MUST_BE_FALSE_WHEN_2_IS_NOT_0.toLocalizedString(new Object[] {SSL_ENABLED_NAME, value, MCAST_PORT_NAME}));
     }
+    return value;
   }
-  
-  protected void checkClusterSSLEnabled(Boolean value) {
-    _checkIfModifiable(CLUSTER_SSL_ENABLED_NAME);
+
+  @ConfigAttributeChecker(name=CLUSTER_SSL_ENABLED_NAME)
+  protected Boolean checkClusterSSLEnabled(Boolean value) {
     if ( value.booleanValue() && (getMcastPort() != 0) ) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_MUST_BE_FALSE_WHEN_2_IS_NOT_0.toLocalizedString(new Object[] {CLUSTER_SSL_ENABLED_NAME, value, MCAST_PORT_NAME}));
     }
+    return value;
   }
 
-  protected void checkHttpServicePort(int value) {
-    minMaxCheck(HTTP_SERVICE_PORT_NAME, value, 0, 65535);
-  }
-  
-  public boolean isHttpServicePortModifiable() {
-    //Need to set "true" for hydra teststo set REST service port
-    return true;
-  }
-  
-  protected void checkHttpServiceBindAddress(String value) {
-    _checkIfModifiable(HTTP_SERVICE_BIND_ADDRESS_NAME);
+  @ConfigAttributeChecker(name=HTTP_SERVICE_BIND_ADDRESS_NAME)
+  protected String checkHttpServiceBindAddress(String value) {
     if (value != null && value.length() > 0 &&
         !SocketCreator.isLocalHost(value)) {
       throw new IllegalArgumentException(
@@ -298,400 +188,12 @@ public abstract class AbstractDistributionConfig
           .toLocalizedString(new Object[]{value, SocketCreator.getMyAddresses()
           }));
     }
-  }
-  
-  public boolean isHttpServiceBindAddressModifiable() {
-    return _modifiableDefault();
-  }
-  
-  //Add for HTTP Service SSL Start
-  public boolean isHttpServiceSSLEnabledModifiable(){
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSL(){
-    _checkIfModifiable(HTTP_SERVICE_SSL_ENABLED_NAME);
+    return value;
   }
 
-  public boolean isHttpServiceSSLRequireAuthenticationModifiable(){
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLRequireAuthentication(){
-    _checkIfModifiable(HTTP_SERVICE_SSL_REQUIRE_AUTHENTICATION_NAME);
-  }
-  
-  public boolean isHttpServiceSSLProtocolsModifiable(){
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLProtocols(){
-    _checkIfModifiable(HTTP_SERVICE_SSL_PROTOCOLS_NAME);
-  }
-  
-  public boolean isHttpServiceSSLCiphersModifiable(){
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLCiphers(){
-    _checkIfModifiable(HTTP_SERVICE_SSL_CIPHERS_NAME);
-  }
-  
-  public void checkHttpServiceSSLKeyStore(String value) {
-    _checkIfModifiable(HTTP_SERVICE_SSL_KEYSTORE_NAME);
-  }
-  public boolean isHttpServiceSSLKeyStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLKeyStoreType(String value) {
-    _checkIfModifiable(HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME);
-  }
-  public boolean isHttpServiceSSLKeyStoreTypeModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLKeyStorePassword(String value) {
-    _checkIfModifiable(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME);
-  }
-  public boolean isHttpServiceSSLKeyStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLTrustStore(String value) {
-    _checkIfModifiable(HTTP_SERVICE_SSL_TRUSTSTORE_NAME);
-  }
-  public boolean isHttpServiceSSLTrustStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isHttpServiceSSLTrustStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkHttpServiceSSLTrustStorePassword(String value) {
-    _checkIfModifiable(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME);
-  }
-  
-//Add for HTTP Service SSL End
-  
-  
-  
-  protected void checkStartDevRestApi() {
-    _checkIfModifiable(START_DEV_REST_API_NAME);
-  }
 
-  @Override
-  public boolean isStartDevRestApiModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isSSLEnabledModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isClusterSSLEnabledModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkSSLProtocols(String value) {
-    _checkIfModifiable(SSL_PROTOCOLS_NAME);
-  }
-  protected void checkClusterSSLProtocols(String value) {
-    _checkIfModifiable(CLUSTER_SSL_PROTOCOLS_NAME);
-  }
-  public boolean isSSLProtocolsModifiable() {
-    return _modifiableDefault();
-  }
-  public boolean isClusterSSLProtocolsModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkSSLCiphers(String value) {
-    _checkIfModifiable(SSL_CIPHERS_NAME);
-  }
-  protected void checkClusterSSLCiphers(String value) {
-    _checkIfModifiable(CLUSTER_SSL_CIPHERS_NAME);
-  }
-  public boolean isSSLCiphersModifiable() {
-    return _modifiableDefault();
-  }
-  public boolean isClusterSSLCiphersModifiable() {
-    return _modifiableDefault();
-  }
-  public void checkSSLRequireAuthentication(Boolean value) {
-    _checkIfModifiable(SSL_REQUIRE_AUTHENTICATION_NAME);
-  }
-  public void checkClusterSSLRequireAuthentication(Boolean value) {
-    _checkIfModifiable(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME);
-  }
-  public boolean isSSLRequireAuthenticationModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isClusterSSLRequireAuthenticationModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkClusterSSLKeyStore(String value) {
-    _checkIfModifiable(CLUSTER_SSL_KEYSTORE_NAME);
-  }
-  public boolean isClusterSSLKeyStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkClusterSSLKeyStoreType(String value) {
-    _checkIfModifiable(CLUSTER_SSL_KEYSTORE_TYPE_NAME);
-  }
-  public boolean isClusterSSLKeyStoreTypeModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkClusterSSLKeyStorePassword(String value) {
-    _checkIfModifiable(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME);
-  }
-  public boolean isClusterSSLKeyStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkClusterSSLTrustStore(String value) {
-    _checkIfModifiable(CLUSTER_SSL_TRUSTSTORE_NAME);
-  }
-  public boolean isClusterSSLTrustStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkClusterSSLTrustStorePassword(String value) {
-    _checkIfModifiable(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME);
-  }
-  
-  public boolean isClusterSSLTrustStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkServerSSLKeyStore(String value) {
-    _checkIfModifiable(SERVER_SSL_KEYSTORE_NAME);
-  }
-  public boolean isServerSSLKeyStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkServerSSLKeyStoreType(String value) {
-    _checkIfModifiable(SERVER_SSL_KEYSTORE_TYPE_NAME);
-  }
-  public boolean isServerSSLKeyStoreTypeModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkServerSSLKeyStorePassword(String value) {
-    _checkIfModifiable(SERVER_SSL_KEYSTORE_PASSWORD_NAME);
-  }
-  public boolean isServerSSLKeyStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkServerSSLTrustStore(String value) {
-    _checkIfModifiable(SERVER_SSL_TRUSTSTORE_NAME);
-  }
-  public boolean isServerSSLTrustStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkServerSSLTrustStorePassword(String value) {
-    _checkIfModifiable(SERVER_SSL_TRUSTSTORE_PASSWORD_NAME);
-  }
-  
-  public boolean isServerSSLTrustStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkJmxManagerSSLKeyStore(String value) {
-    _checkIfModifiable(JMX_MANAGER_SSL_KEYSTORE_NAME);
-  }
-  public boolean isJmxManagerSSLKeyStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkJmxManagerSSLKeyStoreType(String value) {
-    _checkIfModifiable(JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME);
-  }
-  public boolean isJmxManagerSSLKeyStoreTypeModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkJmxManagerSSLKeyStorePassword(String value) {
-    _checkIfModifiable(JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME);
-  }
-  public boolean isJmxManagerSSLKeyStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkJmxManagerSSLTrustStore(String value) {
-    _checkIfModifiable(JMX_MANAGER_SSL_TRUSTSTORE_NAME);
-  }
-  public boolean isJmxManagerSSLTrustStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkJmxManagerSSLTrustStorePassword(String value) {
-    _checkIfModifiable(JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME);
-  }
-  
-  public boolean isJmxManagerSSLTrustStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkGatewaySSLKeyStore(String value) {
-    _checkIfModifiable(GATEWAY_SSL_KEYSTORE_NAME);
-  }
-  public boolean isGatewaySSLKeyStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkGatewaySSLKeyStoreType(String value) {
-    _checkIfModifiable(GATEWAY_SSL_KEYSTORE_TYPE_NAME);
-  }
-  public boolean isGatewaySSLKeyStoreTypeModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkGatewaySSLKeyStorePassword(String value) {
-    _checkIfModifiable(GATEWAY_SSL_KEYSTORE_PASSWORD_NAME);
-  }
-  public boolean isGatewaySSLKeyStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkGatewaySSLTrustStore(String value) {
-    _checkIfModifiable(GATEWAY_SSL_TRUSTSTORE_NAME);
-  }
-  public boolean isGatewaySSLTrustStoreModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkGatewaySSLTrustStorePassword(String value) {
-    _checkIfModifiable(GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME);
-  }
-  
-  public boolean isGatewaySSLTrustStorePasswordModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public void checkMcastSendBufferSizeModifiable() {
-    _checkIfModifiable(MCAST_SEND_BUFFER_SIZE_NAME);
-  }
-
-  public boolean isMcastSendBufferSizeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkMcastRecvBufferSizeModifiable() {
-    _checkIfModifiable(MCAST_RECV_BUFFER_SIZE_NAME);
-  }
-
-  public boolean isMcastRecvBufferSizeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkMcastFlowControlModifiable() {
-    _checkIfModifiable(MCAST_FLOW_CONTROL_NAME);
-  }
-
-  public boolean isMcastFlowControlModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkUdpSendBufferSizeModifiable() {
-    _checkIfModifiable(UDP_SEND_BUFFER_SIZE_NAME);
-  }
-
-  public boolean isUdpSendBufferSizeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkUdpRecvBufferSizeModifiable() {
-    _checkIfModifiable(UDP_RECV_BUFFER_SIZE_NAME);
-  }
-
-  public boolean isUdpRecvBufferSizeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkUdpFragmentSizeModifiable() {
-    _checkIfModifiable(UDP_FRAGMENT_SIZE_NAME);
-  }
-
-  public boolean isUdpFragmentSizeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkDisableTcpModifiable() {
-    _checkIfModifiable(DISABLE_TCP_NAME);
-  }
-
-  public boolean isDisableTcpModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkEnableTimeStatisticsModifiable() {
-    _checkIfModifiable(ENABLE_TIME_STATISTICS_NAME);
-  }
-
-  public boolean isEnableTimeStatisticsModifiable() {
-    return _modifiableDefault();
-  }
-
-  public void checkMemberTimeoutModifiable() {
-    _checkIfModifiable(MEMBER_TIMEOUT_NAME);
-  }
-
-  public boolean isMemberTimeoutModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isMembershipPortRangeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isMaxNumberOfTiesModifiable(){
-    return _modifiableDefault();
-  }
-
-  public boolean isMaxTimeOutModifiable(){
-    return _modifiableDefault();
-  }
-
-  protected void checkStatisticSampleRate(int value) {
-    _checkIfModifiable(STATISTIC_SAMPLE_RATE_NAME);
-    if (value < MIN_STATISTIC_SAMPLE_RATE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {STATISTIC_SAMPLE_RATE_NAME, Integer.valueOf(value), Integer.valueOf(MIN_STATISTIC_SAMPLE_RATE)}));
-    }
-    if (value > MAX_STATISTIC_SAMPLE_RATE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {STATISTIC_SAMPLE_RATE_NAME, Integer.valueOf(value), Integer.valueOf(MAX_STATISTIC_SAMPLE_RATE)}));
-    }
-  }
-  public boolean isStatisticSampleRateModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isDeltaPropagationModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkDeltaPropagationModifiable() {
-    _checkIfModifiable(DELTA_PROPAGATION_PROP_NAME);
-  }
-  
-  protected String checkRemoteLocators(String value) {
-    _checkIfModifiable(REMOTE_LOCATORS_NAME);
-    return value ;
-  }
-  
-  public boolean isDistributedSystemIdModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkDistributedSystemId(int value) {
-    _checkIfModifiable(DISTRIBUTED_SYSTEM_ID_NAME);
+  @ConfigAttributeChecker(name=DISTRIBUTED_SYSTEM_ID_NAME)
+  protected int checkDistributedSystemId(int value) {
     String distributedSystemListener = System
     .getProperty("gemfire.DistributedSystemListener");
     //this check is specific for Jayesh's use case of WAN BootStraping
@@ -707,51 +209,20 @@ public abstract class AbstractDistributionConfig
     if (value > MAX_DISTRIBUTED_SYSTEM_ID) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {DISTRIBUTED_SYSTEM_ID_NAME, Integer.valueOf(value), Integer.valueOf(MAX_DISTRIBUTED_SYSTEM_ID)}));
     }
+    return value;
   }
 
-  public boolean isEnforceUniqueHostModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkEnforceUniqueHostModifiable() {
-    _checkIfModifiable(ENFORCE_UNIQUE_HOST_NAME);
-  }
-  
-  public boolean isRedundancyZoneModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkRedundancyZoneModifiable() {
-    _checkIfModifiable(REDUNDANCY_ZONE_NAME);
-  }
-  
-  protected void checkSSLPropertyModifiable() {
-    _checkIfModifiable(SSL_SYSTEM_PROPS_NAME);
-  }
-  
-  protected boolean isSSLPropertyModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkUserCommandPackages(String value) {
-    _checkIfModifiable(USER_COMMAND_PACKAGES);
-  }
-
-  public boolean isUserCommandPackagesModifiable() {
-    return _modifiableDefault();
-  }
-  
   /**
    * Makes sure that the locator string used to configure discovery is
    * valid.
-   * 
+   *
    * <p>Starting in 4.0, we accept locators in the format
    * "host:port" in addition to the traditional "host:bind-address[port]" format.
    * See bug 32306.
-   * 
+   *
    * <p>Starting in 5.1.0.4, we accept locators in the format
    * "host@bind-address[port]" to allow use of numeric IPv6 addresses
-   * 
+   *
    * @return The locator string in the traditional "host:bind-address[port]"
    *         format.
    *
@@ -759,9 +230,8 @@ public abstract class AbstractDistributionConfig
    *         If <code>value</code> is not a valid locator
    *         configuration
    */
+  @ConfigAttributeChecker(name=LOCATORS_NAME)
   protected String checkLocators(String value) {
-    _checkIfModifiable(LOCATORS_NAME);
-
     // validate locators value
     StringBuffer sb = new StringBuffer();
 
@@ -784,7 +254,7 @@ public abstract class AbstractDistributionConfig
       // starting in 5.1.0.4 we allow '@' as the bind-addr separator
       // to let people use IPv6 numeric addresses (which contain colons)
       int bindAddrIdx = locator.lastIndexOf('@', portIndex - 1);
-      
+
       if (bindAddrIdx < 0) {
         bindAddrIdx = locator.lastIndexOf(':', portIndex - 1);
       }
@@ -870,123 +340,9 @@ public abstract class AbstractDistributionConfig
     return sb.toString();
   }
 
-  public boolean isLocatorsModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isLocatorWaitTimeModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isRemoteLocatorsModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkAckWaitThreshold(int value) {
-    _checkIfModifiable(ACK_WAIT_THRESHOLD_NAME);
-    if (value < MIN_ACK_WAIT_THRESHOLD) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {ACK_WAIT_THRESHOLD_NAME, Integer.valueOf(value), Integer.valueOf(MIN_ACK_WAIT_THRESHOLD)}));
-    }
-    if (value > MAX_ACK_WAIT_THRESHOLD) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {ACK_WAIT_THRESHOLD_NAME, Integer.valueOf(value), Integer.valueOf(MAX_ACK_WAIT_THRESHOLD)}));
-    }
-  }
-  public boolean isAckWaitThresholdModifiable() {
-    return _modifiableDefault();
-  }
-
-
-  protected void checkAckSevereAlertThreshold(int value) {
-    _checkIfModifiable(ACK_SEVERE_ALERT_THRESHOLD_NAME);
-    if (value < MIN_ACK_SEVERE_ALERT_THRESHOLD) {
-      throw new IllegalArgumentException("Could not set \"" + ACK_SEVERE_ALERT_THRESHOLD_NAME + "\" to \"" + value + "\" because its value can not be less than \"" + MIN_ACK_SEVERE_ALERT_THRESHOLD + "\".");
-    }
-    if (value > MAX_ACK_SEVERE_ALERT_THRESHOLD) {
-      throw new IllegalArgumentException("Could not set \"" + ACK_SEVERE_ALERT_THRESHOLD_NAME + "\" to \"" + value + "\" because its value can not be greater than \"" + MAX_ACK_SEVERE_ALERT_THRESHOLD + "\".");
-    }
-  }
-  public boolean isAckSevereAlertThresholdModifiable() {
-    return _modifiableDefault();
-  }
-
-
-  public boolean isArchiveFileSizeLimitModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkArchiveFileSizeLimit(int value) {
-    _checkIfModifiable(ARCHIVE_FILE_SIZE_LIMIT_NAME);
-    if (value < MIN_ARCHIVE_FILE_SIZE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {ARCHIVE_FILE_SIZE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_ARCHIVE_FILE_SIZE_LIMIT)}));
-    }
-    if (value > MAX_ARCHIVE_FILE_SIZE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {ARCHIVE_FILE_SIZE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_ARCHIVE_FILE_SIZE_LIMIT)}));
-    }
-  }
-  public boolean isArchiveDiskSpaceLimitModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkArchiveDiskSpaceLimit(int value) {
-    _checkIfModifiable(ARCHIVE_DISK_SPACE_LIMIT_NAME);
-    if (value < MIN_ARCHIVE_DISK_SPACE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {ARCHIVE_DISK_SPACE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_ARCHIVE_DISK_SPACE_LIMIT)}));
-    }
-    if (value > MAX_ARCHIVE_DISK_SPACE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {ARCHIVE_DISK_SPACE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_ARCHIVE_DISK_SPACE_LIMIT)}));
-    }
-  }
-  public boolean isLogFileSizeLimitModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkLogFileSizeLimit(int value) {
-    _checkIfModifiable(LOG_FILE_SIZE_LIMIT_NAME);
-    if (value < MIN_LOG_FILE_SIZE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {LOG_FILE_SIZE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_LOG_FILE_SIZE_LIMIT)}));
-    }
-    if (value > MAX_LOG_FILE_SIZE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {LOG_FILE_SIZE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_LOG_FILE_SIZE_LIMIT)}));
-    }
-  }
-  public boolean isLogDiskSpaceLimitModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkLogDiskSpaceLimit(int value) {
-    _checkIfModifiable(LOG_DISK_SPACE_LIMIT_NAME);
-    if (value < MIN_LOG_DISK_SPACE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {LOG_DISK_SPACE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_LOG_DISK_SPACE_LIMIT)}));
-    }
-    if (value > MAX_LOG_DISK_SPACE_LIMIT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {LOG_DISK_SPACE_LIMIT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_LOG_DISK_SPACE_LIMIT)}));
-    }
-  }
-
-  /** a generic method for checking a new integer setting against a min
-      and max value */
-  protected void minMaxCheck(String propName, int value, int minValue, int maxValue) {
-    _checkIfModifiable(propName);
-    if (value < minValue) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {propName, Integer.valueOf(value), Integer.valueOf(minValue)}));
-    }
-    else if (value > maxValue) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {propName, Integer.valueOf(value), Integer.valueOf(maxValue)}));
-    }
-  }
-
-
-  /** check a new multicast send-buffer size setting */
-  protected void checkMcastSendBufferSize(int newSize) {
-    minMaxCheck(MCAST_SEND_BUFFER_SIZE_NAME, newSize,
-      MIN_MCAST_SEND_BUFFER_SIZE, Integer.MAX_VALUE);
-  }
-
-  /** check a new multicast recv-buffer size setting */
-  protected void checkMcastRecvBufferSize(int newSize) {
-    minMaxCheck(MCAST_RECV_BUFFER_SIZE_NAME, newSize,
-      MIN_MCAST_RECV_BUFFER_SIZE, Integer.MAX_VALUE);
-  }
-
   /** check a new mcast flow-control setting */
-  protected void checkMcastFlowControl(FlowControlParams params) {
-    _checkIfModifiable(MCAST_FLOW_CONTROL_NAME);
+  @ConfigAttributeChecker(name=MCAST_FLOW_CONTROL_NAME)
+  protected FlowControlParams checkMcastFlowControl(FlowControlParams params) {
     int value = params.getByteAllowance();
     if (value < MIN_FC_BYTE_ALLOWANCE) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_BYTEALLOWANCE_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {MCAST_FLOW_CONTROL_NAME, Integer.valueOf(value), Integer.valueOf(MIN_FC_BYTE_ALLOWANCE)}));
@@ -1005,33 +361,12 @@ public abstract class AbstractDistributionConfig
     else if (value > MAX_FC_RECHARGE_BLOCK_MS) {
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_RECHARGEBLOCKMS_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {MCAST_FLOW_CONTROL_NAME, Integer.valueOf(value), Integer.valueOf(MAX_FC_RECHARGE_BLOCK_MS)}));
     }
+    return params;
   }
 
-  /** check a new udp message fragment size setting */
-  protected void checkUdpFragmentSize(int value) {
-    minMaxCheck(UDP_FRAGMENT_SIZE_NAME, value,
-      MIN_UDP_FRAGMENT_SIZE, MAX_UDP_FRAGMENT_SIZE);
-  }
-
-  /** check a new udp send-buffer size setting */
-  protected void checkUdpSendBufferSize(int newSize) {
-    minMaxCheck(UDP_SEND_BUFFER_SIZE_NAME, newSize,
-      MIN_UDP_SEND_BUFFER_SIZE, Integer.MAX_VALUE);
-  }
-
-  /** check a new multicast recv-buffer size setting */
-  protected void checkUdpRecvBufferSize(int newSize) {
-    minMaxCheck(UDP_RECV_BUFFER_SIZE_NAME, newSize,
-      MIN_UDP_RECV_BUFFER_SIZE, Integer.MAX_VALUE);
-  }
-
-  /** check a new member-timeout setting */
-  protected void checkMemberTimeout(int value) {
-    minMaxCheck(MEMBER_TIMEOUT_NAME, value,
-      MIN_MEMBER_TIMEOUT, MAX_MEMBER_TIMEOUT);
-  }
 
-  protected void checkMembershipPortRange(int[] value) {
+  @ConfigAttributeChecker(name=MEMBERSHIP_PORT_RANGE_NAME)
+  protected int[] checkMembershipPortRange(int[] value) {
     minMaxCheck(MEMBERSHIP_PORT_RANGE_NAME, value[0],
         DEFAULT_MEMBERSHIP_PORT_RANGE[0],
         value[1]);
@@ -1045,117 +380,36 @@ public abstract class AbstractDistributionConfig
       throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.
           toLocalizedString(new Object[] {MEMBERSHIP_PORT_RANGE_NAME, value[0]+"-"+value[1], Integer.valueOf(3)}));
     }
+    return value;
   }
 
 
-  public boolean isAsyncDistributionTimeoutModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkAsyncDistributionTimeout(int value) {
-    _checkIfModifiable(ASYNC_DISTRIBUTION_TIMEOUT_NAME);
-    if (value < MIN_ASYNC_DISTRIBUTION_TIMEOUT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {ASYNC_DISTRIBUTION_TIMEOUT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_ASYNC_DISTRIBUTION_TIMEOUT)}));
-    }
-    if (value > MAX_ASYNC_DISTRIBUTION_TIMEOUT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {ASYNC_DISTRIBUTION_TIMEOUT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_ASYNC_DISTRIBUTION_TIMEOUT)}));
-    }
-  }
-  public boolean isAsyncQueueTimeoutModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkAsyncQueueTimeout(int value) {
-    _checkIfModifiable(ASYNC_QUEUE_TIMEOUT_NAME);
-    if (value < MIN_ASYNC_QUEUE_TIMEOUT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {ASYNC_QUEUE_TIMEOUT_NAME, Integer.valueOf(value), Integer.valueOf(MIN_ASYNC_QUEUE_TIMEOUT)}));
-    }
-    if (value > MAX_ASYNC_QUEUE_TIMEOUT) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {ASYNC_QUEUE_TIMEOUT_NAME, Integer.valueOf(value), Integer.valueOf(MAX_ASYNC_QUEUE_TIMEOUT)}));
-    }
-  }
-  public boolean isAsyncMaxQueueSizeModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkAsyncMaxQueueSize(int value) {
-    _checkIfModifiable(ASYNC_MAX_QUEUE_SIZE_NAME);
-    if (value < MIN_ASYNC_MAX_QUEUE_SIZE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {ASYNC_MAX_QUEUE_SIZE_NAME, Integer.valueOf(value), Integer.valueOf(MIN_ASYNC_MAX_QUEUE_SIZE)}));
-    }
-    if (value > MAX_ASYNC_MAX_QUEUE_SIZE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {ASYNC_MAX_QUEUE_SIZE_NAME, Integer.valueOf(value), Integer.valueOf(MAX_ASYNC_MAX_QUEUE_SIZE)}));
-    }
-  }
-
   /** @since 5.7 */
-  protected void checkClientConflation(String value) {
+  @ConfigAttributeChecker(name=CLIENT_CONFLATION_PROP_NAME)
+  protected String checkClientConflation(String value) {
     if (! (value.equals(CLIENT_CONFLATION_PROP_VALUE_DEFAULT) ||
             value.equals(CLIENT_CONFLATION_PROP_VALUE_ON) ||
               value.equals(CLIENT_CONFLATION_PROP_VALUE_OFF)) ) {
       throw new IllegalArgumentException("Could not set \"" + CLIENT_CONFLATION_PROP_NAME + "\" to \"" + value + "\" because its value is not recognized");
     }
-  }
-  
-  /** @since 5.7 */
-  public boolean isClientConflationModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkDurableClientId(String value) {
-    _checkIfModifiable(DURABLE_CLIENT_ID_NAME);
-  }
-
-  public boolean isDurableClientIdModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkDurableClientTimeout(int value) {
-    _checkIfModifiable(DURABLE_CLIENT_TIMEOUT_NAME);
+    return value;
   }
 
-  public boolean isDurableClientTimeoutModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityClientAuthInit(String value) {
-    _checkIfModifiable(SECURITY_CLIENT_AUTH_INIT_NAME);
-  }
-
-  public boolean isSecurityClientAuthInitModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityClientAuthenticator(String value) {
-    _checkIfModifiable(SECURITY_CLIENT_AUTHENTICATOR_NAME);
-  }
-
-  public boolean isSecurityClientAuthenticatorModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityClientDHAlgo(String value) {
-    _checkIfModifiable(SECURITY_CLIENT_DHALGO_NAME);
-  }
-
-  public boolean isSecurityClientDHAlgoModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityPeerAuthInit(String value) {
-    _checkIfModifiable(SECURITY_PEER_AUTH_INIT_NAME);
+  @ConfigAttributeChecker(name=SECURITY_PEER_AUTH_INIT_NAME)
+  protected String checkSecurityPeerAuthInit(String value) {
     if (value != null && value.length() > 0 && getMcastPort() != 0) {
       String mcastInfo = MCAST_PORT_NAME + "[" + getMcastPort() + "]";
       throw new IllegalArgumentException(
         LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_2_MUST_BE_0_WHEN_SECURITY_IS_ENABLED
-          .toLocalizedString(new Object[] { 
+          .toLocalizedString(new Object[] {
              SECURITY_PEER_AUTH_INIT_NAME, value, mcastInfo }));
     }
+    return value;
   }
 
-  public boolean isSecurityPeerAuthInitModifiable() {
-    return _modifiableDefault();
-  }
 
-  protected void checkSecurityPeerAuthenticator(String value) {
-    _checkIfModifiable(SECURITY_PEER_AUTHENTICATOR_NAME);
+  @ConfigAttributeChecker(name=SECURITY_PEER_AUTHENTICATOR_NAME)
+  protected String checkSecurityPeerAuthenticator(String value) {
     if (value != null && value.length() > 0 && getMcastPort() != 0) {
        String mcastInfo = MCAST_PORT_NAME + "[" + getMcastPort() + "]";
       throw new IllegalArgumentException(
@@ -1166,219 +420,49 @@ public abstract class AbstractDistributionConfig
             value,
             mcastInfo}));
     }
+    return value;
   }
 
-  public boolean isSecurityPeerAuthenticatorModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityClientAccessor(String value) {
-    _checkIfModifiable(SECURITY_CLIENT_ACCESSOR_NAME);
-  }
-
-  public boolean isSecurityClientAccessorModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityClientAccessorPP(String value) {
-    _checkIfModifiable(SECURITY_CLIENT_ACCESSOR_PP_NAME);
-  }
-
-  public boolean isSecurityClientAccessorPPModifiable() {
-    return _modifiableDefault();
-  }
 
-  protected void checkSecurityLogLevel(int value) {
-    _checkIfModifiable(SECURITY_LOG_LEVEL_NAME);
+  @ConfigAttributeChecker(name=SECURITY_LOG_LEVEL_NAME)
+  protected int checkSecurityLogLevel(int value) {
     if (value < MIN_LOG_LEVEL) {
       throw new IllegalArgumentException(
         LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(
-          new Object[] { 
-              SECURITY_LOG_LEVEL_NAME, 
-              LogWriterImpl.levelToString(value), 
+          new Object[] {
+              SECURITY_LOG_LEVEL_NAME,
+              LogWriterImpl.levelToString(value),
               LogWriterImpl.levelToString(MIN_LOG_LEVEL)}));
     }
     if (value > MAX_LOG_LEVEL) {
       throw new IllegalArgumentException(
         LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(
-        new Object[] { 
-            SECURITY_LOG_LEVEL_NAME, 
-            LogWriterImpl.levelToString(value), 
+        new Object[] {
+            SECURITY_LOG_LEVEL_NAME,
+            LogWriterImpl.levelToString(value),
             LogWriterImpl.levelToString(MAX_LOG_LEVEL)}));
     }
+    return value;
   }
 
-  public boolean isSecurityLogLevelModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityLogFile(File value) {
-    _checkIfModifiable(SECURITY_LOG_FILE_NAME);
-  }
-
-  public boolean isSecurityLogFileModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkSecurityPeerMembershipTimeout(int value) {
-    _checkIfModifiable(SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME);
-    minMaxCheck(SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME, value,
-        0, MAX_SECURITY_PEER_VERIFYMEMBER_TIMEOUT);
-  }
-  
-  public boolean isSecurityPeerMembershipTimeoutModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkSecurity(String key, String value) {
-    _checkIfModifiable(key);
-  }
-
-  public boolean isSecurityModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkRemoveUnresponsiveClientModifiable() { 
-    _checkIfModifiable(REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME); 
-  } 
-
-  public boolean isRemoveUnresponsiveClientModifiable() { 
-    return _modifiableDefault(); 
-  } 
- 
-  /**
-   * @since 7.0
-   */
-  protected void checkGroups(String value) {
-    _checkIfModifiable(GROUPS_NAME);
-  }
-  /**
-   * @since 7.0
-   */
-  public boolean isGroupsModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkJmxManager() {
-    _checkIfModifiable(JMX_MANAGER_NAME);
-  }
-  @Override
-  public boolean isJmxManagerModifiable() {
-    return _modifiableDefault();
-  }
-
-  protected void checkJmxManagerStart() {
-    _checkIfModifiable(JMX_MANAGER_START_NAME);
-  }
-  @Override
-  public boolean isJmxManagerStartModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxSSLManagerEnabled() {
-    _checkIfModifiable(JMX_MANAGER_SSL_NAME);
-  }
-  protected void checkJmxManagerSSLEnabled() {
-    _checkIfModifiable(JMX_MANAGER_SSL_ENABLED_NAME);
-  }
-  public boolean isJmxManagerSSLEnabledModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerSSLCiphers() {
-    _checkIfModifiable(JMX_MANAGER_SSL_CIPHERS_NAME);
-  }
-  public boolean isJmxManagerSSLCiphersModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerSSLProtocols() {
-    _checkIfModifiable(JMX_MANAGER_SSL_PROTOCOLS_NAME);
-  }
-  public boolean isJmxManagerSSLProtocolsModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerSSLRequireAuthentication() {
-    _checkIfModifiable(JMX_MANAGER_SSL_REQUIRE_AUTHENTICATION_NAME);
-  }
-  public boolean isJmxManagerSSLRequireAuthenticationModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerPort(int value) {
-    minMaxCheck(JMX_MANAGER_PORT_NAME, value, 0, 65535);
-  }
-  @Override
-  public boolean isJmxManagerPortModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerBindAddress(String value) {
-    _checkIfModifiable(JMX_MANAGER_BIND_ADDRESS_NAME);
-  }
-  @Override
-  public boolean isJmxManagerBindAddressModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerHostnameForClients(String value) {
-    _checkIfModifiable(JMX_MANAGER_HOSTNAME_FOR_CLIENTS_NAME);
-  }
-  @Override
-  public boolean isJmxManagerHostnameForClientsModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerPasswordFile(String value) {
-    _checkIfModifiable(JMX_MANAGER_PASSWORD_FILE_NAME);
-  }
-  @Override
-  public boolean isJmxManagerPasswordFileModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkJmxManagerAccessFile(String value) {
-    _checkIfModifiable(JMX_MANAGER_ACCESS_FILE_NAME);
-  }
-  @Override
-  public boolean isJmxManagerAccessFileModifiable() {
-    return _modifiableDefault();
-  }
-  @Override
-  public boolean isJmxManagerHttpPortModifiable() {
-    //return _modifiableDefault();
-    return isHttpServicePortModifiable();
-  }
-  protected void checkJmxManagerHttpPort(int value) {
-    minMaxCheck(JMX_MANAGER_HTTP_PORT_NAME, value, 0, 65535);
-  }
-  protected void checkJmxManagerUpdateRate(int value) {
-    _checkIfModifiable(JMX_MANAGER_UPDATE_RATE_NAME);
-    if (value < MIN_JMX_MANAGER_UPDATE_RATE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_LESS_THAN_2.toLocalizedString(new Object[] {JMX_MANAGER_UPDATE_RATE_NAME, Integer.valueOf(value), Integer.valueOf(MIN_JMX_MANAGER_UPDATE_RATE)}));
-    }
-    if (value > MAX_JMX_MANAGER_UPDATE_RATE) {
-      throw new IllegalArgumentException(LocalizedStrings.AbstractDistributionConfig_COULD_NOT_SET_0_TO_1_BECAUSE_ITS_VALUE_CAN_NOT_BE_GREATER_THAN_2.toLocalizedString(new Object[] {JMX_MANAGER_UPDATE_RATE_NAME, Integer.valueOf(value), Integer.valueOf(MAX_JMX_MANAGER_UPDATE_RATE)}));
-    }
-  }
-  @Override
-  public boolean isJmxManagerUpdateRateModifiable() {
-    return _modifiableDefault();
-  }
-  protected void checkMemcachedPort(int value) {
-    minMaxCheck(MEMCACHED_PORT_NAME, value, 0, 65535);
-  }
-  public boolean isMemcachedPortModifiable() {
-    return _modifiableDefault();
-  }
 
-  protected void checkMemcachedProtocol(String protocol) {
+  @ConfigAttributeChecker(name=MEMCACHED_PROTOCOL_NAME)
+  protected String checkMemcachedProtocol(String protocol) {
     if (protocol == null
         || (!protocol.equalsIgnoreCase(GemFireMemcachedServer.Protocol.ASCII.name()) &&
             !protocol.equalsIgnoreCase(GemFireMemcachedServer.Protocol.BINARY.name()))) {
       throw new IllegalArgumentException(LocalizedStrings.
           AbstractDistributionConfig_MEMCACHED_PROTOCOL_MUST_BE_ASCII_OR_BINARY.toLocalizedString());
     }
+    return protocol;
   }
 
   public boolean isMemcachedProtocolModifiable() {
     return false;
   }
-  
-  protected void checkMemcachedBindAddress(String value) {
-    _checkIfModifiable(MEMCACHED_BIND_ADDRESS_NAME);
+
+  @ConfigAttributeChecker(name=MEMCACHED_BIND_ADDRESS_NAME)
+  protected String checkMemcachedBindAddress(String value) {
     if (value != null && value.length() > 0 &&
         !SocketCreator.isLocalHost(value)) {
       throw new IllegalArgumentException(
@@ -1386,92 +470,23 @@ public abstract class AbstractDistributionConfig
           .toLocalizedString(new Object[]{value, SocketCreator.getMyAddresses()
           }));
     }
+    return value;
   }
-  public boolean isMemcachedBindAddressModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkRedisPort(int value) {
-    minMaxCheck(REDIS_PORT_NAME, value, 0, 65535);
-  }
-  protected void checkRedisBindAddress(String value) {
-    _checkIfModifiable(REDIS_BIND_ADDRESS_NAME);
+
+  @ConfigAttributeChecker(name=REDIS_BIND_ADDRESS_NAME)
+  protected String checkRedisBindAddress(String value) {
     if (value != null && value.length() > 0 &&
-        !SocketCreator.isLocalHost(value)) {
+            !SocketCreator.isLocalHost(value)) {
       throw new IllegalArgumentException(
-          LocalizedStrings.AbstractDistributionConfig_REDIS_BIND_ADDRESS_0_INVALID_MUST_BE_IN_1
-          .toLocalizedString(new Object[]{value, SocketCreator.getMyAddresses()
-          }));
+              LocalizedStrings.AbstractDistributionConfig_REDIS_BIND_ADDRESS_0_INVALID_MUST_BE_IN_1
+                      .toLocalizedString(new Object[]{value, SocketCreator.getMyAddresses()
+                      }));
     }
-  }
-  
-  protected void checkRedisPassword(String value) {
-    
-  }
-  
-  public boolean isRedisBindAddressModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isRedisPortModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isRedisPasswordModifiable() {
-    return _modifiableDefault();
-  }
-
-  public boolean isOffHeapMemorySizeModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkOffHeapMemorySize(String value) {
-    _checkIfModifiable(OFF_HEAP_MEMORY_SIZE_NAME);
-  }
-  
-  protected void checkEnableSharedConfiguration() {
-    _checkIfModifiable(ENABLE_CLUSTER_CONFIGURATION_NAME);
-  }
-  
-  protected void checkUseSharedConfiguration() {
-    _checkIfModifiable(USE_CLUSTER_CONFIGURATION_NAME);
-  }
-  
-  protected void checkLoadSharedConfigFromDir() {
-    _checkIfModifiable(LOAD_CLUSTER_CONFIG_FROM_DIR_NAME);
-  }
-  
-  protected void checkClusterConfigDir() {
-    _checkIfModifiable(CLUSTER_CONFIGURATION_DIR);
-  }
-  
-  
-  public boolean isEnableSharedConfigurationModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isLoadSharedConfigFromDirModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isUseSharedConfigurationModifiable() {
-    return _modifiableDefault();
+    return value;
   }
 
-  public boolean isLockMemoryModifiable() {
-    return _modifiableDefault();
-  }
-  
-  public boolean isDistributedTransactionsModifiable() {
-    return _modifiableDefault();
-  }
-  
-  protected void checkLockMemory(final boolean value) {
-    _checkIfModifiable(LOCK_MEMORY_NAME);
-  }
-    
   // AbstractConfig overriding methods
-  
+
   @Override
   protected void checkAttributeName(String attName) {
     if(!attName.startsWith(SECURITY_PREFIX_NAME) && !attName.startsWith(USERDEFINED_PREFIX_NAME)
@@ -1479,1308 +494,149 @@ public abstract class AbstractDistributionConfig
       super.checkAttributeName(attName);
     }
   }
-  
-  
-  
-  // AbstractDistributionConfig methods
-
-  static final String[] dcValidAttributeNames;
-  static {
-    String[] myAtts = new String[] {
-      ACK_WAIT_THRESHOLD_NAME,
-      ACK_SEVERE_ALERT_THRESHOLD_NAME,
-      ARCHIVE_DISK_SPACE_LIMIT_NAME,
-      ARCHIVE_FILE_SIZE_LIMIT_NAME,
-      BIND_ADDRESS_NAME,
-      SERVER_BIND_ADDRESS_NAME,
-      CACHE_XML_FILE_NAME,
-      DEPLOY_WORKING_DIR,
-      LOG_DISK_SPACE_LIMIT_NAME,
-      LOG_FILE_NAME,
-      LOG_FILE_SIZE_LIMIT_NAME,
-      LOG_LEVEL_NAME, LOCATORS_NAME, LOCATOR_WAIT_TIME_NAME, REMOTE_LOCATORS_NAME,
-      MCAST_ADDRESS_NAME, MCAST_PORT_NAME, MCAST_TTL_NAME,
-      MCAST_SEND_BUFFER_SIZE_NAME, MCAST_RECV_BUFFER_SIZE_NAME,
-      MCAST_FLOW_CONTROL_NAME,
-      TCP_PORT_NAME,
-      SOCKET_LEASE_TIME_NAME, SOCKET_BUFFER_SIZE_NAME, CONSERVE_SOCKETS_NAME,
-      NAME_NAME,
-      ROLES_NAME,
-      STATISTIC_ARCHIVE_FILE_NAME, STATISTIC_SAMPLE_RATE_NAME,
-      STATISTIC_SAMPLING_ENABLED_NAME,
-      SSL_ENABLED_NAME,
-      SSL_PROTOCOLS_NAME,
-      SSL_CIPHERS_NAME,
-      SSL_REQUIRE_AUTHENTICATION_NAME,
-      CLUSTER_SSL_ENABLED_NAME,
-      CLUSTER_SSL_PROTOCOLS_NAME,
-      CLUSTER_SSL_CIPHERS_NAME,
-      CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME,
-      CLUSTER_SSL_KEYSTORE_NAME,CLUSTER_SSL_KEYSTORE_TYPE_NAME,CLUSTER_SSL_KEYSTORE_PASSWORD_NAME,CLUSTER_SSL_TRUSTSTORE_NAME,CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME,
-      UDP_SEND_BUFFER_SIZE_NAME, UDP_RECV_BUFFER_SIZE_NAME, UDP_FRAGMENT_SIZE_NAME,
-      DISABLE_TCP_NAME,
-      ENABLE_TIME_STATISTICS_NAME,
-      MEMBER_TIMEOUT_NAME,
-      MEMBERSHIP_PORT_RANGE_NAME,
-      MAX_WAIT_TIME_FOR_RECONNECT_NAME,
-      MAX_NUM_RECONNECT_TRIES,
-      ASYNC_DISTRIBUTION_TIMEOUT_NAME,
-      ASYNC_QUEUE_TIMEOUT_NAME,
-      ASYNC_MAX_QUEUE_SIZE_NAME,
-      START_LOCATOR_NAME,
-      CLIENT_CONFLATION_PROP_NAME,
-      DURABLE_CLIENT_ID_NAME,
-      DURABLE_CLIENT_TIMEOUT_NAME,
-//      DURABLE_CLIENT_KEEP_ALIVE_NAME,
-      ENABLE_NETWORK_PARTITION_DETECTION_NAME,
-      DISABLE_AUTO_RECONNECT_NAME,
-      SECURITY_CLIENT_AUTH_INIT_NAME,
-      SECURITY_CLIENT_AUTHENTICATOR_NAME,
-      SECURITY_CLIENT_DHALGO_NAME,
-      SECURITY_PEER_AUTH_INIT_NAME,
-      SECURITY_PEER_AUTHENTICATOR_NAME,
-      SECURITY_CLIENT_ACCESSOR_NAME,
-      SECURITY_CLIENT_ACCESSOR_PP_NAME,
-      SECURITY_LOG_LEVEL_NAME,
-      SECURITY_LOG_FILE_NAME,
-      SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME,
-      SECURITY_PREFIX_NAME,
-      REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME,
-      DELTA_PROPAGATION_PROP_NAME,
-      DISTRIBUTED_SYSTEM_ID_NAME,
-      ENFORCE_UNIQUE_HOST_NAME,
-      REDUNDANCY_ZONE_NAME,
-      GROUPS_NAME,
-      JMX_MANAGER_NAME,
-      JMX_MANAGER_START_NAME,
-      JMX_MANAGER_PORT_NAME,
-      JMX_MANAGER_SSL_NAME,
-      JMX_MANAGER_SSL_ENABLED_NAME,
-      JMX_MANAGER_SSL_PROTOCOLS_NAME,
-      JMX_MANAGER_SSL_CIPHERS_NAME,
-      JMX_MANAGER_SSL_REQUIRE_AUTHENTICATION_NAME,
-      JMX_MANAGER_SSL_KEYSTORE_NAME,JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME,JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME,JMX_MANAGER_SSL_TRUSTSTORE_NAME,JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME,
-      JMX_MANAGER_BIND_ADDRESS_NAME,
-      JMX_MANAGER_HOSTNAME_FOR_CLIENTS_NAME,
-      JMX_MANAGER_PASSWORD_FILE_NAME,
-      JMX_MANAGER_ACCESS_FILE_NAME,
-      JMX_MANAGER_HTTP_PORT_NAME,
-      JMX_MANAGER_UPDATE_RATE_NAME,
-      MEMCACHED_PORT_NAME,
-      MEMCACHED_PROTOCOL_NAME,
-      MEMCACHED_BIND_ADDRESS_NAME,
-      REDIS_PORT_NAME,
-      REDIS_BIND_ADDRESS_NAME,
-      REDIS_PASSWORD_NAME,
-      USER_COMMAND_PACKAGES,
-      ENABLE_CLUSTER_CONFIGURATION_NAME,
-      USE_CLUSTER_CONFIGURATION_NAME,
-      LOAD_CLUSTER_CONFIG_FROM_DIR_NAME,
-      CLUSTER_CONFIGURATION_DIR,
-      HTTP_SERVICE_PORT_NAME,
-      HTTP_SERVICE_BIND_ADDRESS_NAME,
-      START_DEV_REST_API_NAME,
-      SERVER_SSL_ENABLED_NAME,
-      SERVER_SSL_REQUIRE_AUTHENTICATION_NAME,
-      SERVER_SSL_PROTOCOLS_NAME,
-      SERVER_SSL_CIPHERS_NAME,
-      SERVER_SSL_KEYSTORE_NAME,SERVER_SSL_KEYSTORE_TYPE_NAME,SERVER_SSL_KEYSTORE_PASSWORD_NAME,SERVER_SSL_TRUSTSTORE_NAME,SERVER_SSL_TRUSTSTORE_PASSWORD_NAME,
-      GATEWAY_SSL_ENABLED_NAME,
-      GATEWAY_SSL_REQUIRE_AUTHENTICATION_NAME,
-      GATEWAY_SSL_PROTOCOLS_NAME,
-      GATEWAY_SSL_CIPHERS_NAME,
-      GATEWAY_SSL_KEYSTORE_NAME,GATEWAY_SSL_KEYSTORE_TYPE_NAME,GATEWAY_SSL_KEYSTORE_PASSWORD_NAME,GATEWAY_SSL_TRUSTSTORE_NAME,GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME,
-      HTTP_SERVICE_SSL_ENABLED_NAME,
-      HTTP_SERVICE_SSL_REQUIRE_AUTHENTICATION_NAME,
-      HTTP_SERVICE_SSL_PROTOCOLS_NAME,
-      HTTP_SERVICE_SSL_CIPHERS_NAME,
-      HTTP_SERVICE_SSL_KEYSTORE_NAME,HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME,HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME,HTTP_SERVICE_SSL_TRUSTSTORE_NAME,HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME,
-      OFF_HEAP_MEMORY_SIZE_NAME, 
-      LOCK_MEMORY_NAME,
-      DISTRIBUTED_TRANSACTIONS_NAME
-    };
-    List atts = Arrays.asList(myAtts);
-    Collections.sort(atts);
-    dcValidAttributeNames = (String[])atts.toArray(new String[atts.size()]);
-  }
 
   public static boolean isWellKnownAttribute(String attName) {
     return Arrays.binarySearch(dcValidAttributeNames, attName) >= 0;
   }
-  
+
   public void setAttributeObject(String attName, Object attValue, ConfigSource source) {
+    // TODO: the setters is already checking the parameter type, do we still need to do this?
     Class validValueClass = getAttributeType(attName);
     if (attValue != null) {
       // null is a "valid" value for any class
       if (!validValueClass.isInstance(attValue)) {
-        throw new InvalidValueException(LocalizedStrings.AbstractDistributionConfig_0_VALUE_1_MUST_BE_OF_TYPE_2.toLocalizedString(new Object[] {attName, attValue, validValueClass.getName()}));
+        throw new InvalidValueException(LocalizedStrings.AbstractDistributionConfig_0_VALUE_1_MUST_BE_OF_TYPE_2.toLocalizedString(new Object[]{attName, attValue, validValueClass.getName()}));
       }
     }
 
-    if (attName.equalsIgnoreCase(ACK_WAIT_THRESHOLD_NAME)) {
-      this.setAckWaitThreshold(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(ACK_SEVERE_ALERT_THRESHOLD_NAME)) {
-      this.setAckSevereAlertThreshold(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(ARCHIVE_DISK_SPACE_LIMIT_NAME)) {
-      this.setArchiveDiskSpaceLimit(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(ARCHIVE_FILE_SIZE_LIMIT_NAME)) {
-      this.setArchiveFileSizeLimit(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(CACHE_XML_FILE_NAME)) {
-      this.setCacheXmlFile((File)attValue);
-    } else if (attName.equalsIgnoreCase(DEPLOY_WORKING_DIR)) {
-      this.setDeployWorkingDir((File)attValue);
-    } else if (attName.equalsIgnoreCase(LOG_DISK_SPACE_LIMIT_NAME)) {
-      this.setLogDiskSpaceLimit(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(LOG_FILE_NAME)) {
-      this.setLogFile((File)attValue);
-    } else if (attName.equalsIgnoreCase(LOG_FILE_SIZE_LIMIT_NAME)) {
-      this.setLogFileSizeLimit(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(LOG_LEVEL_NAME)) {
-      this.setLogLevel(LogWriterImpl.levelNameToCode((String)attValue));
-    } else if (attName.equalsIgnoreCase(LOCATORS_NAME)) {
-      this.setLocators((String)attValue);
-    } else if (attName.equalsIgnoreCase(LOCATOR_WAIT_TIME_NAME)) {
-      this.setLocatorWaitTime(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(REMOTE_LOCATORS_NAME)) {
-      this.setRemoteLocators((String)attValue);
-    } else if (attName.equalsIgnoreCase(MCAST_ADDRESS_NAME)) {
-      this.setMcastAddress((InetAddress)attValue);
-    } else if (attName.equalsIgnoreCase(BIND_ADDRESS_NAME)) {
-      this.setBindAddress((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_BIND_ADDRESS_NAME)) {
-      this.setServerBindAddress((String)attValue);
-    } else if (attName.equalsIgnoreCase(TCP_PORT_NAME)) {
-      this.setTcpPort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MCAST_PORT_NAME)) {
-      this.setMcastPort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MCAST_TTL_NAME)) {
-      this.setMcastTtl(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(SOCKET_LEASE_TIME_NAME)) {
-      this.setSocketLeaseTime(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(SOCKET_BUFFER_SIZE_NAME)) {
-      this.setSocketBufferSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(CONSERVE_SOCKETS_NAME)) {
-      this.setConserveSockets(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(ROLES_NAME)) {
-      this.setRoles((String)attValue);
-    } else if (attName.equalsIgnoreCase(NAME_NAME)) {
-      this.setName((String)attValue);
-    } else if (attName.equalsIgnoreCase(STATISTIC_ARCHIVE_FILE_NAME)) {
-      this.setStatisticArchiveFile((File)attValue);
-    } else if (attName.equalsIgnoreCase(STATISTIC_SAMPLE_RATE_NAME)) {
-      this.setStatisticSampleRate(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(STATISTIC_SAMPLING_ENABLED_NAME)) {
-      this.setStatisticSamplingEnabled(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(SSL_ENABLED_NAME)) {
-      this.setSSLEnabled(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(SSL_PROTOCOLS_NAME)) {
-      this.setSSLProtocols((String)attValue);
-    } else if (attName.equalsIgnoreCase(SSL_CIPHERS_NAME)) {
-      this.setSSLCiphers((String)attValue);
-    } else if (attName.equalsIgnoreCase(SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      this.setSSLRequireAuthentication(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_ENABLED_NAME)) {
-      this.setClusterSSLEnabled(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_PROTOCOLS_NAME)) {
-      this.setClusterSSLProtocols((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_CIPHERS_NAME)) {
-      this.setClusterSSLCiphers((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      this.setClusterSSLRequireAuthentication(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_KEYSTORE_NAME)) {
-      this.setClusterSSLKeyStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_KEYSTORE_TYPE_NAME)) {
-      this.setClusterSSLKeyStoreType((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)) {
-      this.setClusterSSLKeyStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_TRUSTSTORE_NAME)) {
-      this.setClusterSSLTrustStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)) {
-      this.setClusterSSLTrustStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(MCAST_SEND_BUFFER_SIZE_NAME)) {
-      this.setMcastSendBufferSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MCAST_RECV_BUFFER_SIZE_NAME)) {
-      this.setMcastRecvBufferSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(UDP_SEND_BUFFER_SIZE_NAME)) {
-      this.setUdpSendBufferSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(UDP_RECV_BUFFER_SIZE_NAME)) {
-      this.setUdpRecvBufferSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MCAST_FLOW_CONTROL_NAME)) {
-      this.setMcastFlowControl((FlowControlParams)attValue);
-    } else if (attName.equalsIgnoreCase(UDP_FRAGMENT_SIZE_NAME)) {
-      this.setUdpFragmentSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(DISABLE_TCP_NAME)) {
-      this.setDisableTcp(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(ENABLE_TIME_STATISTICS_NAME)) {
-      this.setEnableTimeStatistics(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(MEMBER_TIMEOUT_NAME)) {
-      this.setMemberTimeout(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MEMBERSHIP_PORT_RANGE_NAME)) {
-      this.setMembershipPortRange((int[])attValue);
-    } else if (attName.equalsIgnoreCase(MAX_WAIT_TIME_FOR_RECONNECT_NAME)){
-      this.setMaxWaitTimeForReconnect(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MAX_NUM_RECONNECT_TRIES)){
-      this.setMaxNumReconnectTries(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(ASYNC_DISTRIBUTION_TIMEOUT_NAME)) {
-      this.setAsyncDistributionTimeout(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(ASYNC_QUEUE_TIMEOUT_NAME)) {
-      this.setAsyncQueueTimeout(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(ASYNC_MAX_QUEUE_SIZE_NAME)) {
-      this.setAsyncMaxQueueSize(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(START_LOCATOR_NAME)) {
-      this.setStartLocator((String)attValue);
-    } else if (attName.equalsIgnoreCase(CLIENT_CONFLATION_PROP_NAME)) {
-      this.setClientConflation((String)attValue);
-    } else if (attName.equalsIgnoreCase(DURABLE_CLIENT_ID_NAME)) {
-      this.setDurableClientId((String)attValue);
-    } else if (attName.equalsIgnoreCase(DURABLE_CLIENT_TIMEOUT_NAME)) {
-      this.setDurableClientTimeout(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(SECURITY_CLIENT_AUTH_INIT_NAME)) {
-      this.setSecurityClientAuthInit((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_CLIENT_AUTHENTICATOR_NAME)) {
-      this.setSecurityClientAuthenticator((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_CLIENT_DHALGO_NAME)) {
-      this.setSecurityClientDHAlgo((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_PEER_AUTH_INIT_NAME)) {
-      this.setSecurityPeerAuthInit((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_PEER_AUTHENTICATOR_NAME)) {
-      this.setSecurityPeerAuthenticator((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_CLIENT_ACCESSOR_NAME)) {
-      this.setSecurityClientAccessor((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_CLIENT_ACCESSOR_PP_NAME)) {
-      this.setSecurityClientAccessorPP((String)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_LOG_LEVEL_NAME)) {
-      this.setSecurityLogLevel(LogWriterImpl.levelNameToCode((String)attValue));
-    } else if (attName.equalsIgnoreCase(SECURITY_LOG_FILE_NAME)) {
-      this.setSecurityLogFile((File)attValue);
-    } else if (attName.equalsIgnoreCase(SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME)) {
-      this.setSecurityPeerMembershipTimeout(((Integer)attValue).intValue());      
-    } else if (attName.startsWith(SECURITY_PREFIX_NAME)) {
-      this.setSecurity(attName,(String)attValue);
-    } else if (attName.equalsIgnoreCase(ENABLE_NETWORK_PARTITION_DETECTION_NAME)) {
-      this.setEnableNetworkPartitionDetection(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(DISABLE_AUTO_RECONNECT_NAME)) {
-      this.setDisableAutoReconnect(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME)) {
-      this.setRemoveUnresponsiveClient(((Boolean)attValue).booleanValue());
-    } else if (attName.startsWith(DELTA_PROPAGATION_PROP_NAME)) {
-      this.setDeltaPropagation((((Boolean)attValue).booleanValue()));    
-    } else if (attName.startsWith(DISTRIBUTED_SYSTEM_ID_NAME)) {
-      this.setDistributedSystemId((Integer)attValue);
-    } else if (attName.startsWith(REDUNDANCY_ZONE_NAME)) {
-      this.setRedundancyZone((String)attValue);
-    } else if (attName.startsWith(ENFORCE_UNIQUE_HOST_NAME)) {
-      this.setEnforceUniqueHost(((Boolean)attValue).booleanValue());
-    } else if (attName.startsWith(USERDEFINED_PREFIX_NAME)) {
+    if (attName.startsWith(USERDEFINED_PREFIX_NAME)) {
       //Do nothing its user defined property.
-    } else if (attName.startsWith(SSL_SYSTEM_PROPS_NAME) || attName.startsWith(SYS_PROP_NAME)) {
-      this.setSSLProperty(attName, (String)attValue);
-    } else if (attName.equalsIgnoreCase(GROUPS_NAME)) {
-      this.setGroups((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_NAME)) {
-      this.setJmxManager((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_START_NAME)) {
-      this.setJmxManagerStart((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_NAME)) {
-      this.setJmxManagerSSL((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_ENABLED_NAME)) {
-      this.setJmxManagerSSLEnabled((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      this.setJmxManagerSSLRequireAuthentication((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_PROTOCOLS_NAME)) {
-      this.setJmxManagerSSLProtocols((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_CIPHERS_NAME)) {
-      this.setJmxManagerSSLCiphers((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_KEYSTORE_NAME)) {
-      this.setJmxManagerSSLKeyStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME)) {
-      this.setJmxManagerSSLKeyStoreType((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME)) {
-      this.setJmxManagerSSLKeyStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_TRUSTSTORE_NAME)) {
-      this.setJmxManagerSSLTrustStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME)) {
-      this.setJmxManagerSSLTrustStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_PORT_NAME)) {
-      this.setJmxManagerPort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_BIND_ADDRESS_NAME)) {
-      this.setJmxManagerBindAddress((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_HOSTNAME_FOR_CLIENTS_NAME)) {
-      this.setJmxManagerHostnameForClients((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_PASSWORD_FILE_NAME)) {
-      this.setJmxManagerPasswordFile((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_ACCESS_FILE_NAME)) {
-      this.setJmxManagerAccessFile((String)attValue);
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_HTTP_PORT_NAME)) {
-      this.setJmxManagerHttpPort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(JMX_MANAGER_UPDATE_RATE_NAME)) {
-      this.setJmxManagerUpdateRate(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MEMCACHED_PORT_NAME)) {
-      this.setMemcachedPort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(MEMCACHED_PROTOCOL_NAME)) {
-      this.setMemcachedProtocol((String)attValue);
-    } else if (attName.equalsIgnoreCase(MEMCACHED_BIND_ADDRESS_NAME)) {
-      this.setMemcachedBindAddress((String)attValue);
-    } else if (attName.equalsIgnoreCase(REDIS_PORT_NAME)) {
-      this.setRedisPort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(REDIS_BIND_ADDRESS_NAME)) {
-      this.setRedisBindAddress((String)attValue);
-    } else if (attName.equalsIgnoreCase(REDIS_PASSWORD_NAME)) {
-      this.setRedisPassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(USER_COMMAND_PACKAGES)) {
-      this.setUserCommandPackages((String)attValue);
-    } else if (attName.equalsIgnoreCase(ENABLE_CLUSTER_CONFIGURATION_NAME)) {
-      this.setEnableClusterConfiguration(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(LOAD_CLUSTER_CONFIG_FROM_DIR_NAME)) {
-      this.setLoadClusterConfigFromDir(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(USE_CLUSTER_CONFIGURATION_NAME)) {
-      this.setUseSharedConfiguration(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(CLUSTER_CONFIGURATION_DIR)) {
-      this.setClusterConfigDir((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_ENABLED_NAME)) {
-      this.setServerSSLEnabled((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      this.setServerSSLRequireAuthentication((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_PROTOCOLS_NAME)) {
-      this.setServerSSLProtocols((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_CIPHERS_NAME)) {
-      this.setServerSSLCiphers((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_KEYSTORE_NAME)) {
-      this.setServerSSLKeyStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_KEYSTORE_TYPE_NAME)) {
-      this.setServerSSLKeyStoreType((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_KEYSTORE_PASSWORD_NAME)) {
-      this.setServerSSLKeyStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_TRUSTSTORE_NAME)) {
-      this.setServerSSLTrustStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(SERVER_SSL_TRUSTSTORE_PASSWORD_NAME)) {
-      this.setServerSSLTrustStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_ENABLED_NAME)) {
-      this.setGatewaySSLEnabled((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      this.setGatewaySSLRequireAuthentication((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_PROTOCOLS_NAME)) {
-      this.setGatewaySSLProtocols((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_CIPHERS_NAME)) {
-      this.setGatewaySSLCiphers((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_KEYSTORE_NAME)) {
-      this.setGatewaySSLKeyStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_KEYSTORE_TYPE_NAME)) {
-      this.setGatewaySSLKeyStoreType((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_KEYSTORE_PASSWORD_NAME)) {
-      this.setGatewaySSLKeyStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_TRUSTSTORE_NAME)) {
-      this.setGatewaySSLTrustStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME)) {
-      this.setGatewaySSLTrustStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_PORT_NAME)) {
-       this.setHttpServicePort(((Integer)attValue).intValue());
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_BIND_ADDRESS_NAME)) {
-      this.setHttpServiceBindAddress((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_ENABLED_NAME)) {
-      this.setHttpServiceSSLEnabled((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      this.setHttpServiceSSLRequireAuthentication((((Boolean)attValue).booleanValue()));
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_PROTOCOLS_NAME)) {
-      this.setHttpServiceSSLProtocols((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_CIPHERS_NAME)) {
-      this.setHttpServiceSSLCiphers((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_KEYSTORE_NAME)) {
-      this.setHttpServiceSSLKeyStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME)) {
-      this.setHttpServiceSSLKeyStoreType((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME)) {
-      this.setHttpServiceSSLKeyStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_TRUSTSTORE_NAME)) {
-      this.setHttpServiceSSLTrustStore((String)attValue);
-    } else if (attName.equalsIgnoreCase(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME)) {
-      this.setHttpServiceSSLTrustStorePassword((String)attValue);
-    } else if (attName.equalsIgnoreCase(START_DEV_REST_API_NAME)) {
-      this.setStartDevRestApi(((Boolean)attValue).booleanValue());
-    } else if (attName.equalsIgnoreCase(OFF_HEAP_MEMORY_SIZE_NAME)) {
-      this.setOffHeapMemorySize((String)attValue);
-    } else if (attName.equalsIgnoreCase(LOCK_MEMORY_NAME)) {
-      this.setLockMemory((Boolean)attValue);
-    } else if (attName.equalsIgnoreCase(DISTRIBUTED_TRANSACTIONS_NAME)) {
-      this.setDistributedTransactions(((Boolean)attValue).booleanValue());
-    } else {
+      return;
+    }
+
+    // special case: log-level and security-log-level attributes are String type, but the setter accepts int
+    if(attName.equalsIgnoreCase(LOG_LEVEL_NAME) || attName.equalsIgnoreCase(SECURITY_LOG_LEVEL_NAME)){
+      attValue = LogWriterImpl.levelNameToCode((String)attValue);
+    }
+
+    Method setter = setters.get(attName);
+    if (setter == null) {
+      // if we cann't find the defined setter, look for two more special cases
+      if (attName.startsWith(SECURITY_PREFIX_NAME)) {
+        this.setSecurity(attName,(String)attValue);
+        getAttSourceMap().put(attName, source);
+        return;
+      }
+      if (attName.startsWith(SSL_SYSTEM_PROPS_NAME) || attName.startsWith(SYS_PROP_NAME)) {
+        this.setSSLProperty(attName, (String) attValue);
+        getAttSourceMap().put(attName, source);
+        return;
+      }
       throw new InternalGemFireException(LocalizedStrings.AbstractDistributionConfig_UNHANDLED_ATTRIBUTE_NAME_0.toLocalizedString(attName));
     }
+
+    Class[] pTypes = setter.getParameterTypes();
+    if (pTypes.length != 1)
+      throw new InternalGemFireException("the attribute setter must have one and only one parametter");
+
+
+    try {
+      setter.invoke(this, attValue);
+    } catch (Exception e) {
+      if(e instanceof RuntimeException){
+        throw (RuntimeException)e;
+      }
+      if(e.getCause() instanceof RuntimeException){
+        throw (RuntimeException)e.getCause();
+      }
+      else
+        throw new InternalGemFireException("error invoking "+setter.getName()+" with "+attValue, e);
+    }
+
     getAttSourceMap().put(attName, source);
   }
 
   public Object getAttributeObject(String attName) {
     checkAttributeName(attName);
-    if (attName.equalsIgnoreCase(ACK_WAIT_THRESHOLD_NAME)) {
-      return Integer.valueOf(this.getAckWaitThreshold());
-    } else if (attName.equalsIgnoreCase(ACK_SEVERE_ALERT_THRESHOLD_NAME)) {
-      return Integer.valueOf(this.getAckSevereAlertThreshold());
-    } else if (attName.equalsIgnoreCase(ARCHIVE_DISK_SPACE_LIMIT_NAME)) {
-      return Integer.valueOf(this.getArchiveDiskSpaceLimit());
-    } else if (attName.equalsIgnoreCase(ARCHIVE_FILE_SIZE_LIMIT_NAME)) {
-      return Integer.valueOf(this.getArchiveFileSizeLimit());
-    } else if (attName.equalsIgnoreCase(CACHE_XML_FILE_NAME)) {
-      return this.getCacheXmlFile();
-    } else if (attName.equalsIgnoreCase(DEPLOY_WORKING_DIR)) {
-      return this.getDeployWorkingDir();
-    } else if (attName.equalsIgnoreCase(LOG_DISK_SPACE_LIMIT_NAME)) {
-      return Integer.valueOf(this.getLogDiskSpaceLimit());
-    } else if (attName.equalsIgnoreCase(LOG_FILE_NAME)) {
-      return this.getLogFile();
-    } else if (attName.equalsIgnoreCase(LOG_FILE_SIZE_LIMIT_NAME)) {
-      return Integer.valueOf(this.getLogFileSizeLimit());
-    } else if (attName.equalsIgnoreCase(LOG_LEVEL_NAME)) {
+
+    // special case:
+    if (attName.equalsIgnoreCase(LOG_LEVEL_NAME)) {
       return LogWriterImpl.levelToString(this.getLogLevel());
-    } else if (attName.equalsIgnoreCase(LOCATORS_NAME)) {
-      return this.getLocators();
-    } else if (attName.equalsIgnoreCase(LOCATOR_WAIT_TIME_NAME)) {
-      return Integer.valueOf(this.getLocatorWaitTime());
-    } else if (attName.equalsIgnoreCase(REMOTE_LOCATORS_NAME)) {
-      return this.getRemoteLocators();
-    } else if (attName.equalsIgnoreCase(MCAST_ADDRESS_NAME)) {
-      return this.getMcastAddress();
-    } else if (attName.equalsIgnoreCase(BIND_ADDRESS_NAME)) {
-      return this.getBindAddress();
-    } else if (attName.equalsIgnoreCase(SERVER_BIND_ADDRESS_NAME)) {
-      return this.getServerBindAddress();
-    } else if (attName.equalsIgnoreCase(TCP_PORT_NAME)) {
-      return Integer.valueOf(this.getTcpPort());
-    } else if (attName.equalsIgnoreCase(MCAST_PORT_NAME)) {
-      return Integer.valueOf(this.getMcastPort());
-    } else if (attName.equalsIgnoreCase(MCAST_TTL_NAME)) {
-      return Integer.valueOf(this.getMcastTtl());
-    } else if (attName.equalsIgnoreCase(SOCKET_LEASE_TIME_NAME)) {
-      return Integer.valueOf(this.getSocketLeaseTime());
-    } else if (attName.equalsIgnoreCase(SOCKET_BUFFER_SIZE_NAME)) {
-      return Integer.valueOf(this.getSocketBufferSize());
-    } else if (attName.equalsIgnoreCase(CONSERVE_SOCKETS_NAME)) {
-      return Boolean.valueOf(this.getConserveSockets());
-    } else if (attName.equalsIgnoreCase(ROLES_NAME)) {
-      return this.getRoles();
-    } else if (attName.equalsIgnoreCase(NAME_NAME)) {
-      return this.getName();
-    } else if (attName.equalsIgnoreCase(STATISTIC_ARCHIVE_FILE_NAME)) {
-      return this.getStatisticArchiveFile();
-    } else if (attName.equalsIgnoreCase(STATISTIC_SAMPLE_RATE_NAME)) {
-      return Integer.valueOf(this.getStatisticSampleRate());
-    } else if (attName.equalsIgnoreCase(STATISTIC_SAMPLING_ENABLED_NAME)) {
-      return Boolean.valueOf(this.getStatisticSamplingEnabled());
-    } else if (attName.equalsIgnoreCase(SSL_ENABLED_NAME)) {
-      return this.getSSLEnabled() ? Boolean.TRUE : Boolean.FALSE;
-    } else if (attName.equalsIgnoreCase(SSL_PROTOCOLS_NAME)) {
-      return this.getSSLProtocols();
-    } else if (attName.equalsIgnoreCase(SSL_CIPHERS_NAME)) {
-      return this.getSSLCiphers();
-    } else if (attName.equalsIgnoreCase(SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      return this.getSSLRequireAuthentication() ? Boolean.TRUE : Boolean.FALSE;
-    }  else if (attName.equalsIgnoreCase(CLUSTER_SSL_ENABLED_NAME)) {
-      return this.getClusterSSLEnabled() ? Boolean.TRUE : Boolean.FALSE;
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_PROTOCOLS_NAME)) {
-      return this.getClusterSSLProtocols();
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_CIPHERS_NAME)) {
-      return this.getClusterSSLCiphers();
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)) {
-      return this.getClusterSSLRequireAuthentication() ? Boolean.TRUE : Boolean.FALSE;
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_KEYSTORE_NAME)) {
-      return this.getClusterSSLKeyStore();
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_KEYSTORE_TYPE_NAME)) {
-      return this.getClusterSSLKeyStoreType();
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)) {
-      return this.getClusterSSLKeyStorePassword();
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_TRUSTSTORE_NAME)) {
-      return this.getClusterSSLTrustStore();
-    } else if (attName.equalsIgnoreCase(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)) {
-      return this.getClusterSSLTrustStorePassword();
-    } else if (attName.equalsIgnoreCase(MCAST_SEND_BUFFER_SIZE_NAME)) {


<TRUNCATED>


[2/5] incubator-geode git commit: GEODE-913: refactor AbstractDistributionConfig

Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
index f8ff21a..3af8c15 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
@@ -17,10 +17,6 @@
 
 package com.gemstone.gemfire.distributed.internal;
 
-import java.io.File;
-import java.net.InetAddress;
-import java.util.Properties;
-
 import com.gemstone.gemfire.distributed.DistributedSystem;
 import com.gemstone.gemfire.internal.Config;
 import com.gemstone.gemfire.internal.ConfigSource;
@@ -29,6 +25,12 @@ import com.gemstone.gemfire.internal.logging.LogConfig;
 import com.gemstone.gemfire.internal.tcp.Connection;
 import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
 
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.util.*;
+
 /**
  * Provides accessor (and in some cases mutator) methods for the
  * various GemFire distribution configuration properties.  The
@@ -49,7 +51,6 @@ import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
  */
 public interface DistributionConfig extends Config, LogConfig {
 
-
   ////////////////////  Instance Methods  ////////////////////
 
   /**
@@ -62,7 +63,9 @@ public interface DistributionConfig extends Config, LogConfig {
    * <p> The default value is: {@link #DEFAULT_NAME}.
    * @return the system's name.
    */
+  @ConfigAttributeGetter(name=NAME_NAME)
   public String getName();
+
   /**
    * Sets the member's name.
    * <p> The name can not be changed while the system is running.
@@ -71,16 +74,15 @@ public interface DistributionConfig extends Config, LogConfig {
    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
    *   when writing to the system's configuration file.
    */
+  @ConfigAttributeSetter(name=NAME_NAME)
   public void setName(String value);
-  /**
-   * Returns true if the value of the <code>name</code> attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isNameModifiable();
+
   /** The name of the "name" property */
+  @ConfigAttribute(type=String.class)
   public static final String NAME_NAME = "name";
 
+
+
   /**
    * The default system name.
    * <p> Actual value of this constant is <code>""</code>.
@@ -92,22 +94,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#mcast-port">"mcast-port"</a>
    * property
    */
+  @ConfigAttributeGetter(name=MCAST_PORT_NAME)
   public int getMcastPort();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#mcast-port">"mcast-port"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MCAST_PORT_NAME)
   public void setMcastPort(int value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isMcastPortModifiable();
 
-  /** The name of the "mcastPort" property */
-  public static final String MCAST_PORT_NAME = "mcast-port";
 
   /** The default value of the "mcastPort" property */
   public static final int DEFAULT_MCAST_PORT = 0;
@@ -122,27 +118,25 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final int MAX_MCAST_PORT = 65535;
 
+  /** The name of the "mcastPort" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_MCAST_PORT, max=MAX_MCAST_PORT)
+  public static final String MCAST_PORT_NAME = "mcast-port";
 
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#tcp-port">"tcp-port"</a>
    * property
    */
+  @ConfigAttributeGetter(name=TCP_PORT_NAME)
   public int getTcpPort();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#tcp-port">"tcp-port"</a>
    * property
    */
+  @ConfigAttributeSetter(name=TCP_PORT_NAME)
   public void setTcpPort(int value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isTcpPortModifiable();
-  /** The name of the "tcpPort" property */
-  public static final String TCP_PORT_NAME = "tcp-port";
+
   /** The default value of the "tcpPort" property */
   public static final int DEFAULT_TCP_PORT = 0;
   /**
@@ -155,28 +149,28 @@ public interface DistributionConfig extends Config, LogConfig {
    * <p> Actual value of this constant is <code>65535</code>.
    */
   public static final int MAX_TCP_PORT = 65535;
-
+  /** The name of the "tcpPort" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_TCP_PORT, max=MAX_TCP_PORT)
+  public static final String TCP_PORT_NAME = "tcp-port";
 
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#mcast-address">"mcast-address"</a>
    * property
    */
+  @ConfigAttributeGetter(name=MCAST_ADDRESS_NAME)
   public InetAddress getMcastAddress();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#mcast-address">"mcast-address"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MCAST_ADDRESS_NAME)
   public void setMcastAddress(InetAddress value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isMcastAddressModifiable();
+
 
   /** The name of the "mcastAddress" property */
+  @ConfigAttribute(type=InetAddress.class)
   public static final String MCAST_ADDRESS_NAME = "mcast-address";
 
   /** The default value of the "mcastAddress" property.
@@ -189,22 +183,15 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#mcast-ttl">"mcast-ttl"</a>
    * property
    */
+  @ConfigAttributeGetter(name=MCAST_TTL_NAME)
   public int getMcastTtl();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#mcast-ttl">"mcast-ttl"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MCAST_TTL_NAME)
   public void setMcastTtl(int value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isMcastTtlModifiable();
-
-  /** The name of the "mcastTtl" property */
-  public static final String MCAST_TTL_NAME = "mcast-ttl";
 
   /** The default value of the "mcastTtl" property */
   public static final int DEFAULT_MCAST_TTL = 32;
@@ -218,32 +205,28 @@ public interface DistributionConfig extends Config, LogConfig {
    * <p> Actual value of this constant is <code>255</code>.
    */
   public static final int MAX_MCAST_TTL = 255;
-  
-  
-  public static final int MIN_DISTRIBUTED_SYSTEM_ID = -1;
-  
-  public static final int MAX_DISTRIBUTED_SYSTEM_ID = 255;
+
+  /** The name of the "mcastTtl" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_MCAST_TTL, max=MAX_MCAST_TTL)
+  public static final String MCAST_TTL_NAME = "mcast-ttl";
 
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#bind-address">"bind-address"</a>
    * property
    */
+  @ConfigAttributeGetter(name=BIND_ADDRESS_NAME)
   public String getBindAddress();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#bind-address">"bind-address"</a>
    * property
    */
+  @ConfigAttributeSetter(name=BIND_ADDRESS_NAME)
   public void setBindAddress(String value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isBindAddressModifiable();
 
   /** The name of the "bindAddress" property */
+  @ConfigAttribute(type=String.class)
   public static final String BIND_ADDRESS_NAME = "bind-address";
 
   /** The default value of the "bindAddress" property.
@@ -256,21 +239,18 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#server-bind-address">"server-bind-address"</a>
    * property
    */
+  @ConfigAttributeGetter(name=SERVER_BIND_ADDRESS_NAME)
   public String getServerBindAddress();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#server-bind-address">"server-bind-address"</a>
    * property
    */
+  @ConfigAttributeSetter(name=SERVER_BIND_ADDRESS_NAME)
   public void setServerBindAddress(String value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isServerBindAddressModifiable();
 
   /** The name of the "serverBindAddress" property */
+  @ConfigAttribute(type=String.class)
   public static final String SERVER_BIND_ADDRESS_NAME = "server-bind-address";
 
   /** The default value of the "serverBindAddress" property.
@@ -282,6 +262,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns the value of the <a
    * href="../DistributedSystem.html#locators">"locators"</a> property
    */
+  @ConfigAttributeGetter(name=LOCATORS_NAME)
   public String getLocators();
   /**
    * Sets the system's locator list.
@@ -295,15 +276,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
    *   when writing to the system's configuration file.
    */
+  @ConfigAttributeSetter(name=LOCATORS_NAME)
   public void setLocators(String value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isLocatorsModifiable();
 
   /** The name of the "locators" property */
+  @ConfigAttribute(type=String.class)
   public static final String LOCATORS_NAME = "locators";
 
   /** The default value of the "locators" property */
@@ -313,17 +290,20 @@ public interface DistributionConfig extends Config, LogConfig {
    * Locator wait time - how long to wait for a locator to start before giving up &
    * throwing a GemFireConfigException
    */
+  @ConfigAttribute(type=Integer.class)
   public static final String LOCATOR_WAIT_TIME_NAME = "locator-wait-time";
-  public static final int DEFAULT_LOCATOR_WAIT_TIME = 0; 
+  public static final int DEFAULT_LOCATOR_WAIT_TIME = 0;
+  @ConfigAttributeGetter(name=LOCATOR_WAIT_TIME_NAME)
   public int getLocatorWaitTime();
+  @ConfigAttributeSetter(name=LOCATOR_WAIT_TIME_NAME)
   public void setLocatorWaitTime(int seconds);
-  public boolean isLocatorWaitTimeModifiable();
   
   
   /**
    * returns the value of the <a href="../DistribytedSystem.html#start-locator">"start-locator"
    * </a> property
    */
+  @ConfigAttributeGetter(name=START_LOCATOR_NAME)
   public String getStartLocator();
   /**
    * Sets the start-locator property.  This is a string in the form
@@ -331,15 +311,13 @@ public interface DistributionConfig extends Config, LogConfig {
    * a locator prior to connecting
    * @param value must be of the form <code>hostName[portNum]</code>
    */
+  @ConfigAttributeSetter(name=START_LOCATOR_NAME)
   public void setStartLocator(String value);
-  /**
-   * returns true if the value of the attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isStartLocatorModifiable();
+
   /**
    * The name of the "start-locator" property
    */
+  @ConfigAttribute(type=String.class)
   public static final String START_LOCATOR_NAME = "start-locator";
   /**
    * The default value of the "start-locator" property
@@ -350,6 +328,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns the value of the <a
    * href="../DistributedSystem.html#deploy-working-dir">"deploy-working-dir"</a> property
    */
+  @ConfigAttributeGetter(name=DEPLOY_WORKING_DIR)
   public File getDeployWorkingDir();
   
   /**
@@ -359,17 +338,13 @@ public interface DistributionConfig extends Config, LogConfig {
    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
    *   when writing to the system's configuration file.
    */
+  @ConfigAttributeSetter(name=DEPLOY_WORKING_DIR)
   public void setDeployWorkingDir(File value);
   
   /**
-   * Returns true if the value of the deploy-working-dir attribute can 
-   * currently be modified. Some attributes can not be modified while the system is running.
-   */
-  public boolean isDeployWorkingDirModifiable();
-  
-  /**
    * The name of the "deploy-working-dir" property.
    */
+  @ConfigAttribute(type=File.class)
   public static final String DEPLOY_WORKING_DIR = "deploy-working-dir";
   
   /**
@@ -382,6 +357,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns the value of the <a
    * href="../DistributedSystem.html#user-command-packages">"user-command-packages"</a> property
    */
+  @ConfigAttributeGetter(name=USER_COMMAND_PACKAGES)
   public String getUserCommandPackages();
   
   /**
@@ -391,17 +367,13 @@ public interface DistributionConfig extends Config, LogConfig {
    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
    *   when writing to the system's configuration file.
    */
+  @ConfigAttributeSetter(name=USER_COMMAND_PACKAGES)
   public void setUserCommandPackages(String value);
   
   /**
-   * Returns true if the value of the user-command-packages attribute can 
-   * currently be modified. Some attributes can not be modified while the system is running.
-   */
-  public boolean isUserCommandPackagesModifiable();
-  
-  /**
    * The name of the "user-command-packages" property.
    */
+  @ConfigAttribute(type=String.class)
   public static final String USER_COMMAND_PACKAGES = "user-command-packages";
   
   /**
@@ -416,6 +388,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * @return <code>null</code> if logging information goes to standard
    *         out
    */
+  @ConfigAttributeGetter(name=LOG_FILE_NAME)
   public File getLogFile();
   /**
    * Sets the system's log file.
@@ -426,14 +399,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
    *   when writing to the system's configuration file.
    */
+  @ConfigAttributeSetter(name=LOG_FILE_NAME)
   public void setLogFile(File value);
-  /**
-   * Returns true if the value of the logFile attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isLogFileModifiable();
+
   /** The name of the "logFile" property */
+  @ConfigAttribute(type=File.class)
   public static final String LOG_FILE_NAME = "log-file";
 
   /**
@@ -449,6 +419,7 @@ public interface DistributionConfig extends Config, LogConfig {
    *
    * @see com.gemstone.gemfire.internal.logging.LogWriterImpl
    */
+  @ConfigAttributeGetter(name=LOG_LEVEL_NAME)
   public int getLogLevel();
   /**
    * Sets the value of the <a
@@ -456,19 +427,10 @@ public interface DistributionConfig extends Config, LogConfig {
    *
    * @see com.gemstone.gemfire.internal.logging.LogWriterImpl
    */
+  @ConfigAttributeSetter(name=LOG_LEVEL_NAME)
   public void setLogLevel(int value);
 
   /**
-   * Returns true if the value of the logLevel attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isLogLevelModifiable();
-
-  /** The name of the "logLevel" property */
-  public static final String LOG_LEVEL_NAME = "log-level";
-
-  /**
    * The default log level.
    * <p> Actual value of this constant is {@link InternalLogWriter#CONFIG_LEVEL}.
    */
@@ -484,23 +446,26 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final int MAX_LOG_LEVEL = InternalLogWriter.NONE_LEVEL;
 
+  /** The name of the "logLevel" property */
+  // type is String because the config file contains "config", "debug", "fine" etc, not a code, but the setter/getter accepts int
+  @ConfigAttribute(type=String.class)
+  public static final String LOG_LEVEL_NAME = "log-level";
+
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#statistic-sampling-enabled">"statistic-sampling-enabled"</a>
    * property
    */
+  @ConfigAttributeGetter(name=STATISTIC_SAMPLING_ENABLED_NAME)
   public boolean getStatisticSamplingEnabled();
   /**
    * Sets StatisticSamplingEnabled
    */
+  @ConfigAttributeSetter(name=STATISTIC_SAMPLING_ENABLED_NAME)
   public void setStatisticSamplingEnabled(boolean newValue);
-  /**
-   * Returns true if the value of the StatisticSamplingEnabled attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isStatisticSamplingEnabledModifiable();
+
   /** The name of the "statisticSamplingEnabled" property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String STATISTIC_SAMPLING_ENABLED_NAME =
     "statistic-sampling-enabled";
 
@@ -512,19 +477,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#statistic-sample-rate">"statistic-sample-rate"</a>
    * property
    */
+  @ConfigAttributeGetter(name=STATISTIC_SAMPLE_RATE_NAME)
   public int getStatisticSampleRate();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#statistic-sample-rate">"statistic-sample-rate"</a>
    * property
    */
+  @ConfigAttributeSetter(name=STATISTIC_SAMPLE_RATE_NAME)
   public void setStatisticSampleRate(int value);
-  /**
-   * Returns true if the value of the statisticSampleRate attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isStatisticSampleRateModifiable();
+
   /**
    * The default statistic sample rate.
    * <p> Actual value of this constant is <code>1000</code> milliseconds.
@@ -542,6 +504,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final int MAX_STATISTIC_SAMPLE_RATE = 60000;
 
   /** The name of the "statisticSampleRate" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_STATISTIC_SAMPLE_RATE, max=MAX_STATISTIC_SAMPLE_RATE)
   public static final String STATISTIC_SAMPLE_RATE_NAME =
     "statistic-sample-rate";
 
@@ -550,18 +513,16 @@ public interface DistributionConfig extends Config, LogConfig {
    *
    * @return <code>null</code> if no file was specified
    */
+  @ConfigAttributeGetter(name=STATISTIC_ARCHIVE_FILE_NAME)
   public File getStatisticArchiveFile();
   /**
    * Sets the value of the <a href="../DistributedSystem.html#statistic-archive-file">"statistic-archive-file"</a> property.
    */
+  @ConfigAttributeSetter(name=STATISTIC_ARCHIVE_FILE_NAME)
   public void setStatisticArchiveFile(File value);
-  /**
-   * Returns true if the value of the statisticArchiveFile attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isStatisticArchiveFileModifiable();
+
   /** The name of the "statisticArchiveFile" property */
+  @ConfigAttribute(type=File.class)
   public static final String STATISTIC_ARCHIVE_FILE_NAME =
     "statistic-archive-file";
 
@@ -578,20 +539,18 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cache-xml-file">"cache-xml-file"</a>
    * property
    */
+  @ConfigAttributeGetter(name=CACHE_XML_FILE_NAME)
   public File getCacheXmlFile();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#cache-xml-file">"cache-xml-file"</a>
    * property
    */
+  @ConfigAttributeSetter(name=CACHE_XML_FILE_NAME)
   public void setCacheXmlFile(File value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isCacheXmlFileModifiable();
+
   /** The name of the "cacheXmlFile" property */
+  @ConfigAttribute(type=File.class)
   public static final String CACHE_XML_FILE_NAME = "cache-xml-file";
 
   /** The default value of the "cacheXmlFile" property */
@@ -602,6 +561,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#ack-wait-threshold">"ack-wait-threshold"</a>
    * property
    */
+  @ConfigAttributeGetter(name=ACK_WAIT_THRESHOLD_NAME)
   public int getAckWaitThreshold();
 
   /**
@@ -610,15 +570,8 @@ public interface DistributionConfig extends Config, LogConfig {
    * property
      * Setting this value too low will cause spurious alerts.
      */
+  @ConfigAttributeSetter(name=ACK_WAIT_THRESHOLD_NAME)
   public void setAckWaitThreshold(int newThreshold);
-  /**
-   * Returns true if the value of the AckWaitThreshold attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isAckWaitThresholdModifiable();
-  /** The name of the "ackWaitThreshold" property */
-  public static final String ACK_WAIT_THRESHOLD_NAME = "ack-wait-threshold";
 
   /**
    * The default AckWaitThreshold.
@@ -635,12 +588,17 @@ public interface DistributionConfig extends Config, LogConfig {
    * <p> Actual value of this constant is <code>MAX_INT</code> seconds.
    */
   public static final int MAX_ACK_WAIT_THRESHOLD = Integer.MAX_VALUE;
+  /** The name of the "ackWaitThreshold" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ACK_WAIT_THRESHOLD)
+  public static final String ACK_WAIT_THRESHOLD_NAME = "ack-wait-threshold";
+
 
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#ack-severe-alert-threshold">"ack-severe-alert-threshold"</a>
    * property
    */
+  @ConfigAttributeGetter(name=ACK_SEVERE_ALERT_THRESHOLD_NAME)
   public int getAckSevereAlertThreshold();
 
   /**
@@ -649,15 +607,9 @@ public interface DistributionConfig extends Config, LogConfig {
    * property
      * Setting this value too low will cause spurious forced disconnects.
      */
+  @ConfigAttributeSetter(name=ACK_SEVERE_ALERT_THRESHOLD_NAME)
   public void setAckSevereAlertThreshold(int newThreshold);
-  /**
-   * Returns true if the value of the ackSevereAlertThreshold attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isAckSevereAlertThresholdModifiable();
-  /** The name of the "ackSevereAlertThreshold" property */
-  public static final String ACK_SEVERE_ALERT_THRESHOLD_NAME = "ack-severe-alert-threshold";
+
   /**
    * The default ackSevereAlertThreshold.
    * <p> Actual value of this constant is <code>0</code> seconds, which
@@ -675,26 +627,25 @@ public interface DistributionConfig extends Config, LogConfig {
    * <p> Actual value of this constant is <code>MAX_INT</code> seconds.
    */
   public static final int MAX_ACK_SEVERE_ALERT_THRESHOLD = Integer.MAX_VALUE;
-
+  /** The name of the "ackSevereAlertThreshold" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ACK_SEVERE_ALERT_THRESHOLD)
+  public static final String ACK_SEVERE_ALERT_THRESHOLD_NAME = "ack-severe-alert-threshold";
 
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#archive-file-size-limit">"archive-file-size-limit"</a>
    * property
    */
+  @ConfigAttributeGetter(name=ARCHIVE_FILE_SIZE_LIMIT_NAME)
   public int getArchiveFileSizeLimit();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#archive-file-size-limit">"archive-file-size-limit"</a>
    * property
    */
+  @ConfigAttributeSetter(name=ARCHIVE_FILE_SIZE_LIMIT_NAME)
   public void setArchiveFileSizeLimit(int value);
-  /**
-   * Returns true if the value of the ArchiveFileSizeLimit attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isArchiveFileSizeLimitModifiable();
+
   /**
    * The default statistic archive file size limit.
    * <p> Actual value of this constant is <code>0</code> megabytes.
@@ -712,6 +663,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final int MAX_ARCHIVE_FILE_SIZE_LIMIT = 1000000;
 
   /** The name of the "ArchiveFileSizeLimit" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ARCHIVE_FILE_SIZE_LIMIT, max=MAX_ARCHIVE_FILE_SIZE_LIMIT)
   public static final String ARCHIVE_FILE_SIZE_LIMIT_NAME =
     "archive-file-size-limit";
   /**
@@ -719,19 +671,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#archive-disk-space-limit">"archive-disk-space-limit"</a>
    * property
    */
+  @ConfigAttributeGetter(name=ARCHIVE_DISK_SPACE_LIMIT_NAME)
   public int getArchiveDiskSpaceLimit();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#archive-disk-space-limit">"archive-disk-space-limit"</a>
    * property
    */
+  @ConfigAttributeSetter(name=ARCHIVE_DISK_SPACE_LIMIT_NAME)
   public void setArchiveDiskSpaceLimit(int value);
-  /**
-   * Returns true if the value of the ArchiveDiskSpaceLimit attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isArchiveDiskSpaceLimitModifiable();
+
   /**
    * The default archive disk space limit.
    * <p> Actual value of this constant is <code>0</code> megabytes.
@@ -749,6 +698,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final int MAX_ARCHIVE_DISK_SPACE_LIMIT = 1000000;
 
   /** The name of the "ArchiveDiskSpaceLimit" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ARCHIVE_DISK_SPACE_LIMIT, max=MAX_ARCHIVE_DISK_SPACE_LIMIT)
   public static final String ARCHIVE_DISK_SPACE_LIMIT_NAME =
     "archive-disk-space-limit";
   /**
@@ -756,19 +706,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#log-file-size-limit">"log-file-size-limit"</a>
    * property
    */
+  @ConfigAttributeGetter(name=LOG_FILE_SIZE_LIMIT_NAME)
   public int getLogFileSizeLimit();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#log-file-size-limit">"log-file-size-limit"</a>
    * property
    */
+  @ConfigAttributeSetter(name=LOG_FILE_SIZE_LIMIT_NAME)
   public void setLogFileSizeLimit(int value);
-  /**
-   * Returns true if the value of the LogFileSizeLimit attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isLogFileSizeLimitModifiable();
+
   /**
    * The default log file size limit.
    * <p> Actual value of this constant is <code>0</code> megabytes.
@@ -786,6 +733,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final int MAX_LOG_FILE_SIZE_LIMIT = 1000000;
 
   /** The name of the "LogFileSizeLimit" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_LOG_FILE_SIZE_LIMIT, max=MAX_LOG_FILE_SIZE_LIMIT)
   public static final String LOG_FILE_SIZE_LIMIT_NAME =
     "log-file-size-limit";
 
@@ -794,19 +742,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#log-disk-space-limit">"log-disk-space-limit"</a>
    * property
    */
+  @ConfigAttributeGetter(name=LOG_DISK_SPACE_LIMIT_NAME)
   public int getLogDiskSpaceLimit();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#log-disk-space-limit">"log-disk-space-limit"</a>
    * property
    */
+  @ConfigAttributeSetter(name=LOG_DISK_SPACE_LIMIT_NAME)
   public void setLogDiskSpaceLimit(int value);
-  /**
-   * Returns true if the value of the LogDiskSpaceLimit attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isLogDiskSpaceLimitModifiable();
+
   /**
    * The default log disk space limit.
    * <p> Actual value of this constant is <code>0</code> megabytes.
@@ -824,6 +769,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final int MAX_LOG_DISK_SPACE_LIMIT = 1000000;
 
   /** The name of the "LogDiskSpaceLimit" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_LOG_DISK_SPACE_LIMIT, max=MAX_LOG_DISK_SPACE_LIMIT)
   public static final String LOG_DISK_SPACE_LIMIT_NAME =
     "log-disk-space-limit";
 
@@ -833,6 +779,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #getClusterSSLEnabled} instead.
    */
+  @ConfigAttributeGetter(name=SSL_ENABLED_NAME)
   public boolean getSSLEnabled();
 
   /**
@@ -845,6 +792,7 @@ public interface DistributionConfig extends Config, LogConfig {
   /** The name of the "SSLEnabled" property 
    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_ENABLED_NAME} instead.
    */
+  @ConfigAttribute(type=Boolean.class)
   public static final String SSL_ENABLED_NAME =
     "ssl-enabled";
 
@@ -854,6 +802,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #setClusterSSLEnabled} instead.
    */
+  @ConfigAttributeSetter(name=SSL_ENABLED_NAME)
   public void setSSLEnabled( boolean enabled );
 
   /**
@@ -862,6 +811,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #getClusterSSLProtocols} instead.
    */
+  @ConfigAttributeGetter(name=SSL_PROTOCOLS_NAME)
    public String getSSLProtocols( );
 
   /**
@@ -870,6 +820,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #setClusterSSLProtocols} instead.
    */
+  @ConfigAttributeSetter(name=SSL_PROTOCOLS_NAME)
    public void setSSLProtocols( String protocols );
 
   /**
@@ -881,6 +832,7 @@ public interface DistributionConfig extends Config, LogConfig {
   /** The name of the "SSLProtocols" property 
    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_PROTOCOLS_NAME} instead.
    */
+  @ConfigAttribute(type=String.class)
   public static final String SSL_PROTOCOLS_NAME =
     "ssl-protocols";
 
@@ -890,6 +842,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #getClusterSSLCiphers} instead.
    */
+  @ConfigAttributeGetter(name=SSL_CIPHERS_NAME)
    public String getSSLCiphers( );
 
   /**
@@ -898,6 +851,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #setClusterSSLCiphers} instead.
    */
+  @ConfigAttributeSetter(name=SSL_CIPHERS_NAME)
    public void setSSLCiphers( String ciphers );
 
    /**
@@ -909,6 +863,7 @@ public interface DistributionConfig extends Config, LogConfig {
   /** The name of the "SSLCiphers" property 
    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_CIPHERS_NAME} instead.
    */
+  @ConfigAttribute(type=String.class)
   public static final String SSL_CIPHERS_NAME =
     "ssl-ciphers";
 
@@ -918,6 +873,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #getClusterSSLRequireAuthentication} instead.
    */
+  @ConfigAttributeGetter(name=SSL_REQUIRE_AUTHENTICATION_NAME)
    public boolean getSSLRequireAuthentication( );
 
   /**
@@ -926,6 +882,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @deprecated as of 8.0 use {@link #setClusterSSLRequireAuthentication} instead.
    */
+  @ConfigAttributeSetter(name=SSL_REQUIRE_AUTHENTICATION_NAME)
    public void setSSLRequireAuthentication( boolean enabled );
 
    /**
@@ -937,6 +894,7 @@ public interface DistributionConfig extends Config, LogConfig {
   /** The name of the "SSLRequireAuthentication" property 
    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME} instead.
    */
+  @ConfigAttribute(type=Boolean.class)
   public static final String SSL_REQUIRE_AUTHENTICATION_NAME =
     "ssl-require-authentication";
 
@@ -945,6 +903,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-enabled">"cluster-ssl-enabled"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_ENABLED_NAME)
   public boolean getClusterSSLEnabled();
 
   /**
@@ -952,7 +911,8 @@ public interface DistributionConfig extends Config, LogConfig {
    * <p> Actual value of this constant is <code>false</code>.
    */
   public static final boolean DEFAULT_CLUSTER_SSL_ENABLED = false;
-    /** The name of the "ClusterSSLEnabled" property */
+  /** The name of the "ClusterSSLEnabled" property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String CLUSTER_SSL_ENABLED_NAME =
     "cluster-ssl-enabled";
 
@@ -961,6 +921,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-enabled">"cluster-ssl-enabled"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_ENABLED_NAME)
   public void setClusterSSLEnabled( boolean enabled );
 
   /**
@@ -968,6 +929,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-protocols">"cluster-ssl-protocols"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_PROTOCOLS_NAME)
    public String getClusterSSLProtocols( );
 
   /**
@@ -975,6 +937,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-protocols">"cluster-ssl-protocols"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_PROTOCOLS_NAME)
    public void setClusterSSLProtocols( String protocols );
 
   /**
@@ -983,6 +946,7 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final String DEFAULT_CLUSTER_SSL_PROTOCOLS = "any";
   /** The name of the "ClusterSSLProtocols" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_PROTOCOLS_NAME =
     "cluster-ssl-protocols";
 
@@ -991,6 +955,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-ciphers">"cluster-ssl-ciphers"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_CIPHERS_NAME)
    public String getClusterSSLCiphers( );
 
   /**
@@ -998,6 +963,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-ciphers">"cluster-ssl-ciphers"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_CIPHERS_NAME)
    public void setClusterSSLCiphers( String ciphers );
 
    /**
@@ -1006,6 +972,7 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final String DEFAULT_CLUSTER_SSL_CIPHERS = "any";
   /** The name of the "ClusterSSLCiphers" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_CIPHERS_NAME =
     "cluster-ssl-ciphers";
 
@@ -1014,6 +981,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-require-authentication">"cluster-ssl-require-authentication"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)
    public boolean getClusterSSLRequireAuthentication( );
 
   /**
@@ -1021,6 +989,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-require-authentication">"cluster-ssl-require-authentication"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)
    public void setClusterSSLRequireAuthentication( boolean enabled );
 
    /**
@@ -1029,6 +998,7 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final boolean DEFAULT_CLUSTER_SSL_REQUIRE_AUTHENTICATION = true;
   /** The name of the "ClusterSSLRequireAuthentication" property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME =
     "cluster-ssl-require-authentication";
 
@@ -1038,6 +1008,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-keystore">"cluster-ssl-keystore"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_KEYSTORE_NAME)
   public String getClusterSSLKeyStore( );
   
   /**
@@ -1045,6 +1016,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-keystore">"cluster-ssl-keystore"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_KEYSTORE_NAME)
   public void setClusterSSLKeyStore( String keyStore);
   
   /**
@@ -1054,6 +1026,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final String DEFAULT_CLUSTER_SSL_KEYSTORE = "";
   
   /** The name of the "ClusterSSLKeyStore" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_KEYSTORE_NAME = "cluster-ssl-keystore";
   
   /**
@@ -1061,6 +1034,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-keystore-type">"cluster-ssl-keystore-type"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_KEYSTORE_TYPE_NAME)
   public String getClusterSSLKeyStoreType( );
   
   /**
@@ -1068,6 +1042,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-keystore-type">"cluster-ssl-keystore-type"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_KEYSTORE_TYPE_NAME)
   public void setClusterSSLKeyStoreType( String keyStoreType);
   
   /**
@@ -1077,6 +1052,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final String DEFAULT_CLUSTER_SSL_KEYSTORE_TYPE = "";
   
   /** The name of the "ClusterSSLKeyStoreType" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_KEYSTORE_TYPE_NAME = "cluster-ssl-keystore-type";
   
   /**
@@ -1084,6 +1060,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-keystore-password">"cluster-ssl-keystore-password"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)
   public String getClusterSSLKeyStorePassword( );
   
   /**
@@ -1091,6 +1068,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-keystore-password">"cluster-ssl-keystore-password"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)
   public void setClusterSSLKeyStorePassword( String keyStorePassword);
   
   /**
@@ -1100,6 +1078,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final String DEFAULT_CLUSTER_SSL_KEYSTORE_PASSWORD = "";
   
   /** The name of the "ClusterSSLKeyStorePassword" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_KEYSTORE_PASSWORD_NAME = "cluster-ssl-keystore-password";
   
   /**
@@ -1107,6 +1086,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-truststore">"cluster-ssl-truststore"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_TRUSTSTORE_NAME)
   public String getClusterSSLTrustStore( );
   
   /**
@@ -1114,6 +1094,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-truststore">"cluster-ssl-truststore"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_TRUSTSTORE_NAME)
   public void setClusterSSLTrustStore( String trustStore);
   
   /**
@@ -1123,6 +1104,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final String DEFAULT_CLUSTER_SSL_TRUSTSTORE = "";
   
   /** The name of the "ClusterSSLTrustStore" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_TRUSTSTORE_NAME = "cluster-ssl-truststore";
   
   /**
@@ -1130,6 +1112,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-truststore-password">"cluster-ssl-truststore-password"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)
   public String getClusterSSLTrustStorePassword( );
   
   /**
@@ -1137,6 +1120,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#cluster-ssl-truststore-password">"cluster-ssl-truststore-password"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)
   public void setClusterSSLTrustStorePassword( String trusStorePassword);
   /**
    * The default cluster-ssl-truststore-password value.
@@ -1145,6 +1129,7 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final String DEFAULT_CLUSTER_SSL_TRUSTSTORE_PASSWORD = "";
   
   /** The name of the "ClusterSSLKeyStorePassword" property */
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME = "cluster-ssl-truststore-password";
   
   
@@ -1213,22 +1198,17 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#socket-lease-time">"socket-lease-time"</a>
    * property
    */
+  @ConfigAttributeGetter(name=SOCKET_LEASE_TIME_NAME)
   public int getSocketLeaseTime();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#socket-lease-time">"socket-lease-time"</a>
    * property
    */
+  @ConfigAttributeSetter(name=SOCKET_LEASE_TIME_NAME)
   public void setSocketLeaseTime(int value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isSocketLeaseTimeModifiable();
 
-  /** The name of the "socketLeaseTime" property */
-  public static final String SOCKET_LEASE_TIME_NAME = "socket-lease-time";
+
 
   /** The default value of the "socketLeaseTime" property */
   public static final int DEFAULT_SOCKET_LEASE_TIME = 60000;
@@ -1243,27 +1223,25 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final int MAX_SOCKET_LEASE_TIME = 600000;
 
+  /** The name of the "socketLeaseTime" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_SOCKET_LEASE_TIME, max=MAX_SOCKET_LEASE_TIME)
+  public static final String SOCKET_LEASE_TIME_NAME = "socket-lease-time";
+
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#socket-buffer-size">"socket-buffer-size"</a>
    * property
    */
+  @ConfigAttributeGetter(name=SOCKET_BUFFER_SIZE_NAME)
   public int getSocketBufferSize();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#socket-buffer-size">"socket-buffer-size"</a>
    * property
    */
+  @ConfigAttributeSetter(name=SOCKET_BUFFER_SIZE_NAME)
   public void setSocketBufferSize(int value);
-  /**
-   * Returns true if the value of the
-   * attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isSocketBufferSizeModifiable();
 
-  /** The name of the "socketBufferSize" property */
-  public static final String SOCKET_BUFFER_SIZE_NAME = "socket-buffer-size";
 
   /** The default value of the "socketBufferSize" property */
   public static final int DEFAULT_SOCKET_BUFFER_SIZE = 32768;
@@ -1281,11 +1259,17 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final boolean VALIDATE = Boolean.getBoolean("gemfire.validateMessageSize");
   public static final int VALIDATE_CEILING = Integer.getInteger("gemfire.validateMessageSizeCeiling",  8 * 1024 * 1024).intValue();
 
+  /** The name of the "socketBufferSize" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_SOCKET_BUFFER_SIZE, max=MAX_SOCKET_BUFFER_SIZE)
+  public static final String SOCKET_BUFFER_SIZE_NAME = "socket-buffer-size";
+
+
   /**
    * Get the value of the
    * <a href="../DistributedSystem.html#mcast-send-buffer-size">"mcast-send-buffer-size"</a>
    * property
    */
+  @ConfigAttributeGetter(name=MCAST_SEND_BUFFER_SIZE_NAME)
   public int getMcastSendBufferSize();
 
   /**
@@ -1293,18 +1277,9 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#mcast-send-buffer-size">"mcast-send-buffer-size"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MCAST_SEND_BUFFER_SIZE_NAME)
   public void setMcastSendBufferSize(int value);
 
-  /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isMcastSendBufferSizeModifiable();
-
-  /**
-   * The name of the corresponding property
-   */
-  public static final String MCAST_SEND_BUFFER_SIZE_NAME = "mcast-send-buffer-size";
 
   /**
    * The default value of the corresponding property
@@ -1319,10 +1294,17 @@ public interface DistributionConfig extends Config, LogConfig {
   public static final int MIN_MCAST_SEND_BUFFER_SIZE = 2048;
 
   /**
+   * The name of the corresponding property
+   */
+  @ConfigAttribute(type=Integer.class, min=MIN_MCAST_SEND_BUFFER_SIZE)
+  public static final String MCAST_SEND_BUFFER_SIZE_NAME = "mcast-send-buffer-size";
+
+  /**
    * Get the value of the
    * <a href="../DistributedSystem.html#mcast-recv-buffer-size">"mcast-recv-buffer-size"</a>
    * property
    */
+  @ConfigAttributeGetter(name=MCAST_RECV_BUFFER_SIZE_NAME)
   public int getMcastRecvBufferSize();
 
   /**
@@ -1330,18 +1312,9 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#mcast-recv-buffer-size">"mcast-recv-buffer-size"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MCAST_RECV_BUFFER_SIZE_NAME)
   public void setMcastRecvBufferSize(int value);
 
-  /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isMcastRecvBufferSizeModifiable();
-
-  /**
-   * The name of the corresponding property
-   */
-  public static final String MCAST_RECV_BUFFER_SIZE_NAME = "mcast-recv-buffer-size";
 
   /**
    * The default value of the corresponding property
@@ -1354,7 +1327,11 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final int MIN_MCAST_RECV_BUFFER_SIZE = 2048;
 
-
+  /**
+   * The name of the corresponding property
+   */
+  @ConfigAttribute(type=Integer.class, min=MIN_MCAST_RECV_BUFFER_SIZE)
+  public static final String MCAST_RECV_BUFFER_SIZE_NAME = "mcast-recv-buffer-size";
 
 
   /**
@@ -1362,6 +1339,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#mcast-flow-control">"mcast-flow-control"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=MCAST_FLOW_CONTROL_NAME)
   public FlowControlParams getMcastFlowControl();
 
   /**
@@ -1369,17 +1347,13 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#mcast-flow-control">"mcast-flow-control"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MCAST_FLOW_CONTROL_NAME)
   public void setMcastFlowControl(FlowControlParams values);
 
   /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isMcastFlowControlModifiable();
-
-  /**
    * The name of the corresponding property
    */
+  @ConfigAttribute(type=FlowControlParams.class)
   public static final String MCAST_FLOW_CONTROL_NAME = "mcast-flow-control";
 
   /**
@@ -1423,6 +1397,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#udp-fragment-size">"udp-fragment-size"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=UDP_FRAGMENT_SIZE_NAME)
   public int getUdpFragmentSize();
 
   /**
@@ -1430,20 +1405,10 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#udp-fragment-size">"udp-fragment-size"</a>
    * property
    */
+  @ConfigAttributeSetter(name=UDP_FRAGMENT_SIZE_NAME)
   public void setUdpFragmentSize(int value);
 
   /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isUdpFragmentSizeModifiable();
-
-  /**
-   * The name of the corresponding property
-   */
-  public static final String UDP_FRAGMENT_SIZE_NAME = "udp-fragment-size";
-
-  /**
    * The default value of the corresponding property
    */
   public static final int DEFAULT_UDP_FRAGMENT_SIZE = 60000;
@@ -1456,7 +1421,11 @@ public interface DistributionConfig extends Config, LogConfig {
   */
   public static final int MAX_UDP_FRAGMENT_SIZE = 60000;
 
-
+  /**
+   * The name of the corresponding property
+   */
+  @ConfigAttribute(type=Integer.class, min=MIN_UDP_FRAGMENT_SIZE, max=MAX_UDP_FRAGMENT_SIZE)
+  public static final String UDP_FRAGMENT_SIZE_NAME = "udp-fragment-size";
 
 
 
@@ -1466,6 +1435,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#udp-send-buffer-size">"udp-send-buffer-size"</a>
    * property
    */
+  @ConfigAttributeGetter(name=UDP_SEND_BUFFER_SIZE_NAME)
   public int getUdpSendBufferSize();
 
   /**
@@ -1473,20 +1443,10 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#udp-send-buffer-size">"udp-send-buffer-size"</a>
    * property
    */
+  @ConfigAttributeSetter(name=UDP_SEND_BUFFER_SIZE_NAME)
   public void setUdpSendBufferSize(int value);
 
   /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isUdpSendBufferSizeModifiable();
-
-  /**
-   * The name of the corresponding property
-   */
-  public static final String UDP_SEND_BUFFER_SIZE_NAME = "udp-send-buffer-size";
-
-  /**
    * The default value of the corresponding property
    */
   public static final int DEFAULT_UDP_SEND_BUFFER_SIZE = 65535;
@@ -1497,13 +1457,18 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final int MIN_UDP_SEND_BUFFER_SIZE = 2048;
 
-
+  /**
+   * The name of the corresponding property
+   */
+  @ConfigAttribute(type=Integer.class, min=MIN_UDP_SEND_BUFFER_SIZE)
+  public static final String UDP_SEND_BUFFER_SIZE_NAME = "udp-send-buffer-size";
 
   /**
    * Get the value of the
    * <a href="../DistributedSystem.html#udp-recv-buffer-size">"udp-recv-buffer-size"</a>
    * property
    */
+  @ConfigAttributeGetter(name=UDP_RECV_BUFFER_SIZE_NAME)
   public int getUdpRecvBufferSize();
 
   /**
@@ -1511,20 +1476,10 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#udp-recv-buffer-size">"udp-recv-buffer-size"</a>
    * property
    */
+  @ConfigAttributeSetter(name=UDP_RECV_BUFFER_SIZE_NAME)
   public void setUdpRecvBufferSize(int value);
 
   /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isUdpRecvBufferSizeModifiable();
-
-  /**
-   * The name of the corresponding property
-   */
-  public static final String UDP_RECV_BUFFER_SIZE_NAME = "udp-recv-buffer-size";
-
-  /**
    * The default value of the unicast receive buffer size property
    */
   public static final int DEFAULT_UDP_RECV_BUFFER_SIZE = 1048576;
@@ -1543,24 +1498,28 @@ public interface DistributionConfig extends Config, LogConfig {
 
 
   /**
+   * The name of the corresponding property
+   */
+  @ConfigAttribute(type=Integer.class, min=MIN_UDP_RECV_BUFFER_SIZE)
+  public static final String UDP_RECV_BUFFER_SIZE_NAME = "udp-recv-buffer-size";
+
+  /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#disable-tcp">"disable-tcp"</a>
    * property
    */
+  @ConfigAttributeGetter(name=DISABLE_TCP_NAME)
   public boolean getDisableTcp();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#disable-tcp">"disable-tcp"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=DISABLE_TCP_NAME)
   public void setDisableTcp(boolean newValue);
-  /**
-   * Returns true if the value of the DISABLE_TCP attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isDisableTcpModifiable();
+
   /** The name of the corresponding property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String DISABLE_TCP_NAME = "disable-tcp";
 
   /** The default value of the corresponding property */
@@ -1570,6 +1529,7 @@ public interface DistributionConfig extends Config, LogConfig {
   /**
    * Turns on timing statistics for the distributed system
    */
+  @ConfigAttributeSetter(name=ENABLE_TIME_STATISTICS_NAME)
   public void setEnableTimeStatistics(boolean newValue);
 
   /**
@@ -1577,9 +1537,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#enable-time-statistics">enable-time-statistics</a>
    * property
    */
+  @ConfigAttributeGetter(name=ENABLE_TIME_STATISTICS_NAME)
   public boolean getEnableTimeStatistics();
 
   /** the name of the corresponding property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String ENABLE_TIME_STATISTICS_NAME = "enable-time-statistics";
 
   /** The default value of the corresponding property */
@@ -1590,7 +1552,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Sets the value for 
    <a href="../DistributedSystem.html#use-cluster-configuration">use-shared-configuration</a>
    */
-  
+  @ConfigAttributeSetter(name=USE_CLUSTER_CONFIGURATION_NAME)
   public void setUseSharedConfiguration(boolean newValue);
 
   /**
@@ -1598,9 +1560,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#use-cluster-configuration">use-cluster-configuration</a>
    * property
    */
+  @ConfigAttributeGetter(name=USE_CLUSTER_CONFIGURATION_NAME)
   public boolean getUseSharedConfiguration();
 
   /** the name of the corresponding property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String USE_CLUSTER_CONFIGURATION_NAME = "use-cluster-configuration";
 
   /** The default value of the corresponding property */
@@ -1610,7 +1574,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Sets the value for 
    <a href="../DistributedSystem.html#enable-cluster-configuration">enable-cluster-configuration</a>
    */
-  
+  @ConfigAttributeSetter(name=ENABLE_CLUSTER_CONFIGURATION_NAME)
   public void setEnableClusterConfiguration(boolean newValue);
 
   /**
@@ -1618,13 +1582,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#enable-cluster-configuration">enable-cluster-configuration</a>
    * property
    */
+  @ConfigAttributeGetter(name=ENABLE_CLUSTER_CONFIGURATION_NAME)
   public boolean getEnableClusterConfiguration();
 
   /** the name of the corresponding property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String ENABLE_CLUSTER_CONFIGURATION_NAME = "enable-cluster-configuration";
   /** The default value of the corresponding property */
   public static final boolean DEFAULT_ENABLE_CLUSTER_CONFIGURATION = true;
-  
+
+  @ConfigAttribute(type=Boolean.class)
   public static final String LOAD_CLUSTER_CONFIG_FROM_DIR_NAME = "load-cluster-configuration-from-dir";
   public static final boolean DEFAULT_LOAD_CLUSTER_CONFIG_FROM_DIR = false;
   
@@ -1633,6 +1600,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#cluster-configuration-dir">cluster-configuration-dir</a>
    * property
    */
+  @ConfigAttributeGetter(name=LOAD_CLUSTER_CONFIG_FROM_DIR_NAME)
   public boolean getLoadClusterConfigFromDir();
   
   /**
@@ -1640,21 +1608,28 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#cluster-configuration-dir">cluster-configuration-dir</a>
    * property
    */
+  @ConfigAttributeSetter(name=LOAD_CLUSTER_CONFIG_FROM_DIR_NAME)
   public void setLoadClusterConfigFromDir(boolean newValue);
-  
+
+  @ConfigAttribute(type=String.class)
   public static final String CLUSTER_CONFIGURATION_DIR = "cluster-configuration-dir";
   public static final String DEFAULT_CLUSTER_CONFIGURATION_DIR = System.getProperty("user.dir");
-  
-  public String getClusterConfigDir(); 
+
+  @ConfigAttributeGetter(name=CLUSTER_CONFIGURATION_DIR)
+  public String getClusterConfigDir();
+  @ConfigAttributeSetter(name=CLUSTER_CONFIGURATION_DIR)
   public void setClusterConfigDir(final String clusterConfigDir);
   
   /** Turns on network partition detection */
+  @ConfigAttributeSetter(name=ENABLE_NETWORK_PARTITION_DETECTION_NAME)
   public void setEnableNetworkPartitionDetection(boolean newValue);
   /**
    * Returns the value of the enable-network-partition-detection property
    */
+  @ConfigAttributeGetter(name=ENABLE_NETWORK_PARTITION_DETECTION_NAME)
   public boolean getEnableNetworkPartitionDetection();
   /** the name of the corresponding property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String ENABLE_NETWORK_PARTITION_DETECTION_NAME =
     "enable-network-partition-detection";
   public static final boolean DEFAULT_ENABLE_NETWORK_PARTITION_DETECTION = false;
@@ -1664,6 +1639,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#member-timeout">"member-timeout"</a>
    * property
    */
+  @ConfigAttributeGetter(name=MEMBER_TIMEOUT_NAME)
   public int getMemberTimeout();
 
   /**
@@ -1671,20 +1647,10 @@ public interface DistributionConfig extends Config, LogConfig {
    * <a href="../DistributedSystem.html#member-timeout">"member-timeout"</a>
    * property
    */
+  @ConfigAttributeSetter(name=MEMBER_TIMEOUT_NAME)
   public void setMemberTimeout(int value);
 
   /**
-   * Returns true if the corresponding property is currently modifiable.
-   * Some attributes can't be modified while a DistributedSystem is running.
-   */
-  public boolean isMemberTimeoutModifiable();
-
-  /**
-   * The name of the corresponding property
-   */
-  public static final String MEMBER_TIMEOUT_NAME = "member-timeout";
-
-  /**
    * The default value of the corresponding property
    */
   public static final int DEFAULT_MEMBER_TIMEOUT = 5000;
@@ -1694,14 +1660,21 @@ public interface DistributionConfig extends Config, LogConfig {
 
   /**The maximum member-timeout setting of 600000 millieseconds */
   public static final int MAX_MEMBER_TIMEOUT = 600000;
+  /**
+   * The name of the corresponding property
+   */
+  @ConfigAttribute(type=Integer.class, min=MIN_MEMBER_TIMEOUT, max=MAX_MEMBER_TIMEOUT)
+  public static final String MEMBER_TIMEOUT_NAME = "member-timeout";
 
-
+  @ConfigAttribute(type=int[].class)
   public static final String MEMBERSHIP_PORT_RANGE_NAME = "membership-port-range";
   
   public static final int[] DEFAULT_MEMBERSHIP_PORT_RANGE = new int[]{1024,65535};
-  
+
+  @ConfigAttributeGetter(name=MEMBERSHIP_PORT_RANGE_NAME)
   public int[] getMembershipPortRange();
-  
+
+  @ConfigAttributeSetter(name=MEMBERSHIP_PORT_RANGE_NAME)
   public void setMembershipPortRange(int[] range);
   
   /**
@@ -1709,20 +1682,18 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#conserve-sockets">"conserve-sockets"</a>
    * property
    */
+  @ConfigAttributeGetter(name=CONSERVE_SOCKETS_NAME)
   public boolean getConserveSockets();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#conserve-sockets">"conserve-sockets"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=CONSERVE_SOCKETS_NAME)
   public void setConserveSockets(boolean newValue);
-  /**
-   * Returns true if the value of the ConserveSockets attribute can currently
-   * be modified.
-   * Some attributes can not be modified while the system is running.
-   */
-  public boolean isConserveSocketsModifiable();
+
   /** The name of the "conserveSockets" property */
+  @ConfigAttribute(type=Boolean.class)
   public static final String CONSERVE_SOCKETS_NAME = "conserve-sockets";
 
   /** The default value of the "conserveSockets" property */
@@ -1733,14 +1704,17 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#roles">"roles"</a>
    * property
    */
+  @ConfigAttributeGetter(name=ROLES_NAME)
   public String getRoles();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#roles">"roles"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=ROLES_NAME)
   public void setRoles(String roles);
   /** The name of the "roles" property */
+  @ConfigAttribute(type=String.class)
   public static final String ROLES_NAME = "roles";
   /** The default value of the "roles" property */
   public static final String DEFAULT_ROLES = "";
@@ -1748,6 +1722,7 @@ public interface DistributionConfig extends Config, LogConfig {
 
   /**
    * The name of the "max wait time for reconnect" property */
+  @ConfigAttribute(type=Integer.class)
   public static final String MAX_WAIT_TIME_FOR_RECONNECT_NAME = "max-wait-time-reconnect";
 
   /**
@@ -1758,16 +1733,19 @@ public interface DistributionConfig extends Config, LogConfig {
   /**
    * Sets the max wait timeout, in milliseconds, for reconnect.
    * */
+  @ConfigAttributeSetter(name=MAX_WAIT_TIME_FOR_RECONNECT_NAME)
   public void setMaxWaitTimeForReconnect( int timeOut);
 
   /**
    * Returns the max wait timeout, in milliseconds, for reconnect.
    * */
+  @ConfigAttributeGetter(name=MAX_WAIT_TIME_FOR_RECONNECT_NAME)
   public int getMaxWaitTimeForReconnect();
 
   /**
    * The name of the "max number of tries for reconnect" property.
    * */
+  @ConfigAttribute(type=Integer.class)
   public static final String MAX_NUM_RECONNECT_TRIES = "max-num-reconnect-tries";
 
   /**
@@ -1778,11 +1756,13 @@ public interface DistributionConfig extends Config, LogConfig {
   /**
    * Sets the max number of tries for reconnect.
    * */
+  @ConfigAttributeSetter(name=MAX_NUM_RECONNECT_TRIES)
   public void setMaxNumReconnectTries(int tries);
 
   /**
    * Returns the value for max number of tries for reconnect.
    * */
+  @ConfigAttributeGetter(name=MAX_NUM_RECONNECT_TRIES)
   public int getMaxNumReconnectTries();
 
   // ------------------- Asynchronous Messaging Properties -------------------
@@ -1792,22 +1772,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#async-distribution-timeout">
    * "async-distribution-timeout"</a> property.
    */
+  @ConfigAttributeGetter(name=ASYNC_DISTRIBUTION_TIMEOUT_NAME)
   public int getAsyncDistributionTimeout();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#async-distribution-timeout">
    * "async-distribution-timeout"</a> property.
    */
+  @ConfigAttributeSetter(name=ASYNC_DISTRIBUTION_TIMEOUT_NAME)
   public void setAsyncDistributionTimeout(int newValue);
-  /**
-   * Returns true if the value of the asyncDistributionTimeout attribute can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isAsyncDistributionTimeoutModifiable();
 
-  /** The name of the "asyncDistributionTimeout" property */
-  public static final String ASYNC_DISTRIBUTION_TIMEOUT_NAME = "async-distribution-timeout";
   /** The default value of "asyncDistributionTimeout" is <code>0</code>. */
   public static final int DEFAULT_ASYNC_DISTRIBUTION_TIMEOUT = 0;
   /** The minimum value of "asyncDistributionTimeout" is <code>0</code>. */
@@ -1815,55 +1789,48 @@ public interface DistributionConfig extends Config, LogConfig {
   /** The maximum value of "asyncDistributionTimeout" is <code>60000</code>. */
   public static final int MAX_ASYNC_DISTRIBUTION_TIMEOUT = 60000;
 
+  /** The name of the "asyncDistributionTimeout" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ASYNC_DISTRIBUTION_TIMEOUT, max=MAX_ASYNC_DISTRIBUTION_TIMEOUT)
+  public static final String ASYNC_DISTRIBUTION_TIMEOUT_NAME = "async-distribution-timeout";
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#async-queue-timeout">
    * "async-queue-timeout"</a> property.
    */
+  @ConfigAttributeGetter(name=ASYNC_QUEUE_TIMEOUT_NAME)
   public int getAsyncQueueTimeout();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#async-queue-timeout">
    * "async-queue-timeout"</a> property.
    */
+  @ConfigAttributeSetter(name=ASYNC_QUEUE_TIMEOUT_NAME)
   public void setAsyncQueueTimeout(int newValue);
-  /**
-   * Returns true if the value of the asyncQueueTimeout attribute can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isAsyncQueueTimeoutModifiable();
 
-  /** The name of the "asyncQueueTimeout" property */
-  public static final String ASYNC_QUEUE_TIMEOUT_NAME = "async-queue-timeout";
   /** The default value of "asyncQueueTimeout" is <code>60000</code>. */
   public static final int DEFAULT_ASYNC_QUEUE_TIMEOUT = 60000;
   /** The minimum value of "asyncQueueTimeout" is <code>0</code>. */
   public static final int MIN_ASYNC_QUEUE_TIMEOUT = 0;
   /** The maximum value of "asyncQueueTimeout" is <code>86400000</code>. */
   public static final int MAX_ASYNC_QUEUE_TIMEOUT = 86400000;
-
+  /** The name of the "asyncQueueTimeout" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ASYNC_QUEUE_TIMEOUT, max=MAX_ASYNC_QUEUE_TIMEOUT)
+  public static final String ASYNC_QUEUE_TIMEOUT_NAME = "async-queue-timeout";
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#async-max-queue-size">
    * "async-max-queue-size"</a> property.
    */
+  @ConfigAttributeGetter(name=ASYNC_MAX_QUEUE_SIZE_NAME)
   public int getAsyncMaxQueueSize();
   /**
    * Sets the value of the <a
    * href="../DistributedSystem.html#async-max-queue-size">
    * "async-max-queue-size"</a> property.
    */
+  @ConfigAttributeSetter(name=ASYNC_MAX_QUEUE_SIZE_NAME)
   public void setAsyncMaxQueueSize(int newValue);
-  /**
-   * Returns true if the value of the asyncMaxQueueSize attribute can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isAsyncMaxQueueSizeModifiable();
 
-  /** The name of the "asyncMaxQueueSize" property */
-  public static final String ASYNC_MAX_QUEUE_SIZE_NAME = "async-max-queue-size";
   /** The default value of "asyncMaxQueueSize" is <code>8</code>. */
   public static final int DEFAULT_ASYNC_MAX_QUEUE_SIZE = 8;
   /** The minimum value of "asyncMaxQueueSize" is <code>0</code>. */
@@ -1871,7 +1838,11 @@ public interface DistributionConfig extends Config, LogConfig {
   /** The maximum value of "asyncMaxQueueSize" is <code>1024</code>. */
   public static final int MAX_ASYNC_MAX_QUEUE_SIZE = 1024;
 
+  /** The name of the "asyncMaxQueueSize" property */
+  @ConfigAttribute(type=Integer.class, min=MIN_ASYNC_MAX_QUEUE_SIZE, max=MAX_ASYNC_MAX_QUEUE_SIZE)
+  public static final String ASYNC_MAX_QUEUE_SIZE_NAME = "async-max-queue-size";
   /** @since 5.7 */
+  @ConfigAttribute(type=String.class)
   public static final String CLIENT_CONFLATION_PROP_NAME = "conflate-events";
   /** @since 5.7 */
   public static final String CLIENT_CONFLATION_PROP_VALUE_DEFAULT = "server";
@@ -1882,11 +1853,14 @@ public interface DistributionConfig extends Config, LogConfig {
   
      
   /** @since 9.0 */
+  @ConfigAttribute(type=Boolean.class)
   public static final String DISTRIBUTED_TRANSACTIONS_NAME = "distributed-transactions";
   public static final boolean DEFAULT_DISTRIBUTED_TRANSACTIONS = false;
 
+  @ConfigAttributeGetter(name=DISTRIBUTED_TRANSACTIONS_NAME)
   public boolean getDistributedTransactions();
 
+  @ConfigAttributeSetter(name=DISTRIBUTED_TRANSACTIONS_NAME)
   public void setDistributedTransactions(boolean value);
   
   /**
@@ -1895,6 +1869,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @since 5.7
    */
+  @ConfigAttributeGetter(name=CLIENT_CONFLATION_PROP_NAME)
   public String getClientConflation();
   /**
    * Sets the value of the <a
@@ -1902,15 +1877,15 @@ public interface DistributionConfig extends Config, LogConfig {
    * property.
    * @since 5.7
    */
+  @ConfigAttributeSetter(name=CLIENT_CONFLATION_PROP_NAME)
   public void setClientConflation(String clientConflation);
-  /** @since 5.7 */
-  public boolean isClientConflationModifiable();
   // -------------------------------------------------------------------------
   /**
    * Returns the value of the <a
    * href="../DistributedSystem.html#durable-client-id">"durable-client-id"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=DURABLE_CLIENT_ID_NAME)
   public String getDurableClientId();
 
   /**
@@ -1918,16 +1893,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#durable-client-id">"durable-client-id"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=DURABLE_CLIENT_ID_NAME)
   public void setDurableClientId(String durableClientId);
 
-  /**
-   * Returns true if the value of the durableClientId attribute can currently
-   * be modified. Some attributes can not be modified while the system is
-   * running.
-   */
-  public boolean isDurableClientIdModifiable();
-
   /** The name of the "durableClientId" property */
+  @ConfigAttribute(type=String.class)
   public static final String DURABLE_CLIENT_ID_NAME = "durable-client-id";
 
   /**
@@ -1941,6 +1911,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#durable-client-timeout">"durable-client-timeout"</a>
    * property.
    */
+  @ConfigAttributeGetter(name=DURABLE_CLIENT_TIMEOUT_NAME)
   public int getDurableClientTimeout();
 
   /**
@@ -1948,16 +1919,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#durable-client-timeout">"durable-client-timeout"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=DURABLE_CLIENT_TIMEOUT_NAME)
   public void setDurableClientTimeout(int durableClientTimeout);
 
-  /**
-   * Returns true if the value of the durableClientTimeout attribute can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isDurableClientTimeoutModifiable();
-
   /** The name of the "durableClientTimeout" property */
+  @ConfigAttribute(type=Integer.class)
   public static final String DURABLE_CLIENT_TIMEOUT_NAME = "durable-client-timeout";
 
   /**
@@ -1970,6 +1936,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns user module name for client authentication initializer in <a
    * href="../DistributedSystem.html#security-client-auth-init">"security-client-auth-init"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_CLIENT_AUTH_INIT_NAME)
   public String getSecurityClientAuthInit();
 
   /**
@@ -1977,16 +1944,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-client-auth-init">"security-client-auth-init"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_CLIENT_AUTH_INIT_NAME)
   public void setSecurityClientAuthInit(String attValue);
 
-  /**
-   * Returns true if the value of the authentication initializer method name can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isSecurityClientAuthInitModifiable();
-
   /** The name of user defined method name for "security-client-auth-init" property*/
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_CLIENT_AUTH_INIT_NAME = "security-client-auth-init";
 
   /**
@@ -1999,6 +1961,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns user module name authenticating client credentials in <a
    * href="../DistributedSystem.html#security-client-authenticator">"security-client-authenticator"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_CLIENT_AUTHENTICATOR_NAME)
   public String getSecurityClientAuthenticator();
 
   /**
@@ -2006,16 +1969,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-client-authenticator">"security-client-authenticator"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_CLIENT_AUTHENTICATOR_NAME)
   public void setSecurityClientAuthenticator(String attValue);
 
-  /**
-   * Returns true if the value of the authenticating method name can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isSecurityClientAuthenticatorModifiable();
-
   /** The name of factory method for "security-client-authenticator" property */
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_CLIENT_AUTHENTICATOR_NAME = "security-client-authenticator";
 
   /**
@@ -2028,6 +1986,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns name of algorithm to use for Diffie-Hellman key exchange <a
    * href="../DistributedSystem.html#security-client-dhalgo">"security-client-dhalgo"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_CLIENT_DHALGO_NAME)
   public String getSecurityClientDHAlgo();
 
   /**
@@ -2035,18 +1994,14 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-client-dhalgo">"security-client-dhalgo"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_CLIENT_DHALGO_NAME)
   public void setSecurityClientDHAlgo(String attValue);
 
   /**
-   * Returns true if the value of the Diffie-Hellman algorithm can currently be
-   * modified. Some attributes can not be modified while the system is running.
-   */
-  public boolean isSecurityClientDHAlgoModifiable();
-
-  /**
    * The name of the Diffie-Hellman symmetric algorithm "security-client-dhalgo"
    * property.
    */
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_CLIENT_DHALGO_NAME = "security-client-dhalgo";
 
   /**
@@ -2061,6 +2016,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns user defined method name for peer authentication initializer in <a
    * href="../DistributedSystem.html#security-peer-auth-init">"security-peer-auth-init"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_PEER_AUTH_INIT_NAME)
   public String getSecurityPeerAuthInit();
 
   /**
@@ -2068,16 +2024,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-peer-auth-init">"security-peer-auth-init"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_PEER_AUTH_INIT_NAME)
   public void setSecurityPeerAuthInit(String attValue);
 
-  /**
-   * Returns true if the value of the AuthInit method name can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isSecurityPeerAuthInitModifiable();
-
   /** The name of user module for "security-peer-auth-init" property*/
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_PEER_AUTH_INIT_NAME = "security-peer-auth-init";
 
   /**
@@ -2090,6 +2041,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns user defined method name authenticating peer's credentials in <a
    * href="../DistributedSystem.html#security-peer-authenticator">"security-peer-authenticator"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_PEER_AUTHENTICATOR_NAME)
   public String getSecurityPeerAuthenticator();
 
   /**
@@ -2097,16 +2049,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-peer-authenticator">"security-peer-authenticator"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_PEER_AUTHENTICATOR_NAME)
   public void setSecurityPeerAuthenticator(String attValue);
 
-  /**
-   * Returns true if the value of the security module name can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isSecurityPeerAuthenticatorModifiable();
-
   /** The name of user defined method for "security-peer-authenticator" property*/
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_PEER_AUTHENTICATOR_NAME = "security-peer-authenticator";
 
   /**
@@ -2119,6 +2066,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns user module name authorizing client credentials in <a
    * href="../DistributedSystem.html#security-client-accessor">"security-client-accessor"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_CLIENT_ACCESSOR_NAME)
   public String getSecurityClientAccessor();
 
   /**
@@ -2126,9 +2074,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-client-accessor">"security-client-accessor"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_CLIENT_ACCESSOR_NAME)
   public void setSecurityClientAccessor(String attValue);
 
   /** The name of the factory method for "security-client-accessor" property */
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_CLIENT_ACCESSOR_NAME = "security-client-accessor";
 
   /**
@@ -2141,6 +2091,7 @@ public interface DistributionConfig extends Config, LogConfig {
    * Returns user module name authorizing client credentials in <a
    * href="../DistributedSystem.html#security-client-accessor-pp">"security-client-accessor-pp"</a>
    */
+  @ConfigAttributeGetter(name=SECURITY_CLIENT_ACCESSOR_PP_NAME)
   public String getSecurityClientAccessorPP();
 
   /**
@@ -2148,9 +2099,11 @@ public interface DistributionConfig extends Config, LogConfig {
    * href="../DistributedSystem.html#security-client-accessor-pp">"security-client-accessor-pp"</a>
    * property.
    */
+  @ConfigAttributeSetter(name=SECURITY_CLIENT_ACCESSOR_PP_NAME)
   public void setSecurityClientAccessorPP(String attValue);
 
   /** The name of the factory method for "security-client-accessor-pp" property */
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_CLIENT_ACCESSOR_PP_NAME = "security-client-accessor-pp";
 
   /**
@@ -2164,6 +2117,7 @@ public interface DistributionConfig extends Config, LogConfig {
    *
    * @return the current security log-level
    */
+  @ConfigAttributeGetter(name=SECURITY_LOG_LEVEL_NAME)
   public int getSecurityLogLevel();
 
   /**
@@ -2172,19 +2126,16 @@ public interface DistributionConfig extends Config, LogConfig {
    * @param level
    *                the new security log-level
    */
+  @ConfigAttributeSetter(name=SECURITY_LOG_LEVEL_NAME)
   public void setSecurityLogLevel(int level);
 
   /**
-   * Returns true if the value of the logLevel attribute can currently be
-   * modified. Some attributes can not be modified while the system is running.
-   */
-  public boolean isSecurityLogLevelModifiable();
-
-  /**
    * The name of "security-log-level" property that sets the log-level for
    * security logger obtained using
    * {@link DistributedSystem#getSecurityLogWriter()}
    */
+  // type is String because the config file "config", "debug", "fine" etc, but the setter getter accepts int
+  @ConfigAttribute(type=String.class)
   public static final String SECURITY_LOG_LEVEL_NAME = "security-log-level";
 
   /**
@@ -2192,6 +2143,7 @@ public interface DistributionConfig extends Config, LogConfig {
    *
    * @return <code>null</code> if logging information goes to standard out
    */
+  @ConfigAttributeGetter(name=SECURITY_LOG_FILE_NAME)
   public File getSecurityLogFile();
 
   /**
@@ -2209,19 +2161,14 @@ public interface DistributionConfig extends Config, LogConfig {
    *                 if the set failure is caused by an error when writing to
    *                 the system's configuration file.
    */
+  @ConfigAttributeSetter(name=SECURITY_LOG_FILE_NAME)
   public void setSecurityLogFile(File value);
 
   /**
-   * Returns true if the value of the <code>security-log-file</code> attribute
-   * can currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isSecurityLogFileModifiable();
-
-  /**
    * The name of the "security-log-file" property. This property is the path of
    * the file where security related messages are logged.
    */
+  @ConfigAttribute(type=File.class)
   public static final String SECURITY_LOG_FILE_NAME = "security-log-file";
 
   /**
@@ -2238,6 +2185,7 @@ public interface DistributionConfig extends Config, LogConfig {
    *
    * @return Timeout in milliseconds.
    */
+  @ConfigAttributeGetter(name=SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME)
   public int getSecurityPeerMembershipTimeout();
 
   /**
@@ -2245,17 +2193,9 @@ public interface DistributionConfig extends Config, LogConfig {
    * than peer handshake timeout.
    * @param attValue
    */
+  @ConfigAttributeSetter(name=SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME)
   public void setSecurityPeerMembershipTimeout(int attValue);
 
-  /**
-   * Returns true if the value of the peer membership timeout attribute can currently be modified.
-   * Some attributes can not be modified while the system is running.
-   * @return true if timeout is modifiable.
-   */
-  public boolean isSecurityPeerMembershipTimeoutModifiable();
-
-  /** The name of the peer membership check timeout property */
-  public static final String SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME = "security-peer-verifymember-timeout";
 
   /**
    * The default peer membership check timeout is 1 second.
@@ -2268,6 +2208,9 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public static final int MAX_SECURITY_PEER_VERIFYMEMBER_TIMEOUT = 60000;
 
+  /** The name of the peer membership check timeout property */
+  @ConfigAttribute(type=Integer.class, min=0, max=MAX_SECURITY_PEER_VERIFYMEMBER_TIMEOUT)
+  public static final String SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME = "security-peer-verifymember-timeout";
   /**
    * Returns all properties starting with <a
    * href="../DistributedSystem.html#security-">"security-"</a>.
@@ -2288,13 +2231,6 @@ public interface DistributionConfig extends Config, LogConfig {
    */
   public void setSecurity(String attName, String attValue);
 
-  /**
-   * Returns true if the value of the security attributes can
-   * currently be modified. Some attributes can not be modified while the
-   * system is running.
-   */
-  public boolean isSecurityModifiable();
-
   /** For the "security-" prefixed properties */
   public static final String SECURITY_PREFIX_NAME = "security-";
 
@@ -2322,6 +2258,7 @@ public interface DistributionConfig extends Config, LogConfig {
    /**
     * The property decides whether to remove unresponsive client from the server.
     */
+   @ConfigAttribute(type=Boolean.class)
    public static final String REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME = "remove-unresponsive-client";
 
    /**
@@ -2334,6 +2271,7 @@ public interface DistributionConfig extends Config, LogConfig {
     * property.
     * @since 6.0
     */
+   @ConfigAttributeGetter(name=REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME)
    public boolean getRemoveUnresponsiveClient();
    /**
     * Sets the value of the <a
@@ -2341,11 +2279,11 @@ public interface DistributionConfig extends Config, LogConfig {
     * property.
     * @since 6.0
     */
+   @ConfigAttributeSetter(name=REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME)
    public void setRemoveUnresponsiveClient(boolean value);
-   /** @since 6.0 */
-   public boolean isRemoveUnresponsiveClientModifiable();
 
    /** @since 6.3 */
+   @ConfigAttribute(type=Boolean.class)
    public static final String DELTA_PROPAGATION_PROP_NAME = "delta-propagation";
 
    public static final boolean DEFAULT_DELTA_PROPAGATION = true;
@@ -2355,6 +2293,7 @@ public interface DistributionConfig extends Config, LogConfig {
     * property.
     * @since 6.3
     */
+   @ConfigAttributeGetter(name=DELTA_PROPAGATION_PROP_NAME)
    public boolean getDeltaPropagation();
 
    /**
@@ -2363,32 +2302,38 @@ public interface DistributionConfig extends Config, LogConfig {
     * property.
     * @since 6.3
     */
+   @ConfigAttributeSetter(name=DELTA_PROPAGATION_PROP_NAME)
    public void setDeltaPropagation(boolean value);
 
-   /** @since 6.3 */
-   public boolean isDeltaPropagationModifiable();
-   
+  public static final int MIN_DISTRIBUTED_SYSTEM_ID = -1;
+  public static final int MAX_DISTRIBUTED_SYSTEM_ID = 255;
    /**
     * @since 6.6
     */
+   @ConfigAttribute(type=Integer.class)
    public static final String DISTRIBUTED_SYSTEM_ID_NAME = "distributed-system-id";
    public static final int DEFAULT_DISTRIBUTED_SYSTEM_ID = -1;
 
+  @ConfigAttribute(type=String.class)
    public static final String REDUNDANCY_ZONE_NAME = "redundancy-zone";
-   public static final String DEFAULT_REDUNDANCY_ZONE = null;
+   public static final String DEFAULT_REDUNDANCY_ZONE = "";
    
    /**
     * @since 6.6
     */
+   @ConfigAttributeSetter(name=DISTRIBUTED_SYSTEM_ID_NAME)
    public void setDistributedSystemId(int distributedSystemId);
 
+  @ConfigAttributeSetter(name=REDUNDANCY_ZONE_NAME)
    public void setRedundancyZone(String redundancyZone);
    
    /**
     * @since 6.6
     */
+   @ConfigAttributeGetter(name=DISTRIBUTED_SYSTEM_ID_NAME)
    public int getDistributedSystemId();
-   
+
+  @ConfigAttributeGetter(name=REDUNDANCY_ZONE_NAME)
    public String getRedundancyZone();
    
    /**
@@ -2410,14 +2355,17 @@ public interface DistributionConfig extends Config, LogConfig {
    /**
     * @since 6.6
     */
+   @ConfigAttribute(type=Boolean.class)
    public static final String ENFORCE_UNIQUE_HOST_NAME = "enforce-unique-host";
    /** Using the system property to set the default here to retain backwards compatibility
     * with customers that are already using this system property.
     */
    public static boolean DEFAULT_ENFORCE_UNIQUE_HOST = Boolean.getBoolean("gemfire.EnforceUniqueHostStorageAllocation");
-   
+
+  @ConfigAttributeSetter(name=ENFORCE_UNIQUE_HOST_NAME)
    public void setEnforceUniqueHost(boolean enforceUniqueHost);
-   
+
+  @ConfigAttributeGetter(name=ENFORCE_UNIQUE_HOST_NAME)
    public boolean getEnforceUniqueHost();
 
    public Properties getUserDefinedProps();
@@ -2430,6 +2378,7 @@ public interface DistributionConfig extends Config, LogConfig {
     * @return the value of the property
     * @since 7.0
     */
+   @ConfigAttributeGetter(name=GROUPS_NAME)
    public String getGroups();
    /**
     * Sets the groups gemfire property.
@@ -2440,17 +2389,13 @@ public interface DistributionConfig extends Config, LogConfig {
     *   when writing to the system's configuration file.
     * @since 7.0
     */
+   @ConfigAttributeSetter(name=GROUPS_NAME)
    public void setGroups(String value);
-   /**
-    * Returns true if the value of the <code>groups</code> attribute can currently
-    * be modified.
-    * Some attributes can not be modified while the system is running.
-    * @since 7.0
-    */
-   public boolean isGroupsModifiable();
+
    /** The name of the "groups" property 
     * @since 7.0
     */
+   @ConfigAttribute(type=String.class)
    public static final String GROUPS_NAME = "groups";
    /**
     * The default groups.
@@ -2461,40 +2406,53 @@ public interface DistributionConfig extends Config, LogConfig {
 
    /** Any cl

<TRUNCATED>


[5/5] incubator-geode git commit: GEODE-913: refactor AbstractDistributionConfig

Posted by ji...@apache.org.
GEODE-913: refactor AbstractDistributionConfig

* use annotations to annotate the config attributes and its setters/getters/checkers
* delete multiple huge if/else statements to use annoations
* delete unnecessary checks use annotated checkers.
* delete all isXXModifiers to use attribute lists to denote if the attribute is modifiable or not.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/70059905
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/70059905
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/70059905

Branch: refs/heads/develop
Commit: 700599052b74072115b4b17b25de23dcd78cd8c2
Parents: 3adb0b8
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Feb 4 07:57:27 2016 -0800
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Feb 11 18:36:22 2016 -0800

----------------------------------------------------------------------
 .../admin/jmx/internal/AgentConfigImpl.java     |   25 +-
 .../internal/AbstractDistributionConfig.java    | 2690 ++----------------
 .../distributed/internal/ConfigAttribute.java   |   36 +
 .../internal/ConfigAttributeChecker.java        |   31 +
 .../internal/ConfigAttributeDesc.java           |   31 +
 .../internal/ConfigAttributeGetter.java         |   31 +
 .../internal/ConfigAttributeSetter.java         |   31 +
 .../internal/DistributionConfig.java            | 1061 ++++---
 .../internal/DistributionConfigImpl.java        |  361 +--
 .../internal/RuntimeDistributionConfigImpl.java |   74 +-
 .../gemfire/internal/AbstractConfig.java        |   60 +-
 .../gemstone/gemfire/internal/ConfigSource.java |   64 +-
 .../gemfire/internal/logging/LogConfig.java     |   12 +-
 .../internal/DistributionConfigJUnitTest.java   |  313 ++
 .../gemfire/internal/ConfigSourceJUnitTest.java |   89 +
 15 files changed, 1621 insertions(+), 3288 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java
index 9d602f6..985c8c0 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java
@@ -16,21 +16,6 @@
  */
 package com.gemstone.gemfire.admin.jmx.internal;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.InetAddress;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
 import com.gemstone.gemfire.GemFireIOException;
 import com.gemstone.gemfire.admin.DistributedSystemConfig;
 import com.gemstone.gemfire.admin.DistributionLocatorConfig;
@@ -38,12 +23,18 @@ import com.gemstone.gemfire.admin.internal.DistributedSystemConfigImpl;
 import com.gemstone.gemfire.admin.internal.InetAddressUtil;
 import com.gemstone.gemfire.admin.jmx.Agent;
 import com.gemstone.gemfire.admin.jmx.AgentConfig;
-import com.gemstone.gemfire.distributed.internal.AbstractDistributionConfig;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.internal.ClassPathLoader;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.util.IOUtils;
 
+import java.io.*;
+import java.net.InetAddress;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
 /**
  * Provides the JMX Agent configuration properties.
  * <p>


[3/5] incubator-geode git commit: GEODE-913: refactor AbstractDistributionConfig

Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
new file mode 100644
index 0000000..51712f9
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.distributed.internal;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by jiliao on 2/3/16.
+ * min and max are used only when type is Integer
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ConfigAttribute {
+  Class type();
+
+  int min() default Integer.MIN_VALUE;
+
+  int max() default Integer.MAX_VALUE;
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
new file mode 100644
index 0000000..14c1e54
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.distributed.internal;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by jiliao on 2/3/16.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ConfigAttributeChecker {
+  String name();
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
new file mode 100644
index 0000000..57a4a72
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.distributed.internal;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by jiliao on 2/3/16.
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ConfigAttributeDesc {
+  String name();
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
new file mode 100644
index 0000000..678ecf0
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.distributed.internal;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by jiliao on 2/3/16.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ConfigAttributeGetter {
+  String name();
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/70059905/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
new file mode 100644
index 0000000..ad8ad65
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.gemstone.gemfire.distributed.internal;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by jiliao on 2/3/16.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ConfigAttributeSetter {
+  String name();
+}