<!--
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.
-->
<html>
<head>
<title>GemFire System Properties</title>
</head>
<body>
<h1>Introduction</h1>
Please edit this file by hand in order to facilitate merges!
<p>
Please keep entries in this file in alphabetical order in order to
facilitate merging!
<h1>Java Methods Swept</h1>
These are the methods that I have found that reference the system properties
table.  If you can think of others I have missed, add them (alphabetically)
to this list, perform the sweep using Eclipse and add your results.
<p>
<ul>
<li><code>Boolean#getBoolean(String)</code></li>
<li><code>Integer#getInteger(String)</code></li>
<li><code>Integer#getInteger(String, Integer)</code></li>
<li><code>Integer#getInteger(String, int)</code></li>
<li><code>Long#getLong(String)</code></li>
<li><code>Long#getLong(String, Long)</code></li>
<li><code>Long#getLong(String, long)</code></li>
<li><code>System#getProperties</code></li>
<li><code>System#getProperty(String)</code></li>
<li><code>System#getProperty(String, String)</code></li>
</ul>

<h1>Miscellaneous</h1>

DistributionConfigImpl constructor prepends <code>gemfire.</code> to each
valid attribute name, then looks for a System property with that value.  If
such a property name exists, it overrides any read from a property file or
any properties passed into the caller.
<p>
<code>org.apache.geode.internal.cache.Oplog</code> looks for properties
of the form:
<ul>

<li>fullRegionName + <code>_UNIT_BUFF_SIZE</code></li> -- <em>Integer</em>;
"Asif: The minimum unit size of the Pool created. The ByteBuffer pools
present at different indexes will be multiple of this size. Default unit
buffer size is 1024"

<li>fullRegionName + <code>_MAX_POOL_SIZE</code></li> -- <em>Integer</em>;
"The initial pool size . Default pool size is zero"

<li>fullRegionName + <code>_WAIT_TIME</code></li> -- <em>Integer</em>;
"Asif: MAX time in milliseconds for which a thread will wait for a buffer to
get freed up. If not available in that duration a buffer will be created on
the fly. The timeout has no meaning if the max pool size is -1( no upper
bound)"
</ul>
<p>

<h1>Properties, in Alphabetical Order</h1>


<dl>

<!-- -------------------------------------------------------  -->
<dt><strong>AdminDistributedSystemImpl.TIMEOUT_MS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60000)
<p>
See <code>org.apache.geode.admin.internal.AdminDistributedSystemImpl#TIMEOUT_MS</code>.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>AvailablePort.fastRandom</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.AvailablePort</code>.
<p>
If true, an instance of <code>java.util.Random</code> is used instead of
<code>java.security.SecureRandom</code> to randomly select a port.
<p>
This property is available in case there is a performance issue involved
with random port selection.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>AvailablePort.timeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 2000)
<p>
See <code>org.apache.geode.internal.AvailablePort#isPortAvailable</code>.
<p>
When establishing a locator, this sets the <code>SO_TIMEOUT</code>
characteristic on the UDP port that we attempt to test.
<p>
Units are in milliseconds.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Bridge.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
See <code>org.apache.geode.internal.cache.BridgeServerImpl.#VERBOSE</code>.
<p>
Enable verbose logging in the BridgeServer
<p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.HANDSHAKE_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>Integer</em> (default is 4)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#HANDSHAKE_POOL_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.MAXIMUM_CHUNK_SIZE</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>Integer</em> (default is 100)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#maximumChunkSize</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.MAX_INCOMING_DATA</strong></dt>
<dd>
<em>Public:</em> yes?
<p>
<em>Integer</em> (default is -1)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#MAX_INCOMING_DATA</code>.
<p>
<pre>
   Maximum number of concurrent incoming client message bytes that a bridge server will allow.
   Once a server is working on this number additional incoming client messages
   will wait until one of them completes or fails.
   The bytes are computed based in the size sent in the incoming msg header.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.MAX_INCOMING_MSGS</strong></dt>
<dd>
<em>Public:</em> yes?
<p>
<em>Integer</em> (default is -1)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#MAX_INCOMING_MSGS</code>.
<p>
<pre>
   Maximum number of concurrent incoming client messages that a bridge server will allow.
   Once a server is working on this number additional incoming client messages
   will wait until one of them completes or fails.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.SELECTOR</strong></dt>
<dd>
<em>Public:</em> jpmc-cbb
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#DEPRECATED_SELECTOR</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.SELECTOR_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> jpmc-cbb
<p>
<em>Integer</em> (default is 16)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#DEPRECATED_SELECTOR_POOL_SIZE</code>.
<p>
<pre>
   This system property is only used if max-threads == 0.
   This is for 5.0.2 backwards compatibility.
   @deprecated since 5.1 use cache-server max-threads instead
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.SOCKET_BUFFER_SIZE</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>Integer</em> (default is 32768)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier#socketBufferSize</code>.
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.CacheClientUpdater#CacheClietnUpdater(String, EndpointImpl, List, LogWriter, boolean, DistributedSystem)</code>.
<p>
<pre>
   The size of the server-to-client communication socket buffers. This can be
   modified using the BridgeServer.SOCKET_BUFFER_SIZE system property.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.acceptTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 2900)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#acceptTimeout</code>.
<p>
Units are in milliseconds.
<p>
<pre>
  Test value for accept timeout
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.backlog</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1280)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl</code>
constructor.
<p>
This is the TCP/IP "accept" backlog for client/server communications.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.handShakeTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 59000)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#handshakeTimeout</code>.
<p>
<pre>
  Test value for handshake timeout.  Note the capital S in "handShakeTimeout".
</pre>
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DataSerializer.DEBUG</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.DataSerializer#DEBUG</code>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DataSerializer.DUMP_SERIALIZED</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.DataSerializer#DUMP_SERIALIZED</code>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributedLockService.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockLogWriter#VERBOSE</code>.
<p>
Enables logging for this class.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.DISCONNECT_WAIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 10 * 1000)
<p>
See <code>org.apache.geode.distributed.internal.InternalDistributedSystem#MAX_DISCONNECT_WAIT</code>.
<p>
<pre>
   This is how much time, in milliseconds to allow a disconnect listener
   to run before we interrupt it.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.INCOMING_QUEUE_LIMIT</strong></dt>
<dd>
<em>Public:</em> jpmc-cbb
<p>
<em>Integer</em> (default is 80000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#INCOMING_QUEUE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.INCOMING_QUEUE_THROTTLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is INCOMING_QUEUE_LIMIT * .75)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#INCOMING_QUEUE_THROTTLE</code>.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_FE_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer:</em> (default is 16)
<p>
Maximum function execution threads.
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_FE_THREADS</code>.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_PR_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_PR_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_SERIAL_QUEUE_THREAD</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_SERIAL_QUEUE_THREAD</code>.
<p>
<pre>
  Max number of serial Queue executors, in case of multi-serial-queue executor
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 100)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_WAITING_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_WAITING_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.OptimizedUpdateByteLimit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 2000)
<p>
See <code>org.apache.geode.internal.cache.SearchLoadAndWriteProcessor#SMALL_BLOB_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.PUSHER_QUEUE_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 4096)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#PUSHER_QUEUE_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.PUSHER_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 50)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#PUSHER_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_BYTE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 40 * 1024 * 1024)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SERIAL_QUEUE_BYTE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_SIZE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SERIAL_QUEUE_SIZE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_SIZE_THROTTLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is SERIAL_QUEUE_SIZE_LIMIT * THROTTLE_PERCENT)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SERIAL_QUEUE_THROTTLE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_THROTTLE_PERCENT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 75)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#THROTTLE_PERCENT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.STARTUP_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 15000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#STARTUP_TIMEOUT</code>.
<p>
Units are in milliseconds.  This is how long a Startup message waits before
it declares the peer to be nonresponsive.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is -1)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#TIMEOUT</code>.
<p>
<pre>
  The number of milliseconds to wait for distribution-related
  things to happen */
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.TOTAL_SERIAL_QUEUE_BYTE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 80 * 1024 * 1024)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#TOTAL_SERIAL_QUEUE_BYTE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.TOTAL_SERIAL_QUEUE_THROTTLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is SERIAL_QUEUE_BYTE_LIMIT * THROTTLE_PERCENT)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#TOTAL_SERIAL_QUEUE_THROTTLE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.VERBOSE</strong></dt>
<dd>
<em>Public:</em> yes (general debugging)
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#VERBOSE</code>.
<p>
Enables certain additional (fine-level?) logging.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.VERBOSE_VIEWS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.GMSMembershipManager#VERBOSE_VIEWS</code>.
<p>
Enables additional info-level logging
(see <code>#addShunnedMember</code> and <code>#addSurpriseMember</code>).
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.enqueueOrderedMessages</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#INLINE_PROCESS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.requireAllStartupResponses</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#sendStartupMessage</code>.
<p>
Fail distributed system join unless a startup response is received from
<em>all</em> peers.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.singleSerialExecutor</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MULTI_SERIAL_EXECUTORS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.syncEvents</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SYNC_EVENTS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DynamicRegionFactory.disablePersistence</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.DynamicRegionFactory#DISABLE_PERSIST_BACKUP</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DynamicRegionFactory.disableRegisterInterest</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.DynamicRegionFactory#DISABLE_REGISTER_INTEREST</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DynamicRegionFactory.msDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 250)
<p>
See <code>org.apache.geode.cache.DynamicRegionFactory#regionCreateSleepMillis</code>.
<p>
<pre>
   This controls the delay introduced to try and avoid any race conditions
   between propagation of newly created Dynamic Regions
   and the Entries put into them.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.EVENT_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5 * 60 * 1000)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.EventWrapper#EVENT_TIMEOUT</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.MAXIMUM_SHUTDOWN_PEEKS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.#MAXIMUM_SHUTDOWN_PEEKS</code>.
<p>
<pre>
  The number of times to peek on shutdown before giving up and shutting down.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.QUEUE_SIZE_THRESHOLD</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5000)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.#QUEUE_SIZE_THRESHOLD</code>.
<p>
<pre>
  The queue size threshold used to warn the user. If the queue reaches this
  size, log a warning.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.TOKEN_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 15000)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.#TOKEN_TIMEOUT</code>.
<p>
<pre>
  Timeout tokens in the unprocessedEvents map after this many milliseconds.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>GetInitialImage.chunkSize</strong></dt>
<dd>
<em>Public:</em> ml-rio
<p>
<em>Integer</em> (default is 500 * 1024)
<p>
See <code>org.apache.geode.internal.cache.InitialImageOperation#CHUNK_SIZE_IN_BYTES</code>.
<p>
<pre>
   maximum number of bytes to put in a single message
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>GrantorRequestProcessor.ELDER_CHANGE_SLEEP</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 100)
<p>
See <code>org.apache.geode.distributed.internal.locks.GrantorRequestProcessor#ELDER_CHANGE_SLEEP</code>.
<p>
<pre>
   The number of milliseconds to sleep for elder change if current elder
   is departing (and already sent shutdown msg) but is still in the View.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.shunned-member-timeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 90)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.GMSMembershipManager#isShunned</code>.
<p>
This is the length of time during which incoming messages from a departed peer
are regarded as out-of-order messages and are hence ignored (shunned).
<p>
Units are in seconds.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Locator.forceLocatorDMType</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Used internally by the locator. It sets it to true to tell other code
that the member type should be LOCATOR.
As of 7.0.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Locator.inhibitDMBanner</strong></dt>
<dd>
<em>Public:</em> ml-rio
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.InternalLocator#INHIBIT_DM_BANNER</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>MAX_WAIT_FOR_SPACE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.internal.cache.ComplexDiskRegion#MAX_WAIT_FOR_SPACE</code>.
<p>
Units are in seconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>StatArchiveReader.dump</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.StatArchiveReader(File[], ValueFilter[], boolean)</code>.
<p>
See <code>org.apache.geode.internal.StatArchiveReader#dump(PrintWriter)</code>.
<p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>StatArchiveReader.dumpall</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.StatArchiveReader(File[], ValueFilter[], boolean)</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>StateFlushOperation.DEBUG</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.internal.cache.StateFlushOperation#DEBUG</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>ack-threshold-exception</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.ReplyProcessor21#THROW_EXCEPTION_ON_TIMEOUT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>java.util.concurrent.NanoTimerProvider</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
Default is <code>java.util.concurrent.NanoTimerProvider</code>.
<p>
See java.util.concurrent.Utils#providerProp</code>.
<p>
This is the name of a class that implements the
<code>java.util.concurrent.helpers.NanoTimer</code>
interface.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.geode.internal.OSProcess.trace</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.OSProcess#bgexec(String[], File, File, boolean)</code>.
<p>
If this property exists and has non-zero length, additional information about
the executed command is printed to <code>System.out</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.geode.internal.cache.PartitionedRegion-logging</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#initPrInternals</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.geode.internal.cache.PartitionedRegionDataStore-logging (constructor)</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionDataStore.PartitionedRegionDataStore(PartitionedRegion)</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>disable-intelligent-msg</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionAdvisor#disabled</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>GemFire.ALWAYS_REPLICATE_UPDATES</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If true then non-replicate regions will turn a remote update they receive
on an entry they do not have into a local create.
By default these updates would have been ignored.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.ALLOW_PERSISTENT_TRANSACTIONS</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
If true then transactions on persistent regions are allowed.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.artificialGatewayDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> -1
<p>
See <code>org.apache.geode.internal.cache.GatewayEventRemoteDispatcher#ARTIFICIAL_DELAY</code>
<p>
Introduce artificial delay (in ms) before batch sending to simulate a real WAN link
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.ASCII_STRINGS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.MsgStreamer#ASCII_STRINGS</code>.
<p>
See <code>org.apache.geode.internal.HeapDataOutputStream#ASCII_STRINGS</code>.
<p>
Causes GemFire's implementation of writeUTF to only work for Strings that use the ASCII
character set. So Strings that use the international characters will be serialized incorrectly.
If you know your Strings only use ASCII setting this to true can improve your performance if
you are using writeUTF frequently. Most Strings are serialized using DataSerializer.writeString
which does not use writeUTF.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.AutoSerializer.SAFE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If set to true forces the ReflectionBasedAutoSerializer to not use the
sun.misc.Unsafe code. Using Unsafe optimizes performance but reduces
portablity.
By default ReflectionBasedAutoSerializer will attempt to use Unsafe but
silently not use it if it is not available.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.AutoSerializer.UNSAFE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If set to true then the ReflectionBasedAutoSerializer will throw
an exception if it is not able to use the sun.misc.Unsafe code.
Using Unsafe optimizes performance but reduces portablity.
By default ReflectionBasedAutoSerializer will attempt to use Unsafe but
silently not use it if it is not available.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BUCKET_RECOVERY_DELAY</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 2)
<p>
See <code>org.apache.geode.internal.cache.PRHAFailureAndRecoveryPRovider#BUCKET_RECOVERY_DELAY</code>.
<p>
Mean amount of time, in seconds, to delay before starting to
recover a bucket.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BUCKET_RECOVERY_JITTER</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 200)
<p>
See <code>org.apache.geode.internal.cache.PRHAFailureAndRecoveryPRovider#BUCKET_RECOVERY_JITTER</code>.
<p>
<pre>
   Maximum additional amount of time, in milliseconds, to skew bucket creation, 
   to stagger recovery and creation in a starting system. 
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BucketAdvisor.getPrimaryTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 1000 * 60)
<p>
See <code>org.apache.geode.internal.cache.BucketAdvisor#GET_PRIMARY_TIMEOUT</code>.
<p>
<pre>
   Specifies the timeout to wait for a primary when calling {@link 
   #getPrimary()} 
</pre>
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.ASYNC_EVENT_LISTENERS</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#ASYNC_EVENT_LISTENERS</code>.
<p>
If true then cache event listeners will be invoked by a background thread.
By default they are invoked by the same thread that is doing the cache operation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.EVENT_QUEUE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 4096)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#EVENT_QUEUE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.defaultLockLease</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 120)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#DEFAULT_LOCK_LEASE</code>.
<p>
<pre>
  The default duration (in seconds) of a lease on a distributed lock
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.defaultLockTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#DEFAULT_LOCK_TIMEOUT</code>.
<p>
<pre>
  The default number of seconds to wait for a distributed lock
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.defaultSearchTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 300)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#DEFAULT_SEARCH_TIMEOUT</code>.
<p>
<pre>
  The default amount of time to wait for a <code>netSearch</code> to
  complete
</pre>
<p>
Units are in seconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.startSerialNumber</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE - 10)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#START_SERIAL_NUMBER</code>.
<p>
<pre>
  Specifies the starting serial number for the {@link #serialNumberSequencer
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.CacheDistributionAdvisor.rolloverThreshold</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1000)
<p>
See <code>org.apache.geode.internal.cache.CacheDistributionAdvisor#ROLLOVER_THRESHOLD</code>.
<p>
<pre>
  Used to compare profile versioning numbers against 
  {@link Integer#MAX_VALUE} and {@link Integer#MIN_VALUE} to determine
  if a rollover has occurred.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Capacity</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 230000)
<p>
See <code>org.apache.geode.internal.cache.ha.HARegionQueueAttributes#BLOCKING_QUEUE_CAPACITY</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DEBUG_EXPIRATION</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.ExpirationScheduler#DEBUG</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DEFAULT_MAX_OPLOG_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 1024 * 1024 * 1024)
<p>
See <code>org.apache.geode.internal.cache.DiskWriteAttributesImpl#DEFAULT_MAX_OPLOG_SIZE</code>.
<p>
<pre>
  default max in bytes
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.automateFreeResources</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.distributed.internal.locks.DLockService.DLockService(String, DistributedSystem, boolean, boolean, boolean).
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.LockGrantorId.rolloverMargin</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10000)
<p>
See <code>org.apache.geode.distributed.internal.locks.LockGrantorId#ROLLOVER_MARGIN</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.disallowLockRequestLoop</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_LOCK_REQUEST_LOOP</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.disallowLockRequestLoopCount</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_LOCK_REQUEST_LOOP_COUNT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.disallowNotHolder</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_DISALLOW_NOT_HOLDER</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.enforceSafeExit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_ENFORCE_SAFE_EXIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.nonGrantorDestroyLoop</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_NONGRANTOR_DESTROY_LOOP</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.nonGrantorDestroyLoopCount</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_NONGRANTOR_DESTROY_LOOP_COUNT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.notGrantorSleep</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 2000)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#NOT_GRANTOR_SLEEP</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DistributedLockService.startSerialNumber</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE - 10)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#START_SERIAL_NUMBER</code>.
<p>
<pre>
  Specifies the starting serial number for the {@link #serialNumberSequencer}
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DO_EXPENSIVE_VALIDATIONS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.LocalRegion#DO_EXPENSIVE_VALIDATIONS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DistributionAdvisor.startVersionNumber</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE - 10)
<p>
See <code>org.apache.geode.distributed.internal.DistributionAdvisor#START_VERSION_NUMBER</code>.
<p>
<pre>
   Specifies the starting version number for the {@link 
   #profileVersionSequencer}.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.EXPIRY_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 0)
<p>
See <code>org.apache.geode.internal.cache.ExpiryTask class init</code>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.EXPIRY_UNITS_MS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.LocalRegion#EXPIRY_UNITS_MS</code>.
<p>
<pre>
   Used by unit tests to set expiry to milliseconds instead of the default
   seconds. Used in ExpiryTask.
</pre>
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.IDLE_THREAD_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 15000)
<p>
See <code>org.apache.geode.distributed.internal.PooledExecutorWithDMStats#PooledExecutorWithDMStats(BlockingQueue, int, PoolStatHelper, ThreadFactory)</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.isDedicatedServer</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Tell admin API whether the member is a dedicated cache server
</dd>

<!-- -------------------------------------------------------  -->
    <dt><strong>gemfire.locator-load-imbalance-threshold</strong></dt>
    <dd>
        <em>Public:</em> true
        <p>
            <em>Float</em> (default is 10.0)
        <p>
            See <code>org.apache.geode.distributed.internal.LocatorLoadSnapshot</code>
        <p>
            Sets the connection count threshold for rebalancing clients.  When a
        client asks the locator whether it should switch to a less loaded server
        the locator will respond "no" if the connection-count gap between the
        highest-loaded server and the least-loaded server is within this threshold.
        If the threshold is reached the locator will aggressivley reassign clients
        until balance is re-established.
    </dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.memoryEventTolerance</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default for Sun/Oracle is 1 and for others 5)
<p>
See <code>org.apache.geode.internal.cache.control.InternalResourceManager.#MEMORY_EVENT_TOLERANCE</code>
<p>
Number of memory events that ResourceManager will tolerate before throwing a LME. Useful with JVM 1.7
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.MAX_PENDING_CANCELS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10000)
<p>
See <code>org.apache.geode.internal.cache.ExpirationScheduler#MAX_PENDING_CANCELS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.MIN_BUCKET_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1)
<p>
See <code>org.apache.geode.internal.cache.partitioned.SizedBasedLoadProbe.#MIN_BUCKET_SIZE</code>
<p>
Allows setting the minimum bucket size to be used during rebalance
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DISABLE_MOVE_PRIMARIES_ON_STARTUP</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If true then pr primary buckets will not be balanced when a new member is started.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.MessageTimeToLive</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 180)
<p>
See <code>org.apache.geode.internal.cache.ha.HARegionQueue#REGION_ENTRY_EXPIRY_TIME</code>.
<p>
<pre>
   Constant used to set region entry expiry time using system property.
</pre>
<p>
Units are in seconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.ON_DISCONNECT_CLEAR_PDXTYPEIDS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.client.internal.PoolImpl</code>
<p>
Clear pdxType ids when client disconnects from servers
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRDebug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.admin.GemFireMonitorService#processGetValCommand</code>.
<p>
See <code>org.apache.geode.admin.remote.RemoteCacheInfo.RemoteCacheInfo(GemFireCache)</code>.
<p>
See <code>org.apache.geode.admin.remote.RootRegionResponse#create(DistributionManager, InternalDistributedMember)</code>.
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionDataStore#createBucketRegion(int)</code>.
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionHelper#getPRConfigRegion(Region, Cache)</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PREFER_DESERIALIZED</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.CachedDeserializableFactory#PREFER_DESERIALIZED</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PREFER_SERIALIZED</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<P>
See <code>org.apache.geode.internal.cache.CachedDeserializableFactory.#PREFER_DESERIALIZED</code>
<p>
Enable storing the values in serialized form
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRSanityCheckDisabled</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.partitioned.PRSanityCheckMessage#schedule</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRSanityCheckInterval</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5000)
<p>
See <code>org.apache.geode.internal.cache.partitioned.PRSanityCheckMessage#schedule</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PartitionedRegionRandomSeed</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (defaults to NanoTimer.getTime())
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#rand</code>.
<p>
Seed for the random number generator in this class.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Query.COMPILED_QUERY_CLEAR_TIME</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (defaults to 10 * 60 * 1000)
<p>
See <code>org.apache.geode.cache.query.internal.DefaultQuery.#COMPILED_QUERY_CLEAR_TIME</code>
<p>
Frequency of clean up compiled queries
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Query.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<p>
See <code>org.apache.geode.cache.query.internal.DefaultQuery.#QUERY_VERBOSE</code><em>Boolean</em> (defaults to false)
<p>
Enable verbose logging in the query execution
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.QueryService.QueryHeterogeneousObjects</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (defaults to true)
<p>
See <code>org.apache.geode.cache.query.internal.DefaultQueryService.#QUERY_HETEROGENEOUS_OBJECTS</code>
<p>
Allow query on region with heterogeneous objects
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.randomizeOnMember</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (defaults to false)
<p>
See <code>org.apache.geode.internal.cache.execute.InternalFunctionExecutionServiceImpl.#RANDOM_onMember</code>
<p>
When set, onMember execution will be executed on a random member.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.RegionAdvisor.volunteeringThreadCount</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1)
<p>
See <code>org.apache.geode.internal.cache.partitioned.RegionAdvisor#VOLUNTERING_THREAD_COUNT</code>.
<p>
<pre>
  Number of threads allowed to concurrently volunteer for bucket primary.
</pre>
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.VM_OWNERSHIP_WAIT_TIME</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is Long.MAX_VALUE)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#VM_OWNERSHIP_WAIT_TIME</code>
<p>
<pre>
  Time to wait for for acquiring distributed lock ownership
</pre>
<p>
Time is specified in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.asynchronous-gateway-distribution-enabled</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.GatewayHubImpl#USE_ASYNCHRONOUS_DISTRIBUTION</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.bridge.disableShufflingOfEndpoints</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ConnectionProxyImpl#disableShufflingOfEndpoints</code>.
<p>
<pre>
   A debug flag, which can be toggled by tests to disable/enable shuffling of
   the endpoints list
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.bridge.suppressIOExceptionLogging</strong></dt>
<dd>
<em>Public:</em> jpmc-jets
<p>
<em>Boolean</em> (default is false)
<p>
See <code>ConnectionProxyImpl</code>,
<code>ServerConnection</code>, and
<code>ServerMonitor</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BridgeServer.FORCE_LOAD_UPDATE_FREQUENCY</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> 10
<p>
See <code>org.apache.geode.internal.cache.BridgeServerImpl.#FORCE_LOAD_UPDATE_FREQUENCY</code>
<p>
How often to force a BridgeServer load message to be sent
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BucketRegion.alwaysFireLocalListeners</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> default is false
<p>
See <code>org.apache.geode.internal.cache.BucketRegion.#FORCE_LOCAL_LISTENERS_INVOCATION</code>
<p>
Enable invocation of listeners in both primary and secondary buckets
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.MAX_QUERY_EXECUTION_TIME</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> default is -1
<p>
See <code>org.apache.geode.internal.cache.GemFireCacheImpl.#MAX_QUERY_EXECUTION_TIME</code>
<p>
Limit the max query execution time (ms)
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.CLIENT_FUNCTION_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> default is 0
<p>
See <code>org.apache.geode.cache.client.internal.ConnectioImpl.#CLIENT_FUNCTION_TIMEOUT</code>
<p>
Timeout to set for client function execution
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.clientMonitorLogFile</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is unset, to use System.out)
<p>
See <code>org.apache.geode.admin.GemFireClientAdminTool#logFileName</code>.
<p>
This is a file name.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.clientSocketFactory</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.SocketCreator</code>
<p>
Non-standard Socket creator
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.cq.EXECUTE_QUERY_DURING_INIT</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> true
<p>
See <code>org.apache.geode.cache.query.internal.CqService.#EXECUTE_QUERY_DURING_INIT</code>
<p>
When set to false, avoid query execution during CQ when initial results are not required
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.SharedLibrary#getName</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disableAccessTimeUpdateOnPut</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.entries.AbstractRegionEntry.#DISABLE_ACCESS_TIME_UPDATE_ON_PUT</code>
<p>
Disable access time updates on put event
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disable-event-old-value</strong></dt>
<dd>
<em>Public:</em> jpmc-cbb
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.EntryEventImpl#EVENT_OLD_VALUE</code>.
<p>
Discussing EVENT_OLD_VALUE = !Boolean.getBoolean():
<pre>
   If true (the default) then preserve old values in events.
   If false then mark non-null values as being NOT_AVAILABLE.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disablePartitionedRegionBucketAck</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion.#DISABLE_SECONDARY_BUCKET_ACK</code>
<p>
Enable no-ack replication in bucket regions
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disable-udp-direct-ack</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.DistributedCacheOperation#UDP_DISABLE_DIRECT_ACK</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disableNotificationWarnings</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.CacheClientProxy#LOG_DROPPED_MSGS</code>.
<p>
Discussing LOG_DROPPED_MSGS = !Boolean.getBoolean():
<pre>
   Defaults to true; meaning do some logging of dropped client notification
   messages. Set the system property to true to cause dropped messages to NOT
   be logged.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disableShutdownHook</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
If true then the shutdown hooks of the DistributedSystem, Locator, and Agent
are not run on shutdown. This was added for bug 38407.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disallowMcastDefaults</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Used by unit tests to make sure the GemFire mcast-port has been configured
to a non-default value.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disk.recoverValues</strong></dt>
<dd>
<em>Public:</em> jpmc-cbb
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.SimpleDiskRegion</code>.
<p>
<pre>
  Whether to get the values from disk to memory on recovery
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.EXPIRATIONS_CAUSE_CONFLICTS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.LocalRegion.#EXPIRATIONS_CAUSE_CONFLICTS</code>
<p>
Allow expirations to be done by multiple threads, avoiding the 
pendingExpires list (set in conjunction with gemfire.EXPIRY_THREADS)
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.enableCpuTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
This property causes the per thread stats to also measure cpu time.
This property is ignored unless "gemfire.enableThreadStats" is also set to true.
See java.lang.management.ThreadMXBean.setThreadCpuTimeEnabled(boolean)
for more information.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.enableContentionTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
This property causes the per thread stats to also measure contention.
This property is ignored unless "gemfire.enableThreadStats" is also set to true.
See java.lang.management.ThreadMXBean.setThreadContentionMonitoringEnabled(boolean)
for more information.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.enableThreadStats</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
This property causes the per thread stats to be collected.
See java.lang.management.ThreadMXBean
for more information.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.gateway-conserve-sockets-allowed</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.GatewayHubImpl#ALLOW_CONSERVE_SOCKETS</code>.
<p>
<pre>
   A boolean that defines whether the value of the conserve-sockets property
   in the gemfire.properties file is preserved. By default, the value in
   gemfire.properties is overridden so that queue ordering is preserved. If
   ALLOW_CONSERVE_SOCKETS=true, then the conserve-sockets property is
   used and queue ordering may not be preserved. This property can be set
   using the System property called 'gemfire.gateway-conserve-sockets-allowed'.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.gateway-queue-no-ack</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.SingleWriteSingleReadRegionQueue#NO_ACK</code>.
<p>
<pre>
   Whether the <code>Gateway</code> queue should be no-ack instead of ack.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.GatewayReceiver.ApplyRestries</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If true causes the GatewayReceiver will apply batches it has already received.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.gateway.ApplyRetries</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#APPLY_RETRIES</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.GetInitialImage.CHUNK_PERMITS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 16)
<p>
See <code>org.apache.geode.internal.cache.InitialImageOperation.#CHUNK_PERMITS</code>
<p>
Allowed number of in-flight initial image chunks. This property controls how many requests for GII chunks can be handled simultaneously.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.GetInitialImage.MAX_PARALLEL_GIIS</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is 5)
<p>
See <code>org.apache.geode.internal.cache.InitialImageOperation.#MAX_PARALLEL_GIIS </code>
<p>
Allowed number of GIIs in parallel. This property controls how many regions can do GII simultaneously. Each replicated region and partitioned region bucket counts against this number.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.haltOnAssertFailure</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.Assert#debug</code>.
<p>
Causes VM to hang on assertion failure (to allow a debugger to be attached)
instead of exiting the process.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.jg-can_bind_to_mcast_addr</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
On OSes that support it bind to the mcast_addr to prevent traffic on 
different addresses, but on the same port.
Setting to true can avoid cross address chatter.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.launcher.registerSignalHandlers</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Causes the code used by gfsh to launch a server or locator to install
signal handlers using sun.misc.Signal.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.loadLibrary.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.PureJavaMode#debug</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.locatorXms</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.gui.RemoteCommandManager#getLocatorStart</code>.
<p>
See <code>org.apache.geode.internal.gui.StartStopManager#startLocalLocator</code>.
<p>
A JVM property, esp. "-Xms150m".
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.locatorXmx</strong></dt>
<em>String</em>
<p>
<dd>
<em>Public:</em> false
<p>
See <code>org.apache.geode.internal.gui.RemoteCommandManager#getLocatorStart</code>.
<p>
See <code>org.apache.geode.internal.gui.StartStopManager#startLocalLocator</code>.
<p>
A JVM property, esp. "-Xmx400m"
</p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.locators</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See the constructor for <code>org.apache.geode.distributed.internal.InternalLocator</code>.
<p>
If this property is not found in gemfire.properties, the system property
of the same name is used.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.lru.maxSearchEntries</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is -1)
<p>
See <code>org.apache.geode.internal.cache.lru.NewLRUClockHand#maxEntries</code>.
<p>
This is the maximum number of "good enough" entries to pass over for eviction
before settling on the next acceptable entry.  This prevents excessive cache
processing to find a candidate for eviction.
<p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.order-pr-gets</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.partitioned.GetMessage#ORDER_PR_GETS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.partitionedRegionRetryTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60 * 60 * 1000)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#retryTimeout</code>
<p>
<pre>
  The maximum milliseconds for retrying operations
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRQueryProcessor.numThreads</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> 1+ (default is 2)
<p>
See <code>org.apache.geode.internal.cache.PRQueryProcessor#executeQuery</code>
<p>
<pre>
  The number of concurrent threads to use within a single VM to execute queries
  on a Partitioned Region. If set to 1 (or less) then queries are run
  sequentially with a single thread.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.pureJavaMode</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.PureJavaMode class init</code>.
<p>
Force use of "pure" Java mode (native libraries will not be loaded)
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.SPECIAL_DURABLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.client.internal.PoolImpl.#SPECIAL_DURABLE</code>
<p>
Makes multiple durable subscriptions from same client unique. on java client ensures only a single server proxy is created but will limit the client to a single active client pool at a time
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.statsDisabled</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.InternalDistributedSystem#statsDisabled</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.statusPollingDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 5000)
<p>
See <code>org.apache.geode.admin.GemFireClientAdminTool#_statusPollingDelay</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.syncWrites</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.internal.cache.Oplog#SYNC_WRITES</code>.
<p>
<pre>
   This system property instructs that writes be synchronously written to disk
   and not to file system. (Use rwd instead of rw - RandomAccessFile property)
</pre>
<p>
TBA
</dd>
	
<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.TcpServer.MAX_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em>
<p>
<pre>
   This property limits the number of threads that the locator will
	use for processing messages.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
    <dt><strong>gemfire.TcpServer.BACKLOG</strong></dt>
    <dd>
        <em>Public:</em> false
        <p>
            <em>Integer</em> default is 1280 but is limited by the OS somaxconn setting
        <p>
        <pre>
   This property establishes a Locator's TCP/IP "accept" backlog
   for locator communications.
</pre>
        <p>
            TBA
    </dd>
<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.validateMessageSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionConfig#VALIDATE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.validateMessageSizeCeiling</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 8 * 1024 * 1024)
<p>
See <code>org.apache.geode.distributed.internal.DistributionConfig#VALIDATE_CEILING</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfirePropertyFile</strong></dt>
<dd>
<em>Public:</em> yes
<p>
<em>String</em>
<p>
See <code>org.apache.geode.distributed.DistributedSystem#PROPERTY_FILE</code>.
<p>
<pre>
     The <code>PROPERTY_FILE</code> is the name of the
     property file that the connect method will check for when
     it looks for a property file.
     The file will be searched for, in order, in the following directories:
     <ol>
     <li> the current directory
     <li> the home directory
     <li> the class path
     </ol>
     Only the first file found will be used.
     <p>
     The default value of PROPERTY_FILE is
     <code>"gemfire.properties"</code>.  However if the
     "gemfirePropertyFile" system property is set then its value is
     the value of PROPERTY_FILE. If this value is a relative file
     system path then the above search is done.  If it is an absolute
     file system path then that file must exist; no search for it is
     done.
     </p>
     @since GemFire 5.0
</pre>
<p>
TBA
</p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemstone.MAX_BUCKET_GRAB_ATTEMPTS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionDataStore.BucketRecoverer#grabBuckets</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfAgentDebug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.admin.jmx.internal.AgentImpl#checkDebug</code>.
<p>
<pre>
  Enables mx4j tracing if Agent debugging is enabled.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfAgentPropertyFile</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.admin.jmx.internal.AgentConfigImpl#retrievePropertyFile</code>.
<p>
<pre>
   The <code>propertyFile</code> is the name of the property file that will 
   be loaded on startup of the Agent.
   <p>
   The file will be searched for, in order, in the following directories:
   <ol>
   <li> the current directory
   <li> the home directory
   <li> the class path
   </ol>
   Only the first file found will be used.
   <p>
   The default value of propertyFile is <code>"agent.properties"</code>. However 
   if the "gfAgentPropertyFile" system property is set then its value is the 
   value of propertyFile. If this value is a relative file system path then 
   the above search is done. If its an absolute file system path then that 
   file must exist; no search for it is done.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfc.propertyfile.init</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.gui.Service#initProps()</code>.
<p>
This is name of a <code>Properties</code> file read at startup.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfc.propertyfile.onclose</strong></dt>
<em>String</em>
<p>
See <code>org.apache.geode.internal.gui.Service#saveProps</code>.
<dd>
<em>Public:</em> false
<p>
This is the name of a <code>Properties</code> file to which some properties
are saved a close.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>install</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.gui.NavigationPane#NavigationPane()</code>.
<p>
See <code>org.apache.geode.internal.gui.Service#Service()</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>jta.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.internal.jta.GlobalTransaction#VERBOSE</code>.
<p>
See <code>org.apache.geode.internal.jta.TransactionManagerImpl#VERBOSE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>jta.defaultTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 600)
<p>
See <code>org.apache.geode.internal.jta.TransactionManagerImpl#DEFAULT_TRANSACTION_TIMEOUT</code>.
<p>
Units are in seconds.
<p>
TBA Is this a standard JTA property?
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>mergelogs.TRIM_TIMESTAMPS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.LogFileParser#TRIM_TIMESTAMPS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.log</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is org.apache.commons.logging.impl.SimpleLog)
<p>
See <code>org.apache.geode.admin.jmx.internal.AgentImpl class init</code>.
<p>
This is the name of a class.
<p>
This property is also used by commons-logging.jar (and
discussed below).  It is called out here
because of its explicit use in the JMX Agent.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>osStatsDisabled</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.GemFireStatSampler#osStatsDisabled</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.DEBUG</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#DEBUG</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#QUIET</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.backlog</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1280 but limited by OS somaxconn setting)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#BACKLOG</code>.
<p>
<pre>
  backlog is the TCP/IP "accept" backlog configuration parameter for cluster
  communications
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.batchBufferSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1024 * 1024)
<p>
See <code>org.apache.geode.internal.tcp.Connection#BATCH_BUFFER_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.batchFlushTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> in Connection.
<p>
See <code>org.apache.geode.internal.tcp.Connection#BATCH_FLUSH_MS</code>.
(Default is 50)
<pre>
    Max number of milliseconds until queued messages are sent. Messages are
    sent when max_bundle_size or
    max_bundle_timeout has been exceeded (whichever occurs faster)
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.batchSends</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.Connection#BATCH_SENDS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.defaultConcurrencyLevel</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is the number of processors on current machine,
but no less than 2)
<p>
See <code>org.apache.geode.distributed.internal.direct.DirectChannel#DEFAULT_CONCURRENCY_LEVEL</code>.
<p>
<pre>
   Return how many concurrent operations should be allowed by default.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.defaultLogLevel</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (one of "config", "fine", "finer", or "finest")
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#getLogger</code>.
<p>
Used only if this class needs to create a logger.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.disableSocketWrite</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (defaults to false)
<p>
See <code>org.apache.geode.internal.tcp.Connection#SOCKET_WRITE_DISABLED</code>.
<p>
<pre>
  use to test message prep overhead (no socket write).
  WARNING: turning this on completely disables distribution of batched sends
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.disconnectDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 3000)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.GMSMembershipManager#destroyMember</code>.
<p>
TBA Workaround for bug 34010: small pause inserted before closing
reader threads for a departed member.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.handshakeTimeoutMs</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 59000)
<p>
See <code>org.apache.geode.internal.tcp.Connection#HANDSHAKE_TIMEOUT_MS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.HANDSHAKE_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10)
<p>
See <code>org.apache.geode.internal.tcp</code>.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>p2p.joinTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 60000 for a server and 24000 for a locator)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.ServiceConfig</code>.
<p>
    Establishes the timeout for waiting for a join response when connecting to
    the cluster
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.lingerTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5000)
<p>
See <code>org.apache.geode.internal.tcp.Connection#Connection(ConnectionTable, Socket)</code>.
<p>
Sets the <code>SO_LINGER</code> time on direct channel TCP sockets.
Units are in milliseconds.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.listenerCloseTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60000)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#LISTENER_CLOSE_TIMEOUT</code>.
<p>
<pre>
  max amount of time (ms) to wait for listener threads to stop
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.maxConnectionSenders</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is p2p.defaultConcurrencyLevel)
<p>
See <code>org.apache.geode.internal.tcp.Connection#MAX_SENDERS</code>.
<p>
<pre>
  The maximum number of concurrent senders sending a message to a single
  recipient.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.maxGroupSenders</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is p2p.defaultConcurrencyLevel)
<p>
See <code>org.apache.geode.distributed.internal.direct.DirectChannel#MAX_GROUP_SENDERS</code>.
<p>
<pre>
  The maximum number of concurrent senders sending a message to a group of
  recipients.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.nodirectBuffers</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#useDirectBuffers</code>.
<p>
<pre>
  use direct ByteBuffers instead of heap ByteBuffers for NIO operations
</pre>
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>p2p.oldIO</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#useNIO</code>.
<p>
If set, don't use java.nio.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.readerBufferSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 32768)
<p>
See <code>org.apache.geode.internal.tcp.Connection#INITIAL_CAPACITY</code>.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>p2p.tcpBufferSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 32768)
<p>
See TCPConduit.
<p>
Any value smaller than 1024 will be set to 1024.
If the gemfire property socket-buffer-size is set to a value other than 32768
then this system property will be ignored.
Otherwise this system property sets the p2p socket-buffer-size.
<p>
Units are are bytes.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.test.inhibitAcceptor</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.internal.tcp.TCPConduit#startAcceptor(int, int, InetAddress).
<p>
TBA 
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>query.disableIndexes</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.cache.query.internal.index.IndexUtils#indexesEnabled.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>remote.call.popup</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10, unless the Integer.parseInt throws a NumberFormatException in which case, the value is 5)
<p>
See org.apache.geode.internal.admin.remote.RemoteCall#getPopupTime.
<p>
Units are in seconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>remote.call.timeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1800)
<p>
See org.apache.geode.internal.admin.remote.AdminWaiters#getWaitTimeout.
<p>
Units are in seconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>skipConnection</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Removed in Geode 1.0 with removal of deprecated Bridge classes.
</p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>slowStartTimeForTesting</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 5000)
<p>
See org.apache.geode.internal.cache.tier.sockets.CacheClientProxy.MessageDispatcher#slowStartTimeForTesting.
<p>
Units are in milliseconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.archive-file</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See org.apache.geode.internal.SimpleStatSampler#archiveFileName.
<p>
This is a filename.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.disable</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.internal.LocalStatisticsFactory#statsDisabled.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.disk-space-limit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 1024 * 1024)
<p>
See org.apache.geode.internal.SimpleStatSampler#archiveDiskSpaceLimit.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.file-size-limit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 0)
<p>
See org.apache.geode.internal.SimpleStatSampler#archiveFileSizeLimit.
<p>
Units are in megabytes
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.log-level</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (See LogWriterImpl.levelNameToCode)
<p>
See org.apache.geode.internal.LocalStatisticsFactory#logLevel.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.name</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See org.apache.geode.internal.LocalStatisticsFactory#name.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.sample-rate</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1000)
<p>
See org.apache.geode.internal.SimpleStatSampler#sampleRate.
<p>
Units are in milliseconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>target.override</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em>
<p>
See org.apache.geode.internal.gui.Service#Service().
<p>
<pre>
      A multicast port for a distributed system that will
      automatically be created by the console.  Its value can be set
      via a system property.  It is used only for testing.
</pre>
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>tcpServerPort</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is the tcp-port property in the distribution config)
<p>
See org.apache.geode.distributed.internal.direct.DirectChannel#DirectChannel(MembershipManager, DistributedMembershipListener, DistributionConfig, LogWriter, Properties).
<p>
TBA 
</dd>

</dl>

<h1>Other Jars</h1>

<h2>commons-logging-1.1.1.jar</h2>

Miscellaneous: org.apache.commons.logging.log.<em>logName</em>, where
the name is the String passed to the SimpleLog constructor:  This is a String
used to set the logging level of the logger.

<dl>
<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.log</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
Default is org.apache.commons.logging.impl.Log4JLogger (if available),
else org.apache.commons.logging.impl.Jdk14Logger,
else org.apache.commons.logging.impl.SimpleLog.
<p>
See <code>org.apache.commons.logging.impl.LogFactoryImpl#LOG_PROPERTY</code>
<p>
<pre>
    The name of the system property identifying our {@link Log}
    implementation class.
</pre>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.dateformat</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is "yyyy/MM/dd HH:mm:ss:SSS zzz")
<p>
String format derived from SimpleDateFormat.
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
"Used to format times"
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.showDateTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
Include the current time in the log message
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.showLogName</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
"Include the instance name in the log message?"
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.showShortName</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is true)
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
Include the short name ( last component ) of the logger in the log message. 
Default to true - otherwise we'll be lost in a flood of messages without 
knowing who sends them.

</dd>

</dl>

<h2>jta-1_0_1B.jar</h2>
TBA

<h2>rt.jar</h2>
TBA
<h2>sunrsasign.jar</h2>
TBA
<h2>jsse.jar</h2>

<dl>
<!-- -------------------------------------------------------  -->
<dt><strong>cert.provider.x509v1security</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
X509Certificate implementation.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>java.protocol.handler.pkgs</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
HTTPS protocol implementation.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>java.security.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
Geniric dynamic debug tracing support.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
JSSE-specific dynamic debug tracing support.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.keyStore</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default keystore.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.keyStoreType</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default keystore type.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.keyStorePassword</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default keystore password.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.trustStore></strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
If the system property javax.net.ssl.trustStore is
defined, then the TrustManagerFactory attempts to find a file using the
filename specified by that system property, and uses that file for the
KeyStore. If that file does not exist, then a default TrustManager using an
empty keystore is created.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.trustStorePassword</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default truststore password.  See the JSSE documentation.
</dd>

</dl>

<h2>jce.jar</h2>

(none found)

<h2>charsets.jar</h2>

(none found)

<h2>localedata.jar</h2>
TBA
<h2>ldapsec.jar</h2>
TBA

<h2>sunjce_provider.jar</h2>

(none found)

<!-- -------------------------------------------------------  -->
</body>
</html>
