---
title: "&lt;cache&gt; Element Reference"
---

<!--
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.
-->

This section documents the `cache.xml` sub-elements used for <%=vars.product_name%> server configuration. All elements are sub-elements of the `<cache>` element.

For <%=vars.product_name%> client configuration, see [&lt;client-cache&gt; Element Reference](client-cache.html).

**API**:`org.apache.geode.cache.CacheFactory`

**&lt;cache&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>copy-on-read</td>
<td><p>Boolean indicating whether entry value retrieval methods return direct references to the entry value objects in the cache (false) or copies of the objects (true).</p></td>
<td>False</td>
</tr>
<tr>
<td>is-server</td>
<td><p>Boolean indicating whether this member is a cache server.</p></td>
<td>False</td>
</tr>
<tr>
<td>lock-timeout</td>
<td><p>The timeout, in seconds, for implicit object lock requests. This setting affects automatic locking only, and does not apply to manual locking. If a lock request does not return before the specified timeout period, it is cancelled and returns with a failure.</p></td>
<td>60</td>
</tr>
<tr>
<td>lock-lease</td>
<td><p>The timeout, in seconds, for implicit and explicit object lock leases. This affects both automatic locking and manual locking. Once a lock is obtained, it can remain in force for the lock lease time period before being automatically cleared by the system.</p></td>
<td>120</td>
</tr>
<tr>
<td>message-sync-interval</td>
<td><p>Used for client subscription queue synchronization when this member acts as a server to clients and server redundancy is used. Sets the frequency (in seconds) at which the primary server sends messages to its secondary servers to remove queued events that have already been processed by the clients.</p></td>
<td>1</td>
</tr>
<tr>
<td>search-timeout</td>
<td><p>How many seconds a <code class="ph codeph">netSearch</code> operation can wait for data before timing out. You may want to change this based on your knowledge of the network load or other factors.</p></td>
<td>300</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
  <cache-server port="40404" />
  <region name="root">
    <region-attributes refid="REPLICATE"/>
    <region name="cs_region" refid="REPLICATE">
      <region-attributes>
        <cache-loader>
          <class-name>cacheRunner.StringLoader</class-name>
        </cache-loader>
          <cache-listener>
          <class-name>cacheRunner.LoggingCacheListener</class-name>
        </cache-listener>
      </region-attributes>
    </region>
  </region>
</cache>
```

## <a id="cache-transaction-manager" class="no-quick-link"></a>&lt;cache-transaction-manager&gt;

Specifies a transaction listener.

**API:** `CacheTransactionManager`

**Example:**

``` pre
<cache search-timeout="60">
   <cache-transaction-manager>
     <transaction-listener>
       <class-name>com.company.data.MyTransactionListener</class-name>
       <parameter name="URL">
         <string>jdbc:cloudscape:rmi:MyData</string>
       </parameter>
     </transaction-listener>
     <transaction-listener>... </transaction-listener> 
     <transaction-writer>
       <class-name>com.company.data.MyTransactionWriter</class-name>
       <parameter name="URL">
         <string>jdbc:cloudscape:rmi:MyData</string>
       </parameter>
       <parameter>
     </transaction-writer>
   </cache-transaction-manager> .. .
</cache>
```

## <a id="transaction-listener" class="no-quick-link"></a>&lt;transaction-listener&gt;

When a transaction ends, its thread calls the TransactionListener to perform the appropriate follow-up for successful commits, failed commits, or voluntary rollbacks.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

## <a id="transaction-writer" class="no-quick-link"></a>&lt;transaction-writer&gt;

When you commit a transaction, a TransactionWriter can perform additional tasks, including cancelling the transaction.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

## <a id="dynamic-region-factory" class="no-quick-link"></a>&lt;dynamic-region-factory&gt;

The `<dynamic-region-factory>` element configures a dynamic region factory for this cache. You can use this element to dynamically create regions in your application code. Use the `createDynamicRegion()` method of the `org.apache.geode.cache.DynamicRegionFactory` class in your Java code to dynamically create regions.

**Note:**
You cannot use this element to dynamically create *partitioned* regions.

**Note:** Use of the `DynamicRegionFactory` class and the `<dynamic-region-factory>` element are deprecated in favor of the `org.apache.geode.cache.execute.FunctionService` class and the [`<function-service>`](#function-service) element.

We recommend that you use functions to dynamically create regions. See [Creating Regions Dynamically](../../developing/region_options/dynamic_region_creation.html).

The optional `<disk-dir>` sub-element specifies the directory to store the persistent files that are used for dynamic region bookkeeping. It defaults to the current directory.

Set the `pool-name` attribute to set the name of the connection pool used by client applications in a client/server cache configuration. Do not specify the `pool-name` attribute in servers or peers.

**API:** `org.apache.geode.cache.DynamicRegionFactory`

**&lt;dynamic-region-factory&gt; Attributes**


| Attribute                 | Description                                                                                                                    | Default |
|---------------------------|--------------------------------------------------------------------------------------------------------------------------------|---------|
| disable-persist-backup    | When set to false, the factory is persisted on disk.                                                                           | false   |
| disable-register-interest | When set to false, client regions created by the factory register interest in all keys in a corresponding server cache region. | false   |
| pool-name                 | The name of a connection pool used by the client factory to communicate with the server-side factory.                          | none    |

**Example:**

``` pre
<dynamic-region-factory 
     pool-name=myPool>
     <disk-dir>/home/gemfire/myDiskdir</disk-dir>
</dynamic-region-factory>
```

## <a id="id_utn_c3p_wk" class="no-quick-link"></a>&lt;disk-dir&gt;

Specifies a region or disk store's disk directory.

**&lt;disk-dir&gt; Attributes**

| Attribute                 | Description                                                                              | Default                  |
|---------------------------|------------------------------------------------------------------------------------------|--------------------------|
| dir-size                  | Maximum amount of space to use for the disk store, in megabytes.                         | 214748364 (2 petabytes)  |

**Example:**

``` pre
<disk-dir 
    dir-size="20480">/host3/users/gf/memberA_DStore</disk-dir> 
```

## <a id="gateway-sender" class="no-quick-link"></a>&lt;gateway-sender&gt;

Configures a gateway sender to distribute region events to another <%=vars.product_name%> site. See [Configuring a Multi-site (WAN) System](../../topologies_and_comm/multi_site_configuration/setting_up_a_multisite_system.html#setting_up_a_multisite_system).

**API:** `GatewaySender`

**&lt;gateway-sender&gt; Attributes**
<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>parallel</td>
<td>Value of &quot;true&quot; or &quot;false&quot; that specifies the type of gateway sender that <%=vars.product_name%> creates.</td>
<td>false</td>
</tr>
<tr>
<td>dispatcher-threads</td>
<td>Number of dispatcher threads that are used to process region events from a gateway sender queue or asynchronous event queue.</td>
<td>5</td>
</tr>
<tr>
<td>order-policy</td>
<td>When the <code class="ph codeph">dispatcher-threads</code> attribute is greater than 1, <code class="ph codeph">order-policy</code> configures the way in which multiple dispatcher threads process region events from a serial gateway queue or serial asynchronous event queue. This attribute can have one of the following values:
<ul>
<li><strong>key</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order of key updates.</li>
<li><strong>thread</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which a given thread added region events to the queue.</li>
<li><strong>partition</strong>. This option is valid for parallel event queues. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which region events were added to the local queue. For a partitioned region, this means that all region events delivered to a specific partition are delivered in the same order to the remote <%=vars.product_name%> site. For a distributed region, this means that all key updates delivered to the local queue are distributed to the remote site in the same order.</li>
</ul>
<p>You cannot configure the <code class="ph codeph">order-policy</code> for a parallel event queue, because parallel queues cannot preserve event ordering for regions. Only the ordering of events for a given partition (or in a given queue of a distributed region) can be preserved.</p></td>
<td>key</td>
</tr>
<tr>
<td>id</td>
<td>Unique identifier for the gateway sender, usually an identifier associated with a physical location. This attribute is required.</td>
<td>null</td>
</tr>
<tr>
<td>remote-distributed-system-id</td>
<td>Integer that uniquely identifies the remote <%=vars.product_name%> cluster to which this gateway sender will send region events. This value corresponds to the <code class="ph codeph">distributed-system-id</code> property specified in locators for the remote cluster. This attribute is required.</td>
<td>null</td>
</tr>
<tr>
<td>manual-start</td>
<td><b>Deprecated.</b> Boolean value that specifies whether you need to manually start the gateway sender. If you supply a null value, the default value of false is used, and the gateway sender attempts to start automatically. <em>A manual start is likely to cause data loss, so manual start should never be used in a production system.</em></td>
<td>false</td>
</tr>
<tr>
<td>socket-buffer-size</td>
<td>Size of the socket buffer that sends messages to remote sites. This size should match the size of the <code class="ph codeph">socket-buffer-size</code> attribute of remote gateway receivers that process region events.</td>
<td>32768</td>
</tr>
<tr>
<td>socket-read-timeout</td>
<td>Amount of time in milliseconds that the gateway sender will wait to receive an acknowledgment from a remote site. By default this is set to 0, which means there is no timeout. If you do set this timeout, you must set it to a minimum of 30000 (milliseconds). Setting it to a lower number will generate an error message and reset the value to the default of 0.</td>
<td>0</td>
</tr>
<tr>
<td>enable-batch-conflation</td>
<td>Boolean value that determines whether <%=vars.product_name%> should conflate messages.</td>
<td>false</td>
</tr>
<tr>
<td>batch-size</td>
<td>Maximum number of messages that a batch can contain.</td>
<td>100</td>
</tr>
<tr>
<td>batch-time-interval</td>
<td>Maximum number of milliseconds that can elapse between sending batches.</td>
<td>1000</td>
</tr>
<tr>
<td>enable-persistence</td>
<td>Boolean value that determines whether <%=vars.product_name%> persists the gateway queue.</td>
<td>false</td>
</tr>
<tr>
<td>disk-store-name</td>
<td>Named disk store to use for storing the queue overflow, or for persisting the queue. If you specify a value, the named disk store must exist. If you specify a null value, <%=vars.product_name%> uses the default disk store for overflow and queue persistence.</td>
<td> </td>
</tr>
<tr>
<td>disk-synchronous</td>
<td>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</td>
<td>true</td>
</tr>
<tr>
<td>maximum-queue-memory</td>
<td>Maximum amount of memory in megabytes that the queue can consume before overflowing to disk.</td>
<td>100 MB</td>
</tr>
<tr>
<td>alert-threshold</td>
<td>Maximum number of milliseconds that a region event can remain in the gateway sender queue before <%=vars.product_name%> logs an alert.</td>
<td>0</td>
</tr>
<tr>
<td>group-transaction-events</td>
<td>Boolean value to ensure that all the events of a transaction are sent in the same batch, i.e., they are never spread across different batches.
<p>Only allowed to be set on gateway senders with the <code class="ph codeph">parallel</code> attribute set to false and <code class="ph codeph">dispatcher-threads</code> attribute equal to 1, or on gateway senders with the <code class="ph codeph">parallel</code> attribute set to true. Also, the  <code class="ph codeph">enable-batch-conflation</code> attribute of the gateway sender must be set to false.</p>
<p><b>Note:</b> In order to work for a transaction, the regions to which the transaction events belong must be replicated by the same set of senders with this flag enabled.</p>
<p><b>Note:</b> If the above condition is not fulfilled or under very high load traffic conditions, it may not be guaranteed that all the events for a transaction will be sent in the same batch, even if <code class="ph codeph">group-transaction-events</code> is enabled. The number of batches sent with incomplete transactions can be retrieved from the <code class="ph codeph">GatewaySenderMXBean</code> bean.</p></td>
<td>false</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
  
  <gateway-sender 
    id="remoteA" 
    parallel="true" 
    remote-distributed-system-id="1"> 
    <gateway-event-filter>
      <class-name>org.apache.geode.util.SampleEventFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
    </gateway-event-filter>
    <gateway-transport-filter>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
    </gateway-transport-filter>
  </gateway-sender> 
  ...
</cache>
```

## <a id="gateway-event-filter" class="no-quick-link"></a>&lt;gateway-event-filter&gt;

A GatewayEventFilter implementation determines whether a region event is placed in a gateway sender queue and/or whether an event in a gateway queue is distributed to a remote site. You can optionally add one or more GatewayEventFilter implementations to a gateway sender, either in the cache.xml configuration file or using the Java API.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-event-filter>
      <class-name>org.apache.geode.util.SampleEventFilter</class-name>
      <parameter name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-event-filter>
```

## <a id="gateway-event-substitution-filter" class="no-quick-link"></a>&lt;gateway-event-substitution-filter&gt;

A GatewayEventSubstitutionFilter provides a way to specify a substitute value to be stored in the GatewayQueueEvent and enqueued in the RegionQueue. You can optionally add one GatewayEventSubstitutionFilter implementation to a gateway sender.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-event-substitution-filter>
      <class-name>org.apache.geode.util.SampleEventSubstitutionFilter</class-name>
      <parameter name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-event-substitution-filter>
```

## <a id="gateway-transport-filter" class="no-quick-link"></a>&lt;gateway-transport-filter&gt;

Use a GatewayTransportFilter implementation to process the TCP stream that sends a batch of events that is distributed from one <%=vars.product_name%> cluster to another over a WAN. A GatewayTransportFilter is typically used to perform encryption or compression on the data that distributed. You install the same GatewayTransportFilter implementation on both a gateway sender and gateway receiver.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-transport-filter>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-transport-filter>
```

## <a id="gateway-receiver" class="no-quick-link"></a>&lt;gateway-receiver&gt;

Configures a gateway receiver to receive and apply region events that were distributed from another <%=vars.product_name%> site. You can only specify one gateway receiver on a member. See [Configuring a Multi-site (WAN) System](../../topologies_and_comm/multi_site_configuration/setting_up_a_multisite_system.html#setting_up_a_multisite_system).

**API:** `GatewayReceiverFactory`, `GatewayTransportFilter`

**&lt;gateway-receiver&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>start-port</td>
<td><p>Starting port number to use when specifying the range of possible port numbers this gateway receiver will use to connects to gateway senders in other sites. <%=vars.product_name%> chooses an unused port number in the specified port number range to start the receiver. If no port numbers in the range are available, an exception is thrown.</p>
<p>The <code class="ph codeph">STARTPORT</code> value is inclusive while the <code class="ph codeph">ENDPORT</code> value is exclusive. For example, if you specify <code class="ph codeph">STARTPORT=&quot;50510&quot;</code> and <code class="ph codeph">ENDPOINT=&quot;50520&quot;</code>, <%=vars.product_name%> chooses a port value from 50510 to 50519.</p></td>
<td>5000</td>
</tr>
<tr>
<td>end-port</td>
<td><p>Defines the upper bound port number to use when specifying the range of possible port numbers this gateway receiver will use to for connections from gateway senders in other sites. <%=vars.product_name%> chooses an unused port number in the specified port number range to start the receiver. If no port numbers in the range are available, an exception is thrown.</p>
<p>The <code class="ph codeph">ENDPORT</code> value is exclusive while the <code class="ph codeph">STARTPORT</code> value is inclusive. For example, if you specify <code class="ph codeph">STARTPORT=&quot;50510&quot;</code> and <code class="ph codeph">ENDPOINT=&quot;50520&quot;</code>, <%=vars.product_name%> chooses a port value from 50510 to 50519.</p></td>
<td>5500</td>
</tr>
<tr>
<td>bind-address</td>
<td>Network address for connections from gateway senders in other sites. Specify the address as a literal string value.</td>
<td> </td>
</tr>
<tr>
<td>hostname-for-senders</td>
<td>Attribute where you can specify an IP address or hostname for gateway sender connections. If you configure hostname-for-senders, locators will use the provided hostname or IP address when instructing gateway senders on how to connect to gateway receivers. If you provide &quot;&quot; or null as the value, by default the gateway receiver's bind-address will be sent to clients.</td>
<td> </td>
</tr>
<tr>
<td>manual-start</td>
<td>When set to false, the gateway receiver will automatically start when the receiver is created. If set to true, you must manually start the receiver.</td>
<td>true</td>
</tr>
<tr>
<td>maximum-time-between-pings</td>
<td>Integer value that specifies the time interval (in milliseconds) to use between pings to connected WAN sites. This value determines the maximum amount of time that can elapse before a remote WAN site is considered offline.</td>
<td>60000</td>
</tr>
<tr>
<td>socket-buffer-size</td>
<td>An integer value that sets the buffer size (in bytes) of the socket connection for this gateway receiver. This value should match the <code class="ph codeph">socket-buffer-size</code> setting of gateway senders that connect to this receiver.</td>
<td>32768</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
     <gateway-receiver start-port="1530" end-port="1551"> 
    <gateway-transport-filter>>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
    </gateway-transport-filter>
  </gateway-receiver>
</cache>
```

## <a id="gateway-receiver_gateway-transport-filter" class="no-quick-link"></a>&lt;gateway-transport-filter&gt;

Use a GatewayTransportFilter implementation to process the TCP stream that sends a batch of events that is distributed from one <%=vars.product_name%> cluster to another over a WAN. A GatewayTransportFilter is typically used to perform encryption or compression on the data that distributed. You install the same GatewayTransportFilter implementation on both a gateway sender and gateway receiver.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-transport-filter>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-transport-filter>
```

## <a id="gateway-conflict-resolver" class="no-quick-link"></a>&lt;gateway-conflict-resolver&gt;

An event-handler plug-in that is called in order to determine whether a potentially conflicting WAN update should be applied to the local cache. A GatewayConflictResolver is invoked if the current value in a cache entry was established by a different cluster (with a different distributed-system-id) than an event that is attempting to modify the entry. It is not invoked if the event has the same distributed system ID as the event that last changed the entry. See [Resolving Conflicting Events](../../developing/events/resolving_multisite_conflicts.html#topic_E97BB68748F14987916CD1A50E4B4542)

Specify the Java class for the gateway conflict resolver plug-in and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.util.GatewayConflictResolver`

**Example:**

``` pre
<gateway-conflict-resolver>
    <class-name>
     myPackage.MyConflictResolver
    </class-name>
  </gateway-conflict-resolver>
```

## <a id="async-event-queue" class="no-quick-link"></a>&lt;async-event-queue&gt;

Configures a queue for sending region events to an AsyncEventListener implementation (for example, for write-behind event handling).

**API:** `org.apache.geode.cache.asyncqueue.AsyncEventQueue`

**&lt;async-event-queue&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Unique identifier for the queue. This attribute is required.</td>
<td>null</td>
</tr>
<tr>
<td>parallel</td>
<td>Value of &quot;true&quot; or &quot;false&quot; that specifies the type of queue that <%=vars.product_name%> creates.</td>
<td>false</td>
</tr>
<tr>
<td>batch-size</td>
<td>Maximum number of messages that a batch can contain.</td>
<td>100</td>
</tr>
<tr>
<td>batch-time-interval</td>
<td>Maximum number of milliseconds that can elapse between sending batches.</td>
<td>5</td>
</tr>
<tr>
<td>enable-batch-conflation</td>
<td>Boolean value that determines whether <%=vars.product_name%> should conflate messages.</td>
<td>false</td>
</tr>
<tr>
<td>disk-store-name</td>
<td>Named disk store to use for storing queue overflow, or for persisting the queue. If you specify a value, the named disk store must exist. If you specify a null value, <%=vars.product_name%> uses the default disk store for overflow and queue persistence.</td>
<td>null specifies the default disk store</td>
</tr>
<tr>
<td>disk-synchronous</td>
<td>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</td>
<td>true</td>
</tr>
<tr>
<td>dispatcher-threads</td>
<td>Number of dispatcher threads that are used to process region events from the queue.</td>
<td>5</td>
</tr>
<tr>
<td>forward-expiration-destroy</td>
<td>When true, forwards expiration destroy operations to AsyncEventListener.</td>
<td>false</td>
</tr>
<tr>
<td>maximum-queue-memory</td>
<td>Maximum amount of memory in megabytes that the queue can consume before overflowing to disk.</td>
<td>100 mb</td>
</tr>
<tr>
<td>order-policy</td>
<td>When the <code class="ph codeph">dispatcher-threads</code> attribute is greater than 1, <code class="ph codeph">order-policy</code> configures the way in which multiple dispatcher threads process region events from the queue. This attribute can have one of the following values:
<ul>
<li><strong>key</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order of key updates.</li>
<li><strong>thread</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which a given thread added region events to the queue.</li>
<li><strong>partition</strong>. This option is valid for parallel event queues. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which region events were added to the local queue. For a partitioned region, this means that all region events delivered to a specific partition are delivered in the same order to the remote <%=vars.product_name%> site. For a distributed region, this means that all key updates delivered to the local queue are distributed to the remote site in the same order.</li>
</ul>
<p>You cannot configure the <code class="ph codeph">order-policy</code> for a parallel event queue, because parallel queues cannot preserve event ordering for regions. Only the ordering of events for a given partition (or in a given queue of a distributed region) can be preserved.</p></td>
<td>key</td>
</tr>
<tr>
<td>pause-event-processing</td>
<td>When true, event dispatching from the queue to the listener(s) will be paused when the AsyncEventQueue is started.</td>
<td>false</td>
</tr>
<tr>
<td>persistent</td>
<td>Boolean value that determines whether <%=vars.product_name%> persists this queue.</td>
<td>False</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
   <async-event-queue 
    id="sampleQueue" 
    persistent="true"
    disk-store-name="exampleStore" 
    parallel="false">
      <async-event-listener>
         <class-name>MyAsyncEventListener</class-name>
         <parameter name="url"> 
           <string>jdbc:db2:SAMPLE</string> 
         </parameter> 
         <parameter name="username"> 
           <string>gfeadmin</string> 
         </parameter> 
         <parameter name="password"> 
           <string>admin1</string> 
         </parameter>
      </async-event-listener>
   </async-event-queue>
    ...
</cache>
```

## <a id="async-event-listener" class="no-quick-link"></a>&lt;async-event-listener&gt;

An AsyncEventListener receives callbacks for events that change region data. You can use an AsyncEventListener implementation as a write-behind cache event handler to synchronize region updates with a database.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.asyncqueue.AsyncEventListener`

**Example:**

``` pre
...
    <async-event-listener>
         <class-name>MyAsyncEventListener</class-name>
         <parameter name="url"> 
           <string>jdbc:db2:SAMPLE</string> 
         </parameter> 
         <parameter name="username"> 
           <string>gfeadmin</string> 
         </parameter> 
         <parameter name="password"> 
           <string>admin1</string> 
         </parameter> 
    </async-event-listener>
...
```

## <a id="cache-server" class="no-quick-link"></a>&lt;cache-server&gt;

Configures the cache to serve region data to clients in a client/server caching system. This element indicates the port the server listens on for client communication.

The `cacheserver` process uses only `cache.xml` configuration. For application servers, you can set the same configuration properties using the `org.apache.geode.cache.server.CacheServer` and `org.apache.geode.cache.Cache` interfaces. For detailed information, see the online Java API documentation.

**API:** `org.apache.geode.cache.server.CacheServer`

**&lt;cache-server&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>bind-address</td>
<td>Hostname or IP address that the server is to listen on for client connections. If null, the server listens on the machine’s default address.</td>
<td>null</td>
</tr>
<tr>
<td>hostname-for-clients</td>
<td>Hostname or IP address to pass to the client as the location where the server is listening. When the server connects to the locator it tells the locator the host and port where it is listening for client connections. If the host the server uses by default is one that the client can’t translate into an IP address, the client will have no route to the server’s host and won’t be able to find the server. For this situation, you must supply the server’s alternate hostname for the locator to pass to the client. If null, the server’s <code class="ph codeph">bind-address</code> setting is used.</td>
<td>null</td>
</tr>
<tr>
<td>load-poll-interval</td>
<td>Frequency, in milliseconds, to poll the load probe for load information on the server.</td>
<td>5000
<p>(5 seconds)</p></td>
</tr>
<tr>
<td>max-connections</td>
<td>Maximum number of client connections for the server. When the maximum is reached, the server refuses additional client connections.
<p>
<b>Note:</b>
Set this at least as high as max-threads.</p></td>
<td>800</td>
</tr>
<tr>
<td>max-threads</td>
<td>Maximum number of threads allowed in this server to service client connections. When the limit is reached, server threads begin servicing multiple connections. A zero setting causes the server to use a thread for every client connection.
<p>
<b>Note:</b>
Set this no higher than max-connections.</p></td>
<td>0</td>
</tr>
<tr>
<td>maximum-message-count</td>
<td>Maximum number of messages allowed in a subscription queue. When the queue reaches this limit, messages block.
<p>
<b>Note:</b>
Used only if <code class="ph codeph">client-subscription</code> is not configured.</p></td>
<td>230000</td>
</tr>
<tr>
<td>maximum-time-between-pings</td>
<td>Maximum time, in milliseconds, the server allows to pass between messages or pings indicating a client is healthy.
<p>
<b>Note:</b>
A setting of 0 or a negative number turns off client health monitoring. Be careful not to do this accidentally.</p></td>
<td>60000
<p>(1 minute)</p></td>
</tr>
<tr>
<td>message-time-to-live</td>
<td>Setting used for highly available subscription queues. The expiration time, in seconds, for non-durable messages in the secondary server’s client subscription queue. The system removes non-durable messages that have been in the queue beyond this time. If set to 0 (zero), the messages are never removed.
<p>
<b>Note:</b>
Set this high enough to avoid removing messages that are still valid, to aovid losing messages during server failover.</p></td>
<td>180
<p>(3 minutes)</p></td>
</tr>
<tr>
<td>port</td>
<td>Port that the server listens on for client communication.</td>
<td>40404</td>
</tr>
<tr>
<td>socket-buffer-size</td>
<td>Size for socket buffers used for server-to-client communication.</td>
<td>32768</td>
</tr>
<tr>
<td>tcp-no-delay</td>
<td>When set to true, enables TCP_NODELAY for <%=vars.product_name%> server connections to clients.</td>
<td>false</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
    <cache-server 
     port="40404" 
      />
   ...
</cache>
```

## <a id="client-subscription" class="no-quick-link"></a>&lt;client-subscription&gt;

Overflow specification for client subscription queues. Sets a capacity limit on the in-memory queue and specifies where to overflow when capacity is reached. By default no overflow is used. Specified in three parts:

**Default:** no overflow

**API:** `org.apache.geode.cache.server.ClientSubscriptionConfig`

**&lt;client-subscription&gt; Attributes**

| Attribute          | Description                                                                                                                                                                     | Default            |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|
| eviction-policy    | How the capacity is calculated. The options are mem for memory use, entry for message count, and null for no overflow.                                                          | null               |
| capacity           | Used if eviction-policy is not null. Specified in megabytes for mem and as a positive integer for entry.                                                                        | 1                  |
| disk-store-name    | Used if eviction-policy is not null. Default: default disk store. If specified, the disk-store-name must specify a disk store that is already defined in the cache.             | default disk store |

**Example:**

``` pre
<cache>
 <cache-server port=4444>
   <client-subscription eviction-policy="entry | mem" capacity=35 overflow-directory="OverflowDir"></client-subscription>
   ...
 </cache-server>
</cache>
```

## <a id="custom-load-probe" class="no-quick-link"></a>&lt;custom-load-probe&gt;

Application plug-in used to provide current and predicted server load information to the server locators.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:** If this is not defined, the default <%=vars.product_name%> load probe is used.

**API:** `org.apache.geode.cache.server.setLoadProbe`

**Example:**

``` pre
<custom-load-probe>
    <class-name>
     myPackage.MyLoadProbe
    </class-name>
  </custom-load-probe>
```

## <a id="pool" class="no-quick-link"></a>&lt;pool&gt;

Use for client caches. Defines a client's server pool used to communicate with servers running in a different cluster.

**API:** `org.apache.geode.cache.client.PoolFactory`

**&lt;pool&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>free-connection-timeout</td>
<td>Amount of time a thread will wait to get a pool connection before timing out with an exception. This timeout keeps threads from waiting indefinitely when the pool’s <code class="ph codeph">max-connections</code> has been reached and all connections in the pool are in use by other threads.</td>
<td>10000</td>
</tr>
<tr>
<td>idle-timeout</td>
<td>Maximum time, in milliseconds, a pool connection can stay open without being used when there are more than <code class="ph codeph">min-connections</code> in the pool. Pings over the connection do not count as connection use. If set to -1, there is no idle timeout.</td>
<td>5000</td>
</tr>
<tr>
<td>load-conditioning-interval</td>
<td>Amount of time, in milliseconds, a pool connection can remain open before being eligible for silent replacement to a less-loaded server.</td>
<td>300000
<p>(5 minutes)</p></td>
</tr>
<tr>
<td>max-connections</td>
<td>Maximum number of pool connections the pool can create. If the maximum connections are in use, an operation requiring a client-to-server connection blocks until a connection becomes available or the <code class="ph codeph">free-connection-timeout</code> or <code class="ph codeph">server-connection-timeout</code> is reached. If set to -1, there is no maximum. The setting must indicate a cap greater than <code class="ph codeph">min-connections</code>.
<p>
<b>Note:</b>
If you need to use this to cap your pool connections, you should disable the pool attribute <code class="ph codeph">pr-single-hop-enabled</code>. Leaving single hop enabled can increase thrashing and lower performance.</p></td>
<td>-1</td>
</tr>
<tr>
<td>min-connections</td>
<td>Minimum number of pool connections to keep available at all times. Used to establish the initial connection pool. If set to 0 (zero), no connection is created until an operation requires it. This number is the starting point, with more connections added later as needed, up to the <code class="ph codeph">max-connection</code> setting. The setting must be an integer greater than or equal to 0.</td>
<td>1</td>
</tr>
<tr>
<td>multiuser-authentication</td>
<td>Used for installations with security where you want to accommodate multiple users within a single client. If set to true, the pool provides authorization for multiple user instances in the same client application, and each user accesses the cache through its own <code class="ph codeph">RegionService</code> instance. If false, the client either uses no authorization or just provides credentials for the single client process.</td>
<td>false</td>
</tr>
<tr>
<td>name</td>
<td>Name of this pool. Used in the client region pool-name to assign this pool to a region in the client cache.
<p>
<b>Note:</b>
This is a required property with no default setting.</p></td>
<td>none</td>
</tr>
<tr>
<td>ping-interval</td>
<td>How often to communicate with the server to show the client is alive, set in milliseconds. Pings are only sent when the ping-interval elapses between normal client messages.
<p>
<b>Note:</b>
Set this lower than the server’s <code class="ph codeph">maximum-time-between-pings</code>.</p></td>
<td>10000</td>
</tr>
<tr>
<td>pr-single-hop-enabled</td>
<td>Setting used to improve access to partitioned region data in the servers. Indicates whether to use metadata about the partitioned region data storage locations to decide where to send some data requests. This allows a client to send a data operation directly to the server hosting the key. Without this, the client contacts any available server and that server contacts the data store. This is used only for operations that can be carried out on a server-by-server basis, like put, get, and destroy.</td>
<td>true</td>
</tr>
<tr>
<td>read-timeout</td>
<td>Maximum time, in milliseconds, for the client to wait for a response from a server.</td>
<td>10000</td>
</tr>
<tr>
<td>retry-attempts</td>
<td>Number of times to retry a client request before giving up. If one server fails, the pool moves to the next, and so on until it is successful or it hits this limit. If the available servers are fewer than this setting, the pool will retry servers that have already failed until it reaches the limit. If this is set to -1, the pool tries every available server once.</td>
<td>-1</td>
</tr>
<tr>
<td>server-connection-timeout</td>
<td>Amount of time a thread will wait to get a pool connection towards specific server, before timing out with an exception. This timeout keeps threads from waiting indefinitely when the pool’s <code class="ph codeph">max-connections</code> has been reached and all connections in the pool are in use by other threads.</td>
<td>0</td>
</tr>
<tr>
<td>server-group</td>
<td>Logical named server group to use from the pool. A null value uses the global server group to which all servers belong.
<p>
<b>Note:</b>
This is only used when the <code class="ph codeph">locator</code> list is defined.</p></td>
<td>null</td>
</tr>
<tr>
<td>socket-buffer-size</td>
<td>Size for socket buffers from the client to the server. Default: 32768.</td>
<td>32768</td>
</tr>
<tr>
<td>statistic-interval</td>
<td>Interval, in milliseconds, at which to send client statistics to the server. If set to -1, statistics are not sent.</td>
<td>-1</td>
</tr>
<tr>
<td>subscription-ack-interval</td>
<td>Time, in milliseconds, between messages to the primary server to acknowledge event receipt.
<p>
<b>Note:</b>
Used only when <code class="ph codeph">subscription-redundancy</code> is not ‘0’ (zero).</p></td>
<td>100</td>
</tr>
<tr>
<td>subscription-enabled</td>
<td>Boolean indicating whether the server should connect back to the client and automatically sends server-side cache update information. Any bind address information for the client is automatically passed to the server for use in the callbacks.</td>
<td>false</td>
</tr>
<tr>
<td>subscription-message-
<p>tracking-timeout</p></td>
<td>Time-to-live, in milliseconds, for entries in the client’s message tracking list.</td>
<td>900000
<p>(15 minutes)</p></td>
</tr>
<tr>
<td>subscription-redundancy</td>
<td>Number of servers to use as backup to the primary for highly available subscription queue management. If set to 0, none are used. If set to -1, all available servers are used.</td>
<td>0</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<pool 
   name="publisher" 
   subscription-enabled="true">
     <locator 
       host="myLocatorAddress1" 
       port="12345"/>
     <locator 
       host="myLocatorAddress2" 
       port="45678"/>
</pool>
```

## <a id="locator" class="no-quick-link"></a>&lt;locator&gt;

Addresses and ports of the locators to connect to. You can define multiple locators for the pool.

**Note:**
Provide a locator list or `server` list, but not both.

**API:** `org.apache.geode.distributed.LocatorLauncher`

**&lt;locator&gt; Attributes**

| Attribute | Description                | Default |
|-----------|----------------------------|---------|
| host      | Hostname of the locator    |         |
| port      | Port number of the locator |         |

**Example:**

``` pre
<pool ...>
<locator 
       host="myLocatorHost" 
       port="12345"/>
```

## <a id="server" class="no-quick-link"></a>&lt;server&gt;

Addresses and ports of the servers to connect to.

**Note:**
Provide a server list or `locator` list, but not both.

**Default:**

**API:** `org.apache.geode.distributed.ServerLauncher`

**&lt;server&gt; Attributes**

| Attribute | Description               | Default |
|-----------|---------------------------|---------|
| host      | Hostname of the server    |         |
| port      | Port number of the server |         |

**Example:**

``` pre
<pool ...>
   <server 
       host="myServerHost" 
       port="123456"/>
</pool>
```

## <a id="disk-store" class="no-quick-link"></a>&lt;disk-store&gt;

Defines a pool of one or more disk stores, which can be used by regions, and client subscription queues.

**Default:** The cache default disk store, named "DEFAULT", is used when disk is used but no disk store is named.

**API:** `org.apache.geode.cache.DiskStore`

**&lt;disk-store&gt; Attributes**

<table>
<caption><span class="tablecap">Table 10. &lt;disk-store&gt; Attributes</span></caption>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>The name of the Disk Store.</td>
<td> </td>
</tr>
<tr>
<td>auto-compact</td>
<td>Set to true to automatically compact the disk files.</td>
<td> </td>
</tr>
<tr>
<td>compaction-threshold</td>
<td>The threshold at which an oplog will become compactable. Until it reaches this threshold the oplog will not be compacted.
<p>The threshold is a percentage in the range 0 to 100.</p></td>
<td> </td>
</tr>
<tr>
<td>allow-force-compaction</td>
<td>Set to true to allow disk compaction to be forced on this disk store.</td>
<td> </td>
</tr>
<tr>
<td>max-oplog-size</td>
<td>The maximum size, in megabytes, of an oplog (operation log) file.</td>
<td> </td>
</tr>
<tr>
<td>time-interval</td>
<td>The number of milliseconds that can elapse before unwritten data is written to disk.</td>
<td> </td>
</tr>
<tr>
<td>write-buffer-size</td>
<td>The size of the write buffer that this disk store uses when writing data to disk. Larger values may increase performance but use more memory. The disk store allocates one direct memory buffer of this size.</td>
<td> </td>
</tr>
<tr>
<td>queue-size</td>
<td>Maximum number of operations that can be asynchronously queued to be written to disk.</td>
<td> </td>
</tr>
<tr>
<td>disk-usage-warning-percentage</td>
<td>Disk usage above this threshold generates a warning message. For example, if the threshold is set to 90%, then on a 1 TB drive falling under 100 GB of free disk space generates the warning.
<p>Set to &quot;0&quot; (zero) to disable.</p></td>
<td>90</td>
</tr>
<tr>
<td>disk-usage-critical-percentage</td>
<td>Disk usage above this threshold generates an error message and shuts down the member's cache. For example, if the threshold is set to 99%, then falling under 10 GB of free disk space on a 1 TB drive generates the error and shuts down the cache.
<p>Set to &quot;0&quot; (zero) to disable.</p></td>
<td>99</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<disk-store 
    name="DEFAULT" 
    allow-force-compaction="true">
     <disk-dirs>
        <disk-dir>/export/thor/customerData</disk-dir>
        <disk-dir>/export/odin/customerData</disk-dir>
        <disk-dir>/export/embla/customerData</disk-dir>
     </disk-dirs>
</disk-store>
```

## <a id="disk-dirs" class="no-quick-link"></a>&lt;disk-dirs&gt;

An element of a disk store that defines a set of `<disk-dir>` elements.

## <a id="disk-dir" class="no-quick-link"></a>&lt;disk-dir&gt;

Specifies a region or disk store's disk directory.

**&lt;disk-dir&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>dir-size</td>
<td>Maximum amount of space to use for the disk store, in megabytes.</td>
<td>214748364
<p>(2 petabytes)</p></td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<disk-dir 
    dir-size="20480">/host3/users/gf/memberA_DStore</disk-dir> 
```

## <a id="pdx" class="no-quick-link"></a>&lt;pdx&gt;

Specifies the configuration for the Portable Data eXchange (PDX) method of serialization.

**API:** `org.apache.geode.cache.CacheFactory.setPdxReadSerialized`, `setPdxDiskStore`, `setPdxPersistent`, `setPdxIgnoreUnreadFields` and `org.apache.geode.cache.ClientCacheFactory.setPdxReadSerialized`, `setPdxDiskStore`, `setPdxPersistent`, `setPdxIgnoreUnreadFields`

**&lt;pdx&gt; Attributes**

| Attribute            | Description                                                                                                                                                                                                | Default |
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| read-serialized      | Set it to true if you want PDX deserialization to produce a PdxInstance instead of an instance of the domain class.                                                                                        |         |
| ignore-unread-fields | Set it to true if you do not want unread PDX fields to be preserved during deserialization. You can use this option to save memory. Set to true only in members that are only reading data from the cache. |         |
| persistent           | Set to true if you are using persistent regions. This causes the PDX type information to be written to disk.                                                                                               |         |
| disk-store-name      | If using persistence, this attribute allows you to configure the disk store that the PDX type data will be stored in. By default, the default disk store is used.                                          |         |

**Example:**

``` pre
<cache>
  <pdx persistent="true" disk-store-name="myDiskStore">
    <pdx-serializer>
      <class-name>
       org.apache.geode.pdx.ReflectionBasedAutoSerializer
      </class-name>
    <parameter name="classes">
      <string>com.company.domain.DomainObject</string>>
    </parameter>
  </pdx-serializer>
 </pdx>
  ...
</cache>
```

## <a id="pdx-serializer_24898989679" class="no-quick-link"></a>&lt;pdx-serializer&gt;

Allows you to configure the PdxSerializer for this <%=vars.product_name%> member.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:**

**API:** `org.apache.geode.cache.CacheFactory.setPdxSerializer`

**Example:**

``` pre
<cache>
  <pdx>
    <pdx-serializer>
     <class-name>com.company.ExamplePdxSerializer</class-name>
    </pdx-serializer>
  </pdx> 
  ...
</cache>
```

## <a id="region-attributes" class="no-quick-link"></a>&lt;region-attributes&gt;

Specifies a region attributes template that can be named (by `id`) and referenced (by `refid`) later in the `cache.xml` and through the API.

**API:** `org.apache.geode.cache.RegionFactory` or `org.apache.geode.cache.ClientRegionFactory`

**&lt;region-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>concurrency-level</td>
<td>Gives an estimate of the maximum number of application threads that will concurrently access a region entry at one time. This attribute does not apply to partitioned regions. This attribute helps <%=vars.product_name%> optimize the use of system resources and reduce thread contention. This sets an initial parameter on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries.
<p>
<b>Note:</b>
Before you modify this, read the concurrency level description, then see the Java API documentation for <code class="ph codeph">java.util.ConcurrentHashMap</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setConcurrencyLevel</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  concurrency-level=&quot;10&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>16 (threads)</td>
</tr>
<tr>
<td>data-policy</td>
<td><p>Specifies how the local cache handles data for a region. This setting controls behavior such as local data storage and region initialization.</p>
<p>
<b>Note:</b>
Configure the most common options using the region shortcuts, <code class="ph codeph">RegionShortcut</code> and <code class="ph codeph">ClientRegionShortcut</code>. The default <code class="ph codeph">data-policy</code> of <code class="ph codeph">normal</code> specifies local cache storage. The empty policy specifies no local storage. In the region shortcuts, empty corresponds to the settings with the string <code class="ph codeph">PROXY</code>. You can use an empty region for event delivery to and from the local cache without the memory overhead of data storage.</p>
<p>You can specify the following data policies:</p>
<div class="p">
<table>
<tbody>
<tr>
<td>empty</td>
<td>No data storage in the local cache. The region always appears empty. Use this for event delivery to and from the local cache without the memory overhead of data storage - zero-footprint producers that only distribute data to others and zero-footprint consumers that only see events. To receive events with this, set the region's <code class="ph codeph">subscription-attributes</code> <code class="ph codeph">interest-policy</code> to all.</td>
</tr>
<tr>
<td>normal</td>
<td>Data used locally (accessed with <code class="ph codeph">get</code>, stored with <code class="ph codeph">put</code>, etc.) is stored in the local cache. This policy allows the contents in the cache to differ from other caches.</td>
</tr>
<tr>
<td>partition</td>
<td>Data is partitioned across local and remote caches using the automatic data distribution behavior of partitioned regions. Additional configuration is done in the <code class="ph codeph">partition-attributes</code>.</td>
</tr>
<tr>
<td>replicate</td>
<td>The region is initialized with the data from other caches. After initialization, all events for the distributed region are automatically copied into the local region, maintaining a replica of the entire distributed region in the local cache. Operations that would cause the contents to differ with other caches are not allowed. This is compatible with local <code class="ph codeph">scope</code>, behaving the same as for normal.</td>
</tr>
<tr>
<td>persistent-partition</td>
<td>Behaves the same as <code class="ph codeph">partition</code> and also persists data to disk.</td>
</tr>
<tr>
<td>persistent-replicate</td>
<td>Behaves the same as <code class="ph codeph">replicate</code> and also persists data to disk.</td>
</tr>
<tr>
<td>preloaded</td>
<td>Initializes like a replicated region, then, once initialized, behaves like a normal region.</td>
</tr>
</tbody>
</table>
<strong>API:</strong> <code class="ph codeph">setDataPolicy</code>
</div>
<p><strong>Example</strong>:</p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  data-policy=&quot;replicate&quot;&gt; 
&lt;/region-attributes&gt;</code></pre>
<p>This is similar to using a region shortcut with<code class="ph codeph">refid</code>, however when you use the REPLICATE region shortcut, it automatically sets the region's scope to <code class="ph codeph">distributed-ack</code>.</p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  refid=&quot;REPLICATE&quot;&gt; 
&lt;/region-attributes&gt;</code></pre>
<p>If you use <code class="ph codeph">data-policy</code>, you must set the scope explicitly.</p></td>
<td>normal</td>
</tr>
<tr>
<td>enable-async-conflation</td>
<td><p>For TCP/IP distributions between peers, specifies whether to allow aggregation of asynchronous messages sent by the producer member for the region. This is a special-purpose voolean attribute that applies only when asynchronous queues are used for slow consumers. A false value disables conflation so that all asynchronous messages are sent individually. This special-purpose attribute gives you extra control over peer-to-peer communication between distributed regions using TCP/IP. This attribute does not apply to client/server communication or to communication using the UDP unicast or IP multicast protocols.</p>
<p>
<b>Note:</b>
To use this attribute, the <code class="ph codeph">multicast-enabled</code> region attribute <code class="ph codeph">disable-tcp</code> in <code class="ph codeph">gemfire.properties</code> must be false (the default for both). In addition, asynchronous queues must be enabled for slow consumers, specified with the <code class="ph codeph">async</code>* gemfire properties.</p>
<p><strong>API:</strong> <code class="ph codeph">setEnableAsyncConflation</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  enable-async-conflation=&quot;false&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>true</td>
</tr>
<tr>
<td>enable-subscription-conflation</td>
<td><p>Boolean for server regions that specifies whether the server can conflate its messages to the client. A true value enables conflation.</p>
<p>
<b>Note:</b>
<p>The client can override this setting with the <code class="ph codeph">conflate-events</code> property in its <code class="ph codeph">gemfire.properties</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setEnableSubscriptionConflation</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
 enable-subscription-conflation=&quot;true&quot;&gt;
 &lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr>
<td>gateway-sender-ids</td>
<td><p>Specifies one or more gateway sender IDs to use for distributing region events to remote <%=vars.product_name%> sites. Specify multiple IDs as a comma-separated list.</p>
<p><strong>API:</strong> <code class="ph codeph">addGatewaySenderId</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  gateway-sender-ids=&quot;nwsender,swsender&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr>
<td>async-event-queue-ids</td>
<td>Specifies one or more asynchronous event queues to use for distributing region events an <code class="ph codeph">AsyncEventListener</code> implementation (for example, for write-behind cache event handling). Specify multiple IDs as a comma-separated list.
<p><strong>API</strong>: <code class="ph codeph">addAsyncEventQueueId</code></p>
<strong>Example</strong>:
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  async-event-queue-ids=&quot;customerqueue,ordersqueue&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr>
<td>hub-id</td>
<td><p>If the <code class="ph codeph">enable-gateway</code> attribute is set to true, a comma-separated list of gateway hub IDs that receive events from the region.</p>
<p>Used only with GemFire version 6.x gateway configurations. For GemFire 7.0 configuration, see the <code class="ph codeph">gateway-sender-id</code> attribute of the <code class="ph codeph">&lt;region-attributes&gt;</code> element.</p></td>
<td>null</td>
</tr>
<tr>
<td>id</td>
<td><p>Stores the region attribute settings in the cache with this identifier. Once stored, the attributes can be retrieved using the region attribute <code class="ph codeph">refid</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setId</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  id=&quot;persistent-replicated&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr>
<td>ignore-jta</td>
<td><p>Boolean that determines whether operations on this region participate in active JTA transactions or ignore them and operate outside of the transactions. This is primarily used in cache loaders, writers, and listeners that need to perform non-transactional operations on a region, such as caching a result set.</p>
<p><strong>API:</strong> <code class="ph codeph">setIgnoreJTA</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  ignore-jta=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr>
<td>index-update-type</td>
<td><p>Specifies whether region indexes are maintained synchronously with region modifications, or asynchronously in a background thread. In the <code class="ph codeph">cache.xml</code> file, this is set as a value, asynchronous or synchronous, assigned to the <code class="ph codeph">index-update-type</code> region attribute. Set this through the API by passing a boolean to the <code class="ph codeph">setIndexMaintenanceSynchronous</code> method.</p>
<p><strong>API:</strong> <code class="ph codeph">setIndexMaintenanceSynchronous</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  index-update-type=&quot;asynchronous&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>synchronous updates</td>
</tr>
<tr>
<td>initial-capacity</td>
<td><p>Together with the <code class="ph codeph">load-factor</code> region attribute, sets the initial parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries.</p>
<p><strong>API:</strong> <code class="ph codeph">setInitialCapacity</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  initial-capacity=&quot;20&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>16</td>
</tr>
<tr>
<td>is-lock-grantor</td>
<td><p>Determines whether this member defines itself as the lock grantor for the region at region creation time. This only specifies whether the member becomes lock grantor at creation and does not reflect the current state of the member’s lock grantor status. The member’s lock grantor status may change if another member subsequently defines the region with <code class="ph codeph">is-lock-grantor</code> set to true. This attribute is only relevant for regions with <code class="ph codeph">global</code> <code class="ph codeph">scope</code>, as only they allow locking. It affects implicit and explicit locking.</p>
<p><strong>API:</strong> <code class="ph codeph">setLockGrantor</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  is-lock-grantor=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr>
<td>load-factor</td>
<td><p>Together with the initial-capacity region attribute, sets the initial parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries. This must be a floating point number between 0 and 1, inclusive.</p>
<p>
<b>Note:</b>
<p>Before you set this attribute, read the discussion of initial capacity and load factor, then see the Java API documentation for <code class="ph codeph">java.util.ConcurrentHashMap</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setLoadFactor</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  load-factor=&quot;0.85&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>.75</td>
</tr>
<tr>
<td>mirror-type</td>
<td>Deprecated</td>
<td> </td>
</tr>
<tr>
<td>multicast-enabled</td>
<td><p>Boolean that specifies whether distributed operations on a region should use multicasting. To enable this, multicast must be enabled for the cluster with the <code class="ph codeph">mcast-port</code> <code class="ph codeph">gemfire.properties</code> setting.</p>
<p><strong>API:</strong> <code class="ph codeph">setMulticastEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  multicast-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr>
<td>pool-name</td>
<td><p>Identifies the region as a client region and specifies the server pool the region is to use. The named pool must be defined in the client cache before the region is created. If this is not set, the region does not connect to the servers as a client region.</p>
<p><strong>API:</strong> <code class="ph codeph">setPoolName</code></p>
<p><strong>Examples:</strong></p>
<p>This declaration creates the region as a client region with a server pool named DatabasePool. This pool-name specification is required, as there are multiple pools in the client cache:</p>
<pre class="pre codeblock language-xml"><code>&lt;client-cache&gt;
    &lt;pool name=&quot;DatabasePool&quot; 
   subscription-enabled=&quot;true&quot;&gt;
        ...
    &lt;/pool&gt;
    &lt;pool &gt;
   name=&quot;OtherPool&quot; 
   subscription-enabled=&quot;true&quot;&gt;
        ...
    &lt;/pool&gt;
    &lt;region ...
        &lt;region-attributes 
          pool-name=&quot;DatabasePool&quot;&gt; 
        &lt;/region-attributes&gt;
        ...</code></pre>
<p>This declaration creates the region as a client region assigned the single pool that is defined for the client cache. Here the pool-name specification is implied to be the only pool that exists in the cache:</p>
<pre class="pre codeblock language-xml"><code>&lt;client-cache&gt;
    &lt;pool 
   name=&quot;publisher&quot; 
   subscription-enabled=&quot;true&quot;&gt;
        ...
    &lt;/pool&gt;
    &lt;region 
   name=&quot;myRegion&quot; 
   refid=&quot;CACHING_PROXY&quot;&gt;
    &lt;/region&gt;
&lt;/client-cache&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr>
<td>disk-store-name</td>
<td><p>Assigns the region to the disk store with this name from the disk stores defined for the cache. Persist region data to disk by defining the region as persistent using the Shortcut Attribute Options or data-policy settings. Overflow data to disk by implementing LRU eviction-attributes with an action of overflow to disk. Each disk store defines the file system directories to use, how data is written to disk, and other disk storage maintenance properties. In addition, the <code class="ph codeph">disk-synchronous</code> region attribute specifies whether writes are done synchronously or asynchronously.</p>
<p><strong>API:</strong> <code class="ph codeph">setDiskStoreName</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  disk-store-name=&quot;myStoreA&quot; &gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>null</td>
</tr>
<tr>
<td>disk-synchronous</td>
<td><p>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</p>
<p><strong>API:</strong> <code class="ph codeph">setDiskSynchronous</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  disk-store-name=&quot;myStoreA&quot; 
  disk-synchronous=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>true</td>
</tr>
<tr>
<td>refid</td>
<td><p>Retrieves region shortcuts and user-defined named region attributes for attributes initialization</p>
<p><strong>API:</strong> <code class="ph codeph">setRefId</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  refid=&quot;persistent-replicated&quot;&gt;
  &lt;!-- Override any stored 
    attribute settings that you 
    need to ... --&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr>
<td>scope</td>
<td><p>Definition: Determines how updates to region entries are distributed to the other caches in the cluster where the region and entry are defined. Scope also determines whether to allow remote invocation of some of the region’s event handlers, and whether to use region entry versions to provide consistent updates across replicated regions.</p>
<p>
<b>Note:</b>
<p>You can configure the most common of these options with <%=vars.product_name%> region shortcuts in <code class="ph codeph">RegionShortcut</code> and <code class="ph codeph">ClientRegionShortcut</code>.</p>
<p>
<b>Note:</b>
<p>Server regions that are not partitioned must be replicated with <code class="ph codeph">distributed-ack</code> or <code class="ph codeph">global</code> scope. The region shortcuts that specify <code class="ph codeph">REPLICATE</code> have <code class="ph codeph">distributed-ack</code> scope.</p>
<p>Set one of the following scope values:</p>
<div class="p">
<table>
<tbody>
<tr>
<td>local</td>
<td>No distribution. The region is visible only to threads running inside the member.</td>
</tr>
<tr>
<td>distributed-no-ack</td>
<td>Events are distributed to remote caches with no acknowledgement required.</td>
</tr>
<tr>
<td>distributed-ack</td>
<td>Events are distributed to remote caches with receipt acknowledgement required. Region entry versions are used to provide consistent updates across members of the cluster.</td>
</tr>
<tr>
<td>global</td>
<td>Events are distributed to remote caches with global locking to ensure distributed cache consistency.</td>
</tr>
</tbody>
</table>
<strong>API:</strong> <code class="ph codeph">setScope</code>
</div>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  scope=&quot;distributed-ack&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>distributed-no-ack</td>
</tr>
<tr>
<td>statistics-enabled</td>
<td>Boolean specifying whether to gather statistics on the region. Must be true to use expiration on the region. <%=vars.product_name%> provides a standard set of statistics for cached regions and region entries, which give you information for fine-tuning your cluster. Unlike other <%=vars.product_name%> statistics, statistics for local and distributed regions are not archived and cannot be charted. They are kept in instances of <code class="ph codeph">org.apache.geode.cache.CacheStatistics</code> and made available through the region and its entries through the <code class="ph codeph">Region.getStatistics</code> and <code class="ph codeph">Region.Entry.getStatistics</code> methods.
<p><strong>API:</strong> <code class="ph codeph">setStatisticsEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  statistics-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr>
<td>cloning-enabled</td>
<td><p>Determines how <code class="ph codeph">fromDelta</code> applies deltas to the local cache for delta propagation. When true, the updates are applied to a clone of the value and then the clone is saved to the cache. When false, the value is modified in place in the cache.</p>
<p><strong>API:</strong> <code class="ph codeph">setCloningEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  cloning-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr>
<td>concurrency-checks-enabled</td>
<td><p>Determines whether members perform checks to provide consistent handling for concurrent or out-of-order updates to distributed regions. See [Consistency for Region Updates](../../developing/distributed_regions/region_entry_versions.html#topic_CF2798D3E12647F182C2CEC4A46E2045).</p>
<p>
<b>Note:</b>
Applications that use a <code class="ph codeph">client-cache</code> may want to disable concurrency checking in order to see all events for a region. <%=vars.product_name%> server members can continue using concurrency checks for the region, but they will pass all events to the client cache. This configuration ensures that the client sees all events, but it does not prevent the client cache from becoming out-of-sync with the server cache.</p>
<p><strong>API:</strong> <code class="ph codeph">setConcurrencyChecksEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
 concurrency-checks-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>true</td>
</tr>
<tr>
<td>off-heap</td>
<td><p>Specifies that the region uses off-heap memory to store entry values, including values for region entries and queue entries. The region will still use heap memory for everything else, such as entry keys and the ConcurrentHashMap.</p>
<p><strong>API:</strong> <code class="ph codeph">setOffHeap</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  off-heap=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
</tbody>
</table>

## <a id="key-constraint" class="no-quick-link"></a>&lt;key-constraint&gt;

Defines the type of object to be allowed for the region entry keys. This must be a fully-qualified class name. The attribute ensures that the keys for the region entries are all of the same class. If key-constraint is not used, the region’s keys can be of any class. This attribute, along with value-constraint, is useful for querying and indexing because it provides object type information to the query engine.

**Note:**
Set the constraint in every cache where you create or update the region entries. For client/server installations, match constraints between client and server and between clusters. The constraint is only checked in the cache that does the entry `put` or `create` operation. To avoid deserializing the object, the constraint is not checked when the entry is distributed to other caches.

**Default:** not set

**API:** `org.apache.geode.cache.RegionFactory.setKeyConstraint`

**Example:**

``` pre
<region-attributes>
  <key-constraint>
   java.lang.String
  </key-constraint>
</region-attributes>
```

## <a id="value-constraint" class="no-quick-link"></a>&lt;value-constraint&gt;

Defines the type of object to be allowed for the region entry values. This must be a fully-qualified class name. If value constraint isn’t used, the region’s value can be of any class. This attribute, along with `key-constraint`, is useful for querying and indexing because it provides object type information to the query engine.

**Note:**
Set the constraint in every cache where you create or update the region entries. For client/server installations, match constraints between client and server and between clusters. The constraint is only checked in the cache that does the entry `put` or `create` operation. To avoid deserializing the object, the constraint is not checked when the entry is distributed to other caches.

**Default:** not set

**API:** `org.apache.geode.cache.RegionFactory.setValueConstraint`

**Example:**

``` pre
<region-attributes>
  <value-constraint>
   cacheRunner.Portfolio
  </value-constraint>
</region-attributes>
```

## <a id="region-time-to-live" class="no-quick-link"></a>&lt;region-time-to-live&gt;

Expiration setting that specifies how long the region can remain in the cache without anyone accessing or updating it.

**Default:** not set - no expiration of this type

**API:** `org.apache.geode.cache.RegionFactory.setRegionTimeToLive`

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
  <region-time-to-live>
    <expiration-attributes 
      timeout="3600" 
      action="local-destroy"/>
  </region-time-to-live>
</region-attributes>
```

## <a id="expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr>
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr>
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr>
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <region-time-to-live>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </region-time-to-live>
</region-attributes>
```

## <a id="custom-expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="region-idle-time" class="no-quick-link"></a>&lt;region-idle-time&gt;

Expiration setting that specifies how long the region can remain in the cache without anyone accessing it.

**Note:**
To ensure reliable read behavior across the partitioned region, use `region-time-to-live` for region expiration instead of this setting.

**Default:** not set - no expiration of this type

**API:** `org.apache.geode.cache.RegionFactory.setRegionIdleTimeout`

**Example:**

``` pre
<region-attributes statistics-enabled="true">
  <region-idle-time>
    <expiration-attributes 
      timeout="3600" 
      action="local-destroy"/>
  </region-idle-time>
</region-attributes>
```

## <a id="region-idle-time_expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr>
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr>
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr>
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <region-idle-time>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </region-idle-time>
</region-attributes>
```

## <a id="region-idle-time_custom-expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="entry-time-to-live" class="no-quick-link"></a>&lt;entry-time-to-live&gt;

Expiration setting that specifies how long the region’s entries can remain in the cache without anyone accessing or updating them. See [&lt;expiration-attributes&gt;](#expiration-attributes) for details.

**Default:** not set - no expiration of this type.

**API:** `org.apache.geode.cache.RegionFactory.setEntryTimeToLive`

**Example:**

``` pre
<region-attributes
  statistics-enabled="true">
  <entry-time-to-live>
    <expiration-attributes
     timeout="60"
     action="local-destroy"/>
  </entry-time-to-live>
</region-attributes>
```

## <a id="entry-time-to-live_expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr>
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr>
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr>
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <entry-time-to-live>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </entry-time-to-live>
</region-attributes>
```

## <a id="entry-time-to-live_custom_expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="entry-idle-time" class="no-quick-link"></a>&lt;entry-idle-time&gt;

Expiration setting that specifies how long the region’s entries can remain in the cache without anyone accessing them. See [&lt;expiration-attributes&gt;](#expiration-attributes) for details.

**Note:**
To ensure reliable read behavior across the partitioned region, use `entry-time-to-live` for entry expiration instead of this setting.

**API:** `org.apache.geode.cache.RegionFactory.setEntryIdleTimeout`

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
  <entry-idle-time>
    <expiration-attributes 
      timeout="60" 
      action="local-invalidate"/>
    </expiration-attributes>
  </entry-idle-time>
</region-attributes>
```

## <a id="entry-idle-time_expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr>
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr>
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr>
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr>
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <entry-idle-time>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </entry-idle-time>
</region-attributes>
```

## <a id="entry-idle-time_custom-expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="partition-attributes" class="no-quick-link"></a>&lt;partition-attributes&gt;

Defines the region as partitioned and controls partitioning behavior. This is set during the region creation in the first data store for the partitioned region.

**Note:**
With the exception of `local-max-memory`, all members defining a partitioned region must use the same partition attribute settings.

**API:** `org.apache.geode.cache.RegionFactory.setPartitionAttributes`

**&lt;partition-attributes&gt; Attributes**

| Attribute              | Description        | Default              |
|------------------------|--------------------|----------------------|
| colocated-with         | The full name of a region to colocate with this region. The named region must exist before this region is created.                                     | null                 |
| local-max-memory       | Maximum megabytes of memory set aside for this region in the local member. This is all memory used for this partitioned region - for primary buckets and any redundant copies. This value must be smaller than the Java settings for the initial or maximum JVM heap. When the memory use goes above this value, <%=vars.product_name%> issues a warning, but operation continues. Besides setting the maximum memory to use for the member, this setting also tells <%=vars.product_name%> how to balance the load between members where the region is defined. For example, if one member sets this value to twice the value of another member’s setting, <%=vars.product_name%> works to keep the ratio between the first and the second at two-to-one, regardless of how little memory the region consumes. This is a local parameter that applies only to the local member. A value of 0 disables local data caching. | 90% (of local heap)  |
| recovery-delay         | Applies when `redundant-copies` is greater than zero. The number of milliseconds to wait after a member crashes before reestablishing redundancy for the region. A setting of -1 disables automatic recovery of redundancy after member failure.             | -1                   |
| redundant-copies       | Number of extra copies that the partitioned region must maintain for each entry. Range: 0-3. If you specify 1, this partitioned region maintains the original and one backup, for a total of two copies. A value of 0 disables redundancy. | 0                    |
| startup-recovery-delay | Applies when `redundant-copies` is greater than zero. The number of milliseconds a newly started member should wait before trying to satisfy redundancy of region data stored on other members. A setting of -1 disables automatic recovery of redundancy after new members join. | 0                    |
| total-max-memory       | Maximum combined megabytes of memory to be used by all processes hosting this region for all copies, primary and redundant. | ` Integer.MAX_VALUE` |
| total-num-buckets      | Total number of buckets or data storage areas allotted for the entire partitioned region in the distributed cache. As data moves from one member to another, the entries in a bucket move as one unit. This value should be a prime number at least four times the number of data stores. More buckets increases overhead, however, especially when redundant-copies = 2 or 3 .| 113                  |

**Example:**

``` pre
<region-attributes>
  <partition-attributes 
   redundant-copies="1" 
   total-num-buckets= "613"/>
</region-attributes>
```

## <a id="partition-resolver" class="no-quick-link"></a>&lt;partition-resolver&gt;

Describes a custom PartitionResolver for a region.

**API:** `org.apache.geode.cache.PartitionAttributesFactory.setPartitionResolver`

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**&lt;partition-resolver&gt; Attributes**

| Attribute | Description                                | Default |
|-----------|--------------------------------------------|---------|
| name      | The name of this custom PartitionResolver. |         |

**Example:**

``` pre
<region name="trades">
  <region-attributes>
      <partition-attributes>
          <partition-resolver name="TradesPartitionResolver"> 
              <class-name>myPackage.TradesPartitionResolver
              </class-name>
          </partition-resolver>
      </partition-attributes>
  </region-attributes>
</region>
```

## <a id="partition-listener" class="no-quick-link"></a>&lt;partition-listener&gt;

Defines a custom PartitionListener for a partitioned region.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.PartitionAttributesFactory.PartitionListener`

**Example:**

``` pre
<partition-attributes redundant-copies="1">
     <partition-listener>
         <class-name>com.myCompany.ColocatingPartitionListener</class-name.
          <parameter name="viewRegions">
              <string>/customer/ViewA,/customer/ViewB</string>
          </parameter>             
     </partition-listener>
 </partition-attributes>
```

## <a id="fixed-partition-attributes" class="no-quick-link"></a>&lt;fixed-partition-attributes&gt;

Describes a partition in a Fixed Partitioned Region.

**API:** `org.apache.geode.cache.PartitionAttributesFactory.addFixedPartitionAttributes`

**&lt;fixed-partition-attributes&gt; Attributes**

| Attribute      | Description                                             | Default |
|----------------|---------------------------------------------------------|---------|
| partition-name | The name of this fixed partition.                       |         |
| is-primary     | Set to true if this partition is the primary partition. | false   |
| num-buckets    | The number of buckets assigned to this partition.       |         |


**Example:**

``` pre
<cache>
   <region name="Trades">
      <region-attributes>
         <partition-attributes 
          redundant-copies="1"> 
          <partition-resolver name="QuarterFixedPartitionResolver">
             <fixed-partition-attributes 
               partition-name="Q1" 
               is-primary="true"/>
             <fixed-partition-attributes 
               partition-name="Q3" 
               is-primary="false" 
               num-buckets="6"/>
         </partition-attributes> 
      </region-attributes>
   </region>
</cache>
```

## <a id="membership-attributes" class="no-quick-link"></a>&lt;membership-attributes&gt;

Establishes reliability requirements and behavior for a region. Use this to configure the region to require one or more membership roles to be running in the system for reliable access to the region. You can set up your own roles, such as producer or backup, specifying each role as a string. Membership attributes have no effect unless one or more required roles are specified.

**API:** `org.apache.geode.cache.RegionFactory.setMembershipAttributes`

**&lt;membership-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>loss-action</td>
<td><p>Set one of the following values to specify how access to the region is affected when one or more required roles are lost.</p>
<div class="p">
<table>
<tbody>
<tr>
<td>full-access</td>
<td>Access to the region is unaffected when required roles are missing.</td>
</tr>
<tr>
<td>limited-access</td>
<td>Only local access to the region is allowed when required roles are missing.</td>
</tr>
<tr>
<td>no-access</td>
<td>The region is unavailable when required roles are missing.</td>
</tr>
<tr>
<td>reconnect</td>
<td>Loss of required roles causes the entire cache to be closed.</td>
</tr>
</tbody>
</table>
</div></td>
<td>no_access</td>
</tr>
<tr>
<td>resumption-action</td>
<td><div class="p">
Specifies how the region is affected by resumption of reliability when one or more missing required roles return to the distributed membership. Set one of the following values:
<table>
<tbody>
<tr>
<td>none</td>
<td>No special action takes place when reliability resumes.</td>
</tr>
<tr>
<td>reinitialize</td>
<td>Resumption of reliability causes the region to be cleared of all data and replicated regions will do a new getInitialImage operation to repopulate the region.</td>
</tr>
</tbody>
</table>
</div></td>
<td>reinitialize</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<!-- If there is no "producer" member 
  running, do not allow access to the region -->
<region-attributes>
  <membership-attributes 
    loss-action="no-access" 
    resumption-action="none">
    <required-role 
      name="producer">
    </required-role>
  </membership-attributes>
</region-attributes>
```

## <a id="required-role" class="no-quick-link"></a>&lt;required-role&gt;

Specifies a role that is required for reliable access to the region.

**API:** `org.apache.geode.cache.MembershipAttributes`

**&lt;required-role&gt; Attributes**

| Attribute | Description                    | Default |
|-----------|--------------------------------|---------|
| name      | The name of the required role. |         |

**Example:**

``` pre
<membership-attributes 
  loss-action="no-access" 
  resumption-action="none">
    <required-role name="producer"/>
</membership-attributes>
```

## <a id="subscription-attributes" class="no-quick-link"></a>&lt;subscription-attributes&gt;

Specifies subscriber requirements and behavior for the region. There is one subscription attribute, `interest-policy`, that defines which distributed entry events are delivered to the local region.

**Note:**
The interest policy determines which events are delivered, but the `data-policy` determines how the events are applied to the cache.

**API:** `org.apache.geode.cache.RegionFactory.setSubscriptionAttributes`

**&lt;subscription-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>interest-policy</td>
<td>The two <code class="ph codeph">interest-policy</code> options are:
<div class="p">
<table>
<tbody>
<tr>
<td>cache-content</td>
<td>The default, registers interest in events only for entries that are already in the local region. For partitioned regions, the local member must hold the primary copy of the entry’s data.</td>
</tr>
<tr>
<td>all</td>
<td>Registers interest in events for all entries that are anywhere in the distributed or partitioned region, regardless of whether they are already present in the local cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>cache-content</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes>
  <subscription-attributes 
   interest-policy="all"/>
</region-attributes>
```

## <a id="topic_qsb_pnw_bm" class="no-quick-link"></a>&lt;cache-loader&gt;

An event-handler plug-in that allows you to program for cache misses. At most, one cache loader can be defined in each member for the region. For distributed regions, a cache loader may be invoked remotely from other members that have the region defined. When an entry get results in a cache miss in a region with a cache loader defined, the loader’s <span class="keyword apiname">load</span> method is called. This method is usually programmed to retrieve data from an outside data source, but it can do anything required by your application.

For partitioned regions, if you want to have a cache loader, install an instance of the cache loader in every data store. Partitioned regions support partitioned loading, where each cache loader loads only the data entries in the local member. If data redundancy is configured, data is loaded only if the local member holds the primary copy.

**API:** `org.apache.geode.cache.RegionFactory.setCacheLoader`

**Example:**

``` pre
<region-attributes>
  <cache-loader>
    <class-name>quickstart.SimpleCacheLoader</class-name>
  </cache-loader>
</region-attributes>
```

## <a id="topic_h53_pnw_bm" class="no-quick-link"></a>&lt;cache-writer&gt;

An event-handler plug-in that allows you to receive before-event notification for changes to the region and its entries. It also has the ability to cancel events. At most, one cache writer can be defined in each member for the region. A cache writer may be invoked remotely from other members that have the region defined.

**API:** `org.apache.geode.cache.RegionFactory.setCacheWriter`

**Example:**

``` pre
<region-attributes>
  <cache-writer>
    <class-name>quickstart.SimpleCacheWriter</class-name>
  </cache-writer>
</region-attributes>
```

## <a id="cache-listener" class="no-quick-link"></a>&lt;cache-listener&gt;

An event-handler plug-in that receives after-event notification of changes to the region and its entries. Any number of cache listeners can be defined for a region in any member. <%=vars.product_name%> offers several listener types with callbacks to handle data and process events. Depending on the `data-policy` and the `interest-policy` subscription attributes, a cache listener may receive only events that originate in the local cache, or it may receive those events along with events that originate remotely.

Specify the Java class for the cache listener and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.RegionFactory.addCacheListener`

**Example:**

``` pre
<region-attributes>
  <cache-listener>
    <class-name>
      quickstart.SimpleCacheListener
    </class-name>
  </cache-listener>
</region-attributes>
```

## <a id="topic_pcd_t25_44" class="no-quick-link"></a>&lt;compressor&gt;

A compressor registers a custom class that extends `Compressor` to support compression on a region.

**Example:**

``` pre
 ...
<compressor>
<class-name>
            <parameter>
               <string>
               <declarable>
</compressor>
...
```

## <a id="eviction-attributes" class="no-quick-link"></a>&lt;eviction-attributes&gt;

Specifies whether and how to control a region’s size. Size is controlled by removing least recently used (LRU) entries to make space for new ones. This may be done through destroy or overflow actions. You can configure your region for lru-heap-percentage with an eviction action of local-destroy using stored region attributes.

**Default:** Uses the lru-entry-count algorithm.

**API:** `org.apache.geode.cache.RegionFactory.setEvictionAttributes`

**Example:**

``` pre
<region-attributes>
  <eviction-attributes> 
    <lru-entry-count 
      maximum="1000" 
      action="overflow-to-disk"/>
  </eviction-attributes>
</region-attributes
```

## <a id="lru-entry-count" class="no-quick-link"></a>&lt;lru-entry-count&gt;

Using the maximum attribute, specifies maximum region capacity based on entry count.

**&lt;lru-entry-count&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>action</td>
<td>Set one of the following eviction actions:
<div class="p">
<table>
<tbody>
<tr>
<td>local-destroy</td>
<td>Removes the entry from the local cache, but does not distribute the removal operation to remote
members.  This action can be applied to an entry in a partitioned region, but is not recommended
if redundancy is enabled (redundant-copies > 0), as it introduces inconsistencies between the
redundant buckets.  When applied to an entry in a replicated region, <%=vars.product_name%> silently changes
the region type to "preloaded" to accommodate the local modification.</td>
</tr>
<tr>
<td>overflow-to-disk</td>
<td>The entry's value is overflowed to disk and set to null in memory. The
entry's key is retained in the cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>local-destroy</td>
</tr>
<tr>
<td>maximum</td>
<td>The maximum number of entries allowed in a region.</td>
<td> </td>
</tr>
</tbody>
</table>

## <a id="lru-heap-percentage" class="no-quick-link"></a>&lt;lru-heap-percentage&gt;

Runs evictions when the <%=vars.product_name%> resource manager says to. The manager orders
evictions when the total cache size is over the heap or off-heap percentage limit specified in the resource manager
configuration. You can declare a Java class that implements the ObjectSizer interface to measure the
size of objects in the Region.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**&lt;lru-heap-percentage&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>action</td>
<td>Set one of the following eviction actions:
<div class="p">
<table>
<tbody>
<tr>
<td>local-destroy</td>
<td>Removes the entry from the local cache, but does not distribute the removal operation to remote
members.  This action can be applied to an entry in a partitioned region, but is not recommended
if redundancy is enabled (redundant-copies > 0), as it introduces inconsistencies between the
redundant buckets.  When applied to an entry in a replicated region, <%=vars.product_name%> silently changes
the region type to "preloaded" to accommodate the local modification.</td>
</tr>
<tr>
<td>overflow-to-disk</td>
<td>The entry's value is overflowed to disk and set to null in memory. The
entry's key is retained in the cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>local-destroy</td>
</tr>
</tbody>
</table>

## <a id="lru-memory-size" class="no-quick-link"></a>&lt;lru-memory-size&gt;

Using the maximum attribute, specifies maximum region capacity based on the amount of memory used, in megabytes. You can declare a Java class that implements the ObjectSizer interface to measure the size of objects in the Region.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**&lt;lru-memory-size&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>action</td>
<td>Set one of the following eviction actions:
<div class="p">
<table>
<tbody>
<tr>
<td>local-destroy</td>
<td>Removes the entry from the local cache, but does not distribute the removal operation to remote
members.  This action can be applied to an entry in a partitioned region, but is not recommended
if redundancy is enabled (redundant-copies > 0), as it introduces inconsistencies between the
redundant buckets.  When applied to an entry in a replicated region, <%=vars.product_name%> silently changes
the region type to "preloaded" to accommodate the local modification.</td>
</tr>
<tr>
<td>overflow-to-disk</td>
<td>The entry's value is overflowed to disk and set to null in memory. The
entry's key is retained in the cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>local-destroy</td>
</tr>
<tr>
<td>maximum</td>
<td>The maximum amount of memory used in the region, in megabytes.</td>
<td> </td>
</tr>
</tbody>
</table>

## <a id="jndi-bindings" class="no-quick-link"></a>&lt;jndi-bindings&gt;

Specifies the binding for a data-source used in transaction management. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html).

**Example:**

``` pre
<jndi-bindings>
      <jndi-binding type="XAPooledDataSource" 
    jndi-name="newDB2trans" 
    init-pool-size="20" 
    max-pool-size="100"
    idle-timeout-seconds="20"
    blocking-timeout-seconds="5" 
    login-timeout-seconds="10"
    xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource"
    user-name="mitul" 
    password="encrypted(83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a)">
         <config-property>
          <config-property-name>Description</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>pooled_transact</config-property-value>
       </config-property>
          <config-property>
             <config-property-name>DatabaseName</config-property-name>
             <config-property-type>java.lang.String</config-property-type>
             <config-property-value>newDB</config-property-value>
          </config-property>
          <config-property>
             <config-property-name>CreateDatabase</config-property-name>
             <config-property-type>java.lang.String</config-property-type>
             <config-property-value>create</config-property-value>
          </config-property>         
       . . .
      </jndi-binding>
   </jndi-bindings>
```

## <a id="jndi-binding" class="no-quick-link"></a>&lt;jndi-binding&gt;

For every datasource that is bound to the JNDI tree, there should be one `<jndi-binding>` element. This element describes the property and the configuration of the datasource. <%=vars.product_name%> uses the attributes of the `<jndi-binding>` element for configuration. Use the `<config-property>` element to configure properties for the datasource.

We recommend that you set the username and password with the `user-name` and `password` jndi-binding attributes rather than using the `<config-property>` element.

**&lt;jndi-binding&gt; Attributes**

<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>blocking-timeout-seconds</td>
<td>The number of seconds that a connection remains associated with a transaction. If this value is exceeded, the connection is disassociated from the transaction.</td>
<td>120</td>
</tr>
<tr>
<td>conn-pooled-datasource-class</td>
<td>Java class used for the <code class="ph codeph">PooledDataSource</code> type.</td>
<td> </td>
</tr>
<tr>
<td>connection-url</td>
<td>URL for connecting to the datasource.
<p>
<b>Note:</b>
<p>If you are connecting to a JCA data source driver that implements XA transactions (where the jndi-binding type is <strong>XAPooledDataSource</strong>), do not use this attribute. Instead, define configuration properties for your database. See <a href="#config-property">&lt;config-property&gt</a> for an example.</p></td>
<td> </td>
</tr>
<tr>
<td>idle-timeout-seconds</td>
<td>The maximum number of seconds that a connection can remain idle in a pool. When this threshold is reached, the connection is removed.</td>
<td>600</td>
</tr>
<tr>
<td>init-pool-size</td>
<td>The initial pool size of a PooledConnection (an XAConnection or a non-XAConnection).</td>
<td>10</td>
</tr>
<tr>
<td>jdbc-driver-class</td>
<td>Java class used for the <code class="ph codeph">SimpleDataSource</code> type.</td>
<td> </td>
</tr>
<tr>
<td>jndi-name</td>
<td>The <code class="ph codeph">jndi-name</code> attribute is the key binding parameter. If the value of jndi-name is a DataSource, it is bound as java:/myDatabase, where myDatabase is the name you assign to your data source. If the data source cannot be bound to JNDI at runtime, <%=vars.product_name%> logs a warning.</td>
<td> </td>
</tr>
<tr>
<td>login-timeout-seconds</td>
<td><p>The maximum number of seconds for which a thread seeking a connection from a connection pool may be blocked. If the thread is unable to obtain connection in the stipulated time, a <span class="keyword apiname">PoolException</span> is thrown</p>
<p>If a connection is available the thread returns immediately.</p>
<p>If an existing connection is not available and the maximum number of connections in the pool has not been reached, a new connection is created and the thread returns immediately with the connection.</p>
<p>If a connection is not available, the thread blocks for the specified time while waiting for an available connection.</p></td>
<td>30</td>
</tr>
<tr>
<td>managed-conn-factory-class</td>
<td>If the Resource Adapter is of type <span class="keyword apiname">ManagedDataSource</span>, this class becomes the source of the <span class="keyword apiname">PooledConnection</span>. (This class interface complies with the J2CA Java 2 Connector Architecture.)</td>
<td> </td>
</tr>
<tr>
<td>max-pool-size</td>
<td>The maximum size of the PooledConnection.</td>
<td>30</td>
</tr>
<tr>
<td>password</td>
<td>Password to access the datasource.</td>
<td> </td>
</tr>
<tr>
<td>transaction-type</td>
<td>When the <code class="ph codeph">type</code> attribute is set to <code class="ph codeph">ManagedDataSource</code>, specifies the type of transaction. Set one of the following <code class="ph codeph">transaction-type</code>s:
<div class="p">
<table>
<tbody>
<tr>
<td>XATransaction</td>
<td>Select this option when you want to use a<span class="keyword apiname">ManagedConnection</span> interface with a Java Transaction Manager to define transaction boundries. This option allows a <span class="keyword apiname">ManagedDataSource</span> to participate in a transaction with a <%=vars.product_name%> cache.</td>
</tr>
<tr>
<td>NoTransaction</td>
<td>No transactional behavior is used.</td>
</tr>
<tr>
<td>LocalTransaction</td>
<td>Select this option when using a <span class="keyword apiname">ManagedDataSource</span> that is not managed by the Java Transaction manager.</td>
</tr>
</tbody>
</table>
</div></td>
<td>none</td>
</tr>
<tr>
<td>type</td>
<td><div class="p">
Set one of the following types:
<table>
<tbody>
<tr>
<td>XAPooledDataSource</td>
<td>Pooled SQL connections. For this type, you must also set the <code class="ph codeph">xa-datasource-class</code> attribute.</td>
</tr>
<tr>
<td>ManagedDataSource</td>
<td>JNDI binding type for the J2EE Connector Architecture (JCA). ManagedConnectionFactory. For information on the ManagedConnection interface, See the [Oracle ManagedConnection docs](http://docs.oracle.com/javaee/6/api/javax/resource/spi/ManagedConnection.html).</td>
</tr>
<tr>
<td>PooledDataSource</td>
<td>Pooled SQL connections. For this type, you must also set the <code class="ph codeph">conn-pooled-datasource-class</code> attribute.</td>
</tr>
<tr>
<td>SimpleDataSource</td>
<td>Single SQL connection. No pooling of SQL connections is done. Connections are generated on the fly and cannot be reused. For this type, you must also set the <code class="ph codeph">jdbc-driver-class</code> attribute.</td>
</tr>
</tbody>
</table>
</div></td>
<td>none</td>
</tr>
<tr>
<td>user-name</td>
<td>User name to access to the datasource.</td>
<td> </td>
</tr>
<tr>
<td>xa-datasource-class</td>
<td>Java class used for the <code class="ph codeph">XAPooledDataSource</code> type.</td>
<td> </td>
</tr>
</tbody>
</table>

## <a id="config-property" class="no-quick-link"></a>&lt;config-property&gt;

A configuration property of the datasource. Use the sub-elements to identify the name, datatype, and value of the property.

**Default:**

**Example:**

``` pre
<config-property>
     <config-property-name>DatabaseName</config-property-name>
     <config-property-type>java.lang.String</config-property-type>
     <config-property-value>newDB</config-property-value>
</config-property>
```

Configuration properties vary depending on the database vendor. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html) for examples of different configuration property configurations.

## <a id="config-property-name" class="no-quick-link"></a>&lt;config-property-name&gt;

The name of this datasource property.

## <a id="config-property-type" class="no-quick-link"></a>&lt;config-property-type&gt;

The data type of this datasource property.

## <a id="config-property-value" class="no-quick-link"></a>&lt;config-property-value&gt;

The value of this datasource property.

## <a id="region" class="no-quick-link"></a>&lt;region&gt;

Defines a region in the cache. See [&lt;region-attributes&gt;](#region-attributes) for more details on configuring regions. You can specify zero or more subregions within a region. See [Create and Access Data Subregions](../../basic_config/data_regions/managing_data_regions.html#data_regions__section_jn1_sry_5m) for restrictions on creating subregions. For example, you cannot create a partitioned subregion.

**Default:**

**API:** `org.apache.geode.cache.RegionFactory` or `org.apache.geode.cache.ClientRegionFactory`

**&lt;region&gt; Attributes**

| Attribute | Description | Default |
|-----------|-------------|---------|
| name      | Specify the name for the region. See [Region Management](../../basic_config/data_regions/managing_data_regions.html) for details. |         |
| refid     | Used to apply predefined attributes to the region being defined. If the nested "region-attributes" element has its own "refid", then it will cause the "refid" on the region to be ignored. The "refid" region attriibute can be set to the name of a RegionShortcut or a ClientRegionShortcut. For more information, see [Region Shortcuts and Custom Named Region Attributes](../../basic_config/data_regions/region_shortcuts.html) and [Storing and Retrieving Region Shortcuts and Custom Named Region Attributes](../../basic_config/data_regions/store_retrieve_region_shortcuts.html). |         |

**Example:**

``` pre
<!--Using region shortcut-->
<region 
  name="PartitionedRegion" 
  refid="PARTITION_REDUNDANT">
...
</region>

<!-- Retrieving and storing attributes -->
<region-attributes 
  id="myPartition" 
  refid="PARTITION_REDUNDANT">
    <partition-attributes 
   local-max-memory="512"/>
</region-attributes>

<!-- Attributes are retrieved and applied in the first region -->
<region name="PartitionedRegion1" refid="myPartition"/>
```

See [&lt;region-attributes&gt;](#region-attributes) for a complete listing of region attributes.


## <a id="index" class="no-quick-link"></a>&lt;index&gt;

Describes an index to be created on a region. The index node, if any, should all come immediately after the "region-attributes" node. The "name" attribute is a required field which identifies the name of the index. See [Working with Indexes](../../developing/query_index/query_index.html) for more information on indexes.

**Default:**

**API:** `org.apache.geode.cache.query.QueryService.createIndex, createKeyIndex, createHashIndex`

**&lt;index&gt; Attributes**

| Attribute   | Description | Default |
|-------------|-------------|---------|
| name        | Required. Name of the index. |         |
| from-clause | Specifies the collection(s) of objects that the index ranges over. The from-clause must only contain one and only one region path. |         |
| expression  | Specifies the lookup value of the index. |         |
| imports     | String containing the imports used to create the index. String should be specified in the query language syntax with each import statement separated by a semicolon. The imports statement provides packages and classes used in variable typing in the indexed and FROM expressions. |         |
| key-index   | True or false. Whether the index should be a key index. If true, the region key specified in the indexed expression is used to evaluate queries |         |
| type        | Possible values are "hash" or "range". | range   |

**Example:**

``` pre
<region name=exampleRegion>
 <region-attributes . . . >
 </region-attributes>
 <index 
  name="myIndex" 
  from-clause="/exampleRegion" 
  expression="status"/>
 <index 
  name="myKeyIndex" 
  from-clause="/exampleRegion" 
  expression="id" key-index="true"/>
 <index 
  name="myHashIndex" 
  from-clause="/exampleRegion p" 
  expression="p.mktValue" type="hash"/>
 ...
</region>
```

<!-- start of Lucene index description -->
## <a id="luceneindex" class="no-quick-link"></a>&lt;lucene:index&gt;

Describes a Lucene index to be created on a region. The `lucene` namespace
and the scoping operator (`:`) must be specified, as the <%=vars.product_name%> `cache`
namespace also defines an `index` element (for OQL indexes).

**API:** `org.apache.geode.cache.lucene` package

**&lt;lucene:index&gt; Attributes**
| Attribute   | Description                                                                                                                                                                                                                                                                           | Default |
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| name        | Required. Name of the Lucene index.   |         |

**Example:**

``` pre
<cache
    xmlns="http://geode.apache.org/schema/cache"
    xmlns:lucene="http://geode.apache.org/schema/lucene"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://geode.apache.org/schema/cache
        http://geode.apache.org/schema/cache/cache-1.0.xsd
        http://geode.apache.org/schema/lucene
        http://geode.apache.org/schema/lucene/lucene-1.0.xsd"
    version="1.0">

    <region name="regionA" refid="PARTITION">
        <lucene:index name="myIndex">
            <lucene:field name="x" />
            <lucene:field name="y" />
        </lucene:index>
    </region>
</cache>
```
<!-- end of Lucene index description -->

<!-- start of Lucene field description -->
## <a id="lucenefield" class="no-quick-link"></a>&lt;lucene:field&gt;

Describes a field to be included in a Lucene index. Including the
`lucene` namespace and the scoping operator (`:`) clarifies,
but is not required.

**API:** `org.apache.geode.cache.lucene` package

**&lt;lucene:field&gt Attributes**
| Attribute   | Description | Default |
|-------------|-------------|---------|
| name        | Required. A string that defines the name of the field. If a single field is defined by the value `"__REGION_VALUE_FIELD"`, then the entire value is used as a single field.   |         |
| analyzer    | A string that provides the path to the analyzer to use for this field. A value of `"null"` uses the default analyzer.  | `"null"` |

**Example:**

``` pre
<region name="dataregion" refid="PARTITION_REDUNDANT">
   <lucene:index name="full_value_index">
     <lucene:field name="__REGION_VALUE_FIELD"/>
   </lucene:index>
</region>
```

<!-- end of Lucene field description -->

## <a id="entry" class="no-quick-link"></a>&lt;entry&gt;

An "entry" element describes an entry to be added to a region. Note that if an entry with the given key already exists in the region, it will be replaced.

**Default:**

**API:** `org.apache.geode.cache.Region.create`, `put`, `get`, `putAll`, `getAll`

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```

## <a id="key" class="no-quick-link"></a>&lt;key&gt;

Required. Describes the key in a region entry. A key can contain either a &lt;string&gt; or a &lt;declarable&gt; sub-element.

## <a id="topic_A078318F712F4247949DAE2287AB200A" class="no-quick-link"></a>&lt;string&gt;

Specifies a String to be placed in a Region entry.

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```

## <a id="topic_F13E9F4907E6424E8BB117CE45BD8D42" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="value" class="no-quick-link"></a>&lt;value&gt;

Required. Describes the value of a region entry. A `<value>` can contain either a `<string>` or a `<declarable>` sub-element.

## <a id="topic_356674E93DE14A93849E2142ED363079" class="no-quick-link"></a>&lt;string&gt;

Specifies a String to be placed in a Region entry.

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```

## <a id="topic_37650AC8AB054B6092458D8D0281D6C5" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="region_region" class="no-quick-link"></a>&lt;region&gt;

When nested within a `<region>` element, defines a subregion. See [Create and Access Data Subregions](../../basic_config/data_regions/managing_data_regions.html#data_regions__section_jn1_sry_5m) for restrictions on creating subregions. For example, you cannot create a partitioned subregion.

See [&lt;region&gt;](cache_xml.html#region)

## <a id="function-service" class="no-quick-link"></a>&lt;function-service&gt;

Configures the behavior of the function execution service.

**Example:**

``` pre
<cache>
    ...
    </region>
<function-service>
  <function>
    <class-name>com.myCompany.tradeService.cache.func.TradeCalc</class-name>
  </function>
</function-service>
```

## <a id="function" class="no-quick-link"></a>&lt;function&gt;

Defines a function for registration in the function service

Specify the Java class for the function and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:**

**API:** `org.apache.geode.cache.execute.FunctionService`

**Example:**

``` pre
<function>
  <class-name>
    com.myCompany.tradeService.cache.func.TradeCalc
  </class-name>
</function>
```

## <a id="resource-manager" class="no-quick-link"></a>&lt;resource-manager&gt;

A memory monitor that tracks cache size as a percentage of total heap or off-heap memory and controls size by restricting access to the cache and prompting eviction of old entries from the cache. For tenured heap, used in conjunction with settings for JVM memory and Java garbage collection. For off-heap memory, used with the off-heap memory manager.

**API:** `org.apache.geode.cache.control.ResourceManager`

**&lt;resource-manager&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>critical-heap-percentage</td>
<td>Percentage of heap at or above which the cache is considered in danger of becoming inoperable due to garbage collection pauses or out of memory exceptions.
<p>Only one change to this attribute or critical heap percentage will be allowed at any given time and its effect will be fully realized before the next change is allowed. This feature requires additional VM flags to perform properly. See <code class="ph codeph">setCriticalHeapPercentage()</code> for details.</p></td>
<td>0</td>
</tr>
<tr>
<td>eviction-heap-percentage</td>
<td><p>Set the percentage of heap at or above which the eviction should begin on regions configured for HeapLRU eviction.</p>
<p>Changing this value may cause eviction to begin immediately.</p>
<ul>
<li>The default is 0, if no region is configured with heap eviction</li>
<li>If <code class="ph codeph">critical-heap-percentage</code> is set to a non-zero value, 5% less than that value.</li>
<li>80%, if <code class="ph codeph">critical-heap-percentage</code> is not configured.</li>
</ul>
</td>
<td>0</td>
</tr>
<tr>
<td>critical-off-heap-percentage</td>
<td>Percentage of off-heap memory at or above which the cache is considered in danger of becoming inoperable due to garbage collection pauses or out of memory exceptions.</td>
<td>0</td>
</tr>
<tr>
<td>eviction-off-heap-percentage</td>
<td>Set the percentage of off-heap memory at or above which the eviction should begin on Regions configured for HeapLRU eviction.
<ul>
<li>The default is 0, if no region is configured with heap eviction</li>
<li>If <code class="ph codeph">critical-off-heap-percentage</code> is set to a non-zero value, 5% less than that value.</li>
<li>80%, if <code class="ph codeph">critical-off-heap-percentage</code> is not configured.</li>
</ul>
</td>
<td>0</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
...
   <resource-manager 
      critical-heap-percentage="99.9" 
      eviction-heap=-percentage="85"/>
...
</cache>
```

## <a id="serialization-registration" class="no-quick-link"></a>&lt;serialization-registration&gt;

Set of serializer or instantiator tags to register customer DataSerializer extensions or DataSerializable implementations respectively.

**Example:**

``` pre
<serialization-registration>
    <instantiator id="30">        
       <class-name>com.package.MyClass</class-name>
    </instantiator>
</serialization-registration> 
```

## <a id="serializer" class="no-quick-link"></a>&lt;serializer&gt;

Allows you to configure the DataSerializer for this <%=vars.product_name%> member. It registers a custom class which extends DataSerializer to support custom serialization of non-modifiable object types inside <%=vars.product_name%>.

Specify the Java class for the `DataSerializer` and its initialization parameters with the `<class-name>` sub-element.

**API:** You can also register a `DataSerializer` by using the `org.apache.geode.DataSerializer.register` API. Use the `org.apache.geode.Instantiator` API to register a `DataSerializable` implementation.

## <a id="instantiator" class="no-quick-link"></a>&lt;instantiator&gt;

An Instantiator registers a custom class which implements the `DataSerializable` interface to support custom object serialization inside <%=vars.product_name%>.

Specify the Java class and its initialization parameters with the `<class-name>` sub-element.

**API:** `DataSerializable`

You can also directly specify `<instantiator>` as a sub-element of `<cache>`. Use the `org.apache.geode.Instantiator` API to register a `DataSerializable` implementation as the serialization framework for the cache. The following table lists the attribute that can be specified for an `<instantiator>`.

**&lt;instantiator&gt; Attributes**

| Attribute | Description                                                                           | Default |
|-----------|---------------------------------------------------------------------------------------|---------|
| id        | Required. ID that the Instantiator should associate with the `DataSerializable` type. |         |


## <a id="backup" class="no-quick-link"></a>&lt;backup&gt;

Defines additional files or directories that should be backed up when the system wide backup command is invoked. Disk stores with persistent data are automatically backed up and do not need to be listed with this element.

**Example:**

``` pre
<backup>./systemConfig/gf.jar</backup>
<backup>/users/jpearson/gfSystemInfo/myCustomerConfig.doc</backup>
```

## <a id="initializer" class="no-quick-link"></a>&lt;initializer&gt;

Used to specify a callback class (and optionally its parameters) that will be run after the cache is initialized. This element can be specified for both server and client caches.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:**

**API:** `Declarable`

**Example:**

``` pre
<initializer>
   <class-name>MyInitializer</class-name>
      <parameter name="members">
         <string>2</string>
      </parameter>
</initializer>
```

## <a id="topic_BDE840596CD24A7A8754A56E7D31FE3F" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="class-name_parameter" class="no-quick-link"></a>&lt;class-name&gt; and &lt;parameter&gt;

Specify the name of a Java class with the `<class-name>` sub-element.

Specify initialization parameters for the class using the `<parameter>` sub-element. Use the `name` attribute to specify the name of the parameter and specify its value in the content of the [&lt;string&gt;](cache_xml.html#string) sub-element or by specifying a Java class with the [&lt;declarable&gt;](cache_xml.html#declarable) sub-element.

**Example:**

The following transaction writer configuration example specifies a Java class named `com.company.data.MyTransactionWritet`. The class is initialized with a parameter named `URL` whose value is `jdbc:cloudscape:rmi:MyData`.

``` pre
<transaction-writer>
       <class-name>com.company.data.MyTransactionWriter</class-name>
       <parameter name="URL">
         <string>jdbc:cloudscape:rmi:MyData</string>
       </parameter>
</transaction-writer>
```

## <a id="declarable" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="string" class="no-quick-link"></a>&lt;string&gt;

Specifies a String to be placed in a Region entry.

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```


